diff --git a/.babelrc b/.babelrc index ce45623..e2b7471 100644 --- a/.babelrc +++ b/.babelrc @@ -1,12 +1,18 @@ { - "presets": ["react", ["env", { - "targets": { - "browsers": ["last 2 versions"] - } - }]], + "presets": [ + "@babel/preset-react", + [ + "@babel/preset-env", + { + "targets": { + "browsers": ["last 2 versions"] + } + } + ] + ], "plugins": [ - "transform-class-properties", - "transform-decorators-legacy", - "transform-runtime" + ["@babel/plugin-proposal-decorators", { "legacy": true }], + "@babel/plugin-proposal-class-properties", + "@babel/plugin-transform-runtime" ] } diff --git a/.eslintrc.js b/.eslintrc.js index 2f93fb6..c9b58bf 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,25 +1,18 @@ module.exports = { - "env": { - "browser": true, - "jest/globals": true, - "node": true + env: { + browser: true, + 'jest/globals': true, + node: true, + }, + extends: ['eslint:recommended', 'plugin:import/errors', 'plugin:react/recommended', 'prettier'], + parser: 'babel-eslint', + plugins: ['import', 'jest', 'prettier', 'react'], + settings: { + 'import/resolver': { + [require.resolve('./scripts/eslint-resolver.js')]: {}, }, - "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:react/recommended", - "prettier" - ], - "parser": "babel-eslint", - "plugins": [ - "import", - "jest", - "prettier", - "react" - ], - "settings": { - "import/resolver": { - [require.resolve('./scripts/eslint-resolver.js')]: {} - } - } + react: { + version: 'detect', + }, + }, }; diff --git a/.gitignore b/.gitignore index ede4892..8412a5c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ dist node_modules yarn-error.log -.pnp* + diff --git a/.pnp.js b/.pnp.js new file mode 100755 index 0000000..2e85136 --- /dev/null +++ b/.pnp.js @@ -0,0 +1,32197 @@ +#!/usr/bin/env node + +try { + Object.freeze({}).detectStrictMode = true; +} catch (error) { + throw new Error(`The whole PnP file got strict-mode-ified, which is known to break (Emscripten libraries aren't strict mode). This usually happens when the file goes through Babel.`); +} + +var __non_webpack_module__ = module; + +function $$SETUP_STATE(hydrateRuntimeState) { + return hydrateRuntimeState({ + "__info": [ + "This file is automatically generated. Do not touch it, or risk", + "your modifications being lost. We also recommend you not to read", + "it either without using the @berry/pnp package, as the data layout", + "is entirely unspecified and WILL change from a version to another." + ], + "ignorePatternData": null, + "packageRegistryData": [ + [ + null, + [ + [ + null, + { + "packageLocation": "./", + "packageDependencies": [ + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/plugin-proposal-class-properties", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/plugin-proposal-decorators", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/plugin-transform-runtime", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/preset-env", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/preset-react", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.0.0" + ], + [ + "@babel/runtime", + "npm:7.4.4" + ], + [ + "babel-eslint", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:10.0.1" + ], + [ + "babel-loader", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:8.0.5" + ], + [ + "core-decorators", + "npm:0.20.0" + ], + [ + "eslint", + "npm:5.16.0" + ], + [ + "eslint-config-prettier", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:4.2.0" + ], + [ + "eslint-plugin-import", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:2.17.2" + ], + [ + "eslint-plugin-jest", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:22.5.1" + ], + [ + "eslint-plugin-prettier", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.0.1" + ], + [ + "eslint-plugin-react", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.12.4" + ], + [ + "gulp", + "npm:4.0.1" + ], + [ + "gulp-if", + "npm:2.0.2" + ], + [ + "gulp-uglify", + "npm:3.0.2" + ], + [ + "html-webpack-plugin", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.2.0" + ], + [ + "http-server", + "npm:0.11.1" + ], + [ + "jest", + "npm:24.7.1" + ], + [ + "pnp-webpack-plugin", + "npm:1.4.3" + ], + [ + "prettier", + "npm:1.17.0" + ], + [ + "react", + "npm:16.8.6" + ], + [ + "react-dom", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:16.8.6" + ], + [ + "rollup", + "npm:1.10.1" + ], + [ + "rollup-plugin-commonjs", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:9.3.4" + ], + [ + "rollup-plugin-pnp-resolve", + "npm:1.0.1" + ], + [ + "rxjs", + "npm:6.5.1" + ], + [ + "rxjs-compat", + "npm:6.5.1" + ], + [ + "webpack", + "npm:4.30.0" + ], + [ + "webpack-bundle-analyzer", + "npm:3.3.2" + ], + [ + "webpack-cli", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.3.1" + ], + [ + "webpack-stream", + "npm:5.2.1" + ] + ] + } + ] + ] + ], + [ + "@babel/code-frame", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-code-frame-npm-7.0.0-9215195d5cc804c7cc3461c8ead201d29b9b4b586ee500fcf0ff5b7e64a5beb7.zip/node_modules/@babel/code-frame/", + "packageDependencies": [ + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "@babel/highlight", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/core", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-core-npm-7.4.4-68728ded386943aec0f0d9416209578c4e5e2307bf792c28875875094793e6e3.zip/node_modules/@babel/core/", + "packageDependencies": [ + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "@babel/generator", + "npm:7.4.4" + ], + [ + "@babel/helpers", + "npm:7.4.4" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "convert-source-map", + "npm:1.6.0" + ], + [ + "debug", + "npm:4.1.1" + ], + [ + "json5", + "npm:2.1.0" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "resolve", + "npm:1.10.1" + ], + [ + "semver", + "npm:5.7.0" + ], + [ + "source-map", + "npm:0.5.7" + ] + ] + } + ] + ] + ], + [ + "@babel/generator", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-generator-npm-7.4.4-2fa2e6a0123f934f469198881d6267cc7e2fe1deab7d19a07dab250127d50402.zip/node_modules/@babel/generator/", + "packageDependencies": [ + [ + "@babel/generator", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "jsesc", + "npm:2.5.2" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "source-map", + "npm:0.5.7" + ], + [ + "trim-right", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-annotate-as-pure", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-annotate-as-pure-npm-7.0.0-c36e2328b02f83f4c00588437ed7ad23ec27d977fee7005bf0b274e7d3c1516a.zip/node_modules/@babel/helper-annotate-as-pure/", + "packageDependencies": [ + [ + "@babel/helper-annotate-as-pure", + "npm:7.0.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-builder-binary-assignment-operator-visitor", + [ + [ + "npm:7.1.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.1.0-2bd9e5e527edbaa4cc9f1a96f3d298fd5d04ca45efc4992b5c3cf0894cc1ba25.zip/node_modules/@babel/helper-builder-binary-assignment-operator-visitor/", + "packageDependencies": [ + [ + "@babel/helper-builder-binary-assignment-operator-visitor", + "npm:7.1.0" + ], + [ + "@babel/helper-explode-assignable-expression", + "npm:7.1.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-builder-react-jsx", + [ + [ + "npm:7.3.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-builder-react-jsx-npm-7.3.0-9cc2edf46bf6b1a6c4a9183e2cf6540277f7b430eccb21ebc06b92932160f17f.zip/node_modules/@babel/helper-builder-react-jsx/", + "packageDependencies": [ + [ + "@babel/helper-builder-react-jsx", + "npm:7.3.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "esutils", + "npm:2.0.2" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-call-delegate", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-call-delegate-npm-7.4.4-f3ae77d13d65cd28c9d7fd35311a2f93869236b5e2ab3087b06b47c859a8e55d.zip/node_modules/@babel/helper-call-delegate/", + "packageDependencies": [ + [ + "@babel/helper-call-delegate", + "npm:7.4.4" + ], + [ + "@babel/helper-hoist-variables", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-create-class-features-plugin", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.4.4-584a42506abc580f1fa93675343622ed5a901617d480090395f2f21f3a21a710.zip/node_modules/@babel/helper-create-class-features-plugin/", + "packageDependencies": [ + [ + "@babel/helper-create-class-features-plugin", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-member-expression-to-functions", + "npm:7.0.0" + ], + [ + "@babel/helper-optimise-call-expression", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ], + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ] + ] + } + ], + [ + "virtual:ce5113c649fd7167d99b0a875c059aee747f3e73785df5623f024eff05d9099976245b00e7c69122b988d10a957e24d32ec3f11866413c201452d87c8484c124#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-helper-create-class-features-plugin-virtual-88c135f39e181e4826b5561962acc741e027f0bb4431caf4ac70630a71a100d6/node_modules/@babel/helper-create-class-features-plugin/", + "packageDependencies": [ + [ + "@babel/helper-create-class-features-plugin", + "virtual:ce5113c649fd7167d99b0a875c059aee747f3e73785df5623f024eff05d9099976245b00e7c69122b988d10a957e24d32ec3f11866413c201452d87c8484c124#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-member-expression-to-functions", + "npm:7.0.0" + ], + [ + "@babel/helper-optimise-call-expression", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ], + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ] + ] + } + ], + [ + "virtual:e8063e2d8826d9a6ecc6fb202e967021e93bc885b47a818db4125212dc84b8121eb5d4b8765df664e2f6bfc6bf1a71761424eedf0a6f589dc144ef8b252a96a9#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-helper-create-class-features-plugin-virtual-1bd75d6a35e4ae53a242224b42a642a3d850fb157cba7535ca5a094318b134cb/node_modules/@babel/helper-create-class-features-plugin/", + "packageDependencies": [ + [ + "@babel/helper-create-class-features-plugin", + "virtual:e8063e2d8826d9a6ecc6fb202e967021e93bc885b47a818db4125212dc84b8121eb5d4b8765df664e2f6bfc6bf1a71761424eedf0a6f589dc144ef8b252a96a9#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-member-expression-to-functions", + "npm:7.0.0" + ], + [ + "@babel/helper-optimise-call-expression", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ], + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-define-map", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-define-map-npm-7.4.4-b04eb901032b9ac03eeb12aa39c402d08d72b138a657d7bb3d1c2fe661c0078a.zip/node_modules/@babel/helper-define-map/", + "packageDependencies": [ + [ + "@babel/helper-define-map", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-explode-assignable-expression", + [ + [ + "npm:7.1.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.1.0-f7cf7b9198cca894e25179052f4fc093a6a01aaa16b7ee9d39291b8727b6adb7.zip/node_modules/@babel/helper-explode-assignable-expression/", + "packageDependencies": [ + [ + "@babel/helper-explode-assignable-expression", + "npm:7.1.0" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-function-name", + [ + [ + "npm:7.1.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-function-name-npm-7.1.0-d361e8e2e4581a1bb80bcc269bbc39f015541b7889a615b3e718e2288d887132.zip/node_modules/@babel/helper-function-name/", + "packageDependencies": [ + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-get-function-arity", + "npm:7.0.0" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-get-function-arity", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-get-function-arity-npm-7.0.0-51153db2db8a5dddc7df5aac543c0fa5d7950523705494a217232461cb084db5.zip/node_modules/@babel/helper-get-function-arity/", + "packageDependencies": [ + [ + "@babel/helper-get-function-arity", + "npm:7.0.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-hoist-variables", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-hoist-variables-npm-7.4.4-97d7b627da3acd1c694af49363d6f83e1b4bc9477231a6b838b6106ebf8d4162.zip/node_modules/@babel/helper-hoist-variables/", + "packageDependencies": [ + [ + "@babel/helper-hoist-variables", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-member-expression-to-functions", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.0.0-b72f17fade5e38105edc4ad7ff50a5b97881fc1dfa41ea94b86658276bef31ed.zip/node_modules/@babel/helper-member-expression-to-functions/", + "packageDependencies": [ + [ + "@babel/helper-member-expression-to-functions", + "npm:7.0.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-module-imports", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-module-imports-npm-7.0.0-000aa453317ff62896adddf8258d7603b805efb8883ac5e8e2d8ba2fdfc5131a.zip/node_modules/@babel/helper-module-imports/", + "packageDependencies": [ + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-module-transforms", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-module-transforms-npm-7.4.4-fc9b7d990e82333aef569672f5d5912aaee103452c586992208bba9d5e451797.zip/node_modules/@babel/helper-module-transforms/", + "packageDependencies": [ + [ + "@babel/helper-module-transforms", + "npm:7.4.4" + ], + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/helper-simple-access", + "npm:7.1.0" + ], + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-optimise-call-expression", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-optimise-call-expression-npm-7.0.0-b901288b943c92834c321f6853e50bec64284da1600e45d3dcba628ed4f990f4.zip/node_modules/@babel/helper-optimise-call-expression/", + "packageDependencies": [ + [ + "@babel/helper-optimise-call-expression", + "npm:7.0.0" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-plugin-utils", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-plugin-utils-npm-7.0.0-39d23bf690d153913f42613de1caafdb5cc1976fa73e54c74ebff2f9670c95ab.zip/node_modules/@babel/helper-plugin-utils/", + "packageDependencies": [ + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-regex", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-regex-npm-7.4.4-3a976dd3cfc663e13fe605fa58945bea92144c9d3ba3fb93fc92109286a99d16.zip/node_modules/@babel/helper-regex/", + "packageDependencies": [ + [ + "@babel/helper-regex", + "npm:7.4.4" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-remap-async-to-generator", + [ + [ + "npm:7.1.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.1.0-def30b73e8568a06990fe7a649bf2bb45ad85d52008a2b48d218201d3fe2a721.zip/node_modules/@babel/helper-remap-async-to-generator/", + "packageDependencies": [ + [ + "@babel/helper-remap-async-to-generator", + "npm:7.1.0" + ], + [ + "@babel/helper-annotate-as-pure", + "npm:7.0.0" + ], + [ + "@babel/helper-wrap-function", + "npm:7.2.0" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-replace-supers", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-replace-supers-npm-7.4.4-140f2cff3d47b8669f871f9d58ca344f919dc3dbf2890d8dddfa1933527a7729.zip/node_modules/@babel/helper-replace-supers/", + "packageDependencies": [ + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ], + [ + "@babel/helper-member-expression-to-functions", + "npm:7.0.0" + ], + [ + "@babel/helper-optimise-call-expression", + "npm:7.0.0" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-simple-access", + [ + [ + "npm:7.1.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-simple-access-npm-7.1.0-b72935be623dbc1dc87045186b56959cd0e2adf95ffc6a7f67cffe6854337a4b.zip/node_modules/@babel/helper-simple-access/", + "packageDependencies": [ + [ + "@babel/helper-simple-access", + "npm:7.1.0" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-split-export-declaration", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helper-split-export-declaration-npm-7.4.4-ff0d0b13341dee578a5583d1b5b08c108c661b0e46ef148267e513b080f4ca53.zip/node_modules/@babel/helper-split-export-declaration/", + "packageDependencies": [ + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helper-wrap-function", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-helper-wrap-function-npm-7.2.0-b0d86ff2dd4a9e9a31119900fd8a8a6ad29f536d76a080d644bab31d1eb66323.zip/node_modules/@babel/helper-wrap-function/", + "packageDependencies": [ + [ + "@babel/helper-wrap-function", + "npm:7.2.0" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/helpers", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-helpers-npm-7.4.4-b5d4636f456d97e8a379d97e5d71515d7be09e86778dba85a47f0d07935ffc5d.zip/node_modules/@babel/helpers/", + "packageDependencies": [ + [ + "@babel/helpers", + "npm:7.4.4" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/highlight", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-highlight-npm-7.0.0-2428398367170ce5325767ccac6eb625fafb89ff55774bbb83b33cec3e7eeec9.zip/node_modules/@babel/highlight/", + "packageDependencies": [ + [ + "@babel/highlight", + "npm:7.0.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "esutils", + "npm:2.0.2" + ], + [ + "js-tokens", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/parser", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-parser-npm-7.4.4-255a272eac9b6ce2b8ba70e203c632cad81368c00feff1c4aa13e4fdaefdb435.zip/node_modules/@babel/parser/", + "packageDependencies": [ + [ + "@babel/parser", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-proposal-async-generator-functions", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.2.0-a7273b5154f0d12dcc157eb570e42b9974e79f399b538412200cc01f16223422.zip/node_modules/@babel/plugin-proposal-async-generator-functions/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-async-generator-functions", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-remap-async-to-generator", + "npm:7.1.0" + ], + [ + "@babel/plugin-syntax-async-generators", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-proposal-async-generator-functions-virtual-6dbfe9c134893d39c625f3c8aa2637f8c5a9b3c4989e0adfc978d0e31708ae8a/node_modules/@babel/plugin-proposal-async-generator-functions/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-async-generator-functions", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-remap-async-to-generator", + "npm:7.1.0" + ], + [ + "@babel/plugin-syntax-async-generators", + "virtual:6dbfe9c134893d39c625f3c8aa2637f8c5a9b3c4989e0adfc978d0e31708ae8ad34d8acc0593a4c5f87ec6d9f5468a9ec1eb7e03041c468aef49e870163244ba#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-proposal-class-properties", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.4.4-7a2569c594dcd01733360806c3141fb6e6de2e6c5476108a37a52d11d77bcd03.zip/node_modules/@babel/plugin-proposal-class-properties/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-class-properties", + "npm:7.4.4" + ], + [ + "@babel/helper-create-class-features-plugin", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-proposal-class-properties-virtual-e8063e2d8826d9a6ecc6fb202e967021e93bc885b47a818db4125212dc84b812/node_modules/@babel/plugin-proposal-class-properties/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-class-properties", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-create-class-features-plugin", + "virtual:e8063e2d8826d9a6ecc6fb202e967021e93bc885b47a818db4125212dc84b8121eb5d4b8765df664e2f6bfc6bf1a71761424eedf0a6f589dc144ef8b252a96a9#npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-proposal-decorators", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-decorators-npm-7.4.4-ad9d4294db540da35e1946c6f2a700126706fd304439ad5963d0ed6c20982786.zip/node_modules/@babel/plugin-proposal-decorators/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-decorators", + "npm:7.4.4" + ], + [ + "@babel/helper-create-class-features-plugin", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-decorators", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-proposal-decorators-virtual-ce5113c649fd7167d99b0a875c059aee747f3e73785df5623f024eff05d90999/node_modules/@babel/plugin-proposal-decorators/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-decorators", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-create-class-features-plugin", + "virtual:ce5113c649fd7167d99b0a875c059aee747f3e73785df5623f024eff05d9099976245b00e7c69122b988d10a957e24d32ec3f11866413c201452d87c8484c124#npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-decorators", + "virtual:ce5113c649fd7167d99b0a875c059aee747f3e73785df5623f024eff05d9099976245b00e7c69122b988d10a957e24d32ec3f11866413c201452d87c8484c124#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-proposal-json-strings", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.2.0-d982dbfe549190f9aea0258f750122aaf5fb703ba5ba827579fac9f65f7b26f8.zip/node_modules/@babel/plugin-proposal-json-strings/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-json-strings", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-json-strings", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-proposal-json-strings-virtual-53826a024a8f27c38d1e1097b8654b8a52f4da6c261495d6cc3f2e95bac66dd9/node_modules/@babel/plugin-proposal-json-strings/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-json-strings", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-json-strings", + "virtual:53826a024a8f27c38d1e1097b8654b8a52f4da6c261495d6cc3f2e95bac66dd982cf2e01f978a443f01fde252c06f7379c28afc9e89667d712b23cb3f36b90c6#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-proposal-object-rest-spread", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.4.4-49552a88c898447cc8245ee03caeb6492fd226d25a869595fd37becc4bfd7b8d.zip/node_modules/@babel/plugin-proposal-object-rest-spread/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-object-rest-spread", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-object-rest-spread", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-proposal-object-rest-spread-virtual-d2751f0aaeec87e7fba8c38d6dd2b5d3b964842eca953573415de6dadf185a3d/node_modules/@babel/plugin-proposal-object-rest-spread/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-object-rest-spread", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-object-rest-spread", + "virtual:d2751f0aaeec87e7fba8c38d6dd2b5d3b964842eca953573415de6dadf185a3dd7f8513f54cde27d53d18713e64b48dc4aabed3f7e62cda33aa3ddac36e23465#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-proposal-optional-catch-binding", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.2.0-d6022b0cc406b26ba0b41a0f319b951ba6f571f350af3a3c74b1dfc904e79f20.zip/node_modules/@babel/plugin-proposal-optional-catch-binding/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-optional-catch-binding", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-optional-catch-binding", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-proposal-optional-catch-binding-virtual-0a84dc4c7ba5a433d7f6af8b5897120ce25cf2e4d3fe04d7df530283661afb71/node_modules/@babel/plugin-proposal-optional-catch-binding/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-optional-catch-binding", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-optional-catch-binding", + "virtual:0a84dc4c7ba5a433d7f6af8b5897120ce25cf2e4d3fe04d7df530283661afb71b675cf21b783f4ff8490d4bbbeae0616a3d5884dcaa79e18683e26d5c66a8ca2#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-proposal-unicode-property-regex", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.4.4-394311e46ab05af88adeb9f95d68935bf0dd883f2dae1e97318671670fa83634.zip/node_modules/@babel/plugin-proposal-unicode-property-regex/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-unicode-property-regex", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ], + [ + "regexpu-core", + "npm:4.5.4" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-proposal-unicode-property-regex-virtual-4b66d43c1c27db1502cfc63a73952904328d4b849b95f9c38f7d80f8bb0c190b/node_modules/@babel/plugin-proposal-unicode-property-regex/", + "packageDependencies": [ + [ + "@babel/plugin-proposal-unicode-property-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ], + [ + "regexpu-core", + "npm:4.5.4" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-syntax-async-generators", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-syntax-async-generators-npm-7.2.0-56052ba1fce800c355d1d0ae28a07ff7abb8f82fe18286cd21282998cef77e4b.zip/node_modules/@babel/plugin-syntax-async-generators/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-async-generators", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:6dbfe9c134893d39c625f3c8aa2637f8c5a9b3c4989e0adfc978d0e31708ae8ad34d8acc0593a4c5f87ec6d9f5468a9ec1eb7e03041c468aef49e870163244ba#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-async-generators-virtual-e328e5f079fd1dc1d1afc0558c20afcf088969d04c9cdf06052c6648da148778/node_modules/@babel/plugin-syntax-async-generators/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-async-generators", + "virtual:6dbfe9c134893d39c625f3c8aa2637f8c5a9b3c4989e0adfc978d0e31708ae8ad34d8acc0593a4c5f87ec6d9f5468a9ec1eb7e03041c468aef49e870163244ba#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-async-generators-virtual-871333c520b8ce1edbca1f003bd5dcf165b6501118581906c02ad3f67d4e3a3d/node_modules/@babel/plugin-syntax-async-generators/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-async-generators", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-syntax-decorators", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-syntax-decorators-npm-7.2.0-1149291ab7d7cceaf2c533d78ea8bdcb0cbc55f0fe7ea670b7f523ed9ef38117.zip/node_modules/@babel/plugin-syntax-decorators/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-decorators", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:ce5113c649fd7167d99b0a875c059aee747f3e73785df5623f024eff05d9099976245b00e7c69122b988d10a957e24d32ec3f11866413c201452d87c8484c124#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-decorators-virtual-4b4056890e256cb861a9893e89268546202828eee07c90a3ab1c2ea76eff2a64/node_modules/@babel/plugin-syntax-decorators/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-decorators", + "virtual:ce5113c649fd7167d99b0a875c059aee747f3e73785df5623f024eff05d9099976245b00e7c69122b988d10a957e24d32ec3f11866413c201452d87c8484c124#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-syntax-json-strings", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-syntax-json-strings-npm-7.2.0-ace2a02bfc6722bd93afb2f190b9448731e8923b831fba06a088b96733e1dced.zip/node_modules/@babel/plugin-syntax-json-strings/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-json-strings", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:53826a024a8f27c38d1e1097b8654b8a52f4da6c261495d6cc3f2e95bac66dd982cf2e01f978a443f01fde252c06f7379c28afc9e89667d712b23cb3f36b90c6#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-json-strings-virtual-39031ff624546ff5ba86478157687fa046f1b74ac7ea5c56b0ab0cb41860996e/node_modules/@babel/plugin-syntax-json-strings/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-json-strings", + "virtual:53826a024a8f27c38d1e1097b8654b8a52f4da6c261495d6cc3f2e95bac66dd982cf2e01f978a443f01fde252c06f7379c28afc9e89667d712b23cb3f36b90c6#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-json-strings-virtual-68cfc29a74469abd1f8433448e4bce640a5366b6d7b85ac1bf568972ccd3d427/node_modules/@babel/plugin-syntax-json-strings/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-json-strings", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-syntax-jsx", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-syntax-jsx-npm-7.2.0-aacb3bb293af315341b1c3cfe1cc9281cc4d712c3c0ce8131302a2fe60610d15.zip/node_modules/@babel/plugin-syntax-jsx/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-jsx", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:0aa2c00965cc24a2f33beb6216dc767fddcd99d02458ad154563c533b7a041df09cb4e13b1a6121e7408d17394c412d2f8f7d8ee35fa3555c4a309da901554a5#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-jsx-virtual-96f6cc8390a7b17fa8b835df550e80d25a6de22999ecb91c18932b54f0405328/node_modules/@babel/plugin-syntax-jsx/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-jsx", + "virtual:0aa2c00965cc24a2f33beb6216dc767fddcd99d02458ad154563c533b7a041df09cb4e13b1a6121e7408d17394c412d2f8f7d8ee35fa3555c4a309da901554a5#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:673183da098d72ecb71af591c200bab6da9159b424f3c7861c0e4c5d060c83a87753a1a0db51e264c83086fe381de09062a5f5413f1d0f5066e0ef575684b7f9#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-jsx-virtual-112e891ca71fbb5b72c5cd55956449dd88bb7ac7064b0ac1d4fae136113cadc8/node_modules/@babel/plugin-syntax-jsx/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-jsx", + "virtual:673183da098d72ecb71af591c200bab6da9159b424f3c7861c0e4c5d060c83a87753a1a0db51e264c83086fe381de09062a5f5413f1d0f5066e0ef575684b7f9#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:e3e0dc1cee666ee359d061c5750f06337b934b9e91417fe2a779ea9534700763367034b0835a69f51fabd098afe27160407833db194775e4cee9e87e3a1055ba#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-jsx-virtual-3860302a8b63302d291fe958ff4566371398dcc946cca43867884e489cbaefa4/node_modules/@babel/plugin-syntax-jsx/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-jsx", + "virtual:e3e0dc1cee666ee359d061c5750f06337b934b9e91417fe2a779ea9534700763367034b0835a69f51fabd098afe27160407833db194775e4cee9e87e3a1055ba#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-syntax-object-rest-spread", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-syntax-object-rest-spread-npm-7.2.0-c9b7d141d0a582d35d17327bf1e9221946b886ad398cee4474b5db45d70d4a34.zip/node_modules/@babel/plugin-syntax-object-rest-spread/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-object-rest-spread", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:2b9f809cf6ce6808087040965410655d3bc882d2de609b1ee9f641b109f1e91e2766bbebb75e2cb45dd156e971697f559112f2dd9f9ecdb29c9ba47348c87bbf#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-object-rest-spread-virtual-e4d7304b01432e8d1fccab32a095d3effa031751c7d5cfc5b0a2542316151b33/node_modules/@babel/plugin-syntax-object-rest-spread/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-object-rest-spread", + "virtual:2b9f809cf6ce6808087040965410655d3bc882d2de609b1ee9f641b109f1e91e2766bbebb75e2cb45dd156e971697f559112f2dd9f9ecdb29c9ba47348c87bbf#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-object-rest-spread-virtual-cdab6e141d36c4fcec9f9cf9951960ab220b277e37dc45e977bc056fdb3e99f7/node_modules/@babel/plugin-syntax-object-rest-spread/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-object-rest-spread", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:d2751f0aaeec87e7fba8c38d6dd2b5d3b964842eca953573415de6dadf185a3dd7f8513f54cde27d53d18713e64b48dc4aabed3f7e62cda33aa3ddac36e23465#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-object-rest-spread-virtual-99c8013b2138000da1068b05c835523873ab3164d3ef7e131b6883aae7f08802/node_modules/@babel/plugin-syntax-object-rest-spread/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-object-rest-spread", + "virtual:d2751f0aaeec87e7fba8c38d6dd2b5d3b964842eca953573415de6dadf185a3dd7f8513f54cde27d53d18713e64b48dc4aabed3f7e62cda33aa3ddac36e23465#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-syntax-optional-catch-binding", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.2.0-f92dd992101e1849714ebd5c74feb7f83ef1e577ff78f967f9006eae0ae23953.zip/node_modules/@babel/plugin-syntax-optional-catch-binding/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-optional-catch-binding", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:0a84dc4c7ba5a433d7f6af8b5897120ce25cf2e4d3fe04d7df530283661afb71b675cf21b783f4ff8490d4bbbeae0616a3d5884dcaa79e18683e26d5c66a8ca2#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-optional-catch-binding-virtual-1aafa50f46afe7aa2b38836eaee6f86c8bf196d67270f13f93365c674da56e85/node_modules/@babel/plugin-syntax-optional-catch-binding/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-optional-catch-binding", + "virtual:0a84dc4c7ba5a433d7f6af8b5897120ce25cf2e4d3fe04d7df530283661afb71b675cf21b783f4ff8490d4bbbeae0616a3d5884dcaa79e18683e26d5c66a8ca2#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-syntax-optional-catch-binding-virtual-0b7ca714a58e6708a9f5626c94b93586cd64c96c0c899abfebbbb2c22dbe73c4/node_modules/@babel/plugin-syntax-optional-catch-binding/", + "packageDependencies": [ + [ + "@babel/plugin-syntax-optional-catch-binding", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-arrow-functions", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.2.0-cbeb9261ce04540f7c1dcd00a0ab68123652051888de879794d59eda2f6eebb9.zip/node_modules/@babel/plugin-transform-arrow-functions/", + "packageDependencies": [ + [ + "@babel/plugin-transform-arrow-functions", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-arrow-functions-virtual-c5067595b13e3a7e08789d5b474d886c43f349bcb4f08a6a0f063e8ea2ef8172/node_modules/@babel/plugin-transform-arrow-functions/", + "packageDependencies": [ + [ + "@babel/plugin-transform-arrow-functions", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-async-to-generator", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.4.4-3e386255514cf34fe1b71502f7b899444377b9fd2afe9e9dab81fabc600e688e.zip/node_modules/@babel/plugin-transform-async-to-generator/", + "packageDependencies": [ + [ + "@babel/plugin-transform-async-to-generator", + "npm:7.4.4" + ], + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-remap-async-to-generator", + "npm:7.1.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-async-to-generator-virtual-aa7a89215071ba6be199e2451eeb670cf363c49ec9882e3612164eb4e91a1ccc/node_modules/@babel/plugin-transform-async-to-generator/", + "packageDependencies": [ + [ + "@babel/plugin-transform-async-to-generator", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-remap-async-to-generator", + "npm:7.1.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-block-scoped-functions", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-block-scoped-functions-npm-7.2.0-de4d12683c496e4d4b5f11c741a629caab6c7540aea8a9d847295796a752e3ea.zip/node_modules/@babel/plugin-transform-block-scoped-functions/", + "packageDependencies": [ + [ + "@babel/plugin-transform-block-scoped-functions", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-block-scoped-functions-virtual-8857aff6e7527f0f87c8f6f78a5a0351385b1ddd3315f33ee7700dc88c7af2a9/node_modules/@babel/plugin-transform-block-scoped-functions/", + "packageDependencies": [ + [ + "@babel/plugin-transform-block-scoped-functions", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-block-scoping", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.4.4-0f5e2238d9e6cd329982d95e2c161b880440a0fccee4375a3f6fe36b58e75aee.zip/node_modules/@babel/plugin-transform-block-scoping/", + "packageDependencies": [ + [ + "@babel/plugin-transform-block-scoping", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-block-scoping-virtual-1ba26df0efe69dd419d16b4e5f713c503c2e930443edc6a801d51aa74033a1f3/node_modules/@babel/plugin-transform-block-scoping/", + "packageDependencies": [ + [ + "@babel/plugin-transform-block-scoping", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-classes", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-classes-npm-7.4.4-2413ae0e7d4a74f39de2861648d748a1a8d4c73a71c725f72e798aad12c1b5f8.zip/node_modules/@babel/plugin-transform-classes/", + "packageDependencies": [ + [ + "@babel/plugin-transform-classes", + "npm:7.4.4" + ], + [ + "@babel/helper-annotate-as-pure", + "npm:7.0.0" + ], + [ + "@babel/helper-define-map", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-optimise-call-expression", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ], + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ], + [ + "globals", + "npm:11.11.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-classes-virtual-58761f13e83e0e3ff1bf49e593962212c3423c215d37e99a7721c290da3390da/node_modules/@babel/plugin-transform-classes/", + "packageDependencies": [ + [ + "@babel/plugin-transform-classes", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-annotate-as-pure", + "npm:7.0.0" + ], + [ + "@babel/helper-define-map", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-optimise-call-expression", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ], + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ], + [ + "globals", + "npm:11.11.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-computed-properties", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.2.0-e7977a2d1cc8848bd978f17faa764f137954ba7e96f722418fb60e65365a1123.zip/node_modules/@babel/plugin-transform-computed-properties/", + "packageDependencies": [ + [ + "@babel/plugin-transform-computed-properties", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-computed-properties-virtual-aa4dfaa59195653916ebcfc2e841469c5aeb0e2565624f70b3b7f83e8cc54ebc/node_modules/@babel/plugin-transform-computed-properties/", + "packageDependencies": [ + [ + "@babel/plugin-transform-computed-properties", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-destructuring", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-destructuring-npm-7.4.4-90d6718ff2fcf28f8f49cbbcf2610e53a8a8d842b0a39388431fcee608ae461d.zip/node_modules/@babel/plugin-transform-destructuring/", + "packageDependencies": [ + [ + "@babel/plugin-transform-destructuring", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-destructuring-virtual-9a1fbbcd5e4ebb1e1806d716b7a7860b0f2ccb5fd64a6d661d247e6214e0b4e9/node_modules/@babel/plugin-transform-destructuring/", + "packageDependencies": [ + [ + "@babel/plugin-transform-destructuring", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-dotall-regex", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.4.4-bb484586101829708c865c66dba102bca64324419e44817d737e48e50b0a8284.zip/node_modules/@babel/plugin-transform-dotall-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-dotall-regex", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ], + [ + "regexpu-core", + "npm:4.5.4" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-dotall-regex-virtual-0d469edce21853e1e89304c25fcb987715b6e1385d6f8d631deac6a276ceb125/node_modules/@babel/plugin-transform-dotall-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-dotall-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ], + [ + "regexpu-core", + "npm:4.5.4" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-duplicate-keys", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.2.0-c4766a2d8b9e0dfa11ce1f6623e2024c8522efb9fc6ade7b72a089e1c56e9b34.zip/node_modules/@babel/plugin-transform-duplicate-keys/", + "packageDependencies": [ + [ + "@babel/plugin-transform-duplicate-keys", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-duplicate-keys-virtual-f0289afacc0423b7331afdd47ed1cd3639a7a5914a474525d157ab7cb451dc9f/node_modules/@babel/plugin-transform-duplicate-keys/", + "packageDependencies": [ + [ + "@babel/plugin-transform-duplicate-keys", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-exponentiation-operator", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.2.0-0732e6bddc9c1db7c97598a91a05656d793737bb280e8163eadff7dc53092a86.zip/node_modules/@babel/plugin-transform-exponentiation-operator/", + "packageDependencies": [ + [ + "@babel/plugin-transform-exponentiation-operator", + "npm:7.2.0" + ], + [ + "@babel/helper-builder-binary-assignment-operator-visitor", + "npm:7.1.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-exponentiation-operator-virtual-7c785f79e45041dfde986622b32547d705ccb2ec94ebe31f6dd2b54052730174/node_modules/@babel/plugin-transform-exponentiation-operator/", + "packageDependencies": [ + [ + "@babel/plugin-transform-exponentiation-operator", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-builder-binary-assignment-operator-visitor", + "npm:7.1.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-for-of", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-for-of-npm-7.4.4-5baecd675df74d2dc694b7dd5210387f6431fa56f81d1ea0feb2e697826b73d0.zip/node_modules/@babel/plugin-transform-for-of/", + "packageDependencies": [ + [ + "@babel/plugin-transform-for-of", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-for-of-virtual-5b288300b158698dd988b197dc8c9d47134d5535b09ea4643ff480814021cfae/node_modules/@babel/plugin-transform-for-of/", + "packageDependencies": [ + [ + "@babel/plugin-transform-for-of", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-function-name", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-function-name-npm-7.4.4-69b86624c6e8548fa8a995c62ec028072b7e50e131107e651a31282ba67b2d85.zip/node_modules/@babel/plugin-transform-function-name/", + "packageDependencies": [ + [ + "@babel/plugin-transform-function-name", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-function-name-virtual-422257b90e2f3c0221507b4aa3b8803495067a9e64dc41dd9fb1f83e430c6204/node_modules/@babel/plugin-transform-function-name/", + "packageDependencies": [ + [ + "@babel/plugin-transform-function-name", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-literals", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-literals-npm-7.2.0-eee5a4f7e945ef583859d1833176d07047dbac7276c3765281888aff9628d6be.zip/node_modules/@babel/plugin-transform-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-literals", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-literals-virtual-207922e5560ca79674baa9f4e8ff940c030374dd72e342659241f72e4e58cb80/node_modules/@babel/plugin-transform-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-member-expression-literals", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-member-expression-literals-npm-7.2.0-c8bcb8208a98b7676e1607e933a23c29aa1a632a0fdafc72598007f52f543576.zip/node_modules/@babel/plugin-transform-member-expression-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-member-expression-literals", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-member-expression-literals-virtual-cffa61f3ad14c03cb144baf7da2d9ee56cb4a1781ee408702000a2b40f2c9fe8/node_modules/@babel/plugin-transform-member-expression-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-member-expression-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-modules-amd", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.2.0-fbf5d84872ff89cd34d62b80ddaddba5b1a23d97ff47d4f5726c558a7f360d95.zip/node_modules/@babel/plugin-transform-modules-amd/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-amd", + "npm:7.2.0" + ], + [ + "@babel/helper-module-transforms", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-modules-amd-virtual-8b515fa8e4fbed590aa95f45a68220db933afba81b7c2288cd632fa309682c08/node_modules/@babel/plugin-transform-modules-amd/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-amd", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-module-transforms", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-modules-commonjs", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.4.4-d0eb8fc2c746d5050da9762f06da41bee536ef7940be9fcdf0bae807ab935968.zip/node_modules/@babel/plugin-transform-modules-commonjs/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-commonjs", + "npm:7.4.4" + ], + [ + "@babel/helper-module-transforms", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-simple-access", + "npm:7.1.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-modules-commonjs-virtual-e18355af2b30f7dafd7aa55172cbe17994ec5f8cf27af6594f466c5c47cd1225/node_modules/@babel/plugin-transform-modules-commonjs/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-commonjs", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-module-transforms", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-simple-access", + "npm:7.1.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-modules-systemjs", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.4.4-acc182b45f4a9621d04f579c18088909eba38512e15975f5fbae9507d4a8930d.zip/node_modules/@babel/plugin-transform-modules-systemjs/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-systemjs", + "npm:7.4.4" + ], + [ + "@babel/helper-hoist-variables", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-modules-systemjs-virtual-6fc7da1d250728e9b2263ee0d0b62d3955adee7133a8bae10101087f2bbdabf6/node_modules/@babel/plugin-transform-modules-systemjs/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-systemjs", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-hoist-variables", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-modules-umd", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.2.0-42b9e1286a92833b1d848ee9e47265008ccca0d30a4f7d99c9e4a9f725bfc757.zip/node_modules/@babel/plugin-transform-modules-umd/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-umd", + "npm:7.2.0" + ], + [ + "@babel/helper-module-transforms", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-modules-umd-virtual-1fe7d71e192030da5b5142c861b656f5fb330945b646809bd101f07f81b6eb57/node_modules/@babel/plugin-transform-modules-umd/", + "packageDependencies": [ + [ + "@babel/plugin-transform-modules-umd", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-module-transforms", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-named-capturing-groups-regex", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.4.4-b8fc4cfcf3a28e72efdf2c050dfda1a10c5b40c422e09cf15ee8b111e605e2f7.zip/node_modules/@babel/plugin-transform-named-capturing-groups-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-named-capturing-groups-regex", + "npm:7.4.4" + ], + [ + "regexp-tree", + "npm:0.1.5" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-named-capturing-groups-regex-virtual-eb294c884f2fdcd8155a1af39c23a19b2219edf16a1c1b81bf6e63b98d2def24/node_modules/@babel/plugin-transform-named-capturing-groups-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-named-capturing-groups-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "regexp-tree", + "npm:0.1.5" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-new-target", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-new-target-npm-7.4.4-f052f09038d21a65c4c28a33bd0495bf40e7ff30c542ade1f8714f1e096d24db.zip/node_modules/@babel/plugin-transform-new-target/", + "packageDependencies": [ + [ + "@babel/plugin-transform-new-target", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-new-target-virtual-92a09e379e41da037c224ad1161d52cc4c9ff70f3caea316fd769cc7d08ebffa/node_modules/@babel/plugin-transform-new-target/", + "packageDependencies": [ + [ + "@babel/plugin-transform-new-target", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-object-super", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-object-super-npm-7.2.0-03a71be53b2967aa68ebfa16500d65ebe3be20b39fba91232288cf8cabf5cbc7.zip/node_modules/@babel/plugin-transform-object-super/", + "packageDependencies": [ + [ + "@babel/plugin-transform-object-super", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-object-super-virtual-f2a4b8e9c4161ea92ebc26223162da52a93cade3bf7557eae73c8cdb12581fe9/node_modules/@babel/plugin-transform-object-super/", + "packageDependencies": [ + [ + "@babel/plugin-transform-object-super", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-replace-supers", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-parameters", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-parameters-npm-7.4.4-743aab0717900cd536d9e0e94748bae81fd49761c32d43e93a91a51d72897f34.zip/node_modules/@babel/plugin-transform-parameters/", + "packageDependencies": [ + [ + "@babel/plugin-transform-parameters", + "npm:7.4.4" + ], + [ + "@babel/helper-call-delegate", + "npm:7.4.4" + ], + [ + "@babel/helper-get-function-arity", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-parameters-virtual-f103c90953fc8d2287425d9917f99b6fb5d452db8eae788fae5df750df297f49/node_modules/@babel/plugin-transform-parameters/", + "packageDependencies": [ + [ + "@babel/plugin-transform-parameters", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-call-delegate", + "npm:7.4.4" + ], + [ + "@babel/helper-get-function-arity", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-property-literals", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-property-literals-npm-7.2.0-fab879c3a5833c9e2d9847ca68be0469e344601876aba899ecdbdf0a644068ec.zip/node_modules/@babel/plugin-transform-property-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-property-literals", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-property-literals-virtual-54adf0eba2fcf41e1f70d17bd532a2ffa497d5d21d604e414f099a71b5e81c55/node_modules/@babel/plugin-transform-property-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-property-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-react-display-name", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-react-display-name-npm-7.2.0-871d02761b5340785d9d7e0dd0a41db8bf2ed7a35c87dff1560dd7030a9faff5.zip/node_modules/@babel/plugin-transform-react-display-name/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-display-name", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-react-display-name-virtual-144190ad97d0320a18896ab0c6c8bedd039ee58f78e5a3850e5a7e1919de0506/node_modules/@babel/plugin-transform-react-display-name/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-display-name", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-react-jsx", + [ + [ + "npm:7.3.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.3.0-36172ffd526b08029fda9b0d54d944eaa64b0329c3917c7d6e2816d0d30ae28d.zip/node_modules/@babel/plugin-transform-react-jsx/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-jsx", + "npm:7.3.0" + ], + [ + "@babel/helper-builder-react-jsx", + "npm:7.3.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-jsx", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.3.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-react-jsx-virtual-e3e0dc1cee666ee359d061c5750f06337b934b9e91417fe2a779ea9534700763/node_modules/@babel/plugin-transform-react-jsx/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-jsx", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.3.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-builder-react-jsx", + "npm:7.3.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-jsx", + "virtual:e3e0dc1cee666ee359d061c5750f06337b934b9e91417fe2a779ea9534700763367034b0835a69f51fabd098afe27160407833db194775e4cee9e87e3a1055ba#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-react-jsx-self", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-react-jsx-self-npm-7.2.0-ae34dd00e76caa842404a2ebb3d9700825bf35d42daec825f40da9563f9144e0.zip/node_modules/@babel/plugin-transform-react-jsx-self/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-jsx-self", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-jsx", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-react-jsx-self-virtual-0aa2c00965cc24a2f33beb6216dc767fddcd99d02458ad154563c533b7a041df/node_modules/@babel/plugin-transform-react-jsx-self/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-jsx-self", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-jsx", + "virtual:0aa2c00965cc24a2f33beb6216dc767fddcd99d02458ad154563c533b7a041df09cb4e13b1a6121e7408d17394c412d2f8f7d8ee35fa3555c4a309da901554a5#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-react-jsx-source", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-react-jsx-source-npm-7.2.0-c984443351d3694bea9da599816c21c4e36729f1dfd55999b666fb4538f5d340.zip/node_modules/@babel/plugin-transform-react-jsx-source/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-jsx-source", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-jsx", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-react-jsx-source-virtual-673183da098d72ecb71af591c200bab6da9159b424f3c7861c0e4c5d060c83a8/node_modules/@babel/plugin-transform-react-jsx-source/", + "packageDependencies": [ + [ + "@babel/plugin-transform-react-jsx-source", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-syntax-jsx", + "virtual:673183da098d72ecb71af591c200bab6da9159b424f3c7861c0e4c5d060c83a87753a1a0db51e264c83086fe381de09062a5f5413f1d0f5066e0ef575684b7f9#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-regenerator", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-regenerator-npm-7.4.4-f82edc564df66c04a2423d1b67b7b283f4408fe079c7685699e1e3562d69b152.zip/node_modules/@babel/plugin-transform-regenerator/", + "packageDependencies": [ + [ + "@babel/plugin-transform-regenerator", + "npm:7.4.4" + ], + [ + "regenerator-transform", + "npm:0.13.4" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-regenerator-virtual-75909c75c4b45ab4bd711962a3c821184e3f1996c2656b6083d08dd31636e4ea/node_modules/@babel/plugin-transform-regenerator/", + "packageDependencies": [ + [ + "@babel/plugin-transform-regenerator", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "regenerator-transform", + "npm:0.13.4" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-reserved-words", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.2.0-ec8ea33fce6412220607fad07ebb8c7c182083d66fbbcddeb0b11bfbf8869b86.zip/node_modules/@babel/plugin-transform-reserved-words/", + "packageDependencies": [ + [ + "@babel/plugin-transform-reserved-words", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-reserved-words-virtual-410d94bdbf614100061278c6c6dc345edd9633238c857f0f7a8917dfc8d79731/node_modules/@babel/plugin-transform-reserved-words/", + "packageDependencies": [ + [ + "@babel/plugin-transform-reserved-words", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-runtime", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-runtime-npm-7.4.4-03e2496d771dfb8ab06661878cbe7d217beb8f539b10d56930ad813a89f07077.zip/node_modules/@babel/plugin-transform-runtime/", + "packageDependencies": [ + [ + "@babel/plugin-transform-runtime", + "npm:7.4.4" + ], + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "resolve", + "npm:1.10.1" + ], + [ + "semver", + "npm:5.7.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-runtime-virtual-39e9dfc292589670c4a5733488354b934960618410ebc6e740742f05a3978b88/node_modules/@babel/plugin-transform-runtime/", + "packageDependencies": [ + [ + "@babel/plugin-transform-runtime", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "resolve", + "npm:1.10.1" + ], + [ + "semver", + "npm:5.7.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-shorthand-properties", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-shorthand-properties-npm-7.2.0-f8349323b8de72e7b7fd41780eeaf9225670fb666c125d70fd49221e143767be.zip/node_modules/@babel/plugin-transform-shorthand-properties/", + "packageDependencies": [ + [ + "@babel/plugin-transform-shorthand-properties", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-shorthand-properties-virtual-eea1f17750c81f97a14dbd89e3563862de8beb95d4a914213d44121cbc6c4ec7/node_modules/@babel/plugin-transform-shorthand-properties/", + "packageDependencies": [ + [ + "@babel/plugin-transform-shorthand-properties", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-spread", + [ + [ + "npm:7.2.2", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-spread-npm-7.2.2-63441564cb32baa20545c29fcba0386cad080a5656baa3637f755b7f96ef00af.zip/node_modules/@babel/plugin-transform-spread/", + "packageDependencies": [ + [ + "@babel/plugin-transform-spread", + "npm:7.2.2" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.2", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-spread-virtual-bdd29ff40c48c2d28db082c13b8d6c04a0e8063201b6e9e34730ff85ef262562/node_modules/@babel/plugin-transform-spread/", + "packageDependencies": [ + [ + "@babel/plugin-transform-spread", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.2" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-sticky-regex", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.2.0-4bc03f2b9d4a04e98fe22c3d34609ff1ebd139cafe6a69ac813941dcdf79005c.zip/node_modules/@babel/plugin-transform-sticky-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-sticky-regex", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-sticky-regex-virtual-78cd5be56c1a777daa51a9838c34e9d9bddddc7eb25cbdac78830128329f129c/node_modules/@babel/plugin-transform-sticky-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-sticky-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-template-literals", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-template-literals-npm-7.4.4-5dd4453d150e33501402316bebc110e89f788c9178fd1f2116135a666f547590.zip/node_modules/@babel/plugin-transform-template-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-template-literals", + "npm:7.4.4" + ], + [ + "@babel/helper-annotate-as-pure", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-template-literals-virtual-c9863963e390865e41ba543ce81aca263cb87a6c62c88042c3dd200386972619/node_modules/@babel/plugin-transform-template-literals/", + "packageDependencies": [ + [ + "@babel/plugin-transform-template-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-annotate-as-pure", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-typeof-symbol", + [ + [ + "npm:7.2.0", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.2.0-e8fbbe6e15e9d8fa92f6a84c013538881df5a5703766bf1cb2a795c11159d6f8.zip/node_modules/@babel/plugin-transform-typeof-symbol/", + "packageDependencies": [ + [ + "@babel/plugin-transform-typeof-symbol", + "npm:7.2.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-typeof-symbol-virtual-ed0c0ea918f829abba64fba9a67c859ce20ba12eddbd3e393836b77bccd13b84/node_modules/@babel/plugin-transform-typeof-symbol/", + "packageDependencies": [ + [ + "@babel/plugin-transform-typeof-symbol", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "@babel/plugin-transform-unicode-regex", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.4.4-53dd29db47c23164938ac3d67870ed3130cc2cfede9cb2fdf3d95aa4be25118b.zip/node_modules/@babel/plugin-transform-unicode-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-unicode-regex", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ], + [ + "regexpu-core", + "npm:4.5.4" + ] + ] + } + ], + [ + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-plugin-transform-unicode-regex-virtual-f1fc60057c67566f7e9650a0757bb2114eac6d9d60b1befeba43e5b7e8623b40/node_modules/@babel/plugin-transform-unicode-regex/", + "packageDependencies": [ + [ + "@babel/plugin-transform-unicode-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/helper-regex", + "npm:7.4.4" + ], + [ + "regexpu-core", + "npm:4.5.4" + ] + ] + } + ] + ] + ], + [ + "@babel/preset-env", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-preset-env-npm-7.4.4-2e52076a5ac574935a92e9788d07fa8ec56b8e643789f5446ac0ae2cbc905bc8.zip/node_modules/@babel/preset-env/", + "packageDependencies": [ + [ + "@babel/preset-env", + "npm:7.4.4" + ], + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-proposal-async-generator-functions", + "npm:7.2.0" + ], + [ + "@babel/plugin-proposal-json-strings", + "npm:7.2.0" + ], + [ + "@babel/plugin-proposal-object-rest-spread", + "npm:7.4.4" + ], + [ + "@babel/plugin-proposal-optional-catch-binding", + "npm:7.2.0" + ], + [ + "@babel/plugin-proposal-unicode-property-regex", + "npm:7.4.4" + ], + [ + "@babel/plugin-syntax-async-generators", + "npm:7.2.0" + ], + [ + "@babel/plugin-syntax-json-strings", + "npm:7.2.0" + ], + [ + "@babel/plugin-syntax-object-rest-spread", + "npm:7.2.0" + ], + [ + "@babel/plugin-syntax-optional-catch-binding", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-arrow-functions", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-async-to-generator", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-block-scoped-functions", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-block-scoping", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-classes", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-computed-properties", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-destructuring", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-dotall-regex", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-duplicate-keys", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-exponentiation-operator", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-for-of", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-function-name", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-literals", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-member-expression-literals", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-modules-amd", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-modules-commonjs", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-modules-systemjs", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-modules-umd", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-named-capturing-groups-regex", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-new-target", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-object-super", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-parameters", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-property-literals", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-regenerator", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-reserved-words", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-shorthand-properties", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-spread", + "npm:7.2.2" + ], + [ + "@babel/plugin-transform-sticky-regex", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-template-literals", + "npm:7.4.4" + ], + [ + "@babel/plugin-transform-typeof-symbol", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-unicode-regex", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "browserslist", + "npm:4.5.5" + ], + [ + "core-js-compat", + "npm:3.0.1" + ], + [ + "invariant", + "npm:2.2.4" + ], + [ + "js-levenshtein", + "npm:1.1.6" + ], + [ + "semver", + "npm:5.7.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4", + { + "packageLocation": "./.yarn/virtual/@babel-preset-env-virtual-82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947/node_modules/@babel/preset-env/", + "packageDependencies": [ + [ + "@babel/preset-env", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-module-imports", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-proposal-async-generator-functions", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-proposal-json-strings", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-proposal-object-rest-spread", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-proposal-optional-catch-binding", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-proposal-unicode-property-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-syntax-async-generators", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-syntax-json-strings", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-syntax-object-rest-spread", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-syntax-optional-catch-binding", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-arrow-functions", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-async-to-generator", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-block-scoped-functions", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-block-scoping", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-classes", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-computed-properties", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-destructuring", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-dotall-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-duplicate-keys", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-exponentiation-operator", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-for-of", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-function-name", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-member-expression-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-modules-amd", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-modules-commonjs", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-modules-systemjs", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-modules-umd", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-named-capturing-groups-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-new-target", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-object-super", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-parameters", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-property-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-regenerator", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-reserved-words", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-shorthand-properties", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-spread", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.2" + ], + [ + "@babel/plugin-transform-sticky-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-template-literals", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/plugin-transform-typeof-symbol", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.2.0" + ], + [ + "@babel/plugin-transform-unicode-regex", + "virtual:82d9d9135fa6171c8c63aa6f394b5c6c1320145e942f539826961a2ba2eba947403adb99d756a414d9787797a45400f2732e70fb2e8ed8a842d3e816e633715e#npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "browserslist", + "npm:4.5.5" + ], + [ + "core-js-compat", + "npm:3.0.1" + ], + [ + "invariant", + "npm:2.2.4" + ], + [ + "js-levenshtein", + "npm:1.1.6" + ], + [ + "semver", + "npm:5.7.0" + ] + ] + } + ] + ] + ], + [ + "@babel/preset-react", + [ + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/@babel-preset-react-npm-7.0.0-64c0cb5df451c2cd8e36a54568888d6fd60883c4770fd2b8d3d705917548e3fb.zip/node_modules/@babel/preset-react/", + "packageDependencies": [ + [ + "@babel/preset-react", + "npm:7.0.0" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-transform-react-display-name", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-react-jsx", + "npm:7.3.0" + ], + [ + "@babel/plugin-transform-react-jsx-self", + "npm:7.2.0" + ], + [ + "@babel/plugin-transform-react-jsx-source", + "npm:7.2.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.0.0", + { + "packageLocation": "./.yarn/virtual/@babel-preset-react-virtual-b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a52/node_modules/@babel/preset-react/", + "packageDependencies": [ + [ + "@babel/preset-react", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.0.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/helper-plugin-utils", + "npm:7.0.0" + ], + [ + "@babel/plugin-transform-react-display-name", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0" + ], + [ + "@babel/plugin-transform-react-jsx", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.3.0" + ], + [ + "@babel/plugin-transform-react-jsx-self", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0" + ], + [ + "@babel/plugin-transform-react-jsx-source", + "virtual:b85641682ad8a7959e5338da967abe9de1bbabe71342b115c582c9674d543a5219b50e4511457cfa9e54491c951d371ab19dd77f22cba65e8b94d8c7b2692c05#npm:7.2.0" + ] + ] + } + ] + ] + ], + [ + "@babel/runtime", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.4.4-9ffeb059fc3ee93b91d55bd5b19b679f8863d43ea7accb07adafba286600f4a4.zip/node_modules/@babel/runtime/", + "packageDependencies": [ + [ + "@babel/runtime", + "npm:7.4.4" + ], + [ + "regenerator-runtime", + "npm:0.13.2" + ] + ] + } + ] + ] + ], + [ + "@babel/template", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-template-npm-7.4.4-e0d4d19672bffaee71431a425236d54924f140f54271b868566e7c46284b133d.zip/node_modules/@babel/template/", + "packageDependencies": [ + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@babel/traverse", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-traverse-npm-7.4.4-a14a2db8c4a06a868e51caaf04bee8e129c363c12cfa3b0fd07f6822112f7dea.zip/node_modules/@babel/traverse/", + "packageDependencies": [ + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "@babel/generator", + "npm:7.4.4" + ], + [ + "@babel/helper-function-name", + "npm:7.1.0" + ], + [ + "@babel/helper-split-export-declaration", + "npm:7.4.4" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "debug", + "npm:4.1.1" + ], + [ + "globals", + "npm:11.11.0" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ] + ] + ], + [ + "@babel/types", + [ + [ + "npm:7.4.4", + { + "packageLocation": "./.yarn/cache/@babel-types-npm-7.4.4-03ba5cac16e7b25c51a13d7f35286478fdd209719e54eccff5c981a541819cbc.zip/node_modules/@babel/types/", + "packageDependencies": [ + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "esutils", + "npm:2.0.2" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "to-fast-properties", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "@cnakazawa/watch", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/@cnakazawa-watch-npm-1.0.3-c62495773c1c610ba76fa3a6cebca048dc103f369527f41eec7a4fc1b17f059e.zip/node_modules/@cnakazawa/watch/", + "packageDependencies": [ + [ + "@cnakazawa/watch", + "npm:1.0.3" + ], + [ + "exec-sh", + "npm:0.3.2" + ], + [ + "minimist", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "@jest/console", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-console-npm-24.7.1-6c92990402378ac11cbf55f3d3b468ae774d86b1b76c953065c39a30f191e3ad.zip/node_modules/@jest/console/", + "packageDependencies": [ + [ + "@jest/console", + "npm:24.7.1" + ], + [ + "@jest/source-map", + "npm:24.3.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "slash", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "@jest/core", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-core-npm-24.7.1-9f8820239b8bc5ab5234965fd15dcfe812bf5fd26350a236a916903e38509483.zip/node_modules/@jest/core/", + "packageDependencies": [ + [ + "@jest/core", + "npm:24.7.1" + ], + [ + "@jest/console", + "npm:24.7.1" + ], + [ + "@jest/reporters", + "npm:24.7.1" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/transform", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "ansi-escapes", + "npm:3.2.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "exit", + "npm:0.1.2" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "jest-changed-files", + "npm:24.7.0" + ], + [ + "jest-config", + "npm:24.7.1" + ], + [ + "jest-haste-map", + "npm:24.7.1" + ], + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "jest-regex-util", + "npm:24.3.0" + ], + [ + "jest-resolve-dependencies", + "npm:24.7.1" + ], + [ + "jest-runner", + "npm:24.7.1" + ], + [ + "jest-runtime", + "npm:24.7.1" + ], + [ + "jest-snapshot", + "npm:24.7.1" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jest-validate", + "npm:24.7.0" + ], + [ + "jest-watcher", + "npm:24.7.1" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "p-each-series", + "npm:1.0.0" + ], + [ + "pirates", + "npm:4.0.1" + ], + [ + "realpath-native", + "npm:1.1.0" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "strip-ansi", + "npm:5.2.0" + ] + ] + } + ] + ] + ], + [ + "@jest/environment", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-environment-npm-24.7.1-3aea1d722fe058319dea86abe2cff4b86e1c626514f324ae8c2b939b313183a3.zip/node_modules/@jest/environment/", + "packageDependencies": [ + [ + "@jest/environment", + "npm:24.7.1" + ], + [ + "@jest/fake-timers", + "npm:24.7.1" + ], + [ + "@jest/transform", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "jest-mock", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "@jest/fake-timers", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-fake-timers-npm-24.7.1-31492f69096ec500a5fa4cd3745141b5fe7f91fe912aa09097d8dbdbf32bc3d9.zip/node_modules/@jest/fake-timers/", + "packageDependencies": [ + [ + "@jest/fake-timers", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "jest-mock", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "@jest/reporters", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-reporters-npm-24.7.1-e1506ab73317c4e546ba02f845f23534f72434dae2fabcb578b5805328098509.zip/node_modules/@jest/reporters/", + "packageDependencies": [ + [ + "@jest/reporters", + "npm:24.7.1" + ], + [ + "@jest/environment", + "npm:24.7.1" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/transform", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "exit", + "npm:0.1.2" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "istanbul-api", + "npm:2.1.6" + ], + [ + "istanbul-lib-coverage", + "npm:2.0.5" + ], + [ + "istanbul-lib-instrument", + "npm:3.3.0" + ], + [ + "istanbul-lib-source-maps", + "npm:3.0.6" + ], + [ + "jest-haste-map", + "npm:24.7.1" + ], + [ + "jest-resolve", + "npm:24.7.1" + ], + [ + "jest-runtime", + "npm:24.7.1" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jest-worker", + "npm:24.6.0" + ], + [ + "node-notifier", + "npm:5.4.0" + ], + [ + "slash", + "npm:2.0.0" + ], + [ + "source-map", + "npm:0.6.1" + ], + [ + "string-length", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "@jest/source-map", + [ + [ + "npm:24.3.0", + { + "packageLocation": "./.yarn/cache/@jest-source-map-npm-24.3.0-ca6f1e63dbf28d65985f174f9b4b4332f3f2cc13935d6defdc31bf9286d062e0.zip/node_modules/@jest/source-map/", + "packageDependencies": [ + [ + "@jest/source-map", + "npm:24.3.0" + ], + [ + "callsites", + "npm:3.1.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "@jest/test-result", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-test-result-npm-24.7.1-e7083dc38f9f7f37b4efaad9f55e7a9d0f4bc7ba04554d87e110396e6999d1be.zip/node_modules/@jest/test-result/", + "packageDependencies": [ + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/console", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "@types/istanbul-lib-coverage", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "@jest/test-sequencer", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-test-sequencer-npm-24.7.1-793bb18252149dabb7fae44454da193e1e708940ec8cb3a27f175e2800a971f0.zip/node_modules/@jest/test-sequencer/", + "packageDependencies": [ + [ + "@jest/test-sequencer", + "npm:24.7.1" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "jest-haste-map", + "npm:24.7.1" + ], + [ + "jest-runner", + "npm:24.7.1" + ], + [ + "jest-runtime", + "npm:24.7.1" + ] + ] + } + ] + ] + ], + [ + "@jest/transform", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/@jest-transform-npm-24.7.1-876a2b84529af45fae3c3139fce4dbfe81d1d7d8f1a2a8a98f60f4e1f1785ab4.zip/node_modules/@jest/transform/", + "packageDependencies": [ + [ + "@jest/transform", + "npm:24.7.1" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "babel-plugin-istanbul", + "npm:5.1.4" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "convert-source-map", + "npm:1.6.0" + ], + [ + "fast-json-stable-stringify", + "npm:2.0.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "jest-haste-map", + "npm:24.7.1" + ], + [ + "jest-regex-util", + "npm:24.3.0" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "realpath-native", + "npm:1.1.0" + ], + [ + "slash", + "npm:2.0.0" + ], + [ + "source-map", + "npm:0.6.1" + ], + [ + "write-file-atomic", + "npm:2.4.1" + ] + ] + } + ] + ] + ], + [ + "@jest/types", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/@jest-types-npm-24.7.0-7a520b188e97f1d512f411eb083a3e596e82e30351bbe5f8ace2ffca0f72d17f.zip/node_modules/@jest/types/", + "packageDependencies": [ + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "@types/istanbul-lib-coverage", + "npm:2.0.1" + ], + [ + "@types/yargs", + "npm:12.0.12" + ] + ] + } + ] + ] + ], + [ + "@types/babel__core", + [ + [ + "npm:7.1.1", + { + "packageLocation": "./.yarn/cache/@types-babel__core-npm-7.1.1-98e78e526196d31baf30a4952740f02fbea68fff7b06f7db64d710cb3bd321e7.zip/node_modules/@types/babel__core/", + "packageDependencies": [ + [ + "@types/babel__core", + "npm:7.1.1" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "@types/babel__generator", + "npm:7.0.2" + ], + [ + "@types/babel__template", + "npm:7.0.2" + ], + [ + "@types/babel__traverse", + "npm:7.0.6" + ] + ] + } + ] + ] + ], + [ + "@types/babel__generator", + [ + [ + "npm:7.0.2", + { + "packageLocation": "./.yarn/cache/@types-babel__generator-npm-7.0.2-33b28ce2595d627ada67c7fc6cf24d43690cc4fa3ffdcb16b36d7554be77aeca.zip/node_modules/@types/babel__generator/", + "packageDependencies": [ + [ + "@types/babel__generator", + "npm:7.0.2" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@types/babel__template", + [ + [ + "npm:7.0.2", + { + "packageLocation": "./.yarn/cache/@types-babel__template-npm-7.0.2-da3c2ab8c18ed32fcd895e4a103d7a6351f2c2e621ee84383c00d733a2c4dba1.zip/node_modules/@types/babel__template/", + "packageDependencies": [ + [ + "@types/babel__template", + "npm:7.0.2" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@types/babel__traverse", + [ + [ + "npm:7.0.6", + { + "packageLocation": "./.yarn/cache/@types-babel__traverse-npm-7.0.6-17e4edd0c4ef6c74aaa288c0e4de9d896441e086c2b7d2e26328a315c0691dfe.zip/node_modules/@types/babel__traverse/", + "packageDependencies": [ + [ + "@types/babel__traverse", + "npm:7.0.6" + ], + [ + "@babel/types", + "npm:7.4.4" + ] + ] + } + ] + ] + ], + [ + "@types/estree", + [ + [ + "npm:0.0.39", + { + "packageLocation": "./.yarn/cache/@types-estree-npm-0.0.39-1605ecc1de84849260de27398ff9931939399558278a2de88c090b68f42ce38e.zip/node_modules/@types/estree/", + "packageDependencies": [ + [ + "@types/estree", + "npm:0.0.39" + ] + ] + } + ] + ] + ], + [ + "@types/istanbul-lib-coverage", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.1-dc781b292b0c77485d2aa1d651fddc3d0d35d30ec212b61680d5fbd14233498a.zip/node_modules/@types/istanbul-lib-coverage/", + "packageDependencies": [ + [ + "@types/istanbul-lib-coverage", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "@types/node", + [ + [ + "npm:11.13.8", + { + "packageLocation": "./.yarn/cache/@types-node-npm-11.13.8-9329faae1101b7108cdf0638e23e1a1ede1dd20f04cc807ced47b05b23ca6082.zip/node_modules/@types/node/", + "packageDependencies": [ + [ + "@types/node", + "npm:11.13.8" + ] + ] + } + ] + ] + ], + [ + "@types/stack-utils", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/@types-stack-utils-npm-1.0.1-f39d3a6dac747bd9b20d9f8f4efa25a43c080345e2762ded45aa810d80c31062.zip/node_modules/@types/stack-utils/", + "packageDependencies": [ + [ + "@types/stack-utils", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "@types/yargs", + [ + [ + "npm:12.0.12", + { + "packageLocation": "./.yarn/cache/@types-yargs-npm-12.0.12-2cf6772098b90082f3117c1654f531d219fb4a406ac7cdc20416fa9b04fb5cc5.zip/node_modules/@types/yargs/", + "packageDependencies": [ + [ + "@types/yargs", + "npm:12.0.12" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/ast", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-ast-npm-1.8.5-1a867b9c0cbbb46715673135550e52f1688787b573a57b0f4e696e6fed112eb8.zip/node_modules/@webassemblyjs/ast/", + "packageDependencies": [ + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-module-context", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-wasm-bytecode", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wast-parser", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/floating-point-hex-parser", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.8.5-e5252cbf442ac741011f74cd84cb0462f6187fcf42912d72f159f080636d6b83.zip/node_modules/@webassemblyjs/floating-point-hex-parser/", + "packageDependencies": [ + [ + "@webassemblyjs/floating-point-hex-parser", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/helper-api-error", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-helper-api-error-npm-1.8.5-ecfe36ea411ff17339f4d1018589a3be2f850f19569d3bb0231319bb0078bf91.zip/node_modules/@webassemblyjs/helper-api-error/", + "packageDependencies": [ + [ + "@webassemblyjs/helper-api-error", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/helper-buffer", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-helper-buffer-npm-1.8.5-45f02c00186b7e1b823d07e99474fd2b72ce48ff4f12f346afd4d2c06adb04ff.zip/node_modules/@webassemblyjs/helper-buffer/", + "packageDependencies": [ + [ + "@webassemblyjs/helper-buffer", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/helper-code-frame", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-helper-code-frame-npm-1.8.5-6601338b16b82dfb576d8c7dbcae53bdf34a64ddf7ea6e77a16ea6b9f0c607f5.zip/node_modules/@webassemblyjs/helper-code-frame/", + "packageDependencies": [ + [ + "@webassemblyjs/helper-code-frame", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wast-printer", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/helper-fsm", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-helper-fsm-npm-1.8.5-32a44310eb23c7bc43d05189f938050adccec02270b0c08bd479a13759f5104d.zip/node_modules/@webassemblyjs/helper-fsm/", + "packageDependencies": [ + [ + "@webassemblyjs/helper-fsm", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/helper-module-context", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-helper-module-context-npm-1.8.5-02b39d074b28831561784556a4ad14f17265147bd396287f06066726729e6c65.zip/node_modules/@webassemblyjs/helper-module-context/", + "packageDependencies": [ + [ + "@webassemblyjs/helper-module-context", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "mamacro", + "npm:0.0.3" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/helper-wasm-bytecode", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.8.5-0d1378b4e6746d7d91c5acfd55b9724e3dcb5a837bed2ffae3a39314fbbefcc0.zip/node_modules/@webassemblyjs/helper-wasm-bytecode/", + "packageDependencies": [ + [ + "@webassemblyjs/helper-wasm-bytecode", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/helper-wasm-section", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.8.5-86053e037fcd3fa48d7d3575aa094eff1d2ed9304b99f950bfca17b756f5163d.zip/node_modules/@webassemblyjs/helper-wasm-section/", + "packageDependencies": [ + [ + "@webassemblyjs/helper-wasm-section", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-buffer", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-wasm-bytecode", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-gen", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/ieee754", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-ieee754-npm-1.8.5-7c1e2c73b282871e5fec195fbb07e3be617f8d1cbc891021068e497199916283.zip/node_modules/@webassemblyjs/ieee754/", + "packageDependencies": [ + [ + "@webassemblyjs/ieee754", + "npm:1.8.5" + ], + [ + "@xtuc/ieee754", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/leb128", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-leb128-npm-1.8.5-cdcc195b4670a4449960657845ad79bf6f887c1a333fda7f1da7f9dbaef4cab6.zip/node_modules/@webassemblyjs/leb128/", + "packageDependencies": [ + [ + "@webassemblyjs/leb128", + "npm:1.8.5" + ], + [ + "@xtuc/long", + "npm:4.2.2" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/utf8", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-utf8-npm-1.8.5-a1f09dc99389ee30695c27c4d609f84d61db07385d81c9e47d810c6d0fd0b50a.zip/node_modules/@webassemblyjs/utf8/", + "packageDependencies": [ + [ + "@webassemblyjs/utf8", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/wasm-edit", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-edit-npm-1.8.5-fa0b571ef484bfbdeb3b22b2de64084307ba7b2682da668bc84692c7d5b12a28.zip/node_modules/@webassemblyjs/wasm-edit/", + "packageDependencies": [ + [ + "@webassemblyjs/wasm-edit", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-buffer", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-wasm-bytecode", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-wasm-section", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-gen", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-opt", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-parser", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wast-printer", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/wasm-gen", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-gen-npm-1.8.5-c1a5edb287bcb771ab7d40cd2d851c9a9b07af400a4b986297ade1122ca0c6ea.zip/node_modules/@webassemblyjs/wasm-gen/", + "packageDependencies": [ + [ + "@webassemblyjs/wasm-gen", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-wasm-bytecode", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ieee754", + "npm:1.8.5" + ], + [ + "@webassemblyjs/leb128", + "npm:1.8.5" + ], + [ + "@webassemblyjs/utf8", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/wasm-opt", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-opt-npm-1.8.5-5c9876f04b27485d6fdb87cc7890fdd32bd2f26ee94422acd8b1553683ef565e.zip/node_modules/@webassemblyjs/wasm-opt/", + "packageDependencies": [ + [ + "@webassemblyjs/wasm-opt", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-buffer", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-gen", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-parser", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/wasm-parser", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-wasm-parser-npm-1.8.5-40755bb57190c97a6d80e3409e44202eab2e8a7d19474dc172a65282693e3783.zip/node_modules/@webassemblyjs/wasm-parser/", + "packageDependencies": [ + [ + "@webassemblyjs/wasm-parser", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-api-error", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-wasm-bytecode", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ieee754", + "npm:1.8.5" + ], + [ + "@webassemblyjs/leb128", + "npm:1.8.5" + ], + [ + "@webassemblyjs/utf8", + "npm:1.8.5" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/wast-parser", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-wast-parser-npm-1.8.5-05d8982993833addd23be7b67dbf1e76dc5d4051ef1462cdd7764ea95a233cd5.zip/node_modules/@webassemblyjs/wast-parser/", + "packageDependencies": [ + [ + "@webassemblyjs/wast-parser", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/floating-point-hex-parser", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-api-error", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-code-frame", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-fsm", + "npm:1.8.5" + ], + [ + "@xtuc/long", + "npm:4.2.2" + ] + ] + } + ] + ] + ], + [ + "@webassemblyjs/wast-printer", + [ + [ + "npm:1.8.5", + { + "packageLocation": "./.yarn/cache/@webassemblyjs-wast-printer-npm-1.8.5-c571c8b9fc3338dc44482cc4226d563c21eee36f27f3c408a6851d35b74f235c.zip/node_modules/@webassemblyjs/wast-printer/", + "packageDependencies": [ + [ + "@webassemblyjs/wast-printer", + "npm:1.8.5" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wast-parser", + "npm:1.8.5" + ], + [ + "@xtuc/long", + "npm:4.2.2" + ] + ] + } + ] + ] + ], + [ + "@xtuc/ieee754", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/@xtuc-ieee754-npm-1.2.0-d1f4e3a670f8fd99770f42ed02c47eff18c1a1a9c0709dd83d39d4e48487c677.zip/node_modules/@xtuc/ieee754/", + "packageDependencies": [ + [ + "@xtuc/ieee754", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "@xtuc/long", + [ + [ + "npm:4.2.2", + { + "packageLocation": "./.yarn/cache/@xtuc-long-npm-4.2.2-8733f3026ef3398d8f127ad8e942fe86405b99975f4a1412a14efd0a54add16a.zip/node_modules/@xtuc/long/", + "packageDependencies": [ + [ + "@xtuc/long", + "npm:4.2.2" + ] + ] + } + ] + ] + ], + [ + "abab", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/abab-npm-2.0.0-fd5a4016bddc79ac9fd94a8acd0c6167e4febb3a50997eafacdda57323613cc2.zip/node_modules/abab/", + "packageDependencies": [ + [ + "abab", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "abbrev", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/abbrev-npm-1.1.1-ca27310a9de6306b25d04f213fa1e5c17cfcb12da5ac7cfb025223d300e434fd.zip/node_modules/abbrev/", + "packageDependencies": [ + [ + "abbrev", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "accepts", + [ + [ + "npm:1.3.5", + { + "packageLocation": "./.yarn/cache/accepts-npm-1.3.5-67596f819cd80d21d1f9a9b07dca86d8bdd4bdef5a60caa1d486a21ecf33e442.zip/node_modules/accepts/", + "packageDependencies": [ + [ + "accepts", + "npm:1.3.5" + ], + [ + "mime-types", + "npm:2.1.24" + ], + [ + "negotiator", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "acorn", + [ + [ + "npm:5.7.3", + { + "packageLocation": "./.yarn/cache/acorn-npm-5.7.3-6c92d51f189cd5fc26fa3b6da68b71d4756a81699209cff8c77bcf76ca298e89.zip/node_modules/acorn/", + "packageDependencies": [ + [ + "acorn", + "npm:5.7.3" + ] + ] + } + ], + [ + "npm:6.1.1", + { + "packageLocation": "./.yarn/cache/acorn-npm-6.1.1-05caf63b02eb4db8e1c70496184443dfcef1ea11f342bf104b1296d8b7dd184a.zip/node_modules/acorn/", + "packageDependencies": [ + [ + "acorn", + "npm:6.1.1" + ] + ] + } + ] + ] + ], + [ + "acorn-dynamic-import", + [ + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/acorn-dynamic-import-npm-4.0.0-cc7a315c0c0f7981594c381afca8e103261293d1e0c02cfc2e18cbe9466205a0.zip/node_modules/acorn-dynamic-import/", + "packageDependencies": [ + [ + "acorn-dynamic-import", + "npm:4.0.0" + ] + ] + } + ], + [ + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:4.0.0", + { + "packageLocation": "./.yarn/virtual/acorn-dynamic-import-virtual-c14e78290f6bfaa662a513aa0811db17e26549cba63041b108bc9b7f84d42ba1/node_modules/acorn-dynamic-import/", + "packageDependencies": [ + [ + "acorn-dynamic-import", + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:4.0.0" + ], + [ + "acorn", + "npm:6.1.1" + ] + ] + } + ] + ] + ], + [ + "acorn-globals", + [ + [ + "npm:4.3.2", + { + "packageLocation": "./.yarn/cache/acorn-globals-npm-4.3.2-2a04581d10a092e018a604a259cca617a86750e35ce2744be494db93beb5c05e.zip/node_modules/acorn-globals/", + "packageDependencies": [ + [ + "acorn-globals", + "npm:4.3.2" + ], + [ + "acorn", + "npm:6.1.1" + ], + [ + "acorn-walk", + "npm:6.1.1" + ] + ] + } + ] + ] + ], + [ + "acorn-jsx", + [ + [ + "npm:5.0.1", + { + "packageLocation": "./.yarn/cache/acorn-jsx-npm-5.0.1-e00dde29d42c53ac34dca2e0ab289b1f6d4e639628962bbe63befc5ae5ef1a9a.zip/node_modules/acorn-jsx/", + "packageDependencies": [ + [ + "acorn-jsx", + "npm:5.0.1" + ] + ] + } + ], + [ + "virtual:c97804973d9e1b4e1f7887a8b552cc6be02aea681eb8c5030f793c4b86a4966b48fd22afdb72ced3081865febb4fb81065d0ccc368817082cb785a8f65214e1b#npm:5.0.1", + { + "packageLocation": "./.yarn/virtual/acorn-jsx-virtual-23ad2dab6bf7d1936eb748a402116831ef95cce6e919fdb199b44a3941b2142a/node_modules/acorn-jsx/", + "packageDependencies": [ + [ + "acorn-jsx", + "virtual:c97804973d9e1b4e1f7887a8b552cc6be02aea681eb8c5030f793c4b86a4966b48fd22afdb72ced3081865febb4fb81065d0ccc368817082cb785a8f65214e1b#npm:5.0.1" + ], + [ + "acorn", + "npm:6.1.1" + ] + ] + } + ] + ] + ], + [ + "acorn-walk", + [ + [ + "npm:6.1.1", + { + "packageLocation": "./.yarn/cache/acorn-walk-npm-6.1.1-a6fc4430b72ab0fe470ef87c44dbdb5814288f1034480fd8be81f4a7b5b65b66.zip/node_modules/acorn-walk/", + "packageDependencies": [ + [ + "acorn-walk", + "npm:6.1.1" + ] + ] + } + ] + ] + ], + [ + "ajv", + [ + [ + "npm:6.10.0", + { + "packageLocation": "./.yarn/cache/ajv-npm-6.10.0-f1b7a2e2497a199ec30151d304a36728508895cbad5b334bd5bc692df7d22dae.zip/node_modules/ajv/", + "packageDependencies": [ + [ + "ajv", + "npm:6.10.0" + ], + [ + "fast-deep-equal", + "npm:2.0.1" + ], + [ + "fast-json-stable-stringify", + "npm:2.0.0" + ], + [ + "json-schema-traverse", + "npm:0.4.1" + ], + [ + "uri-js", + "npm:4.2.2" + ] + ] + } + ] + ] + ], + [ + "ajv-errors", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/ajv-errors-npm-1.0.1-dca22a24b3f71f40136d7cae54b8c7b72469639fd023f51cdb805498235c62a6.zip/node_modules/ajv-errors/", + "packageDependencies": [ + [ + "ajv-errors", + "npm:1.0.1" + ] + ] + } + ], + [ + "virtual:72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4011decc198459eee047b3469b5403420e7b7dbf3ba8a6b7e574c03385cb39e0c#npm:1.0.1", + { + "packageLocation": "./.yarn/virtual/ajv-errors-virtual-d90e71bde37f13133a55e113a760ef7af57f329778b6e93fe3b498afc967097e/node_modules/ajv-errors/", + "packageDependencies": [ + [ + "ajv-errors", + "virtual:72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4011decc198459eee047b3469b5403420e7b7dbf3ba8a6b7e574c03385cb39e0c#npm:1.0.1" + ], + [ + "ajv", + "npm:6.10.0" + ] + ] + } + ] + ] + ], + [ + "ajv-keywords", + [ + [ + "npm:3.4.0", + { + "packageLocation": "./.yarn/cache/ajv-keywords-npm-3.4.0-97e9c69cbd37f4ee518bdda2e0dcb37042d8755c36c17a2bbde41805f9094291.zip/node_modules/ajv-keywords/", + "packageDependencies": [ + [ + "ajv-keywords", + "npm:3.4.0" + ] + ] + } + ], + [ + "virtual:72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4011decc198459eee047b3469b5403420e7b7dbf3ba8a6b7e574c03385cb39e0c#npm:3.4.0", + { + "packageLocation": "./.yarn/virtual/ajv-keywords-virtual-62b22b8a08cf898db72ec39bf687b5ea2cbe62194c44ffae4e7c87775ee1e0a4/node_modules/ajv-keywords/", + "packageDependencies": [ + [ + "ajv-keywords", + "virtual:72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4011decc198459eee047b3469b5403420e7b7dbf3ba8a6b7e574c03385cb39e0c#npm:3.4.0" + ], + [ + "ajv", + "npm:6.10.0" + ] + ] + } + ], + [ + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:3.4.0", + { + "packageLocation": "./.yarn/virtual/ajv-keywords-virtual-f0fc557519c4aa92c4a7cd32e0424dff455c9a02d416665c5afab6d209432bf3/node_modules/ajv-keywords/", + "packageDependencies": [ + [ + "ajv-keywords", + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:3.4.0" + ], + [ + "ajv", + "npm:6.10.0" + ] + ] + } + ] + ] + ], + [ + "ansi-colors", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/ansi-colors-npm-1.1.0-1bfae530722af6c6b72295e46ed45ec63187023d0623ce74a8dfc8c4a3b172b3.zip/node_modules/ansi-colors/", + "packageDependencies": [ + [ + "ansi-colors", + "npm:1.1.0" + ], + [ + "ansi-wrap", + "npm:0.1.0" + ] + ] + } + ] + ] + ], + [ + "ansi-escapes", + [ + [ + "npm:3.2.0", + { + "packageLocation": "./.yarn/cache/ansi-escapes-npm-3.2.0-7d31c81fb1cdd84a3213e0efb46d4bce5cde715f083eca9b7c60b889750c6175.zip/node_modules/ansi-escapes/", + "packageDependencies": [ + [ + "ansi-escapes", + "npm:3.2.0" + ] + ] + } + ] + ] + ], + [ + "ansi-gray", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/ansi-gray-npm-0.1.1-77946bcd83ed81d40d1bb1a969d4079ea1283c889ec7a79b9d887e3a706892df.zip/node_modules/ansi-gray/", + "packageDependencies": [ + [ + "ansi-gray", + "npm:0.1.1" + ], + [ + "ansi-wrap", + "npm:0.1.0" + ] + ] + } + ] + ] + ], + [ + "ansi-regex", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/ansi-regex-npm-2.1.1-c990e0620c5cda7df265d920e03a2b8c11d0ba8f80705ac53b4482b3f5b6ef58.zip/node_modules/ansi-regex/", + "packageDependencies": [ + [ + "ansi-regex", + "npm:2.1.1" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/ansi-regex-npm-3.0.0-a1d1e426aba935e927c3d5af333e37a4cb20263a22f5500512d64c7a7989ca3f.zip/node_modules/ansi-regex/", + "packageDependencies": [ + [ + "ansi-regex", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:4.1.0", + { + "packageLocation": "./.yarn/cache/ansi-regex-npm-4.1.0-cbde39a155aafbab33d1bf8d3ecca231867778436da1fd5860d7745eb13b4b78.zip/node_modules/ansi-regex/", + "packageDependencies": [ + [ + "ansi-regex", + "npm:4.1.0" + ] + ] + } + ] + ] + ], + [ + "ansi-styles", + [ + [ + "npm:3.2.1", + { + "packageLocation": "./.yarn/cache/ansi-styles-npm-3.2.1-e6469fe29c329e854da664b739022def2b699137e9b09f323e0a2d3e66b86ecd.zip/node_modules/ansi-styles/", + "packageDependencies": [ + [ + "ansi-styles", + "npm:3.2.1" + ], + [ + "color-convert", + "npm:1.9.3" + ] + ] + } + ] + ] + ], + [ + "ansi-wrap", + [ + [ + "npm:0.1.0", + { + "packageLocation": "./.yarn/cache/ansi-wrap-npm-0.1.0-d49c89f160c31a3624627b2f09f209b0ce3b5b6854fc4e4ccb3419448b255c8d.zip/node_modules/ansi-wrap/", + "packageDependencies": [ + [ + "ansi-wrap", + "npm:0.1.0" + ] + ] + } + ] + ] + ], + [ + "anymatch", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/anymatch-npm-2.0.0-bb5f5d84a33ae0dc0b4c2893a427c11636f73372601b8a46b1823d12b01355a5.zip/node_modules/anymatch/", + "packageDependencies": [ + [ + "anymatch", + "npm:2.0.0" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "normalize-path", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "append-buffer", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/append-buffer-npm-1.0.2-deeb11da02777cbfe0aacd451f526f06b68201437e7d6b037fcbd8022900643d.zip/node_modules/append-buffer/", + "packageDependencies": [ + [ + "append-buffer", + "npm:1.0.2" + ], + [ + "buffer-equal", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "append-transform", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/append-transform-npm-1.0.0-b495019b4297ef03b5616c8064520c3303b53bb5ed1bb15ec24270104a5baf93.zip/node_modules/append-transform/", + "packageDependencies": [ + [ + "append-transform", + "npm:1.0.0" + ], + [ + "default-require-extensions", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "aproba", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/aproba-npm-1.2.0-33d762d55dc3eb6fa3f7ae50a3c7007e9d4bee85f0ac35de62faeabb6db7ebc6.zip/node_modules/aproba/", + "packageDependencies": [ + [ + "aproba", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "archy", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/archy-npm-1.0.0-3fdf576813858753799212cb958eff00c3da1ad39e9a1c937c8d911fa005146e.zip/node_modules/archy/", + "packageDependencies": [ + [ + "archy", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "are-we-there-yet", + [ + [ + "npm:1.1.5", + { + "packageLocation": "./.yarn/cache/are-we-there-yet-npm-1.1.5-2cdbb01c78f9e77aa8b9d240471079d4a2e929c58e334687f5bf0a8131318178.zip/node_modules/are-we-there-yet/", + "packageDependencies": [ + [ + "are-we-there-yet", + "npm:1.1.5" + ], + [ + "delegates", + "npm:1.0.0" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "argparse", + [ + [ + "npm:1.0.10", + { + "packageLocation": "./.yarn/cache/argparse-npm-1.0.10-2388e14969c4320c2c6271922da3ffeda8005b372e48e8dc2067e9994c0c53df.zip/node_modules/argparse/", + "packageDependencies": [ + [ + "argparse", + "npm:1.0.10" + ], + [ + "sprintf-js", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "arr-diff", + [ + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/arr-diff-npm-4.0.0-e9bfd2d10d6939e728ab2a58739984812450262f03c9f74b7ce1b9976305a541.zip/node_modules/arr-diff/", + "packageDependencies": [ + [ + "arr-diff", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "arr-filter", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/arr-filter-npm-1.1.2-46a74d23b26de52ff89106434ed20814b500b4b3366cc6f33414463a1c3433cb.zip/node_modules/arr-filter/", + "packageDependencies": [ + [ + "arr-filter", + "npm:1.1.2" + ], + [ + "make-iterator", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "arr-flatten", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/arr-flatten-npm-1.1.0-66bd38160676e0132cbfd0b8cfae5a69509895d92201d1b1e88d54c5d297e636.zip/node_modules/arr-flatten/", + "packageDependencies": [ + [ + "arr-flatten", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "arr-map", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/arr-map-npm-2.0.2-9a51d93d0f893c28bfb4030c385c828aa377a80ae7993b8ab8429829bafd81b0.zip/node_modules/arr-map/", + "packageDependencies": [ + [ + "arr-map", + "npm:2.0.2" + ], + [ + "make-iterator", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "arr-union", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/arr-union-npm-3.1.0-2ec4a99eb304bcd76244978a09a036e0144b0fe162a9cf6d0dd98d8a4337b1b9.zip/node_modules/arr-union/", + "packageDependencies": [ + [ + "arr-union", + "npm:3.1.0" + ] + ] + } + ] + ] + ], + [ + "array-each", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/array-each-npm-1.0.1-15e294e0bacae7b5cee80f2088eeb5d78135071a96666d4cd3be03c1544e2815.zip/node_modules/array-each/", + "packageDependencies": [ + [ + "array-each", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "array-equal", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/array-equal-npm-1.0.0-57339f54e2c2b9330134ea221023cd923a10e05999425298d783c132d124bc31.zip/node_modules/array-equal/", + "packageDependencies": [ + [ + "array-equal", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "array-flatten", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/array-flatten-npm-1.1.1-cc664cd4620e9231540f36c23412be034b8c0d33043ac5bc396425f42f269d6a.zip/node_modules/array-flatten/", + "packageDependencies": [ + [ + "array-flatten", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "array-includes", + [ + [ + "npm:3.0.3", + { + "packageLocation": "./.yarn/cache/array-includes-npm-3.0.3-95fcaa6f8be7e41904d04bda1adc2ccbbe408a2ae6a19dba83467d82ffaa0979.zip/node_modules/array-includes/", + "packageDependencies": [ + [ + "array-includes", + "npm:3.0.3" + ], + [ + "define-properties", + "npm:1.1.3" + ], + [ + "es-abstract", + "npm:1.13.0" + ] + ] + } + ] + ] + ], + [ + "array-initial", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/array-initial-npm-1.1.0-6d1ee732824eac05b3fc0574b78b990c3eb619f9a5b84b5687723118129cc204.zip/node_modules/array-initial/", + "packageDependencies": [ + [ + "array-initial", + "npm:1.1.0" + ], + [ + "array-slice", + "npm:1.1.0" + ], + [ + "is-number", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "array-last", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/array-last-npm-1.3.0-0525268f0b739b6c1f6ab8203f3e8ce82942c6456fe9b0bd2b6995cb88218b6b.zip/node_modules/array-last/", + "packageDependencies": [ + [ + "array-last", + "npm:1.3.0" + ], + [ + "is-number", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "array-slice", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/array-slice-npm-1.1.0-dc37b8eb162ee7d694b35ccf99440c6d95959475cc98fb7ca5f9e3e1c04f832d.zip/node_modules/array-slice/", + "packageDependencies": [ + [ + "array-slice", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "array-sort", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/array-sort-npm-1.0.0-5455d8afbcfcdee7c5806c3bc3c362152b45946e8052e22887639933aafded7b.zip/node_modules/array-sort/", + "packageDependencies": [ + [ + "array-sort", + "npm:1.0.0" + ], + [ + "default-compare", + "npm:1.0.0" + ], + [ + "get-value", + "npm:2.0.6" + ], + [ + "kind-of", + "npm:5.1.0" + ] + ] + } + ] + ] + ], + [ + "array-unique", + [ + [ + "npm:0.3.2", + { + "packageLocation": "./.yarn/cache/array-unique-npm-0.3.2-3e92b7786ddda9d607bd5fe9c3550867707fb45077fa72958fc1ec3b0cf47196.zip/node_modules/array-unique/", + "packageDependencies": [ + [ + "array-unique", + "npm:0.3.2" + ] + ] + } + ] + ] + ], + [ + "asn1", + [ + [ + "npm:0.2.4", + { + "packageLocation": "./.yarn/cache/asn1-npm-0.2.4-a25799b6734e342a2d3bd58416085102a699ed6381ac566e3272c8049b631786.zip/node_modules/asn1/", + "packageDependencies": [ + [ + "asn1", + "npm:0.2.4" + ], + [ + "safer-buffer", + "npm:2.1.2" + ] + ] + } + ] + ] + ], + [ + "asn1.js", + [ + [ + "npm:4.10.1", + { + "packageLocation": "./.yarn/cache/asn1.js-npm-4.10.1-7ce860effd4e36b17ab8dfb6b6374be120af5c665463f2641b5b99653071a301.zip/node_modules/asn1.js/", + "packageDependencies": [ + [ + "asn1.js", + "npm:4.10.1" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "minimalistic-assert", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "assert", + [ + [ + "npm:1.4.1", + { + "packageLocation": "./.yarn/cache/assert-npm-1.4.1-7f85ac853b2ad111424011d2c7a446c95b8871a7aa3ec4d0dede58553cf81255.zip/node_modules/assert/", + "packageDependencies": [ + [ + "assert", + "npm:1.4.1" + ], + [ + "util", + "npm:0.10.3" + ] + ] + } + ] + ] + ], + [ + "assert-plus", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/assert-plus-npm-1.0.0-5293310507cb19f698517283d3778d9a51f7a2400a8a3bbfae3790ab7ff1cb11.zip/node_modules/assert-plus/", + "packageDependencies": [ + [ + "assert-plus", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "assign-symbols", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/assign-symbols-npm-1.0.0-c8c2b9f61bfe7a322ed92d696dde1705a6684153755ac6607fc8662b65176f78.zip/node_modules/assign-symbols/", + "packageDependencies": [ + [ + "assign-symbols", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "astral-regex", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/astral-regex-npm-1.0.0-42bbb9032e9b6f38b4e59e799013737279364d6ca0a10b9f2ed46855d96acacf.zip/node_modules/astral-regex/", + "packageDependencies": [ + [ + "astral-regex", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "async", + [ + [ + "npm:1.5.2", + { + "packageLocation": "./.yarn/cache/async-npm-1.5.2-7efc74da6387f171f4a6aeb3b2c9694273838af2b66ace233febef873ee7c56f.zip/node_modules/async/", + "packageDependencies": [ + [ + "async", + "npm:1.5.2" + ] + ] + } + ], + [ + "npm:2.6.2", + { + "packageLocation": "./.yarn/cache/async-npm-2.6.2-b42e08c5485768cfef0921eaf632e1987958b75976c92eca90f1e311359c8e98.zip/node_modules/async/", + "packageDependencies": [ + [ + "async", + "npm:2.6.2" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ] + ] + ], + [ + "async-done", + [ + [ + "npm:1.3.1", + { + "packageLocation": "./.yarn/cache/async-done-npm-1.3.1-c713c28f7ba3df7a4def551a6f8539a8f98f5c40e9c21c61715361e9afb8f88c.zip/node_modules/async-done/", + "packageDependencies": [ + [ + "async-done", + "npm:1.3.1" + ], + [ + "end-of-stream", + "npm:1.4.1" + ], + [ + "once", + "npm:1.4.0" + ], + [ + "process-nextick-args", + "npm:1.0.7" + ], + [ + "stream-exhaust", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "async-each", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/async-each-npm-1.0.3-681d6ee119dab51e8314ad0ae9c00a63d0b99da35269238eebd6132aec99bd65.zip/node_modules/async-each/", + "packageDependencies": [ + [ + "async-each", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "async-limiter", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/async-limiter-npm-1.0.0-c486d1ac32d5915b065964e1e89126278111336b183ef2602af0532483091720.zip/node_modules/async-limiter/", + "packageDependencies": [ + [ + "async-limiter", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "async-settle", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/async-settle-npm-1.0.0-123c56eda0ec2d70658c5851bb81bfaf765b30f0aebc5d2ad90e431f1eb5fde0.zip/node_modules/async-settle/", + "packageDependencies": [ + [ + "async-settle", + "npm:1.0.0" + ], + [ + "async-done", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "asynckit", + [ + [ + "npm:0.4.0", + { + "packageLocation": "./.yarn/cache/asynckit-npm-0.4.0-250271e780c8ff6482cffabdb622a0bd348bc96e6ebe8621f6b6778e053cce2c.zip/node_modules/asynckit/", + "packageDependencies": [ + [ + "asynckit", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "atob", + [ + [ + "npm:2.1.2", + { + "packageLocation": "./.yarn/cache/atob-npm-2.1.2-1abf0c2f5469555f0fb8084d71dcc2c6aeafe449f1d93b26802b42abc13b2b54.zip/node_modules/atob/", + "packageDependencies": [ + [ + "atob", + "npm:2.1.2" + ] + ] + } + ] + ] + ], + [ + "aws-sign2", + [ + [ + "npm:0.7.0", + { + "packageLocation": "./.yarn/cache/aws-sign2-npm-0.7.0-77be7096caf4b7492c27f095d190e33f1ae8939cb18d13d1893ceef72f1c875b.zip/node_modules/aws-sign2/", + "packageDependencies": [ + [ + "aws-sign2", + "npm:0.7.0" + ] + ] + } + ] + ] + ], + [ + "aws4", + [ + [ + "npm:1.8.0", + { + "packageLocation": "./.yarn/cache/aws4-npm-1.8.0-ba0ff691b1113be3f57c38266b4c5185d7e8fe16443d5c9e58e9e31cbd68d459.zip/node_modules/aws4/", + "packageDependencies": [ + [ + "aws4", + "npm:1.8.0" + ] + ] + } + ] + ] + ], + [ + "babel-eslint", + [ + [ + "npm:10.0.1", + { + "packageLocation": "./.yarn/cache/babel-eslint-npm-10.0.1-aca7dde7a6f95a97e24d6847445e751cf538d7078887aea8e29929d8ed281363.zip/node_modules/babel-eslint/", + "packageDependencies": [ + [ + "babel-eslint", + "npm:10.0.1" + ], + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "eslint-scope", + "npm:3.7.1" + ], + [ + "eslint-visitor-keys", + "npm:1.0.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:10.0.1", + { + "packageLocation": "./.yarn/virtual/babel-eslint-virtual-3cd523b54462fb58a226cfe3ef8dbe83ca549df0a5fab4920d55baa7618d12ea/node_modules/babel-eslint/", + "packageDependencies": [ + [ + "babel-eslint", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:10.0.1" + ], + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "eslint", + "npm:5.16.0" + ], + [ + "eslint-scope", + "npm:3.7.1" + ], + [ + "eslint-visitor-keys", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "babel-jest", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/babel-jest-npm-24.7.1-51193de911598828ac1200bf00e19b4d2f2dd65da9626ad9257a7fb353825253.zip/node_modules/babel-jest/", + "packageDependencies": [ + [ + "babel-jest", + "npm:24.7.1" + ], + [ + "@jest/transform", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "@types/babel__core", + "npm:7.1.1" + ], + [ + "babel-plugin-istanbul", + "npm:5.1.4" + ], + [ + "babel-preset-jest", + "npm:24.6.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "slash", + "npm:2.0.0" + ] + ] + } + ], + [ + "virtual:c41e679cae48f22307d52b15e74274d762458eac3ce6c5be6bbe613938e8b5c9cd39246e582e10d7c34807ddec7d4f9e85fdf93bf0b33b4855ff6941cb6da853#npm:24.7.1", + { + "packageLocation": "./.yarn/virtual/babel-jest-virtual-22f522e79d2042ceae771914174e91206ab47a1ed9b53637cb447fd043ef4f41/node_modules/babel-jest/", + "packageDependencies": [ + [ + "babel-jest", + "virtual:c41e679cae48f22307d52b15e74274d762458eac3ce6c5be6bbe613938e8b5c9cd39246e582e10d7c34807ddec7d4f9e85fdf93bf0b33b4855ff6941cb6da853#npm:24.7.1" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@jest/transform", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "@types/babel__core", + "npm:7.1.1" + ], + [ + "babel-plugin-istanbul", + "npm:5.1.4" + ], + [ + "babel-preset-jest", + "virtual:22f522e79d2042ceae771914174e91206ab47a1ed9b53637cb447fd043ef4f41c954f3500a653ce9b5834b9101d4eb1eb9f470babc918953afcdb85bc8108041#npm:24.6.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "slash", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "babel-loader", + [ + [ + "npm:8.0.5", + { + "packageLocation": "./.yarn/cache/babel-loader-npm-8.0.5-dbfdf28d355c6fde7f2600b4b50739dbb422e5c037abb868c1f800a001570102.zip/node_modules/babel-loader/", + "packageDependencies": [ + [ + "babel-loader", + "npm:8.0.5" + ], + [ + "find-cache-dir", + "npm:2.1.0" + ], + [ + "loader-utils", + "npm:1.2.3" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "util.promisify", + "npm:1.0.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:8.0.5", + { + "packageLocation": "./.yarn/virtual/babel-loader-virtual-a50887878c390c22c4a6b7ee528860c086ea9904de166d74c86e62e02523ee8e/node_modules/babel-loader/", + "packageDependencies": [ + [ + "babel-loader", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:8.0.5" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "find-cache-dir", + "npm:2.1.0" + ], + [ + "loader-utils", + "npm:1.2.3" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "util.promisify", + "npm:1.0.0" + ], + [ + "webpack", + "npm:4.30.0" + ] + ] + } + ] + ] + ], + [ + "babel-plugin-istanbul", + [ + [ + "npm:5.1.4", + { + "packageLocation": "./.yarn/cache/babel-plugin-istanbul-npm-5.1.4-0777c5c12d69fd72c39f71755913de7bf5dd08da4a9835b4eaeec36461e9afcd.zip/node_modules/babel-plugin-istanbul/", + "packageDependencies": [ + [ + "babel-plugin-istanbul", + "npm:5.1.4" + ], + [ + "find-up", + "npm:3.0.0" + ], + [ + "istanbul-lib-instrument", + "npm:3.3.0" + ], + [ + "test-exclude", + "npm:5.2.3" + ] + ] + } + ] + ] + ], + [ + "babel-plugin-jest-hoist", + [ + [ + "npm:24.6.0", + { + "packageLocation": "./.yarn/cache/babel-plugin-jest-hoist-npm-24.6.0-05c4e312524cd9715f1632ae71097365f373ab23870c6e2c0466d5a4f52d729d.zip/node_modules/babel-plugin-jest-hoist/", + "packageDependencies": [ + [ + "babel-plugin-jest-hoist", + "npm:24.6.0" + ], + [ + "@types/babel__traverse", + "npm:7.0.6" + ] + ] + } + ] + ] + ], + [ + "babel-preset-jest", + [ + [ + "npm:24.6.0", + { + "packageLocation": "./.yarn/cache/babel-preset-jest-npm-24.6.0-005e90c576cdf6ecf98c66400f2761405b283c7f72369fe49fdc657ebabe5722.zip/node_modules/babel-preset-jest/", + "packageDependencies": [ + [ + "babel-preset-jest", + "npm:24.6.0" + ], + [ + "@babel/plugin-syntax-object-rest-spread", + "npm:7.2.0" + ], + [ + "babel-plugin-jest-hoist", + "npm:24.6.0" + ] + ] + } + ], + [ + "virtual:22f522e79d2042ceae771914174e91206ab47a1ed9b53637cb447fd043ef4f41c954f3500a653ce9b5834b9101d4eb1eb9f470babc918953afcdb85bc8108041#npm:24.6.0", + { + "packageLocation": "./.yarn/virtual/babel-preset-jest-virtual-2b9f809cf6ce6808087040965410655d3bc882d2de609b1ee9f641b109f1e91e/node_modules/babel-preset-jest/", + "packageDependencies": [ + [ + "babel-preset-jest", + "virtual:22f522e79d2042ceae771914174e91206ab47a1ed9b53637cb447fd043ef4f41c954f3500a653ce9b5834b9101d4eb1eb9f470babc918953afcdb85bc8108041#npm:24.6.0" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/plugin-syntax-object-rest-spread", + "virtual:2b9f809cf6ce6808087040965410655d3bc882d2de609b1ee9f641b109f1e91e2766bbebb75e2cb45dd156e971697f559112f2dd9f9ecdb29c9ba47348c87bbf#npm:7.2.0" + ], + [ + "babel-plugin-jest-hoist", + "npm:24.6.0" + ] + ] + } + ] + ] + ], + [ + "bach", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/bach-npm-1.2.0-6074eff05d4e6cc25dc3ea22b3e1f0dec37b594b8309b2c3b85c64708c52e3ac.zip/node_modules/bach/", + "packageDependencies": [ + [ + "bach", + "npm:1.2.0" + ], + [ + "arr-filter", + "npm:1.1.2" + ], + [ + "arr-flatten", + "npm:1.1.0" + ], + [ + "arr-map", + "npm:2.0.2" + ], + [ + "array-each", + "npm:1.0.1" + ], + [ + "array-initial", + "npm:1.1.0" + ], + [ + "array-last", + "npm:1.3.0" + ], + [ + "async-done", + "npm:1.3.1" + ], + [ + "async-settle", + "npm:1.0.0" + ], + [ + "now-and-later", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "balanced-match", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/balanced-match-npm-1.0.0-e4b5044c23040fe4746ad55916b1aecc74a016bde1a1e46ce3ae0f6ce31e71f5.zip/node_modules/balanced-match/", + "packageDependencies": [ + [ + "balanced-match", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "base", + [ + [ + "npm:0.11.2", + { + "packageLocation": "./.yarn/cache/base-npm-0.11.2-653b45b5a339387bf33e9f8de639c28a89b18495d112f221e6b8ffbc4d6ce494.zip/node_modules/base/", + "packageDependencies": [ + [ + "base", + "npm:0.11.2" + ], + [ + "cache-base", + "npm:1.0.1" + ], + [ + "class-utils", + "npm:0.3.6" + ], + [ + "component-emitter", + "npm:1.3.0" + ], + [ + "define-property", + "npm:1.0.0" + ], + [ + "isobject", + "npm:3.0.1" + ], + [ + "mixin-deep", + "npm:1.3.1" + ], + [ + "pascalcase", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "base64-js", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/base64-js-npm-1.3.0-d308228f0a236920d6aeb22a5a158a39ed1169a510d88191f95d90e15013869b.zip/node_modules/base64-js/", + "packageDependencies": [ + [ + "base64-js", + "npm:1.3.0" + ] + ] + } + ] + ] + ], + [ + "bcrypt-pbkdf", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/bcrypt-pbkdf-npm-1.0.2-19200f95748856836444efbcb5b620f600d54576f3a119dba77a7eb5c0e49f4b.zip/node_modules/bcrypt-pbkdf/", + "packageDependencies": [ + [ + "bcrypt-pbkdf", + "npm:1.0.2" + ], + [ + "tweetnacl", + "npm:0.14.5" + ] + ] + } + ] + ] + ], + [ + "bfj", + [ + [ + "npm:6.1.1", + { + "packageLocation": "./.yarn/cache/bfj-npm-6.1.1-9a5e15d5373661a3563cddf577327ca1f2b8e1ccc68c7746a5ed43f63db37191.zip/node_modules/bfj/", + "packageDependencies": [ + [ + "bfj", + "npm:6.1.1" + ], + [ + "bluebird", + "npm:3.5.4" + ], + [ + "check-types", + "npm:7.4.0" + ], + [ + "hoopy", + "npm:0.1.4" + ], + [ + "tryer", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "big.js", + [ + [ + "npm:3.2.0", + { + "packageLocation": "./.yarn/cache/big.js-npm-3.2.0-41a96e16bb84bc34f6d164c64016b83f07ff349e60fd7bd45fef3d5bba920400.zip/node_modules/big.js/", + "packageDependencies": [ + [ + "big.js", + "npm:3.2.0" + ] + ] + } + ], + [ + "npm:5.2.2", + { + "packageLocation": "./.yarn/cache/big.js-npm-5.2.2-97b3b0314f07b3668407ae8ee0ebfcfd8d22d9b4a53e32db320b433a3b12b307.zip/node_modules/big.js/", + "packageDependencies": [ + [ + "big.js", + "npm:5.2.2" + ] + ] + } + ] + ] + ], + [ + "binary-extensions", + [ + [ + "npm:1.13.1", + { + "packageLocation": "./.yarn/cache/binary-extensions-npm-1.13.1-b23a0b0be5378cbb8a4bb4f2c45e03dba2de159b9c43119797187016310143ad.zip/node_modules/binary-extensions/", + "packageDependencies": [ + [ + "binary-extensions", + "npm:1.13.1" + ] + ] + } + ] + ] + ], + [ + "bluebird", + [ + [ + "npm:3.5.4", + { + "packageLocation": "./.yarn/cache/bluebird-npm-3.5.4-59973cabe2210ea641541bc76ed6cb4328137c3b71f86bec66daf530feff9c35.zip/node_modules/bluebird/", + "packageDependencies": [ + [ + "bluebird", + "npm:3.5.4" + ] + ] + } + ] + ] + ], + [ + "bn.js", + [ + [ + "npm:4.11.8", + { + "packageLocation": "./.yarn/cache/bn.js-npm-4.11.8-824e877bb39d0c8e9651861c86ac9e19a8f07f4e8af794cecfecd0f7c559569c.zip/node_modules/bn.js/", + "packageDependencies": [ + [ + "bn.js", + "npm:4.11.8" + ] + ] + } + ] + ] + ], + [ + "body-parser", + [ + [ + "npm:1.18.3", + { + "packageLocation": "./.yarn/cache/body-parser-npm-1.18.3-4e8ec5ebcf1be0068267da7e19fa4107963151771bfa7d2cc16944c29a99af88.zip/node_modules/body-parser/", + "packageDependencies": [ + [ + "body-parser", + "npm:1.18.3" + ], + [ + "bytes", + "npm:3.0.0" + ], + [ + "content-type", + "npm:1.0.4" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "depd", + "npm:1.1.2" + ], + [ + "http-errors", + "npm:1.6.3" + ], + [ + "iconv-lite", + "npm:0.4.23" + ], + [ + "on-finished", + "npm:2.3.0" + ], + [ + "qs", + "npm:6.5.2" + ], + [ + "raw-body", + "npm:2.3.3" + ], + [ + "type-is", + "npm:1.6.18" + ] + ] + } + ] + ] + ], + [ + "boolbase", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/boolbase-npm-1.0.0-fd060b42f9fce6bf47af2b5ea590c62c5cd3c7769cb82bf54c4e321694cf87e0.zip/node_modules/boolbase/", + "packageDependencies": [ + [ + "boolbase", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "brace-expansion", + [ + [ + "npm:1.1.11", + { + "packageLocation": "./.yarn/cache/brace-expansion-npm-1.1.11-87ddbaa2c1bdc845242d81e240009dcc2add679d1487f2db5e7afcddf55eb0cf.zip/node_modules/brace-expansion/", + "packageDependencies": [ + [ + "brace-expansion", + "npm:1.1.11" + ], + [ + "balanced-match", + "npm:1.0.0" + ], + [ + "concat-map", + "npm:0.0.1" + ] + ] + } + ] + ] + ], + [ + "braces", + [ + [ + "npm:2.3.2", + { + "packageLocation": "./.yarn/cache/braces-npm-2.3.2-7a015785b221f29de863bd692f48a2fa8240f490539f39338e510a4d86a0bf16.zip/node_modules/braces/", + "packageDependencies": [ + [ + "braces", + "npm:2.3.2" + ], + [ + "arr-flatten", + "npm:1.1.0" + ], + [ + "array-unique", + "npm:0.3.2" + ], + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "fill-range", + "npm:4.0.0" + ], + [ + "isobject", + "npm:3.0.1" + ], + [ + "repeat-element", + "npm:1.1.3" + ], + [ + "snapdragon", + "npm:0.8.2" + ], + [ + "snapdragon-node", + "npm:2.1.1" + ], + [ + "split-string", + "npm:3.1.0" + ], + [ + "to-regex", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "brorand", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/brorand-npm-1.1.0-dcb25f30fef9ff45f64d8f7fecc145b42454f90ca3aae3cfa8ffcc3f953128aa.zip/node_modules/brorand/", + "packageDependencies": [ + [ + "brorand", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "browser-process-hrtime", + [ + [ + "npm:0.1.3", + { + "packageLocation": "./.yarn/cache/browser-process-hrtime-npm-0.1.3-37498f7916138c387867a56bb5cfa0a604b098719a61d9c418165900dd1b8a32.zip/node_modules/browser-process-hrtime/", + "packageDependencies": [ + [ + "browser-process-hrtime", + "npm:0.1.3" + ] + ] + } + ] + ] + ], + [ + "browser-resolve", + [ + [ + "npm:1.11.3", + { + "packageLocation": "./.yarn/cache/browser-resolve-npm-1.11.3-68a4dc617bae4dd3d36e5b613e94dfe9d59dc19b2ec4b468c04c43d4ff5b8a78.zip/node_modules/browser-resolve/", + "packageDependencies": [ + [ + "browser-resolve", + "npm:1.11.3" + ], + [ + "resolve", + "npm:1.1.7" + ] + ] + } + ] + ] + ], + [ + "browserify-aes", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/browserify-aes-npm-1.2.0-a641015d9164f9aa9dab9b09e1c8ae948cfce81742d1a706630ac83d6ed1fec5.zip/node_modules/browserify-aes/", + "packageDependencies": [ + [ + "browserify-aes", + "npm:1.2.0" + ], + [ + "buffer-xor", + "npm:1.0.3" + ], + [ + "cipher-base", + "npm:1.0.4" + ], + [ + "create-hash", + "npm:1.2.0" + ], + [ + "evp_bytestokey", + "npm:1.0.3" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "browserify-cipher", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/browserify-cipher-npm-1.0.1-0057d73d926976e31ae2e988516b933e8fdbe7391dda8926e5dca22c60d51975.zip/node_modules/browserify-cipher/", + "packageDependencies": [ + [ + "browserify-cipher", + "npm:1.0.1" + ], + [ + "browserify-aes", + "npm:1.2.0" + ], + [ + "browserify-des", + "npm:1.0.2" + ], + [ + "evp_bytestokey", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "browserify-des", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/browserify-des-npm-1.0.2-e9071b21e747c57369d538f8b6ebf84eb7becab1c0ba5ff557e0cac4f2b9d1ab.zip/node_modules/browserify-des/", + "packageDependencies": [ + [ + "browserify-des", + "npm:1.0.2" + ], + [ + "cipher-base", + "npm:1.0.4" + ], + [ + "des.js", + "npm:1.0.0" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "browserify-rsa", + [ + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/browserify-rsa-npm-4.0.1-9f1259219c5176b1c2fa8bc8e1e96634ec5aecdc5a82ac138b3b7e1dc17d6515.zip/node_modules/browserify-rsa/", + "packageDependencies": [ + [ + "browserify-rsa", + "npm:4.0.1" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "randombytes", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "browserify-sign", + [ + [ + "npm:4.0.4", + { + "packageLocation": "./.yarn/cache/browserify-sign-npm-4.0.4-f2715518fdb88a108a96d9db357c4b2a2ecd9428c4524ca8d8deb43f38f5a09b.zip/node_modules/browserify-sign/", + "packageDependencies": [ + [ + "browserify-sign", + "npm:4.0.4" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "browserify-rsa", + "npm:4.0.1" + ], + [ + "create-hash", + "npm:1.2.0" + ], + [ + "create-hmac", + "npm:1.1.7" + ], + [ + "elliptic", + "npm:6.4.1" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "parse-asn1", + "npm:5.1.4" + ] + ] + } + ] + ] + ], + [ + "browserify-zlib", + [ + [ + "npm:0.2.0", + { + "packageLocation": "./.yarn/cache/browserify-zlib-npm-0.2.0-49323bab33e6030e410e277b9a3d0465deb7d2dd00a37d5dfb05a8533f9307a0.zip/node_modules/browserify-zlib/", + "packageDependencies": [ + [ + "browserify-zlib", + "npm:0.2.0" + ], + [ + "pako", + "npm:1.0.10" + ] + ] + } + ] + ] + ], + [ + "browserslist", + [ + [ + "npm:4.5.5", + { + "packageLocation": "./.yarn/cache/browserslist-npm-4.5.5-b65d312b612a6c60c6f747f91c1f8626ee2a660980529b0de7fd89739da39dbb.zip/node_modules/browserslist/", + "packageDependencies": [ + [ + "browserslist", + "npm:4.5.5" + ], + [ + "caniuse-lite", + "npm:1.0.30000963" + ], + [ + "electron-to-chromium", + "npm:1.3.127" + ], + [ + "node-releases", + "npm:1.1.17" + ] + ] + } + ] + ] + ], + [ + "bser", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/bser-npm-2.0.0-abeac0058e8caf49969c64a81fdc7917f33ce9fc14d6223b4e99c811d2a5c819.zip/node_modules/bser/", + "packageDependencies": [ + [ + "bser", + "npm:2.0.0" + ], + [ + "node-int64", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "buffer", + [ + [ + "npm:4.9.1", + { + "packageLocation": "./.yarn/cache/buffer-npm-4.9.1-c8b63ff426ff6761ae7fb402684f9f1f831ddd4a6f538219348df24cd5db1ef8.zip/node_modules/buffer/", + "packageDependencies": [ + [ + "buffer", + "npm:4.9.1" + ], + [ + "base64-js", + "npm:1.3.0" + ], + [ + "ieee754", + "npm:1.1.13" + ], + [ + "isarray", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "buffer-equal", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/buffer-equal-npm-1.0.0-1656f34779c2f6385141ce2922625c65466a0ee162d8dc5d73645dd266cf98c7.zip/node_modules/buffer-equal/", + "packageDependencies": [ + [ + "buffer-equal", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "buffer-from", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/buffer-from-npm-1.1.1-db3b92d51a6574c5da35cc9c59c3200aba6f3827937ffd5a43b322135d4f27bf.zip/node_modules/buffer-from/", + "packageDependencies": [ + [ + "buffer-from", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "buffer-xor", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/buffer-xor-npm-1.0.3-096f1a449463a314b3b87b546a9ac8bacef103dc2ee2bdc32031baeaa07718d2.zip/node_modules/buffer-xor/", + "packageDependencies": [ + [ + "buffer-xor", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "builtin-status-codes", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/builtin-status-codes-npm-3.0.0-ca80ccc317b11836cd0efecfc9bc70b0950d38817235c243a5072730200e4878.zip/node_modules/builtin-status-codes/", + "packageDependencies": [ + [ + "builtin-status-codes", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "bytes", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/bytes-npm-3.0.0-4e7dff8b813810a5a16e449cb8e5d2e6df5ba792416d1ba1d7a9d369e04e0f2c.zip/node_modules/bytes/", + "packageDependencies": [ + [ + "bytes", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "cacache", + [ + [ + "npm:11.3.2", + { + "packageLocation": "./.yarn/cache/cacache-npm-11.3.2-84229dc4ba7e0959023972cd3c33eecd8c669abfd7658548bc90c9c89a2d756c.zip/node_modules/cacache/", + "packageDependencies": [ + [ + "cacache", + "npm:11.3.2" + ], + [ + "bluebird", + "npm:3.5.4" + ], + [ + "chownr", + "npm:1.1.1" + ], + [ + "figgy-pudding", + "npm:3.5.1" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "lru-cache", + "npm:5.1.1" + ], + [ + "mississippi", + "npm:3.0.0" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "move-concurrently", + "npm:1.0.1" + ], + [ + "promise-inflight", + "npm:1.0.1" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "ssri", + "npm:6.0.1" + ], + [ + "unique-filename", + "npm:1.1.1" + ], + [ + "y18n", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "cache-base", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/cache-base-npm-1.0.1-0d71a5d00d340f9457ff444646aa6590967645789a4878ec02f29860dbd2ba35.zip/node_modules/cache-base/", + "packageDependencies": [ + [ + "cache-base", + "npm:1.0.1" + ], + [ + "collection-visit", + "npm:1.0.0" + ], + [ + "component-emitter", + "npm:1.3.0" + ], + [ + "get-value", + "npm:2.0.6" + ], + [ + "has-value", + "npm:1.0.0" + ], + [ + "isobject", + "npm:3.0.1" + ], + [ + "set-value", + "npm:2.0.0" + ], + [ + "to-object-path", + "npm:0.3.0" + ], + [ + "union-value", + "npm:1.0.0" + ], + [ + "unset-value", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "callsites", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/callsites-npm-3.1.0-668000b4ce8e1654882fdc976e73566ccdc8e65a2f31c77778a0fb1f8b275ac1.zip/node_modules/callsites/", + "packageDependencies": [ + [ + "callsites", + "npm:3.1.0" + ] + ] + } + ] + ] + ], + [ + "camel-case", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/camel-case-npm-3.0.0-301d68d148217fde86b11e7c3794dc1053ad45286f231715b809838d5c0b8e04.zip/node_modules/camel-case/", + "packageDependencies": [ + [ + "camel-case", + "npm:3.0.0" + ], + [ + "no-case", + "npm:2.3.2" + ], + [ + "upper-case", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "camelcase", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/camelcase-npm-3.0.0-75434f378ecbbdaedfddf57704354f115fff06bc6b66df03a8d372060cc25891.zip/node_modules/camelcase/", + "packageDependencies": [ + [ + "camelcase", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:5.3.1", + { + "packageLocation": "./.yarn/cache/camelcase-npm-5.3.1-290063debfd59c275a9e2c0ff51faac5331b0a6c030316c531465e43e79dd3c4.zip/node_modules/camelcase/", + "packageDependencies": [ + [ + "camelcase", + "npm:5.3.1" + ] + ] + } + ] + ] + ], + [ + "caniuse-lite", + [ + [ + "npm:1.0.30000963", + { + "packageLocation": "./.yarn/cache/caniuse-lite-npm-1.0.30000963-ed41003695ebe04aefb798bff95d02c3a373fa8523c8f9e1de4f2ed016c69a50.zip/node_modules/caniuse-lite/", + "packageDependencies": [ + [ + "caniuse-lite", + "npm:1.0.30000963" + ] + ] + } + ] + ] + ], + [ + "capture-exit", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/capture-exit-npm-2.0.0-bb397f5b1db5e86322f7076fcde80105a64b26c5abad1f43a76c3ac06004b9ac.zip/node_modules/capture-exit/", + "packageDependencies": [ + [ + "capture-exit", + "npm:2.0.0" + ], + [ + "rsvp", + "npm:4.8.4" + ] + ] + } + ] + ] + ], + [ + "caseless", + [ + [ + "npm:0.12.0", + { + "packageLocation": "./.yarn/cache/caseless-npm-0.12.0-54179c38de53382aacf38db3f4e2c900bbb719f80d6c58b4f208facb3660eea6.zip/node_modules/caseless/", + "packageDependencies": [ + [ + "caseless", + "npm:0.12.0" + ] + ] + } + ] + ] + ], + [ + "chalk", + [ + [ + "npm:2.4.2", + { + "packageLocation": "./.yarn/cache/chalk-npm-2.4.2-cc93ef6b9fd2f80bcd2ab0bc64882d3d792cbf8bc0a54d91d7320421024bca1a.zip/node_modules/chalk/", + "packageDependencies": [ + [ + "chalk", + "npm:2.4.2" + ], + [ + "ansi-styles", + "npm:3.2.1" + ], + [ + "escape-string-regexp", + "npm:1.0.5" + ], + [ + "supports-color", + "npm:5.5.0" + ] + ] + } + ] + ] + ], + [ + "chardet", + [ + [ + "npm:0.7.0", + { + "packageLocation": "./.yarn/cache/chardet-npm-0.7.0-87be18e16d1dc4b67fa41bf1e1b3d07b3c2baf0687ef86232d8fcc7b3913174e.zip/node_modules/chardet/", + "packageDependencies": [ + [ + "chardet", + "npm:0.7.0" + ] + ] + } + ] + ] + ], + [ + "check-types", + [ + [ + "npm:7.4.0", + { + "packageLocation": "./.yarn/cache/check-types-npm-7.4.0-d998cd2b06fa49d66284f75d373298420507caaad08a249b680f574cd8fb1c38.zip/node_modules/check-types/", + "packageDependencies": [ + [ + "check-types", + "npm:7.4.0" + ] + ] + } + ] + ] + ], + [ + "chokidar", + [ + [ + "npm:2.1.5", + { + "packageLocation": "./.yarn/cache/chokidar-npm-2.1.5-9a8e44a03588d353e1de4331bfa203d72b61ba6ca681766833aa10bd336e3f8b.zip/node_modules/chokidar/", + "packageDependencies": [ + [ + "chokidar", + "npm:2.1.5" + ], + [ + "anymatch", + "npm:2.0.0" + ], + [ + "async-each", + "npm:1.0.3" + ], + [ + "braces", + "npm:2.3.2" + ], + [ + "fsevents", + "npm:1.2.8" + ], + [ + "glob-parent", + "npm:3.1.0" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "is-binary-path", + "npm:1.0.1" + ], + [ + "is-glob", + "npm:4.0.1" + ], + [ + "normalize-path", + "npm:3.0.0" + ], + [ + "path-is-absolute", + "npm:1.0.1" + ], + [ + "readdirp", + "npm:2.2.1" + ], + [ + "upath", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "chownr", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/chownr-npm-1.1.1-70a74b1a8c9e293501e12c3fd6e8677f340ad3f4ee5191f4848a4e9a2ad6657e.zip/node_modules/chownr/", + "packageDependencies": [ + [ + "chownr", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "chrome-trace-event", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/chrome-trace-event-npm-1.0.0-bd97de493dda2aef36cc8622bb8b60e500e49b7899fb1e117638dbcd52d8c859.zip/node_modules/chrome-trace-event/", + "packageDependencies": [ + [ + "chrome-trace-event", + "npm:1.0.0" + ], + [ + "tslib", + "npm:1.9.3" + ] + ] + } + ] + ] + ], + [ + "ci-info", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/ci-info-npm-2.0.0-1ac3f3be225bec5a575908789b75c59d3e693923b6a13a6e18f1e3d46011ed57.zip/node_modules/ci-info/", + "packageDependencies": [ + [ + "ci-info", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "cipher-base", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/cipher-base-npm-1.0.4-2c141fd604c2dc0211398bce0c62aca2feb9a000c4d1186fc349464a0c08a6e5.zip/node_modules/cipher-base/", + "packageDependencies": [ + [ + "cipher-base", + "npm:1.0.4" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "class-utils", + [ + [ + "npm:0.3.6", + { + "packageLocation": "./.yarn/cache/class-utils-npm-0.3.6-a3b57bc38163c4e4a8ed16cca05ba68e9fe678c0db153a5ecf3993db47a0a29c.zip/node_modules/class-utils/", + "packageDependencies": [ + [ + "class-utils", + "npm:0.3.6" + ], + [ + "arr-union", + "npm:3.1.0" + ], + [ + "define-property", + "npm:0.2.5" + ], + [ + "isobject", + "npm:3.0.1" + ], + [ + "static-extend", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "clean-css", + [ + [ + "npm:4.2.1", + { + "packageLocation": "./.yarn/cache/clean-css-npm-4.2.1-23c1cd449cb1c07af21a8bce13f332603ca1e14d3ba3e293424dfb4abede562c.zip/node_modules/clean-css/", + "packageDependencies": [ + [ + "clean-css", + "npm:4.2.1" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "cli-cursor", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/cli-cursor-npm-2.1.0-dfae322540420f12ab5b798e891922ccda248a83e12470f25e35efb605f4c5a6.zip/node_modules/cli-cursor/", + "packageDependencies": [ + [ + "cli-cursor", + "npm:2.1.0" + ], + [ + "restore-cursor", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "cli-width", + [ + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/cli-width-npm-2.2.0-1e5960c8f0d60a4116dfea1d9bd7ad2b9319afbce5378f6476fbbcab16056443.zip/node_modules/cli-width/", + "packageDependencies": [ + [ + "cli-width", + "npm:2.2.0" + ] + ] + } + ] + ] + ], + [ + "cliui", + [ + [ + "npm:3.2.0", + { + "packageLocation": "./.yarn/cache/cliui-npm-3.2.0-eea5e8043048a49d5bc2fbd9180aa1b46987f039ec67dc980b8e347dba24a2db.zip/node_modules/cliui/", + "packageDependencies": [ + [ + "cliui", + "npm:3.2.0" + ], + [ + "string-width", + "npm:1.0.2" + ], + [ + "strip-ansi", + "npm:3.0.1" + ], + [ + "wrap-ansi", + "npm:2.1.0" + ] + ] + } + ], + [ + "npm:4.1.0", + { + "packageLocation": "./.yarn/cache/cliui-npm-4.1.0-d3e747a60a99d8ee0fb1d8c47a9ab2a4095217ed352ac8fdce59eca6be5edb12.zip/node_modules/cliui/", + "packageDependencies": [ + [ + "cliui", + "npm:4.1.0" + ], + [ + "string-width", + "npm:2.1.1" + ], + [ + "strip-ansi", + "npm:4.0.0" + ], + [ + "wrap-ansi", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "clone", + [ + [ + "npm:2.1.2", + { + "packageLocation": "./.yarn/cache/clone-npm-2.1.2-5f5f1a61f052552d4ad7863b8de3c66b4b5e33be58e87f675a44b951e48ce158.zip/node_modules/clone/", + "packageDependencies": [ + [ + "clone", + "npm:2.1.2" + ] + ] + } + ] + ] + ], + [ + "clone-buffer", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/clone-buffer-npm-1.0.0-bdcd312d06430c19524e461ddb3f05cd03ea01ecdf6b96aa41219644c3835c2f.zip/node_modules/clone-buffer/", + "packageDependencies": [ + [ + "clone-buffer", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "clone-stats", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/clone-stats-npm-1.0.0-a5592cd2b542dfd45819533c9d7f12491e515918acdb93fe1d0b4235cec1cff5.zip/node_modules/clone-stats/", + "packageDependencies": [ + [ + "clone-stats", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "cloneable-readable", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/cloneable-readable-npm-1.1.2-ce3f113a4b590249adfccda3a5c7d68728d7f7ff24e04ffdaa6ac16e4e6f9167.zip/node_modules/cloneable-readable/", + "packageDependencies": [ + [ + "cloneable-readable", + "npm:1.1.2" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "process-nextick-args", + "npm:2.0.0" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "co", + [ + [ + "npm:4.6.0", + { + "packageLocation": "./.yarn/cache/co-npm-4.6.0-6fae98c8ffc99e4e89e73e7204f507a1ecbe9b4fec57ac5d7f9a37b4334be33c.zip/node_modules/co/", + "packageDependencies": [ + [ + "co", + "npm:4.6.0" + ] + ] + } + ] + ] + ], + [ + "code-point-at", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/code-point-at-npm-1.1.0-b5cac3c1391cec08d6f39184266f9e0249a540ddae5dafd61ab44ff7c14d9994.zip/node_modules/code-point-at/", + "packageDependencies": [ + [ + "code-point-at", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "collection-map", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/collection-map-npm-1.0.0-250a30c5d6dce2173cfaba099f0ecbafa7d7b00ee7bf2dddfd843b07a10e3522.zip/node_modules/collection-map/", + "packageDependencies": [ + [ + "collection-map", + "npm:1.0.0" + ], + [ + "arr-map", + "npm:2.0.2" + ], + [ + "for-own", + "npm:1.0.0" + ], + [ + "make-iterator", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "collection-visit", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/collection-visit-npm-1.0.0-8b3223222b35d5e33064715bc34d8be013a3f5d926a0dbcf3019ebd22c5cea3e.zip/node_modules/collection-visit/", + "packageDependencies": [ + [ + "collection-visit", + "npm:1.0.0" + ], + [ + "map-visit", + "npm:1.0.0" + ], + [ + "object-visit", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "color-convert", + [ + [ + "npm:1.9.3", + { + "packageLocation": "./.yarn/cache/color-convert-npm-1.9.3-eb8a1370304c7e914067b2087e3b8092ee5c69eeb197683c5485328afbf94fa9.zip/node_modules/color-convert/", + "packageDependencies": [ + [ + "color-convert", + "npm:1.9.3" + ], + [ + "color-name", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "color-name", + [ + [ + "npm:1.1.3", + { + "packageLocation": "./.yarn/cache/color-name-npm-1.1.3-514f6d9e6649b1c9f8feaeada7d994e809f33d6d85b45039a710e22f9f5d0f6f.zip/node_modules/color-name/", + "packageDependencies": [ + [ + "color-name", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "color-support", + [ + [ + "npm:1.1.3", + { + "packageLocation": "./.yarn/cache/color-support-npm-1.1.3-bf833b532e6afb7f9ee6d42e0b060ca586d740f998d646a3f70f7897ec214f8b.zip/node_modules/color-support/", + "packageDependencies": [ + [ + "color-support", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "colors", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/colors-npm-1.0.3-6dd8180f50c65c856f71f69e0bcdc1a491e80f35e50b398f021d77484e2ca9a3.zip/node_modules/colors/", + "packageDependencies": [ + [ + "colors", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "combined-stream", + [ + [ + "npm:1.0.7", + { + "packageLocation": "./.yarn/cache/combined-stream-npm-1.0.7-890fbb5896cf7559137231c6853c864d8f617fe7f87daa78fdd62db46f92ba9c.zip/node_modules/combined-stream/", + "packageDependencies": [ + [ + "combined-stream", + "npm:1.0.7" + ], + [ + "delayed-stream", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "commander", + [ + [ + "npm:2.17.1", + { + "packageLocation": "./.yarn/cache/commander-npm-2.17.1-61b7094a6a1618e570b320ca867aede63ae00136106afb1741a0fbc6c9556995.zip/node_modules/commander/", + "packageDependencies": [ + [ + "commander", + "npm:2.17.1" + ] + ] + } + ], + [ + "npm:2.19.0", + { + "packageLocation": "./.yarn/cache/commander-npm-2.19.0-400569f565b417dac86e3638d298f0489255aa76d7dd9c7331858a253f349ed1.zip/node_modules/commander/", + "packageDependencies": [ + [ + "commander", + "npm:2.19.0" + ] + ] + } + ], + [ + "npm:2.20.0", + { + "packageLocation": "./.yarn/cache/commander-npm-2.20.0-60544dd3a7859f6e3da5d7ab7559561db9ffd2550c1326d24da3bcaa05ae07d0.zip/node_modules/commander/", + "packageDependencies": [ + [ + "commander", + "npm:2.20.0" + ] + ] + } + ] + ] + ], + [ + "commondir", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/commondir-npm-1.0.1-ad54ad5f15dfb98f1c9ba5365fa9fb385807b9e8291a23be4f473c04bf1e8e61.zip/node_modules/commondir/", + "packageDependencies": [ + [ + "commondir", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "compare-versions", + [ + [ + "npm:3.4.0", + { + "packageLocation": "./.yarn/cache/compare-versions-npm-3.4.0-628b97a4b520305588e79bb4465a543823fcd4b5e5360cc0bf9bdda2bb5c8471.zip/node_modules/compare-versions/", + "packageDependencies": [ + [ + "compare-versions", + "npm:3.4.0" + ] + ] + } + ] + ] + ], + [ + "component-emitter", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/component-emitter-npm-1.3.0-eee9b0300eda605ed3496868fa6e79f7327e4d9c30c631b9c016faa4ae8472c8.zip/node_modules/component-emitter/", + "packageDependencies": [ + [ + "component-emitter", + "npm:1.3.0" + ] + ] + } + ] + ] + ], + [ + "concat-map", + [ + [ + "npm:0.0.1", + { + "packageLocation": "./.yarn/cache/concat-map-npm-0.0.1-4d6d8c81f3df60f16459ba84a21602d68075bd0bcb31a3da5b1de2e94d1f42ae.zip/node_modules/concat-map/", + "packageDependencies": [ + [ + "concat-map", + "npm:0.0.1" + ] + ] + } + ] + ] + ], + [ + "concat-stream", + [ + [ + "npm:1.6.2", + { + "packageLocation": "./.yarn/cache/concat-stream-npm-1.6.2-95a321e92e2da29f1fd8ae193a041ef12c326b06a026ec1a1904b10c356e8016.zip/node_modules/concat-stream/", + "packageDependencies": [ + [ + "concat-stream", + "npm:1.6.2" + ], + [ + "buffer-from", + "npm:1.1.1" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "typedarray", + "npm:0.0.6" + ] + ] + } + ] + ] + ], + [ + "console-browserify", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/console-browserify-npm-1.1.0-677cc3227eb88776b640a9b70afdebfec7f75f9aabb60575f2ae253487f0f51b.zip/node_modules/console-browserify/", + "packageDependencies": [ + [ + "console-browserify", + "npm:1.1.0" + ], + [ + "date-now", + "npm:0.1.4" + ] + ] + } + ] + ] + ], + [ + "console-control-strings", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/console-control-strings-npm-1.1.0-311afea55111b7939270e514add2f3cb8027296a994a041112acacc7a14bafc0.zip/node_modules/console-control-strings/", + "packageDependencies": [ + [ + "console-control-strings", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "constants-browserify", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/constants-browserify-npm-1.0.0-115bfd8ab98c7bff66d40a527ec2d0ef7d3c7e4d64fbf5d692d7bbb772b9a88e.zip/node_modules/constants-browserify/", + "packageDependencies": [ + [ + "constants-browserify", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "contains-path", + [ + [ + "npm:0.1.0", + { + "packageLocation": "./.yarn/cache/contains-path-npm-0.1.0-4c6398b98ad3f6f08cdb109661f7100ba62fd43252040cd9c5cfe6aabff4a912.zip/node_modules/contains-path/", + "packageDependencies": [ + [ + "contains-path", + "npm:0.1.0" + ] + ] + } + ] + ] + ], + [ + "content-disposition", + [ + [ + "npm:0.5.2", + { + "packageLocation": "./.yarn/cache/content-disposition-npm-0.5.2-c74f8a3eb292d6011220a518c51b73a0586d564e8e818afe2d61207f59461a12.zip/node_modules/content-disposition/", + "packageDependencies": [ + [ + "content-disposition", + "npm:0.5.2" + ] + ] + } + ] + ] + ], + [ + "content-type", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/content-type-npm-1.0.4-1d90270e24db9b9ceeffa669d284a72388516f46f28e1be3fa0c8479188d44b3.zip/node_modules/content-type/", + "packageDependencies": [ + [ + "content-type", + "npm:1.0.4" + ] + ] + } + ] + ] + ], + [ + "convert-source-map", + [ + [ + "npm:1.6.0", + { + "packageLocation": "./.yarn/cache/convert-source-map-npm-1.6.0-c01729263389f8302375a8b3a0f218f4edf236951a0481179b1d1c577ab67c80.zip/node_modules/convert-source-map/", + "packageDependencies": [ + [ + "convert-source-map", + "npm:1.6.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "cookie", + [ + [ + "npm:0.3.1", + { + "packageLocation": "./.yarn/cache/cookie-npm-0.3.1-7321b49f30e7d0c89ba3f33a241ec74130cef5a3ba94f6b5a997ff7dae0aa81b.zip/node_modules/cookie/", + "packageDependencies": [ + [ + "cookie", + "npm:0.3.1" + ] + ] + } + ] + ] + ], + [ + "cookie-signature", + [ + [ + "npm:1.0.6", + { + "packageLocation": "./.yarn/cache/cookie-signature-npm-1.0.6-5d02b49ff3831935075c38a94ab6603169bdcbefc27ab55c79e7dc0f22bb35af.zip/node_modules/cookie-signature/", + "packageDependencies": [ + [ + "cookie-signature", + "npm:1.0.6" + ] + ] + } + ] + ] + ], + [ + "copy-concurrently", + [ + [ + "npm:1.0.5", + { + "packageLocation": "./.yarn/cache/copy-concurrently-npm-1.0.5-4a8ccf81b8d6f66742af5d38b0f54d70278db22fd34bd130e68f5eef13929a30.zip/node_modules/copy-concurrently/", + "packageDependencies": [ + [ + "copy-concurrently", + "npm:1.0.5" + ], + [ + "aproba", + "npm:1.2.0" + ], + [ + "fs-write-stream-atomic", + "npm:1.0.10" + ], + [ + "iferr", + "npm:0.1.5" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "run-queue", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "copy-descriptor", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/copy-descriptor-npm-0.1.1-2b545bd6d5ce658ba318acbf149acfe090fc41c9ced2f4c295516898211da4ab.zip/node_modules/copy-descriptor/", + "packageDependencies": [ + [ + "copy-descriptor", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "copy-props", + [ + [ + "npm:2.0.4", + { + "packageLocation": "./.yarn/cache/copy-props-npm-2.0.4-c00c87119e5daa34242ba7f4b3eca70878efaf0b3a1caf88dd04ddeb6440efb4.zip/node_modules/copy-props/", + "packageDependencies": [ + [ + "copy-props", + "npm:2.0.4" + ], + [ + "each-props", + "npm:1.3.2" + ], + [ + "is-plain-object", + "npm:2.0.4" + ] + ] + } + ] + ] + ], + [ + "core-decorators", + [ + [ + "npm:0.20.0", + { + "packageLocation": "./.yarn/cache/core-decorators-npm-0.20.0-741767c50820d38fdaa1559c8f3e580583a2cd944d15b8493091adac3738af97.zip/node_modules/core-decorators/", + "packageDependencies": [ + [ + "core-decorators", + "npm:0.20.0" + ] + ] + } + ] + ] + ], + [ + "core-js", + [ + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/core-js-npm-3.0.1-aa3c3acdc924f16550e78cd1505c549e13c838e292d5b844ff791c155a847926.zip/node_modules/core-js/", + "packageDependencies": [ + [ + "core-js", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "core-js-compat", + [ + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/core-js-compat-npm-3.0.1-39095d50f163733f0bb1727d3ed7f56c348213e91f6e13eb8e8b3d4d41c77e90.zip/node_modules/core-js-compat/", + "packageDependencies": [ + [ + "core-js-compat", + "npm:3.0.1" + ], + [ + "browserslist", + "npm:4.5.5" + ], + [ + "core-js", + "npm:3.0.1" + ], + [ + "core-js-pure", + "npm:3.0.1" + ], + [ + "semver", + "npm:6.0.0" + ] + ] + } + ] + ] + ], + [ + "core-js-pure", + [ + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/core-js-pure-npm-3.0.1-b52195ba2466504d3e841cf8f872775a2657069ce985d77e8b808fe357d22f8b.zip/node_modules/core-js-pure/", + "packageDependencies": [ + [ + "core-js-pure", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "core-util-is", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/core-util-is-npm-1.0.2-0092c88e334464f960c5d376edaafbaf1713fb6fd97b081fa4219a69645517df.zip/node_modules/core-util-is/", + "packageDependencies": [ + [ + "core-util-is", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "corser", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/corser-npm-2.0.1-846664cc1a4ee29bd621159ddc289541ff5fcf08945fc866152918ab143316d1.zip/node_modules/corser/", + "packageDependencies": [ + [ + "corser", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "create-ecdh", + [ + [ + "npm:4.0.3", + { + "packageLocation": "./.yarn/cache/create-ecdh-npm-4.0.3-e0e65f8c9038bdc2d88cbd51dbf6ea6e62dab30d3261cf74d9635d5e430d0fe4.zip/node_modules/create-ecdh/", + "packageDependencies": [ + [ + "create-ecdh", + "npm:4.0.3" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "elliptic", + "npm:6.4.1" + ] + ] + } + ] + ] + ], + [ + "create-hash", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/create-hash-npm-1.2.0-c5a714bd235cd121ccdaf5d81798c6bd491b5bac78f28fd160a0d0ec12d5a5a2.zip/node_modules/create-hash/", + "packageDependencies": [ + [ + "create-hash", + "npm:1.2.0" + ], + [ + "cipher-base", + "npm:1.0.4" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "md5.js", + "npm:1.3.5" + ], + [ + "ripemd160", + "npm:2.0.2" + ], + [ + "sha.js", + "npm:2.4.11" + ] + ] + } + ] + ] + ], + [ + "create-hmac", + [ + [ + "npm:1.1.7", + { + "packageLocation": "./.yarn/cache/create-hmac-npm-1.1.7-8191397e69176723916185a3c462fb0889e846ca60af1362ce601186bf8c611b.zip/node_modules/create-hmac/", + "packageDependencies": [ + [ + "create-hmac", + "npm:1.1.7" + ], + [ + "cipher-base", + "npm:1.0.4" + ], + [ + "create-hash", + "npm:1.2.0" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "ripemd160", + "npm:2.0.2" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "sha.js", + "npm:2.4.11" + ] + ] + } + ] + ] + ], + [ + "cross-spawn", + [ + [ + "npm:6.0.5", + { + "packageLocation": "./.yarn/cache/cross-spawn-npm-6.0.5-0ba5f883cf582a4248c1c8575ef31c368634c587aa0b9731c596cf866746bf5e.zip/node_modules/cross-spawn/", + "packageDependencies": [ + [ + "cross-spawn", + "npm:6.0.5" + ], + [ + "nice-try", + "npm:1.0.5" + ], + [ + "path-key", + "npm:2.0.1" + ], + [ + "semver", + "npm:5.7.0" + ], + [ + "shebang-command", + "npm:1.2.0" + ], + [ + "which", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "crypto-browserify", + [ + [ + "npm:3.12.0", + { + "packageLocation": "./.yarn/cache/crypto-browserify-npm-3.12.0-b6321b5e1e2190b3e106cefa8dfa310ddb53d196b50965e1b0fc29f72b74bdda.zip/node_modules/crypto-browserify/", + "packageDependencies": [ + [ + "crypto-browserify", + "npm:3.12.0" + ], + [ + "browserify-cipher", + "npm:1.0.1" + ], + [ + "browserify-sign", + "npm:4.0.4" + ], + [ + "create-ecdh", + "npm:4.0.3" + ], + [ + "create-hash", + "npm:1.2.0" + ], + [ + "create-hmac", + "npm:1.1.7" + ], + [ + "diffie-hellman", + "npm:5.0.3" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "pbkdf2", + "npm:3.0.17" + ], + [ + "public-encrypt", + "npm:4.0.3" + ], + [ + "randombytes", + "npm:2.1.0" + ], + [ + "randomfill", + "npm:1.0.4" + ] + ] + } + ] + ] + ], + [ + "css-select", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/css-select-npm-1.2.0-52f3f158c853972a00518536e896718864e2669b3322a798d8d516c83dfab921.zip/node_modules/css-select/", + "packageDependencies": [ + [ + "css-select", + "npm:1.2.0" + ], + [ + "boolbase", + "npm:1.0.0" + ], + [ + "css-what", + "npm:2.1.3" + ], + [ + "domutils", + "npm:1.5.1" + ], + [ + "nth-check", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "css-what", + [ + [ + "npm:2.1.3", + { + "packageLocation": "./.yarn/cache/css-what-npm-2.1.3-ee7349330ce6998ed60db06920e461b8793c8769abf6224f75ccd783e11f0ecf.zip/node_modules/css-what/", + "packageDependencies": [ + [ + "css-what", + "npm:2.1.3" + ] + ] + } + ] + ] + ], + [ + "cssom", + [ + [ + "npm:0.3.6", + { + "packageLocation": "./.yarn/cache/cssom-npm-0.3.6-41a74e282cbcc1e9a0cca51f3f5c61a8a743b80a02d0737d80e458c835a94c16.zip/node_modules/cssom/", + "packageDependencies": [ + [ + "cssom", + "npm:0.3.6" + ] + ] + } + ] + ] + ], + [ + "cssstyle", + [ + [ + "npm:1.2.2", + { + "packageLocation": "./.yarn/cache/cssstyle-npm-1.2.2-da0aec5cbe59514fa338298b4173b8f26ab00e9698c4bc24c8a19475935f133d.zip/node_modules/cssstyle/", + "packageDependencies": [ + [ + "cssstyle", + "npm:1.2.2" + ], + [ + "cssom", + "npm:0.3.6" + ] + ] + } + ] + ] + ], + [ + "cyclist", + [ + [ + "npm:0.2.2", + { + "packageLocation": "./.yarn/cache/cyclist-npm-0.2.2-0a3a24f80207c8a7ea54dfa9e1c7dc28f356a0fd567a5ce96c1c7ac7ef9cfcf4.zip/node_modules/cyclist/", + "packageDependencies": [ + [ + "cyclist", + "npm:0.2.2" + ] + ] + } + ] + ] + ], + [ + "d", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/d-npm-1.0.0-9ba8a25a99ce07f69cfa730d3af0eb8631489f6f0c2d005480987a2b259768b9.zip/node_modules/d/", + "packageDependencies": [ + [ + "d", + "npm:1.0.0" + ], + [ + "es5-ext", + "npm:0.10.49" + ] + ] + } + ] + ] + ], + [ + "dashdash", + [ + [ + "npm:1.14.1", + { + "packageLocation": "./.yarn/cache/dashdash-npm-1.14.1-65bc2ad3cd596bf83dd2240bd5c772c23a2bb21d1d70fae275ce957944dcc6d7.zip/node_modules/dashdash/", + "packageDependencies": [ + [ + "dashdash", + "npm:1.14.1" + ], + [ + "assert-plus", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "data-urls", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/data-urls-npm-1.1.0-917f9bc887bc6a96f04887f65939a3eb0f72a630378950f57c33aa6df82c2a30.zip/node_modules/data-urls/", + "packageDependencies": [ + [ + "data-urls", + "npm:1.1.0" + ], + [ + "abab", + "npm:2.0.0" + ], + [ + "whatwg-mimetype", + "npm:2.3.0" + ], + [ + "whatwg-url", + "npm:7.0.0" + ] + ] + } + ] + ] + ], + [ + "date-now", + [ + [ + "npm:0.1.4", + { + "packageLocation": "./.yarn/cache/date-now-npm-0.1.4-579f365f64d243c03b56410447381981e49baf56b07c7626aaeab240fe028750.zip/node_modules/date-now/", + "packageDependencies": [ + [ + "date-now", + "npm:0.1.4" + ] + ] + } + ] + ] + ], + [ + "debug", + [ + [ + "npm:2.6.9", + { + "packageLocation": "./.yarn/cache/debug-npm-2.6.9-a22b8093089df29ca19a7c10d81885890baaeaafa2ee64904636bf2e064dd0be.zip/node_modules/debug/", + "packageDependencies": [ + [ + "debug", + "npm:2.6.9" + ], + [ + "ms", + "npm:2.0.0" + ] + ] + } + ], + [ + "npm:3.2.6", + { + "packageLocation": "./.yarn/cache/debug-npm-3.2.6-61f201c4d3a7ad0a2ad7963b17e1dee332ae51395f2a3e9bab38d1a92b71c705.zip/node_modules/debug/", + "packageDependencies": [ + [ + "debug", + "npm:3.2.6" + ], + [ + "ms", + "npm:2.1.1" + ] + ] + } + ], + [ + "npm:4.1.1", + { + "packageLocation": "./.yarn/cache/debug-npm-4.1.1-a1f870a4a95fff67eeac2388e06345982ebf1149c710f8efe18fe5d1967fec40.zip/node_modules/debug/", + "packageDependencies": [ + [ + "debug", + "npm:4.1.1" + ], + [ + "ms", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "decamelize", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/decamelize-npm-1.2.0-f40012de90d2d4dd1a0f843517a0508c78a38a49d64e949cbdc852b957e58136.zip/node_modules/decamelize/", + "packageDependencies": [ + [ + "decamelize", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "decode-uri-component", + [ + [ + "npm:0.2.0", + { + "packageLocation": "./.yarn/cache/decode-uri-component-npm-0.2.0-7b50e9d5402df29f0ba16bace109379d6fd1aacd405da3eb9c4b9a91f21303d4.zip/node_modules/decode-uri-component/", + "packageDependencies": [ + [ + "decode-uri-component", + "npm:0.2.0" + ] + ] + } + ] + ] + ], + [ + "deep-extend", + [ + [ + "npm:0.6.0", + { + "packageLocation": "./.yarn/cache/deep-extend-npm-0.6.0-331841c8d0930f97fac713c937d91d53be953dc03fa7503a768f604e4daaff91.zip/node_modules/deep-extend/", + "packageDependencies": [ + [ + "deep-extend", + "npm:0.6.0" + ] + ] + } + ] + ] + ], + [ + "deep-is", + [ + [ + "npm:0.1.3", + { + "packageLocation": "./.yarn/cache/deep-is-npm-0.1.3-4035efaaee51f3e7c181b2bae5896fab4be56d3960d6510781ed2b1dd8c0f9b5.zip/node_modules/deep-is/", + "packageDependencies": [ + [ + "deep-is", + "npm:0.1.3" + ] + ] + } + ] + ] + ], + [ + "default-compare", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/default-compare-npm-1.0.0-b953e010f22ca684e9b6d84d7f46b86ccc55334c9040485be66e944d4e86a4e4.zip/node_modules/default-compare/", + "packageDependencies": [ + [ + "default-compare", + "npm:1.0.0" + ], + [ + "kind-of", + "npm:5.1.0" + ] + ] + } + ] + ] + ], + [ + "default-require-extensions", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/default-require-extensions-npm-2.0.0-77d0cb4b308200adb8b8fba04f496713aaaab853ce91abee5f358c63becf0f6b.zip/node_modules/default-require-extensions/", + "packageDependencies": [ + [ + "default-require-extensions", + "npm:2.0.0" + ], + [ + "strip-bom", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "default-resolution", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/default-resolution-npm-2.0.0-c1cdc02353e56fc539c1f480ad00bd195d0246a5c5aec5aeed1b8a7a7248151b.zip/node_modules/default-resolution/", + "packageDependencies": [ + [ + "default-resolution", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "define-properties", + [ + [ + "npm:1.1.3", + { + "packageLocation": "./.yarn/cache/define-properties-npm-1.1.3-26bcf4a5da466a2c7422dabcff7b0d6d542f245563cd767ba3f01267f5e2a21d.zip/node_modules/define-properties/", + "packageDependencies": [ + [ + "define-properties", + "npm:1.1.3" + ], + [ + "object-keys", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "define-property", + [ + [ + "npm:0.2.5", + { + "packageLocation": "./.yarn/cache/define-property-npm-0.2.5-13f4c75ec5484c6f1042e45176efc2795ebc9d0e89c72c929b7efca9b9f7fab7.zip/node_modules/define-property/", + "packageDependencies": [ + [ + "define-property", + "npm:0.2.5" + ], + [ + "is-descriptor", + "npm:0.1.6" + ] + ] + } + ], + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/define-property-npm-1.0.0-6c33b5ced49218373c7cde37d7aeed60f96363a1370bcca62d5155634c8ce9f8.zip/node_modules/define-property/", + "packageDependencies": [ + [ + "define-property", + "npm:1.0.0" + ], + [ + "is-descriptor", + "npm:1.0.2" + ] + ] + } + ], + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/define-property-npm-2.0.2-3a5504ac8f51d648088a04cf667ac8e32e0e1ab2e16663a5803b85ae3672939c.zip/node_modules/define-property/", + "packageDependencies": [ + [ + "define-property", + "npm:2.0.2" + ], + [ + "is-descriptor", + "npm:1.0.2" + ], + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "delayed-stream", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/delayed-stream-npm-1.0.0-3bb9d285d06419ccbb24c8f7a99afb033ed6b1c0ec91763a8f3cb63173a63ff1.zip/node_modules/delayed-stream/", + "packageDependencies": [ + [ + "delayed-stream", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "delegates", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/delegates-npm-1.0.0-c07eda1c87a034a782fd9c942c91d4ff7e0da4f4cfc7677bd4516b1f1961538d.zip/node_modules/delegates/", + "packageDependencies": [ + [ + "delegates", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "depd", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/depd-npm-1.1.2-cde3afa5006dfacd3e376b4f366db7f652f5f867f0b6a5095e30e51550f83c6e.zip/node_modules/depd/", + "packageDependencies": [ + [ + "depd", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "des.js", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/des.js-npm-1.0.0-2b116ed20d75fa7c2dc1891a3f6ce6166f8f557c4160b9df3f13ffb5dd99a105.zip/node_modules/des.js/", + "packageDependencies": [ + [ + "des.js", + "npm:1.0.0" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "minimalistic-assert", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "destroy", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/destroy-npm-1.0.4-398af984afd73b70dad5ec2a66e15b7878cb9baa0a875e9b8a09b2d4af653449.zip/node_modules/destroy/", + "packageDependencies": [ + [ + "destroy", + "npm:1.0.4" + ] + ] + } + ] + ] + ], + [ + "detect-file", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/detect-file-npm-1.0.0-ec573d96b4c8f34a927b1587f4e7be6dffe3f7a483b0eb9678b67f01ae040af0.zip/node_modules/detect-file/", + "packageDependencies": [ + [ + "detect-file", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "detect-libc", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/detect-libc-npm-1.0.3-20dbd83b18f9eab539862a9f7d3a0e2389ebcad6488ad59160cd0ec61ad7a337.zip/node_modules/detect-libc/", + "packageDependencies": [ + [ + "detect-libc", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "detect-newline", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/detect-newline-npm-2.1.0-2335d44cfa680a0992a073fbdb74cc4763f319d804664e90e39053562f500ae1.zip/node_modules/detect-newline/", + "packageDependencies": [ + [ + "detect-newline", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "diff-sequences", + [ + [ + "npm:24.3.0", + { + "packageLocation": "./.yarn/cache/diff-sequences-npm-24.3.0-986dfde6fb9086796a51e43efe5a6f972d65b9a6c246c2222b0fd4220341a1db.zip/node_modules/diff-sequences/", + "packageDependencies": [ + [ + "diff-sequences", + "npm:24.3.0" + ] + ] + } + ] + ] + ], + [ + "diffie-hellman", + [ + [ + "npm:5.0.3", + { + "packageLocation": "./.yarn/cache/diffie-hellman-npm-5.0.3-0699f75044d3d6640ef79ef601315e8a2649266fe1a86f07b26aa273732330fd.zip/node_modules/diffie-hellman/", + "packageDependencies": [ + [ + "diffie-hellman", + "npm:5.0.3" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "miller-rabin", + "npm:4.0.1" + ], + [ + "randombytes", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "doctrine", + [ + [ + "npm:1.5.0", + { + "packageLocation": "./.yarn/cache/doctrine-npm-1.5.0-1d3cdc415c8092f8623313f4ac47ce4a6282d261c8f7881586f75ce2b6d162fe.zip/node_modules/doctrine/", + "packageDependencies": [ + [ + "doctrine", + "npm:1.5.0" + ], + [ + "esutils", + "npm:2.0.2" + ], + [ + "isarray", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/doctrine-npm-2.1.0-33e3a4be091f7e8e7ba41548a52e333564782df11998693c460016e71e849b68.zip/node_modules/doctrine/", + "packageDependencies": [ + [ + "doctrine", + "npm:2.1.0" + ], + [ + "esutils", + "npm:2.0.2" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/doctrine-npm-3.0.0-c4caf26004de97541739b93a10b18cc44549873168cdb602d4f6265fdacdd4e2.zip/node_modules/doctrine/", + "packageDependencies": [ + [ + "doctrine", + "npm:3.0.0" + ], + [ + "esutils", + "npm:2.0.2" + ] + ] + } + ] + ] + ], + [ + "dom-converter", + [ + [ + "npm:0.2.0", + { + "packageLocation": "./.yarn/cache/dom-converter-npm-0.2.0-4d43dcbd3d3e4ebd0022e4da896fe856227f153b39a2b33a6ae8f4ec718f3fa7.zip/node_modules/dom-converter/", + "packageDependencies": [ + [ + "dom-converter", + "npm:0.2.0" + ], + [ + "utila", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "dom-serializer", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/dom-serializer-npm-0.1.1-8e6c093fafc9d01a5d00c92f7bdc8474c47e3a7b1fd8dacd05d8eb9b5836d2f4.zip/node_modules/dom-serializer/", + "packageDependencies": [ + [ + "dom-serializer", + "npm:0.1.1" + ], + [ + "domelementtype", + "npm:1.3.1" + ], + [ + "entities", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "domain-browser", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/domain-browser-npm-1.2.0-2e19501a9b0cd964cb69e106dcf32e633598e44b636c04f3645482af2ce7bfe9.zip/node_modules/domain-browser/", + "packageDependencies": [ + [ + "domain-browser", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "domelementtype", + [ + [ + "npm:1.3.1", + { + "packageLocation": "./.yarn/cache/domelementtype-npm-1.3.1-dad23f53be7408b9f67337cf6f7c4913df6293c301535a063290da9095292f75.zip/node_modules/domelementtype/", + "packageDependencies": [ + [ + "domelementtype", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "domexception", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/domexception-npm-1.0.1-2879ac4cb824ed203b5423ac31764f6280de2f7665fd7b9a5e92df0c126a6b76.zip/node_modules/domexception/", + "packageDependencies": [ + [ + "domexception", + "npm:1.0.1" + ], + [ + "webidl-conversions", + "npm:4.0.2" + ] + ] + } + ] + ] + ], + [ + "domhandler", + [ + [ + "npm:2.4.2", + { + "packageLocation": "./.yarn/cache/domhandler-npm-2.4.2-fb2dee89e02dc42c473006bf057334bffd781a7efd4801b17e404c75987cd5fb.zip/node_modules/domhandler/", + "packageDependencies": [ + [ + "domhandler", + "npm:2.4.2" + ], + [ + "domelementtype", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "domutils", + [ + [ + "npm:1.5.1", + { + "packageLocation": "./.yarn/cache/domutils-npm-1.5.1-2ee90abf718c703ddd1cf7d6343b888d686c7cc42bb77cd5024e5215f8167a11.zip/node_modules/domutils/", + "packageDependencies": [ + [ + "domutils", + "npm:1.5.1" + ], + [ + "dom-serializer", + "npm:0.1.1" + ], + [ + "domelementtype", + "npm:1.3.1" + ] + ] + } + ], + [ + "npm:1.7.0", + { + "packageLocation": "./.yarn/cache/domutils-npm-1.7.0-c1d23917ae7c24af72b8caf527089da495d408d16043cdeca785cb792f788fd8.zip/node_modules/domutils/", + "packageDependencies": [ + [ + "domutils", + "npm:1.7.0" + ], + [ + "dom-serializer", + "npm:0.1.1" + ], + [ + "domelementtype", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "duplexer", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/duplexer-npm-0.1.1-cb6be22010c30f07077d06ccfdfb5a30d21d44ac44233c918cfb0c97f1201a0f.zip/node_modules/duplexer/", + "packageDependencies": [ + [ + "duplexer", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "duplexify", + [ + [ + "npm:3.7.1", + { + "packageLocation": "./.yarn/cache/duplexify-npm-3.7.1-c371dda93d22d7c3ce422b7eee4f831a62bed0834fed672d2c8512c784cb70f6.zip/node_modules/duplexify/", + "packageDependencies": [ + [ + "duplexify", + "npm:3.7.1" + ], + [ + "end-of-stream", + "npm:1.4.1" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "stream-shift", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "each-props", + [ + [ + "npm:1.3.2", + { + "packageLocation": "./.yarn/cache/each-props-npm-1.3.2-cf23248ef4b505914c8a7fb5281544c4c56800059208d0289ee6eca9e93936d4.zip/node_modules/each-props/", + "packageDependencies": [ + [ + "each-props", + "npm:1.3.2" + ], + [ + "is-plain-object", + "npm:2.0.4" + ], + [ + "object.defaults", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "ecc-jsbn", + [ + [ + "npm:0.1.2", + { + "packageLocation": "./.yarn/cache/ecc-jsbn-npm-0.1.2-35c39df251971d39398a4b91ec43744345f7202254f64f5e324ad721d5a5b64c.zip/node_modules/ecc-jsbn/", + "packageDependencies": [ + [ + "ecc-jsbn", + "npm:0.1.2" + ], + [ + "jsbn", + "npm:0.1.1" + ], + [ + "safer-buffer", + "npm:2.1.2" + ] + ] + } + ] + ] + ], + [ + "ecstatic", + [ + [ + "npm:3.3.1", + { + "packageLocation": "./.yarn/cache/ecstatic-npm-3.3.1-a39bf05daa49f1d590eef37cd1d204835d459361332f3b08c8d57b21d188ae8f.zip/node_modules/ecstatic/", + "packageDependencies": [ + [ + "ecstatic", + "npm:3.3.1" + ], + [ + "he", + "npm:1.2.0" + ], + [ + "mime", + "npm:1.6.0" + ], + [ + "minimist", + "npm:1.2.0" + ], + [ + "url-join", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "ee-first", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/ee-first-npm-1.1.1-20d46c63608824c353d99abd8ec6e8d64bdefc24eec5118518fe9baf0ee35e1d.zip/node_modules/ee-first/", + "packageDependencies": [ + [ + "ee-first", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "ejs", + [ + [ + "npm:2.6.1", + { + "packageLocation": "./.yarn/cache/ejs-npm-2.6.1-d8432e419da21377a3b6263e3e43e913de2f65cb2d5613d7ff08b97528ab98d4.zip/node_modules/ejs/", + "packageDependencies": [ + [ + "ejs", + "npm:2.6.1" + ] + ] + } + ] + ] + ], + [ + "electron-to-chromium", + [ + [ + "npm:1.3.127", + { + "packageLocation": "./.yarn/cache/electron-to-chromium-npm-1.3.127-2b81ab11b8081b3ab73de89238cac7f3a376b3bafc27369e0954d37735f72698.zip/node_modules/electron-to-chromium/", + "packageDependencies": [ + [ + "electron-to-chromium", + "npm:1.3.127" + ] + ] + } + ] + ] + ], + [ + "elliptic", + [ + [ + "npm:6.4.1", + { + "packageLocation": "./.yarn/cache/elliptic-npm-6.4.1-5a416ddf045215fecb6926fd1fbd6752b1a422629fee89b98efe73bc3ef2b318.zip/node_modules/elliptic/", + "packageDependencies": [ + [ + "elliptic", + "npm:6.4.1" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "brorand", + "npm:1.1.0" + ], + [ + "hash.js", + "npm:1.1.7" + ], + [ + "hmac-drbg", + "npm:1.0.1" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "minimalistic-assert", + "npm:1.0.1" + ], + [ + "minimalistic-crypto-utils", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "emoji-regex", + [ + [ + "npm:7.0.3", + { + "packageLocation": "./.yarn/cache/emoji-regex-npm-7.0.3-a4e76de4cae0221437934254ff9ffd7afeafe6a375bf17bedbbd7bcb807eb8ae.zip/node_modules/emoji-regex/", + "packageDependencies": [ + [ + "emoji-regex", + "npm:7.0.3" + ] + ] + } + ] + ] + ], + [ + "emojis-list", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/emojis-list-npm-2.1.0-e850d428733214c13e410332be408f881a46bf08904643ed9ca3b870d0d32973.zip/node_modules/emojis-list/", + "packageDependencies": [ + [ + "emojis-list", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "encodeurl", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/encodeurl-npm-1.0.2-21d18622fcb7c32858052ac468c641473b84ea71f735fcb3a1b92e4982f03ded.zip/node_modules/encodeurl/", + "packageDependencies": [ + [ + "encodeurl", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "end-of-stream", + [ + [ + "npm:1.4.1", + { + "packageLocation": "./.yarn/cache/end-of-stream-npm-1.4.1-63c41e5276864ed9c7860551b12c296d81e69ccc2f196b92073c373d714b013d.zip/node_modules/end-of-stream/", + "packageDependencies": [ + [ + "end-of-stream", + "npm:1.4.1" + ], + [ + "once", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "enhanced-resolve", + [ + [ + "npm:4.1.0", + { + "packageLocation": "./.yarn/cache/enhanced-resolve-npm-4.1.0-c350598b881663dac59a011b733b632e0e3e2a812e35efe3e92490e15a7af5e3.zip/node_modules/enhanced-resolve/", + "packageDependencies": [ + [ + "enhanced-resolve", + "npm:4.1.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "memory-fs", + "npm:0.4.1" + ], + [ + "tapable", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "entities", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/entities-npm-1.1.2-4d2abba21587e9796f1dfce02d5a2b138144516066a790dc3558cc7c9632c93d.zip/node_modules/entities/", + "packageDependencies": [ + [ + "entities", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "errno", + [ + [ + "npm:0.1.7", + { + "packageLocation": "./.yarn/cache/errno-npm-0.1.7-77e907d69af605b2b55bb1aa0ce9626b644818625892dcf56dc3e26e6378b41e.zip/node_modules/errno/", + "packageDependencies": [ + [ + "errno", + "npm:0.1.7" + ], + [ + "prr", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "error-ex", + [ + [ + "npm:1.3.2", + { + "packageLocation": "./.yarn/cache/error-ex-npm-1.3.2-e8e23505c39d3e942ea5d0d9e97afdc7bfb10a45a988cc4eabeee26fc6e683a0.zip/node_modules/error-ex/", + "packageDependencies": [ + [ + "error-ex", + "npm:1.3.2" + ], + [ + "is-arrayish", + "npm:0.2.1" + ] + ] + } + ] + ] + ], + [ + "es-abstract", + [ + [ + "npm:1.13.0", + { + "packageLocation": "./.yarn/cache/es-abstract-npm-1.13.0-c9485525e0c3db3a130dfc5c3c1a43a40dea55cf7eec63254d0000b702ed88df.zip/node_modules/es-abstract/", + "packageDependencies": [ + [ + "es-abstract", + "npm:1.13.0" + ], + [ + "es-to-primitive", + "npm:1.2.0" + ], + [ + "function-bind", + "npm:1.1.1" + ], + [ + "has", + "npm:1.0.3" + ], + [ + "is-callable", + "npm:1.1.4" + ], + [ + "is-regex", + "npm:1.0.4" + ], + [ + "object-keys", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "es-to-primitive", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/es-to-primitive-npm-1.2.0-dd1512698b7f223488288664e23d54bca59eec794611379db5bd519968a04096.zip/node_modules/es-to-primitive/", + "packageDependencies": [ + [ + "es-to-primitive", + "npm:1.2.0" + ], + [ + "is-callable", + "npm:1.1.4" + ], + [ + "is-date-object", + "npm:1.0.1" + ], + [ + "is-symbol", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "es5-ext", + [ + [ + "npm:0.10.49", + { + "packageLocation": "./.yarn/cache/es5-ext-npm-0.10.49-853b1ca31337d4b4303f871b683700e221d5dc8762783f4e89cc18875b60742b.zip/node_modules/es5-ext/", + "packageDependencies": [ + [ + "es5-ext", + "npm:0.10.49" + ], + [ + "es6-iterator", + "npm:2.0.3" + ], + [ + "es6-symbol", + "npm:3.1.1" + ], + [ + "next-tick", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "es6-iterator", + [ + [ + "npm:2.0.3", + { + "packageLocation": "./.yarn/cache/es6-iterator-npm-2.0.3-0583f14fe42a23f9ab83c74019c8c43166dedc98707f7446423b725b3c732baa.zip/node_modules/es6-iterator/", + "packageDependencies": [ + [ + "es6-iterator", + "npm:2.0.3" + ], + [ + "d", + "npm:1.0.0" + ], + [ + "es5-ext", + "npm:0.10.49" + ], + [ + "es6-symbol", + "npm:3.1.1" + ] + ] + } + ] + ] + ], + [ + "es6-symbol", + [ + [ + "npm:3.1.1", + { + "packageLocation": "./.yarn/cache/es6-symbol-npm-3.1.1-1c278c87cc83236b9ec8b25484b797198e836213dc7f7e093f0ecb4847700cdc.zip/node_modules/es6-symbol/", + "packageDependencies": [ + [ + "es6-symbol", + "npm:3.1.1" + ], + [ + "d", + "npm:1.0.0" + ], + [ + "es5-ext", + "npm:0.10.49" + ] + ] + } + ] + ] + ], + [ + "es6-weak-map", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/es6-weak-map-npm-2.0.2-436d9bbdc022422b4807c056c31e830e440da1fd40bcf69fa754cf2600430154.zip/node_modules/es6-weak-map/", + "packageDependencies": [ + [ + "es6-weak-map", + "npm:2.0.2" + ], + [ + "d", + "npm:1.0.0" + ], + [ + "es5-ext", + "npm:0.10.49" + ], + [ + "es6-iterator", + "npm:2.0.3" + ], + [ + "es6-symbol", + "npm:3.1.1" + ] + ] + } + ] + ] + ], + [ + "escape-html", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/escape-html-npm-1.0.3-63595a8d94ec379143436acd47601b8dae6d4c4c4f87204528c7f4772e4b1d3c.zip/node_modules/escape-html/", + "packageDependencies": [ + [ + "escape-html", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "escape-string-regexp", + [ + [ + "npm:1.0.5", + { + "packageLocation": "./.yarn/cache/escape-string-regexp-npm-1.0.5-342dab99b6e40d31e0db2a39d65959bb490143bcc1269ee019a44c52a3107b37.zip/node_modules/escape-string-regexp/", + "packageDependencies": [ + [ + "escape-string-regexp", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "escodegen", + [ + [ + "npm:1.11.1", + { + "packageLocation": "./.yarn/cache/escodegen-npm-1.11.1-9b526fb68514bcfe101810c19bb782a6871f4b447c6574016e92d48a0d579119.zip/node_modules/escodegen/", + "packageDependencies": [ + [ + "escodegen", + "npm:1.11.1" + ], + [ + "esprima", + "npm:3.1.3" + ], + [ + "estraverse", + "npm:4.2.0" + ], + [ + "esutils", + "npm:2.0.2" + ], + [ + "optionator", + "npm:0.8.2" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "eslint", + [ + [ + "npm:5.16.0", + { + "packageLocation": "./.yarn/cache/eslint-npm-5.16.0-9cc47644fe4e3c1b0efdd763cf77e30f777853520c1b0b7e3bcad2b27992bc18.zip/node_modules/eslint/", + "packageDependencies": [ + [ + "eslint", + "npm:5.16.0" + ], + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "ajv", + "npm:6.10.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "cross-spawn", + "npm:6.0.5" + ], + [ + "debug", + "npm:4.1.1" + ], + [ + "doctrine", + "npm:3.0.0" + ], + [ + "eslint-scope", + "npm:4.0.3" + ], + [ + "eslint-utils", + "npm:1.3.1" + ], + [ + "eslint-visitor-keys", + "npm:1.0.0" + ], + [ + "espree", + "npm:5.0.1" + ], + [ + "esquery", + "npm:1.0.1" + ], + [ + "esutils", + "npm:2.0.2" + ], + [ + "file-entry-cache", + "npm:5.0.1" + ], + [ + "functional-red-black-tree", + "npm:1.0.1" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "globals", + "npm:11.11.0" + ], + [ + "ignore", + "npm:4.0.6" + ], + [ + "import-fresh", + "npm:3.0.0" + ], + [ + "imurmurhash", + "npm:0.1.4" + ], + [ + "inquirer", + "npm:6.3.1" + ], + [ + "js-yaml", + "npm:3.13.1" + ], + [ + "json-stable-stringify-without-jsonify", + "npm:1.0.1" + ], + [ + "levn", + "npm:0.3.0" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "minimatch", + "npm:3.0.4" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "natural-compare", + "npm:1.4.0" + ], + [ + "optionator", + "npm:0.8.2" + ], + [ + "path-is-inside", + "npm:1.0.2" + ], + [ + "progress", + "npm:2.0.3" + ], + [ + "regexpp", + "npm:2.0.1" + ], + [ + "semver", + "npm:5.7.0" + ], + [ + "strip-ansi", + "npm:4.0.0" + ], + [ + "strip-json-comments", + "npm:2.0.1" + ], + [ + "table", + "npm:5.2.3" + ], + [ + "text-table", + "npm:0.2.0" + ] + ] + } + ] + ] + ], + [ + "eslint-config-prettier", + [ + [ + "npm:4.2.0", + { + "packageLocation": "./.yarn/cache/eslint-config-prettier-npm-4.2.0-ba1f00cb2df582d990406cf3cdfcb8228e3fcc84ac0ae5f30224b23cff7d23c6.zip/node_modules/eslint-config-prettier/", + "packageDependencies": [ + [ + "eslint-config-prettier", + "npm:4.2.0" + ], + [ + "get-stdin", + "npm:6.0.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:4.2.0", + { + "packageLocation": "./.yarn/virtual/eslint-config-prettier-virtual-9295d4d4b3aa44198d6c7804f292905de1dbf2559f4ee702436f629748d4feff/node_modules/eslint-config-prettier/", + "packageDependencies": [ + [ + "eslint-config-prettier", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:4.2.0" + ], + [ + "eslint", + "npm:5.16.0" + ], + [ + "get-stdin", + "npm:6.0.0" + ] + ] + } + ] + ] + ], + [ + "eslint-import-resolver-node", + [ + [ + "npm:0.3.2", + { + "packageLocation": "./.yarn/cache/eslint-import-resolver-node-npm-0.3.2-45cb46e483a3aaa48ea223693aed7d42d77673b0d0d86e3cf669605528ee7236.zip/node_modules/eslint-import-resolver-node/", + "packageDependencies": [ + [ + "eslint-import-resolver-node", + "npm:0.3.2" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "resolve", + "npm:1.10.1" + ] + ] + } + ] + ] + ], + [ + "eslint-module-utils", + [ + [ + "npm:2.4.0", + { + "packageLocation": "./.yarn/cache/eslint-module-utils-npm-2.4.0-f4361e16741e3fde917ca80f32953b12c33801e37fd64fe837149cd72f97e440.zip/node_modules/eslint-module-utils/", + "packageDependencies": [ + [ + "eslint-module-utils", + "npm:2.4.0" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "pkg-dir", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "eslint-plugin-import", + [ + [ + "npm:2.17.2", + { + "packageLocation": "./.yarn/cache/eslint-plugin-import-npm-2.17.2-6f0e21ad2f0f081970188e8a99d55b36745b1581a19daa51336d3e0fc0042c65.zip/node_modules/eslint-plugin-import/", + "packageDependencies": [ + [ + "eslint-plugin-import", + "npm:2.17.2" + ], + [ + "array-includes", + "npm:3.0.3" + ], + [ + "contains-path", + "npm:0.1.0" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "doctrine", + "npm:1.5.0" + ], + [ + "eslint-import-resolver-node", + "npm:0.3.2" + ], + [ + "eslint-module-utils", + "npm:2.4.0" + ], + [ + "has", + "npm:1.0.3" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "minimatch", + "npm:3.0.4" + ], + [ + "read-pkg-up", + "npm:2.0.0" + ], + [ + "resolve", + "npm:1.10.1" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:2.17.2", + { + "packageLocation": "./.yarn/virtual/eslint-plugin-import-virtual-0780a987ac930b99e312a2245bd796ceb4a2758d2d3cf1341e81b32a9f026077/node_modules/eslint-plugin-import/", + "packageDependencies": [ + [ + "eslint-plugin-import", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:2.17.2" + ], + [ + "array-includes", + "npm:3.0.3" + ], + [ + "contains-path", + "npm:0.1.0" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "doctrine", + "npm:1.5.0" + ], + [ + "eslint", + "npm:5.16.0" + ], + [ + "eslint-import-resolver-node", + "npm:0.3.2" + ], + [ + "eslint-module-utils", + "npm:2.4.0" + ], + [ + "has", + "npm:1.0.3" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "minimatch", + "npm:3.0.4" + ], + [ + "read-pkg-up", + "npm:2.0.0" + ], + [ + "resolve", + "npm:1.10.1" + ] + ] + } + ] + ] + ], + [ + "eslint-plugin-jest", + [ + [ + "npm:22.5.1", + { + "packageLocation": "./.yarn/cache/eslint-plugin-jest-npm-22.5.1-d4ee2de138829c2c64febd6e324240130bdb8b07962d5120d7cda4567b8bdb0e.zip/node_modules/eslint-plugin-jest/", + "packageDependencies": [ + [ + "eslint-plugin-jest", + "npm:22.5.1" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:22.5.1", + { + "packageLocation": "./.yarn/virtual/eslint-plugin-jest-virtual-17a3fb1a764f9b8aef87ca3f0e7af451b5b3f3a3b9aed20b63bfebc39d823612/node_modules/eslint-plugin-jest/", + "packageDependencies": [ + [ + "eslint-plugin-jest", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:22.5.1" + ], + [ + "eslint", + "npm:5.16.0" + ] + ] + } + ] + ] + ], + [ + "eslint-plugin-prettier", + [ + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/eslint-plugin-prettier-npm-3.0.1-0c4ecb0e4e0c7160552cd87393252a2a2e58acd0a376a700f9e4080cf32cd320.zip/node_modules/eslint-plugin-prettier/", + "packageDependencies": [ + [ + "eslint-plugin-prettier", + "npm:3.0.1" + ], + [ + "prettier-linter-helpers", + "npm:1.0.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.0.1", + { + "packageLocation": "./.yarn/virtual/eslint-plugin-prettier-virtual-bb986ace3800baab451a4e7b4da6fd9569600448529aa51720ef45ec726395d4/node_modules/eslint-plugin-prettier/", + "packageDependencies": [ + [ + "eslint-plugin-prettier", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.0.1" + ], + [ + "eslint", + "npm:5.16.0" + ], + [ + "prettier", + "npm:1.17.0" + ], + [ + "prettier-linter-helpers", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "eslint-plugin-react", + [ + [ + "npm:7.12.4", + { + "packageLocation": "./.yarn/cache/eslint-plugin-react-npm-7.12.4-c85283740558918c8fb3631bc72a819c853da036734370bd7dd87e6233e3bcc9.zip/node_modules/eslint-plugin-react/", + "packageDependencies": [ + [ + "eslint-plugin-react", + "npm:7.12.4" + ], + [ + "array-includes", + "npm:3.0.3" + ], + [ + "doctrine", + "npm:2.1.0" + ], + [ + "has", + "npm:1.0.3" + ], + [ + "jsx-ast-utils", + "npm:2.1.0" + ], + [ + "object.fromentries", + "npm:2.0.0" + ], + [ + "prop-types", + "npm:15.7.2" + ], + [ + "resolve", + "npm:1.10.1" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.12.4", + { + "packageLocation": "./.yarn/virtual/eslint-plugin-react-virtual-306fff49c98f48f552b455c9068ddd1653d761d8434b51bd8ceacef297283942/node_modules/eslint-plugin-react/", + "packageDependencies": [ + [ + "eslint-plugin-react", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.12.4" + ], + [ + "array-includes", + "npm:3.0.3" + ], + [ + "doctrine", + "npm:2.1.0" + ], + [ + "eslint", + "npm:5.16.0" + ], + [ + "has", + "npm:1.0.3" + ], + [ + "jsx-ast-utils", + "npm:2.1.0" + ], + [ + "object.fromentries", + "npm:2.0.0" + ], + [ + "prop-types", + "npm:15.7.2" + ], + [ + "resolve", + "npm:1.10.1" + ] + ] + } + ] + ] + ], + [ + "eslint-scope", + [ + [ + "npm:3.7.1", + { + "packageLocation": "./.yarn/cache/eslint-scope-npm-3.7.1-0cb9efc95c605da4ca36d0afebc5db5c8a6c0216cb4e55c4db0ffe2c172cea6e.zip/node_modules/eslint-scope/", + "packageDependencies": [ + [ + "eslint-scope", + "npm:3.7.1" + ], + [ + "esrecurse", + "npm:4.2.1" + ], + [ + "estraverse", + "npm:4.2.0" + ] + ] + } + ], + [ + "npm:4.0.3", + { + "packageLocation": "./.yarn/cache/eslint-scope-npm-4.0.3-c4e24d3415a8c7aee6f1d8be044bed76d424c8cf997eabdb700ec75ed2be84c5.zip/node_modules/eslint-scope/", + "packageDependencies": [ + [ + "eslint-scope", + "npm:4.0.3" + ], + [ + "esrecurse", + "npm:4.2.1" + ], + [ + "estraverse", + "npm:4.2.0" + ] + ] + } + ] + ] + ], + [ + "eslint-utils", + [ + [ + "npm:1.3.1", + { + "packageLocation": "./.yarn/cache/eslint-utils-npm-1.3.1-01bf5b4c60175880c53872f4e3ea03b75c36baff290bd73d9a73f4af4119a0b0.zip/node_modules/eslint-utils/", + "packageDependencies": [ + [ + "eslint-utils", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "eslint-visitor-keys", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/eslint-visitor-keys-npm-1.0.0-8960956e10e170e4215382826682abf8f5f786d680e0f342d24bbbdfae341350.zip/node_modules/eslint-visitor-keys/", + "packageDependencies": [ + [ + "eslint-visitor-keys", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "espree", + [ + [ + "npm:5.0.1", + { + "packageLocation": "./.yarn/cache/espree-npm-5.0.1-c97804973d9e1b4e1f7887a8b552cc6be02aea681eb8c5030f793c4b86a4966b.zip/node_modules/espree/", + "packageDependencies": [ + [ + "espree", + "npm:5.0.1" + ], + [ + "acorn", + "npm:6.1.1" + ], + [ + "acorn-jsx", + "virtual:c97804973d9e1b4e1f7887a8b552cc6be02aea681eb8c5030f793c4b86a4966b48fd22afdb72ced3081865febb4fb81065d0ccc368817082cb785a8f65214e1b#npm:5.0.1" + ], + [ + "eslint-visitor-keys", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "esprima", + [ + [ + "npm:3.1.3", + { + "packageLocation": "./.yarn/cache/esprima-npm-3.1.3-658b54c74d32f848a5328f59e9ffc66e1a95e811c57e041efea0caf404d4206c.zip/node_modules/esprima/", + "packageDependencies": [ + [ + "esprima", + "npm:3.1.3" + ] + ] + } + ], + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/esprima-npm-4.0.1-6a74ca36fc65cb8f7de5cb890d83b10e7c3f62064670d9480281c3ca72ca8209.zip/node_modules/esprima/", + "packageDependencies": [ + [ + "esprima", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "esquery", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/esquery-npm-1.0.1-71eeadc3988204a7beea239d3226f1eea57898941c0301b64792ab92e3a0dbef.zip/node_modules/esquery/", + "packageDependencies": [ + [ + "esquery", + "npm:1.0.1" + ], + [ + "estraverse", + "npm:4.2.0" + ] + ] + } + ] + ] + ], + [ + "esrecurse", + [ + [ + "npm:4.2.1", + { + "packageLocation": "./.yarn/cache/esrecurse-npm-4.2.1-708056b5929b532c50f6e2e218da16ab0a778a5bf0cf19ecb83cd1d7db15c6aa.zip/node_modules/esrecurse/", + "packageDependencies": [ + [ + "esrecurse", + "npm:4.2.1" + ], + [ + "estraverse", + "npm:4.2.0" + ] + ] + } + ] + ] + ], + [ + "estraverse", + [ + [ + "npm:4.2.0", + { + "packageLocation": "./.yarn/cache/estraverse-npm-4.2.0-de76782769795208550a2071653209247fce11745f2fc9ced7a1ddb5a361346d.zip/node_modules/estraverse/", + "packageDependencies": [ + [ + "estraverse", + "npm:4.2.0" + ] + ] + } + ] + ] + ], + [ + "estree-walker", + [ + [ + "npm:0.6.0", + { + "packageLocation": "./.yarn/cache/estree-walker-npm-0.6.0-d312d6cae6cf425da40bf9dc0a608b545915c9ddc7832cbf32b1e33b0849f35d.zip/node_modules/estree-walker/", + "packageDependencies": [ + [ + "estree-walker", + "npm:0.6.0" + ] + ] + } + ] + ] + ], + [ + "esutils", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/esutils-npm-2.0.2-c55ae952835e75843da6314f06cda80be4fd759a67b678d82049785617c5a08a.zip/node_modules/esutils/", + "packageDependencies": [ + [ + "esutils", + "npm:2.0.2" + ] + ] + } + ] + ] + ], + [ + "etag", + [ + [ + "npm:1.8.1", + { + "packageLocation": "./.yarn/cache/etag-npm-1.8.1-301a72eaecf952e99e4c9615feff598fd7998c8756769a9c36aa46d180ff6eb6.zip/node_modules/etag/", + "packageDependencies": [ + [ + "etag", + "npm:1.8.1" + ] + ] + } + ] + ] + ], + [ + "eventemitter3", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/eventemitter3-npm-3.1.0-09426813fcf758f9217dea7b031cea9d8d8c79878e5587f7434101370ff2ccd6.zip/node_modules/eventemitter3/", + "packageDependencies": [ + [ + "eventemitter3", + "npm:3.1.0" + ] + ] + } + ] + ] + ], + [ + "events", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/events-npm-3.0.0-135a8c2cb1843fb54eae064d258f1dfabfd9fada696ad4b851e2232b3e3b10ed.zip/node_modules/events/", + "packageDependencies": [ + [ + "events", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "evp_bytestokey", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/evp_bytestokey-npm-1.0.3-130771f8e1e7aa31adf1b2575dca6c2741f8821074f37746d0d67b89ee28f50c.zip/node_modules/evp_bytestokey/", + "packageDependencies": [ + [ + "evp_bytestokey", + "npm:1.0.3" + ], + [ + "md5.js", + "npm:1.3.5" + ], + [ + "node-gyp", + "npm:4.0.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "exec-sh", + [ + [ + "npm:0.3.2", + { + "packageLocation": "./.yarn/cache/exec-sh-npm-0.3.2-3f69726cc8931de3a3383e0ec020411f0f1c30596631b9785373ac75ea7d9be6.zip/node_modules/exec-sh/", + "packageDependencies": [ + [ + "exec-sh", + "npm:0.3.2" + ] + ] + } + ] + ] + ], + [ + "execa", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/execa-npm-1.0.0-f52bb72a3117acd02ddb466e47c27c62df47a9611ae4cb83e4199b2ab3db8988.zip/node_modules/execa/", + "packageDependencies": [ + [ + "execa", + "npm:1.0.0" + ], + [ + "cross-spawn", + "npm:6.0.5" + ], + [ + "get-stream", + "npm:4.1.0" + ], + [ + "is-stream", + "npm:1.1.0" + ], + [ + "npm-run-path", + "npm:2.0.2" + ], + [ + "p-finally", + "npm:1.0.0" + ], + [ + "signal-exit", + "npm:3.0.2" + ], + [ + "strip-eof", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "exit", + [ + [ + "npm:0.1.2", + { + "packageLocation": "./.yarn/cache/exit-npm-0.1.2-9e5211b658065273b06ebddd2a0331e92aa494544dcd22d631ae3f5d3d7f9225.zip/node_modules/exit/", + "packageDependencies": [ + [ + "exit", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "expand-brackets", + [ + [ + "npm:2.1.4", + { + "packageLocation": "./.yarn/cache/expand-brackets-npm-2.1.4-4ab7e7ca73ecb8ecdce6fca363ce70dd1cdb4b35133fccfda3414948366e4402.zip/node_modules/expand-brackets/", + "packageDependencies": [ + [ + "expand-brackets", + "npm:2.1.4" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "define-property", + "npm:0.2.5" + ], + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "posix-character-classes", + "npm:0.1.1" + ], + [ + "regex-not", + "npm:1.0.2" + ], + [ + "snapdragon", + "npm:0.8.2" + ], + [ + "to-regex", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "expand-tilde", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/expand-tilde-npm-2.0.2-ba4286a014720ea32222fc0928a3b26fd8c3b4b1720e7eb675331fb5ebc0cd68.zip/node_modules/expand-tilde/", + "packageDependencies": [ + [ + "expand-tilde", + "npm:2.0.2" + ], + [ + "homedir-polyfill", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "expect", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/expect-npm-24.7.1-540bad4b5206c2080f72de86f447d26e66b8009cd5883b4fd6050d22ea0ca4a2.zip/node_modules/expect/", + "packageDependencies": [ + [ + "expect", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "ansi-styles", + "npm:3.2.1" + ], + [ + "jest-get-type", + "npm:24.3.0" + ], + [ + "jest-matcher-utils", + "npm:24.7.0" + ], + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "jest-regex-util", + "npm:24.3.0" + ] + ] + } + ] + ] + ], + [ + "express", + [ + [ + "npm:4.16.4", + { + "packageLocation": "./.yarn/cache/express-npm-4.16.4-3cae172c981a8f2a8f619ffddc86b31a465904d0d42ee3634b2a8320bd6d5b6c.zip/node_modules/express/", + "packageDependencies": [ + [ + "express", + "npm:4.16.4" + ], + [ + "accepts", + "npm:1.3.5" + ], + [ + "array-flatten", + "npm:1.1.1" + ], + [ + "body-parser", + "npm:1.18.3" + ], + [ + "content-disposition", + "npm:0.5.2" + ], + [ + "content-type", + "npm:1.0.4" + ], + [ + "cookie", + "npm:0.3.1" + ], + [ + "cookie-signature", + "npm:1.0.6" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "depd", + "npm:1.1.2" + ], + [ + "encodeurl", + "npm:1.0.2" + ], + [ + "escape-html", + "npm:1.0.3" + ], + [ + "etag", + "npm:1.8.1" + ], + [ + "finalhandler", + "npm:1.1.1" + ], + [ + "fresh", + "npm:0.5.2" + ], + [ + "merge-descriptors", + "npm:1.0.1" + ], + [ + "methods", + "npm:1.1.2" + ], + [ + "on-finished", + "npm:2.3.0" + ], + [ + "parseurl", + "npm:1.3.3" + ], + [ + "path-to-regexp", + "npm:0.1.7" + ], + [ + "proxy-addr", + "npm:2.0.5" + ], + [ + "qs", + "npm:6.5.2" + ], + [ + "range-parser", + "npm:1.2.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "send", + "npm:0.16.2" + ], + [ + "serve-static", + "npm:1.13.2" + ], + [ + "setprototypeof", + "npm:1.1.0" + ], + [ + "statuses", + "npm:1.4.0" + ], + [ + "type-is", + "npm:1.6.18" + ], + [ + "utils-merge", + "npm:1.0.1" + ], + [ + "vary", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "extend", + [ + [ + "npm:3.0.2", + { + "packageLocation": "./.yarn/cache/extend-npm-3.0.2-a86f975f6911f8421ad16c7637efbb8e39c9415810dc9a02bd8074c84974e5b3.zip/node_modules/extend/", + "packageDependencies": [ + [ + "extend", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "extend-shallow", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/extend-shallow-npm-2.0.1-37bdb2feb40bca6bb576dbc359d9e4816c13d6e52b387d46a4b0c387ad729c2a.zip/node_modules/extend-shallow/", + "packageDependencies": [ + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "is-extendable", + "npm:0.1.1" + ] + ] + } + ], + [ + "npm:3.0.2", + { + "packageLocation": "./.yarn/cache/extend-shallow-npm-3.0.2-95e60ed75f9acab09e50727f492c6c84db313900356dd223fa2c5c3b2ade6939.zip/node_modules/extend-shallow/", + "packageDependencies": [ + [ + "extend-shallow", + "npm:3.0.2" + ], + [ + "assign-symbols", + "npm:1.0.0" + ], + [ + "is-extendable", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "external-editor", + [ + [ + "npm:3.0.3", + { + "packageLocation": "./.yarn/cache/external-editor-npm-3.0.3-4f96ddaea93809c12b279bac529c82f79a700bcbb11424fdac168aa1f04ff506.zip/node_modules/external-editor/", + "packageDependencies": [ + [ + "external-editor", + "npm:3.0.3" + ], + [ + "chardet", + "npm:0.7.0" + ], + [ + "iconv-lite", + "npm:0.4.24" + ], + [ + "tmp", + "npm:0.0.33" + ] + ] + } + ] + ] + ], + [ + "extglob", + [ + [ + "npm:2.0.4", + { + "packageLocation": "./.yarn/cache/extglob-npm-2.0.4-68acdc69707d9d504a5e049b9af13fa1f67d045a13b29e7d9c8c148a4855f84b.zip/node_modules/extglob/", + "packageDependencies": [ + [ + "extglob", + "npm:2.0.4" + ], + [ + "array-unique", + "npm:0.3.2" + ], + [ + "define-property", + "npm:1.0.0" + ], + [ + "expand-brackets", + "npm:2.1.4" + ], + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "fragment-cache", + "npm:0.2.1" + ], + [ + "regex-not", + "npm:1.0.2" + ], + [ + "snapdragon", + "npm:0.8.2" + ], + [ + "to-regex", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "extsprintf", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/extsprintf-npm-1.3.0-6a71b57e83dae1d21719804e1631aa01e1172a366e07031e7caec5e420e396f2.zip/node_modules/extsprintf/", + "packageDependencies": [ + [ + "extsprintf", + "npm:1.3.0" + ] + ] + } + ] + ] + ], + [ + "fancy-log", + [ + [ + "npm:1.3.3", + { + "packageLocation": "./.yarn/cache/fancy-log-npm-1.3.3-59f9c7bc497e556658a923ca085377eed600eb667d1b55c76a3aa8a025787292.zip/node_modules/fancy-log/", + "packageDependencies": [ + [ + "fancy-log", + "npm:1.3.3" + ], + [ + "ansi-gray", + "npm:0.1.1" + ], + [ + "color-support", + "npm:1.1.3" + ], + [ + "parse-node-version", + "npm:1.0.1" + ], + [ + "time-stamp", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "fast-deep-equal", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/fast-deep-equal-npm-2.0.1-2236ea696f1e6c124c033c1182b9934f51c98e1e4e9a62997ea8794fd635d622.zip/node_modules/fast-deep-equal/", + "packageDependencies": [ + [ + "fast-deep-equal", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "fast-diff", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/fast-diff-npm-1.2.0-3d3f6fd4575f841294b79d72fc3effa685da1adfff2e120d6701ba8ac8fc8cb7.zip/node_modules/fast-diff/", + "packageDependencies": [ + [ + "fast-diff", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "fast-json-stable-stringify", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/fast-json-stable-stringify-npm-2.0.0-d465eda072f4c60becf380d43f6806db9fa8f90a45d20d7ef6a804bf4cdffe05.zip/node_modules/fast-json-stable-stringify/", + "packageDependencies": [ + [ + "fast-json-stable-stringify", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "fast-levenshtein", + [ + [ + "npm:2.0.6", + { + "packageLocation": "./.yarn/cache/fast-levenshtein-npm-2.0.6-0d432cf29794206a74437a380bc65f959d9d711c57ad6d5a0cef5e959243a959.zip/node_modules/fast-levenshtein/", + "packageDependencies": [ + [ + "fast-levenshtein", + "npm:2.0.6" + ] + ] + } + ] + ] + ], + [ + "fb-watchman", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/fb-watchman-npm-2.0.0-bdb00c7ad8012047e4163c0a303e13c9dd14154997095e92725824df957aef65.zip/node_modules/fb-watchman/", + "packageDependencies": [ + [ + "fb-watchman", + "npm:2.0.0" + ], + [ + "bser", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "figgy-pudding", + [ + [ + "npm:3.5.1", + { + "packageLocation": "./.yarn/cache/figgy-pudding-npm-3.5.1-38c47236f8af8d06abe9b8bbc92f7c14e08d78ef0b0192c3ffa2a5f39aa80646.zip/node_modules/figgy-pudding/", + "packageDependencies": [ + [ + "figgy-pudding", + "npm:3.5.1" + ] + ] + } + ] + ] + ], + [ + "figures", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/figures-npm-2.0.0-3635d0e852d84f7da3926ce0fbc88bc43ba79bff9707896061a2f20013d56736.zip/node_modules/figures/", + "packageDependencies": [ + [ + "figures", + "npm:2.0.0" + ], + [ + "escape-string-regexp", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "file-entry-cache", + [ + [ + "npm:5.0.1", + { + "packageLocation": "./.yarn/cache/file-entry-cache-npm-5.0.1-b55cd1823a260b3bf00e71e5d01c2de66c83b0049851eb8815ca68567cc7b3e7.zip/node_modules/file-entry-cache/", + "packageDependencies": [ + [ + "file-entry-cache", + "npm:5.0.1" + ], + [ + "flat-cache", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "fileset", + [ + [ + "npm:2.0.3", + { + "packageLocation": "./.yarn/cache/fileset-npm-2.0.3-d2421e99f409f0afe80231787b1a88fba682796e50aa0ce2eace61ab11dc9406.zip/node_modules/fileset/", + "packageDependencies": [ + [ + "fileset", + "npm:2.0.3" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "minimatch", + "npm:3.0.4" + ] + ] + } + ] + ] + ], + [ + "filesize", + [ + [ + "npm:3.6.1", + { + "packageLocation": "./.yarn/cache/filesize-npm-3.6.1-0ba25722e32fb000240c2679e304f64b8c85614e35edbffb7f06d1d5555aca96.zip/node_modules/filesize/", + "packageDependencies": [ + [ + "filesize", + "npm:3.6.1" + ] + ] + } + ] + ] + ], + [ + "fill-range", + [ + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/fill-range-npm-4.0.0-a9de1089cec01b30429d30db335b13c0f4b692be24b12bb08cf06a51c46fbd41.zip/node_modules/fill-range/", + "packageDependencies": [ + [ + "fill-range", + "npm:4.0.0" + ], + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "is-number", + "npm:3.0.0" + ], + [ + "repeat-string", + "npm:1.6.1" + ], + [ + "to-regex-range", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "finalhandler", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/finalhandler-npm-1.1.1-d8ef2f9b0da94f6fb2cc67120beb2607ce55cfbdd2918cc30d0cb71a4bcafa9d.zip/node_modules/finalhandler/", + "packageDependencies": [ + [ + "finalhandler", + "npm:1.1.1" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "encodeurl", + "npm:1.0.2" + ], + [ + "escape-html", + "npm:1.0.3" + ], + [ + "on-finished", + "npm:2.3.0" + ], + [ + "parseurl", + "npm:1.3.3" + ], + [ + "statuses", + "npm:1.4.0" + ], + [ + "unpipe", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "find-cache-dir", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/find-cache-dir-npm-2.1.0-a6910e99c7a4206b3c942cc8c4c135fde073b0eac27d8166e7531f6c3f95b442.zip/node_modules/find-cache-dir/", + "packageDependencies": [ + [ + "find-cache-dir", + "npm:2.1.0" + ], + [ + "commondir", + "npm:1.0.1" + ], + [ + "make-dir", + "npm:2.1.0" + ], + [ + "pkg-dir", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "find-up", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/find-up-npm-1.1.2-378d95a808befa9b21e508a5950c49b1784fc1dd8c3b299f1b5420b0c5614925.zip/node_modules/find-up/", + "packageDependencies": [ + [ + "find-up", + "npm:1.1.2" + ], + [ + "path-exists", + "npm:2.1.0" + ], + [ + "pinkie-promise", + "npm:2.0.1" + ] + ] + } + ], + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/find-up-npm-2.1.0-82532530c4c20a4d7c7eee34d017112b96ec3da331cb483248e21c73e73900b2.zip/node_modules/find-up/", + "packageDependencies": [ + [ + "find-up", + "npm:2.1.0" + ], + [ + "locate-path", + "npm:2.0.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/find-up-npm-3.0.0-b72ffc62708f9d33ff108e5d5e82e2de615873a01fcccf7fc307d1e107d99e4b.zip/node_modules/find-up/", + "packageDependencies": [ + [ + "find-up", + "npm:3.0.0" + ], + [ + "locate-path", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "findup-sync", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/findup-sync-npm-2.0.0-5a4ddeb93ae3a1ace2b5ef594f780db74bc9bd571239b7bafe90765cb282b6d7.zip/node_modules/findup-sync/", + "packageDependencies": [ + [ + "findup-sync", + "npm:2.0.0" + ], + [ + "detect-file", + "npm:1.0.0" + ], + [ + "is-glob", + "npm:3.1.0" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "resolve-dir", + "npm:1.0.1" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/findup-sync-npm-3.0.0-9512e62e08276188db84db9c9565844cc07805ff89702e3d3caef39888e55945.zip/node_modules/findup-sync/", + "packageDependencies": [ + [ + "findup-sync", + "npm:3.0.0" + ], + [ + "detect-file", + "npm:1.0.0" + ], + [ + "is-glob", + "npm:4.0.1" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "resolve-dir", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "fined", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/fined-npm-1.2.0-ba538f710110812fd7e29ec19f8c62ae2d24b83cd96626e6a22baa4210bd09ab.zip/node_modules/fined/", + "packageDependencies": [ + [ + "fined", + "npm:1.2.0" + ], + [ + "expand-tilde", + "npm:2.0.2" + ], + [ + "is-plain-object", + "npm:2.0.4" + ], + [ + "object.defaults", + "npm:1.1.0" + ], + [ + "object.pick", + "npm:1.3.0" + ], + [ + "parse-filepath", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "flagged-respawn", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/flagged-respawn-npm-1.0.1-aaee812f544d40443c07b262fbe7ce4a61c5a21ca8c5af4fc0792334b35c3810.zip/node_modules/flagged-respawn/", + "packageDependencies": [ + [ + "flagged-respawn", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "flat-cache", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/flat-cache-npm-2.0.1-03e211df3a6c6e70815837d8745893e1e08d218d1a7c4b4b4723091475be6a0e.zip/node_modules/flat-cache/", + "packageDependencies": [ + [ + "flat-cache", + "npm:2.0.1" + ], + [ + "flatted", + "npm:2.0.0" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "write", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "flatted", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/flatted-npm-2.0.0-64131378810757692544d2931eaeaebf92e6d5e4545082bf494c23af3664ea04.zip/node_modules/flatted/", + "packageDependencies": [ + [ + "flatted", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "flush-write-stream", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/flush-write-stream-npm-1.1.1-fd836ba4f4ad96f64d6ff63e7c3c01ae5c2748b17a1add8f3ade927c15ce35ec.zip/node_modules/flush-write-stream/", + "packageDependencies": [ + [ + "flush-write-stream", + "npm:1.1.1" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "follow-redirects", + [ + [ + "npm:1.7.0", + { + "packageLocation": "./.yarn/cache/follow-redirects-npm-1.7.0-da339789bc1486b3179304e15380d3bf39ea2d110e5ea82e9781e638b0c7508c.zip/node_modules/follow-redirects/", + "packageDependencies": [ + [ + "follow-redirects", + "npm:1.7.0" + ], + [ + "debug", + "npm:3.2.6" + ] + ] + } + ] + ] + ], + [ + "for-in", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/for-in-npm-1.0.2-80674b369492c5f1cd48156394b778dd412420208eb40e6b95e2b996cfb24f9f.zip/node_modules/for-in/", + "packageDependencies": [ + [ + "for-in", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "for-own", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/for-own-npm-1.0.0-5bf4429cd1173e1950e230f9675109db9435e68621bee9b1b0fc8cf006550047.zip/node_modules/for-own/", + "packageDependencies": [ + [ + "for-own", + "npm:1.0.0" + ], + [ + "for-in", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "forever-agent", + [ + [ + "npm:0.6.1", + { + "packageLocation": "./.yarn/cache/forever-agent-npm-0.6.1-de97addcb499e855a74a677355aed744cbbf9f651c5b67dabf919310e059b561.zip/node_modules/forever-agent/", + "packageDependencies": [ + [ + "forever-agent", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "fork-stream", + [ + [ + "npm:0.0.4", + { + "packageLocation": "./.yarn/cache/fork-stream-npm-0.0.4-bd5367e44f0597089f087704d0040dd0f31737130611a7a5545d5ea831632683.zip/node_modules/fork-stream/", + "packageDependencies": [ + [ + "fork-stream", + "npm:0.0.4" + ] + ] + } + ] + ] + ], + [ + "form-data", + [ + [ + "npm:2.3.3", + { + "packageLocation": "./.yarn/cache/form-data-npm-2.3.3-b450694158ee0e793bb2697af7656ea0ea459c145ae0edc4aa78b3d726201a8f.zip/node_modules/form-data/", + "packageDependencies": [ + [ + "form-data", + "npm:2.3.3" + ], + [ + "asynckit", + "npm:0.4.0" + ], + [ + "combined-stream", + "npm:1.0.7" + ], + [ + "mime-types", + "npm:2.1.24" + ] + ] + } + ] + ] + ], + [ + "forwarded", + [ + [ + "npm:0.1.2", + { + "packageLocation": "./.yarn/cache/forwarded-npm-0.1.2-65ede840a04f58df8eac7c2ef3402ca99c7973e7592365907062c520f81348f7.zip/node_modules/forwarded/", + "packageDependencies": [ + [ + "forwarded", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "fragment-cache", + [ + [ + "npm:0.2.1", + { + "packageLocation": "./.yarn/cache/fragment-cache-npm-0.2.1-1bd9e3928c25e1bf703a70e4d372c84248489cd64d3ffc0708a165db18e8b958.zip/node_modules/fragment-cache/", + "packageDependencies": [ + [ + "fragment-cache", + "npm:0.2.1" + ], + [ + "map-cache", + "npm:0.2.2" + ] + ] + } + ] + ] + ], + [ + "fresh", + [ + [ + "npm:0.5.2", + { + "packageLocation": "./.yarn/cache/fresh-npm-0.5.2-31548e78c6ae9260c4b396f5772afdc7112d202e2791e42ce976a2ec7f899186.zip/node_modules/fresh/", + "packageDependencies": [ + [ + "fresh", + "npm:0.5.2" + ] + ] + } + ] + ] + ], + [ + "from2", + [ + [ + "npm:2.3.0", + { + "packageLocation": "./.yarn/cache/from2-npm-2.3.0-36e9a8c13bfedf8c6ffcdce300bd9f0195c93ccc2576f8d747d1ad2fc2d5e9f5.zip/node_modules/from2/", + "packageDependencies": [ + [ + "from2", + "npm:2.3.0" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "fs-minipass", + [ + [ + "npm:1.2.5", + { + "packageLocation": "./.yarn/cache/fs-minipass-npm-1.2.5-f92a35c6aaefa3b57adc98310027a98574ebca87c29dce031458634789d3d88d.zip/node_modules/fs-minipass/", + "packageDependencies": [ + [ + "fs-minipass", + "npm:1.2.5" + ], + [ + "minipass", + "npm:2.3.5" + ] + ] + } + ] + ] + ], + [ + "fs-mkdirp-stream", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/fs-mkdirp-stream-npm-1.0.0-3f64a79474d7f5652e12c83bd04dfb110863e35a4b7d4d896b6f7581b9fbca9b.zip/node_modules/fs-mkdirp-stream/", + "packageDependencies": [ + [ + "fs-mkdirp-stream", + "npm:1.0.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "through2", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "fs-write-stream-atomic", + [ + [ + "npm:1.0.10", + { + "packageLocation": "./.yarn/cache/fs-write-stream-atomic-npm-1.0.10-11a6b126bf6de1e7e33b02e532d7cfdb17efeb60fa23adcdec0ee6a6093693a0.zip/node_modules/fs-write-stream-atomic/", + "packageDependencies": [ + [ + "fs-write-stream-atomic", + "npm:1.0.10" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "iferr", + "npm:0.1.5" + ], + [ + "imurmurhash", + "npm:0.1.4" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "fs.realpath", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/fs.realpath-npm-1.0.0-7db695eaa32929846a6b9c32a918d29bede6c8a58831ae3cb3ea82c221508d29.zip/node_modules/fs.realpath/", + "packageDependencies": [ + [ + "fs.realpath", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "fsevents", + [ + [ + "npm:1.2.8", + { + "packageLocation": "./.yarn/unplugged/fsevents-npm-1.2.8-c731014c103ef1b150f52ce6edd0d214eca4bddaa20015f61aaf22ec6f7afe12/node_modules/fsevents/", + "packageDependencies": [ + [ + "fsevents", + "npm:1.2.8" + ], + [ + "nan", + "npm:2.13.2" + ], + [ + "node-pre-gyp", + "npm:0.12.0" + ] + ] + } + ] + ] + ], + [ + "function-bind", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/function-bind-npm-1.1.1-4ddbd7791f0a227f96a1aeb55e2382d363bc90c5eb8e01e160a3266a567168d6.zip/node_modules/function-bind/", + "packageDependencies": [ + [ + "function-bind", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "functional-red-black-tree", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/functional-red-black-tree-npm-1.0.1-8fc18118ea58331ba6466c6047515abf742f13af0ab1db7ddc8c737fee933e51.zip/node_modules/functional-red-black-tree/", + "packageDependencies": [ + [ + "functional-red-black-tree", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "gauge", + [ + [ + "npm:2.7.4", + { + "packageLocation": "./.yarn/cache/gauge-npm-2.7.4-c8e330d985dc3f00bc95538efc471b1af785e0de2f840ccb16b761a4dbb38dda.zip/node_modules/gauge/", + "packageDependencies": [ + [ + "gauge", + "npm:2.7.4" + ], + [ + "aproba", + "npm:1.2.0" + ], + [ + "console-control-strings", + "npm:1.1.0" + ], + [ + "has-unicode", + "npm:2.0.1" + ], + [ + "object-assign", + "npm:4.1.1" + ], + [ + "signal-exit", + "npm:3.0.2" + ], + [ + "string-width", + "npm:1.0.2" + ], + [ + "strip-ansi", + "npm:3.0.1" + ], + [ + "wide-align", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "get-caller-file", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/get-caller-file-npm-1.0.3-b61870dd3a7903b328519bc5ed9410e5353dad3d45bb6e7c02435f8218ac8929.zip/node_modules/get-caller-file/", + "packageDependencies": [ + [ + "get-caller-file", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "get-stdin", + [ + [ + "npm:6.0.0", + { + "packageLocation": "./.yarn/cache/get-stdin-npm-6.0.0-80bd9588ae2b9c47f948318d8db625467aa4bd1f1f0b0324ee375d0f3995d761.zip/node_modules/get-stdin/", + "packageDependencies": [ + [ + "get-stdin", + "npm:6.0.0" + ] + ] + } + ] + ] + ], + [ + "get-stream", + [ + [ + "npm:4.1.0", + { + "packageLocation": "./.yarn/cache/get-stream-npm-4.1.0-81a3ec758bfa2fc11aca66841e1a83030994079877f6193a70f73685979b267f.zip/node_modules/get-stream/", + "packageDependencies": [ + [ + "get-stream", + "npm:4.1.0" + ], + [ + "pump", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "get-value", + [ + [ + "npm:2.0.6", + { + "packageLocation": "./.yarn/cache/get-value-npm-2.0.6-16c84a511c8d28dacd1d31e2e1072281ab87aad07318a87a02545e0e9d42cc9b.zip/node_modules/get-value/", + "packageDependencies": [ + [ + "get-value", + "npm:2.0.6" + ] + ] + } + ] + ] + ], + [ + "getpass", + [ + [ + "npm:0.1.7", + { + "packageLocation": "./.yarn/cache/getpass-npm-0.1.7-134cf8bf954e0fcd295d231d1d8ac70deaabb3dd8c24a99e04da6bd5809f944d.zip/node_modules/getpass/", + "packageDependencies": [ + [ + "getpass", + "npm:0.1.7" + ], + [ + "assert-plus", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "glob", + [ + [ + "npm:7.1.3", + { + "packageLocation": "./.yarn/cache/glob-npm-7.1.3-ec729739fb851527d864ff1088e0f44f9019698371bb279ae87aa7eb9bf7fabd.zip/node_modules/glob/", + "packageDependencies": [ + [ + "glob", + "npm:7.1.3" + ], + [ + "fs.realpath", + "npm:1.0.0" + ], + [ + "inflight", + "npm:1.0.6" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "minimatch", + "npm:3.0.4" + ], + [ + "once", + "npm:1.4.0" + ], + [ + "path-is-absolute", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "glob-parent", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/glob-parent-npm-3.1.0-62b4539536f38f14a9c22f72d4ddb2e8470ed3e920ed2faeee5ecfd4a41229ce.zip/node_modules/glob-parent/", + "packageDependencies": [ + [ + "glob-parent", + "npm:3.1.0" + ], + [ + "is-glob", + "npm:3.1.0" + ], + [ + "path-dirname", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "glob-stream", + [ + [ + "npm:6.1.0", + { + "packageLocation": "./.yarn/cache/glob-stream-npm-6.1.0-99cdcac2160ae019db8c39a62a829212fd814105771c0eefe783f2da35a72d71.zip/node_modules/glob-stream/", + "packageDependencies": [ + [ + "glob-stream", + "npm:6.1.0" + ], + [ + "extend", + "npm:3.0.2" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "glob-parent", + "npm:3.1.0" + ], + [ + "is-negated-glob", + "npm:1.0.0" + ], + [ + "ordered-read-streams", + "npm:1.0.1" + ], + [ + "pumpify", + "npm:1.5.1" + ], + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "remove-trailing-separator", + "npm:1.1.0" + ], + [ + "to-absolute-glob", + "npm:2.0.2" + ], + [ + "unique-stream", + "npm:2.3.1" + ] + ] + } + ] + ] + ], + [ + "glob-watcher", + [ + [ + "npm:5.0.3", + { + "packageLocation": "./.yarn/cache/glob-watcher-npm-5.0.3-cc4f79cafc709d45a8ead34d81752345bcca030501f3123c3bb325733fcb672b.zip/node_modules/glob-watcher/", + "packageDependencies": [ + [ + "glob-watcher", + "npm:5.0.3" + ], + [ + "anymatch", + "npm:2.0.0" + ], + [ + "async-done", + "npm:1.3.1" + ], + [ + "chokidar", + "npm:2.1.5" + ], + [ + "is-negated-glob", + "npm:1.0.0" + ], + [ + "just-debounce", + "npm:1.0.0" + ], + [ + "object.defaults", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "global-modules", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/global-modules-npm-1.0.0-cf2a884616f6ed55b5844a418bbf7b484f0e0767d0deef7f4322e63d54004ae4.zip/node_modules/global-modules/", + "packageDependencies": [ + [ + "global-modules", + "npm:1.0.0" + ], + [ + "global-prefix", + "npm:1.0.2" + ], + [ + "is-windows", + "npm:1.0.2" + ], + [ + "resolve-dir", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "global-prefix", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/global-prefix-npm-1.0.2-c3a8af15ee7d7098275be4304cc79abd74f4bd43d3a2048d70b759d0429d2d55.zip/node_modules/global-prefix/", + "packageDependencies": [ + [ + "global-prefix", + "npm:1.0.2" + ], + [ + "expand-tilde", + "npm:2.0.2" + ], + [ + "homedir-polyfill", + "npm:1.0.3" + ], + [ + "ini", + "npm:1.3.5" + ], + [ + "is-windows", + "npm:1.0.2" + ], + [ + "which", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "globals", + [ + [ + "npm:11.11.0", + { + "packageLocation": "./.yarn/cache/globals-npm-11.11.0-dc5622de1c04165f4d697129d09cf22e10e4a9260d00d8617a9c88eeddad4c6b.zip/node_modules/globals/", + "packageDependencies": [ + [ + "globals", + "npm:11.11.0" + ] + ] + } + ] + ] + ], + [ + "glogg", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/glogg-npm-1.0.2-19138e070c4bd541934b9dab11ddd846886d1c46c8248bf741ca66339fcc9bdd.zip/node_modules/glogg/", + "packageDependencies": [ + [ + "glogg", + "npm:1.0.2" + ], + [ + "sparkles", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "graceful-fs", + [ + [ + "npm:4.1.15", + { + "packageLocation": "./.yarn/cache/graceful-fs-npm-4.1.15-e2b29e95dfbf48f44c6700f2c5a64decc07897141ab3fdd1e2ca5a39494bd4d0.zip/node_modules/graceful-fs/", + "packageDependencies": [ + [ + "graceful-fs", + "npm:4.1.15" + ] + ] + } + ] + ] + ], + [ + "growly", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/growly-npm-1.3.0-ab183aae4aece5725a7468cb63a6fafc5af7de8676081b240cc1c21bb63130ba.zip/node_modules/growly/", + "packageDependencies": [ + [ + "growly", + "npm:1.3.0" + ] + ] + } + ] + ] + ], + [ + "gulp", + [ + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/gulp-npm-4.0.1-18de2d70e9b481024bb148bc7f0b3b08d06d01e78afc4ecb70d9b319478752cf.zip/node_modules/gulp/", + "packageDependencies": [ + [ + "gulp", + "npm:4.0.1" + ], + [ + "glob-watcher", + "npm:5.0.3" + ], + [ + "gulp-cli", + "npm:2.2.0" + ], + [ + "undertaker", + "npm:1.2.1" + ], + [ + "vinyl-fs", + "npm:3.0.3" + ] + ] + } + ] + ] + ], + [ + "gulp-cli", + [ + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/gulp-cli-npm-2.2.0-26046ef436e5f28fbbb6250ddbff1ecdd2996f56843edce5e414afe65512c9b1.zip/node_modules/gulp-cli/", + "packageDependencies": [ + [ + "gulp-cli", + "npm:2.2.0" + ], + [ + "ansi-colors", + "npm:1.1.0" + ], + [ + "archy", + "npm:1.0.0" + ], + [ + "array-sort", + "npm:1.0.0" + ], + [ + "color-support", + "npm:1.1.3" + ], + [ + "concat-stream", + "npm:1.6.2" + ], + [ + "copy-props", + "npm:2.0.4" + ], + [ + "fancy-log", + "npm:1.3.3" + ], + [ + "gulplog", + "npm:1.0.0" + ], + [ + "interpret", + "npm:1.2.0" + ], + [ + "isobject", + "npm:3.0.1" + ], + [ + "liftoff", + "npm:3.1.0" + ], + [ + "matchdep", + "npm:2.0.0" + ], + [ + "mute-stdout", + "npm:1.0.1" + ], + [ + "pretty-hrtime", + "npm:1.0.3" + ], + [ + "replace-homedir", + "npm:1.0.0" + ], + [ + "semver-greatest-satisfied-range", + "npm:1.1.0" + ], + [ + "v8flags", + "npm:3.1.2" + ], + [ + "yargs", + "npm:7.1.0" + ] + ] + } + ] + ] + ], + [ + "gulp-if", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/gulp-if-npm-2.0.2-a4d000908e472fd3fb4d369646c037ff0b6fbce6393d4b2932b88083989e7b50.zip/node_modules/gulp-if/", + "packageDependencies": [ + [ + "gulp-if", + "npm:2.0.2" + ], + [ + "gulp-match", + "npm:1.0.3" + ], + [ + "ternary-stream", + "npm:2.0.1" + ], + [ + "through2", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "gulp-match", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/gulp-match-npm-1.0.3-02cc46e4efc0b52e24826767f29ba9f7eadea145635b972bd76ab0bc0777f620.zip/node_modules/gulp-match/", + "packageDependencies": [ + [ + "gulp-match", + "npm:1.0.3" + ], + [ + "minimatch", + "npm:3.0.4" + ] + ] + } + ] + ] + ], + [ + "gulp-uglify", + [ + [ + "npm:3.0.2", + { + "packageLocation": "./.yarn/cache/gulp-uglify-npm-3.0.2-dbe13ba0388c444f60105fa1dae6808ef6d1bcd37c455c4c2a0737e48b673e9a.zip/node_modules/gulp-uglify/", + "packageDependencies": [ + [ + "gulp-uglify", + "npm:3.0.2" + ], + [ + "array-each", + "npm:1.0.1" + ], + [ + "extend-shallow", + "npm:3.0.2" + ], + [ + "gulplog", + "npm:1.0.0" + ], + [ + "has-gulplog", + "npm:0.1.0" + ], + [ + "isobject", + "npm:3.0.1" + ], + [ + "make-error-cause", + "npm:1.2.2" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "through2", + "npm:2.0.5" + ], + [ + "uglify-js", + "npm:3.5.9" + ], + [ + "vinyl-sourcemaps-apply", + "npm:0.2.1" + ] + ] + } + ] + ] + ], + [ + "gulplog", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/gulplog-npm-1.0.0-917f45c4b60ad7c637aeb63a883151664e5595c81413ed2f82226a6ecced2a3b.zip/node_modules/gulplog/", + "packageDependencies": [ + [ + "gulplog", + "npm:1.0.0" + ], + [ + "glogg", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "gzip-size", + [ + [ + "npm:5.1.0", + { + "packageLocation": "./.yarn/cache/gzip-size-npm-5.1.0-72161354de3ea72ae3b6445e91623704135bbe18ed88884d7e38f0c01abda53f.zip/node_modules/gzip-size/", + "packageDependencies": [ + [ + "gzip-size", + "npm:5.1.0" + ], + [ + "duplexer", + "npm:0.1.1" + ], + [ + "pify", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "handlebars", + [ + [ + "npm:4.1.2", + { + "packageLocation": "./.yarn/cache/handlebars-npm-4.1.2-32cd49bef84655344aa077b4a3a1b0fa1c5d117437273970172be28e085d82b1.zip/node_modules/handlebars/", + "packageDependencies": [ + [ + "handlebars", + "npm:4.1.2" + ], + [ + "neo-async", + "npm:2.6.0" + ], + [ + "optimist", + "npm:0.6.1" + ], + [ + "source-map", + "npm:0.6.1" + ], + [ + "uglify-js", + "npm:3.5.9" + ] + ] + } + ] + ] + ], + [ + "har-schema", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/har-schema-npm-2.0.0-d792202545d44d4e720c8b751215cad397ff712cec7e8898b1c1d52086b4bcf9.zip/node_modules/har-schema/", + "packageDependencies": [ + [ + "har-schema", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "har-validator", + [ + [ + "npm:5.1.3", + { + "packageLocation": "./.yarn/cache/har-validator-npm-5.1.3-662084cd234c1775c071a25a4d652b092b50a05c33332696efa0e64dc98bfe42.zip/node_modules/har-validator/", + "packageDependencies": [ + [ + "har-validator", + "npm:5.1.3" + ], + [ + "ajv", + "npm:6.10.0" + ], + [ + "har-schema", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "has", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/has-npm-1.0.3-d46bb3c638525b04e490699e4ede2e8302c4257b4b1f2ebd22602478ace9dc59.zip/node_modules/has/", + "packageDependencies": [ + [ + "has", + "npm:1.0.3" + ], + [ + "function-bind", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "has-flag", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/has-flag-npm-3.0.0-10521961b1091b4d524012f76e184b884e618ace2ed90a3902428b670c8de74a.zip/node_modules/has-flag/", + "packageDependencies": [ + [ + "has-flag", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "has-gulplog", + [ + [ + "npm:0.1.0", + { + "packageLocation": "./.yarn/cache/has-gulplog-npm-0.1.0-bfe97f3a0733c1b8bb13ceb00bfd96e5e706bdbf9b9dab9d831ba862a086957b.zip/node_modules/has-gulplog/", + "packageDependencies": [ + [ + "has-gulplog", + "npm:0.1.0" + ], + [ + "sparkles", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "has-symbols", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/has-symbols-npm-1.0.0-2aae1b0e792fa17bd3e6c596fd4ae0addc361b128cc4f33b490dbbebd0595f28.zip/node_modules/has-symbols/", + "packageDependencies": [ + [ + "has-symbols", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "has-unicode", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/has-unicode-npm-2.0.1-7a402898e1a906389dda7c4e0b925979b9fbc6405fd33bc6eab6e66b123edf09.zip/node_modules/has-unicode/", + "packageDependencies": [ + [ + "has-unicode", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "has-value", + [ + [ + "npm:0.3.1", + { + "packageLocation": "./.yarn/cache/has-value-npm-0.3.1-be97112edf506bc8eab1a221b656dea0d76a732cc9e37b426b095b36ef876aff.zip/node_modules/has-value/", + "packageDependencies": [ + [ + "has-value", + "npm:0.3.1" + ], + [ + "get-value", + "npm:2.0.6" + ], + [ + "has-values", + "npm:0.1.4" + ], + [ + "isobject", + "npm:2.1.0" + ] + ] + } + ], + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/has-value-npm-1.0.0-18f144a71688b3e671aee7582347897ad1e75bb6b6aa76cad1fecde47b2cc0ca.zip/node_modules/has-value/", + "packageDependencies": [ + [ + "has-value", + "npm:1.0.0" + ], + [ + "get-value", + "npm:2.0.6" + ], + [ + "has-values", + "npm:1.0.0" + ], + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "has-values", + [ + [ + "npm:0.1.4", + { + "packageLocation": "./.yarn/cache/has-values-npm-0.1.4-9b7429bc89defaaf26683be17472d36c6600d9a567e9c6d2b8825e416f857769.zip/node_modules/has-values/", + "packageDependencies": [ + [ + "has-values", + "npm:0.1.4" + ] + ] + } + ], + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/has-values-npm-1.0.0-e8a910046a182bad6460ea2915d5ed6e454a78dddb64a29e53d6d5ff7f70187e.zip/node_modules/has-values/", + "packageDependencies": [ + [ + "has-values", + "npm:1.0.0" + ], + [ + "is-number", + "npm:3.0.0" + ], + [ + "kind-of", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "hash-base", + [ + [ + "npm:3.0.4", + { + "packageLocation": "./.yarn/cache/hash-base-npm-3.0.4-6875e362efa0236e047bcb9ffe05b7d8fca583c06305fc0fe47e24ef90a32b95.zip/node_modules/hash-base/", + "packageDependencies": [ + [ + "hash-base", + "npm:3.0.4" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "hash.js", + [ + [ + "npm:1.1.7", + { + "packageLocation": "./.yarn/cache/hash.js-npm-1.1.7-190daeb7c6588ec6f1f8371d67be77f9cfdd265947407f5f624ac173f8b55ecb.zip/node_modules/hash.js/", + "packageDependencies": [ + [ + "hash.js", + "npm:1.1.7" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "minimalistic-assert", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "he", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/he-npm-1.2.0-f4b5d2240129bf42271fb98d8207b57c8f918e34f86b57ec841915d00483676d.zip/node_modules/he/", + "packageDependencies": [ + [ + "he", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "hmac-drbg", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/hmac-drbg-npm-1.0.1-c26cb36f5d6323d1707de7249948b5799bc0af9023f99bf287163accb5623828.zip/node_modules/hmac-drbg/", + "packageDependencies": [ + [ + "hmac-drbg", + "npm:1.0.1" + ], + [ + "hash.js", + "npm:1.1.7" + ], + [ + "minimalistic-assert", + "npm:1.0.1" + ], + [ + "minimalistic-crypto-utils", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "homedir-polyfill", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/homedir-polyfill-npm-1.0.3-8e5502b9277c34ae08bc333686eabac69e54b232794a11b31a92b8c3b50de481.zip/node_modules/homedir-polyfill/", + "packageDependencies": [ + [ + "homedir-polyfill", + "npm:1.0.3" + ], + [ + "parse-passwd", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "hoopy", + [ + [ + "npm:0.1.4", + { + "packageLocation": "./.yarn/cache/hoopy-npm-0.1.4-7305cd7217a1b923bc502b3bd1baa34f61174a2bc3b8e50a3cdfc73ffca7b066.zip/node_modules/hoopy/", + "packageDependencies": [ + [ + "hoopy", + "npm:0.1.4" + ] + ] + } + ] + ] + ], + [ + "hosted-git-info", + [ + [ + "npm:2.7.1", + { + "packageLocation": "./.yarn/cache/hosted-git-info-npm-2.7.1-05a68590a226dd81d51c257cc6acbedc34d185e5f6726b8cfb0511030fdfbba2.zip/node_modules/hosted-git-info/", + "packageDependencies": [ + [ + "hosted-git-info", + "npm:2.7.1" + ] + ] + } + ] + ] + ], + [ + "html-encoding-sniffer", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/html-encoding-sniffer-npm-1.0.2-1eaf38025556ce1dabecb95a7b82989da9440124d903d777af37d06394b047d8.zip/node_modules/html-encoding-sniffer/", + "packageDependencies": [ + [ + "html-encoding-sniffer", + "npm:1.0.2" + ], + [ + "whatwg-encoding", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "html-minifier", + [ + [ + "npm:3.5.21", + { + "packageLocation": "./.yarn/cache/html-minifier-npm-3.5.21-43e9f1d704410cc45ba5fbebcf84d8abd9127ec51c958d7419efc95c54e16f5f.zip/node_modules/html-minifier/", + "packageDependencies": [ + [ + "html-minifier", + "npm:3.5.21" + ], + [ + "camel-case", + "npm:3.0.0" + ], + [ + "clean-css", + "npm:4.2.1" + ], + [ + "commander", + "npm:2.17.1" + ], + [ + "he", + "npm:1.2.0" + ], + [ + "param-case", + "npm:2.1.1" + ], + [ + "relateurl", + "npm:0.2.7" + ], + [ + "uglify-js", + "npm:3.4.10" + ] + ] + } + ] + ] + ], + [ + "html-webpack-plugin", + [ + [ + "npm:3.2.0", + { + "packageLocation": "./.yarn/cache/html-webpack-plugin-npm-3.2.0-c38756d7ffd42a10430c6316687549343d340280de06f46c1476c83b1e5f2310.zip/node_modules/html-webpack-plugin/", + "packageDependencies": [ + [ + "html-webpack-plugin", + "npm:3.2.0" + ], + [ + "html-minifier", + "npm:3.5.21" + ], + [ + "loader-utils", + "npm:0.2.17" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "pretty-error", + "npm:2.1.1" + ], + [ + "tapable", + "npm:1.1.3" + ], + [ + "toposort", + "npm:1.0.7" + ], + [ + "util.promisify", + "npm:1.0.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.2.0", + { + "packageLocation": "./.yarn/virtual/html-webpack-plugin-virtual-c18bbfdbe726957937656e047ab2913673477ad66bfbff6dbb62ca59b7637417/node_modules/html-webpack-plugin/", + "packageDependencies": [ + [ + "html-webpack-plugin", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.2.0" + ], + [ + "html-minifier", + "npm:3.5.21" + ], + [ + "loader-utils", + "npm:0.2.17" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "pretty-error", + "npm:2.1.1" + ], + [ + "tapable", + "npm:1.1.3" + ], + [ + "toposort", + "npm:1.0.7" + ], + [ + "util.promisify", + "npm:1.0.0" + ], + [ + "webpack", + "npm:4.30.0" + ] + ] + } + ] + ] + ], + [ + "htmlparser2", + [ + [ + "npm:3.10.1", + { + "packageLocation": "./.yarn/cache/htmlparser2-npm-3.10.1-c85d666bd151a7dd61e522a347fcf2bd27c53ef81ee4697e6807b2ed20991dd9.zip/node_modules/htmlparser2/", + "packageDependencies": [ + [ + "htmlparser2", + "npm:3.10.1" + ], + [ + "domelementtype", + "npm:1.3.1" + ], + [ + "domhandler", + "npm:2.4.2" + ], + [ + "domutils", + "npm:1.7.0" + ], + [ + "entities", + "npm:1.1.2" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:3.3.0" + ] + ] + } + ] + ] + ], + [ + "http-errors", + [ + [ + "npm:1.6.3", + { + "packageLocation": "./.yarn/cache/http-errors-npm-1.6.3-8f0ec7bc7975fc0fded7c2b468163f1ce1bed1155f13f193d797a955e5962ae4.zip/node_modules/http-errors/", + "packageDependencies": [ + [ + "http-errors", + "npm:1.6.3" + ], + [ + "depd", + "npm:1.1.2" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "setprototypeof", + "npm:1.1.0" + ], + [ + "statuses", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "http-proxy", + [ + [ + "npm:1.17.0", + { + "packageLocation": "./.yarn/cache/http-proxy-npm-1.17.0-592e7382602591b2e8463dce970b41469e03dcaa91c45f0108638bbf58db6017.zip/node_modules/http-proxy/", + "packageDependencies": [ + [ + "http-proxy", + "npm:1.17.0" + ], + [ + "eventemitter3", + "npm:3.1.0" + ], + [ + "follow-redirects", + "npm:1.7.0" + ], + [ + "requires-port", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "http-server", + [ + [ + "npm:0.11.1", + { + "packageLocation": "./.yarn/cache/http-server-npm-0.11.1-fa702abdb5cc48c30c10de7c622ed1c4d9e3ae743aae9d8468fe32383c3509aa.zip/node_modules/http-server/", + "packageDependencies": [ + [ + "http-server", + "npm:0.11.1" + ], + [ + "colors", + "npm:1.0.3" + ], + [ + "corser", + "npm:2.0.1" + ], + [ + "ecstatic", + "npm:3.3.1" + ], + [ + "http-proxy", + "npm:1.17.0" + ], + [ + "opener", + "npm:1.4.3" + ], + [ + "optimist", + "npm:0.6.1" + ], + [ + "portfinder", + "npm:1.0.20" + ], + [ + "union", + "npm:0.4.6" + ] + ] + } + ] + ] + ], + [ + "http-signature", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/http-signature-npm-1.2.0-7e120046e581f9c3ae1cace19cde714fa3e9963536b859ab41d02da2e33f781f.zip/node_modules/http-signature/", + "packageDependencies": [ + [ + "http-signature", + "npm:1.2.0" + ], + [ + "assert-plus", + "npm:1.0.0" + ], + [ + "jsprim", + "npm:1.4.1" + ], + [ + "sshpk", + "npm:1.16.1" + ] + ] + } + ] + ] + ], + [ + "https-browserify", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/https-browserify-npm-1.0.0-a2c8762f53e02826e856ee1e8e2c069e473aa4802acdccbdf1f7960d5f863a76.zip/node_modules/https-browserify/", + "packageDependencies": [ + [ + "https-browserify", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "iconv-lite", + [ + [ + "npm:0.4.23", + { + "packageLocation": "./.yarn/cache/iconv-lite-npm-0.4.23-9f2d9b65c83acaaf18f5b74d3b4904ec3a293b3692b41a7dd4e286b4b6d46f8c.zip/node_modules/iconv-lite/", + "packageDependencies": [ + [ + "iconv-lite", + "npm:0.4.23" + ], + [ + "safer-buffer", + "npm:2.1.2" + ] + ] + } + ], + [ + "npm:0.4.24", + { + "packageLocation": "./.yarn/cache/iconv-lite-npm-0.4.24-2aca78ffe674ea8948d05359fbf3693fa330c42bed3e85e90cc3027ebf3bfd5c.zip/node_modules/iconv-lite/", + "packageDependencies": [ + [ + "iconv-lite", + "npm:0.4.24" + ], + [ + "safer-buffer", + "npm:2.1.2" + ] + ] + } + ] + ] + ], + [ + "ieee754", + [ + [ + "npm:1.1.13", + { + "packageLocation": "./.yarn/cache/ieee754-npm-1.1.13-df05dccb78b032be54db884f0dcf5550b1faf2a8aeaf0521a802b74eeeca62d3.zip/node_modules/ieee754/", + "packageDependencies": [ + [ + "ieee754", + "npm:1.1.13" + ] + ] + } + ] + ] + ], + [ + "iferr", + [ + [ + "npm:0.1.5", + { + "packageLocation": "./.yarn/cache/iferr-npm-0.1.5-9fdc3d859e9eeae5c700e5d4db79fb864e97c0091b559c31d2357a64e0538802.zip/node_modules/iferr/", + "packageDependencies": [ + [ + "iferr", + "npm:0.1.5" + ] + ] + } + ] + ] + ], + [ + "ignore", + [ + [ + "npm:4.0.6", + { + "packageLocation": "./.yarn/cache/ignore-npm-4.0.6-02d97c6cce85305518641bba9cc845df040f2997c6ba5c2a154c90c8c8a44e5d.zip/node_modules/ignore/", + "packageDependencies": [ + [ + "ignore", + "npm:4.0.6" + ] + ] + } + ] + ] + ], + [ + "ignore-walk", + [ + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/ignore-walk-npm-3.0.1-effc119aff28c334ee656e92aafa876d5a5e330066f8a32812d071d7044bfdf2.zip/node_modules/ignore-walk/", + "packageDependencies": [ + [ + "ignore-walk", + "npm:3.0.1" + ], + [ + "minimatch", + "npm:3.0.4" + ] + ] + } + ] + ] + ], + [ + "import-fresh", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/import-fresh-npm-3.0.0-502402a43c333cfe14963176d92f82902e7665a3dbe2171ef4501ed233147d87.zip/node_modules/import-fresh/", + "packageDependencies": [ + [ + "import-fresh", + "npm:3.0.0" + ], + [ + "parent-module", + "npm:1.0.1" + ], + [ + "resolve-from", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "import-local", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/import-local-npm-2.0.0-1f0355f8234c7ddae065422b901b1ca27671329641c045bd0c954d8289d79a4c.zip/node_modules/import-local/", + "packageDependencies": [ + [ + "import-local", + "npm:2.0.0" + ], + [ + "pkg-dir", + "npm:3.0.0" + ], + [ + "resolve-cwd", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "imurmurhash", + [ + [ + "npm:0.1.4", + { + "packageLocation": "./.yarn/cache/imurmurhash-npm-0.1.4-4d36ddbb41f48af0eaaf73ff45c6f0165c9820553860c0e04e6a5da0ec6cefe4.zip/node_modules/imurmurhash/", + "packageDependencies": [ + [ + "imurmurhash", + "npm:0.1.4" + ] + ] + } + ] + ] + ], + [ + "indexof", + [ + [ + "npm:0.0.1", + { + "packageLocation": "./.yarn/cache/indexof-npm-0.0.1-16c276273d73578f3a8978eb9bb3b98a3141afdfd19f1513a03a4be6a5a20935.zip/node_modules/indexof/", + "packageDependencies": [ + [ + "indexof", + "npm:0.0.1" + ] + ] + } + ] + ] + ], + [ + "inflight", + [ + [ + "npm:1.0.6", + { + "packageLocation": "./.yarn/cache/inflight-npm-1.0.6-6b64590cca3d7181b95b8b68df1bc2730708cd42ddb4714836fbc15f2b5c3a67.zip/node_modules/inflight/", + "packageDependencies": [ + [ + "inflight", + "npm:1.0.6" + ], + [ + "once", + "npm:1.4.0" + ], + [ + "wrappy", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "inherits", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/inherits-npm-2.0.1-043dbfa06e30f4ef9c7cffc0ca18893b893de3e061bef38c6d5181b2eb209f4d.zip/node_modules/inherits/", + "packageDependencies": [ + [ + "inherits", + "npm:2.0.1" + ] + ] + } + ], + [ + "npm:2.0.3", + { + "packageLocation": "./.yarn/cache/inherits-npm-2.0.3-e19eb77b24e64bb2d4d7788ff76c8110603a81f439d57159d83a54a866be38ea.zip/node_modules/inherits/", + "packageDependencies": [ + [ + "inherits", + "npm:2.0.3" + ] + ] + } + ] + ] + ], + [ + "ini", + [ + [ + "npm:1.3.5", + { + "packageLocation": "./.yarn/cache/ini-npm-1.3.5-7a773e942b0e9c82dddeda0f11fc5730139a1973f0f1640a6dabb1bfc5177640.zip/node_modules/ini/", + "packageDependencies": [ + [ + "ini", + "npm:1.3.5" + ] + ] + } + ] + ] + ], + [ + "inquirer", + [ + [ + "npm:6.3.1", + { + "packageLocation": "./.yarn/cache/inquirer-npm-6.3.1-258ec7ab4b0d5254bbd3ed67667bf2e8d636cb6d7ba23b19a7e86e5d08cd5e7a.zip/node_modules/inquirer/", + "packageDependencies": [ + [ + "inquirer", + "npm:6.3.1" + ], + [ + "ansi-escapes", + "npm:3.2.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "cli-cursor", + "npm:2.1.0" + ], + [ + "cli-width", + "npm:2.2.0" + ], + [ + "external-editor", + "npm:3.0.3" + ], + [ + "figures", + "npm:2.0.0" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "mute-stream", + "npm:0.0.7" + ], + [ + "run-async", + "npm:2.3.0" + ], + [ + "rxjs", + "npm:6.5.1" + ], + [ + "string-width", + "npm:2.1.1" + ], + [ + "strip-ansi", + "npm:5.2.0" + ], + [ + "through", + "npm:2.3.8" + ] + ] + } + ] + ] + ], + [ + "interpret", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/interpret-npm-1.2.0-67a376a079dd6a0adda39e7cdbd2c9c4f24845392e139f32a25aad614b2ff173.zip/node_modules/interpret/", + "packageDependencies": [ + [ + "interpret", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "invariant", + [ + [ + "npm:2.2.4", + { + "packageLocation": "./.yarn/cache/invariant-npm-2.2.4-d4fe9fef7d27475f6dbf4eaaaf677bf09e785924a8f7248d410906039bb44337.zip/node_modules/invariant/", + "packageDependencies": [ + [ + "invariant", + "npm:2.2.4" + ], + [ + "loose-envify", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "invert-kv", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/invert-kv-npm-1.0.0-97cafaec8a4bfa03bfc6ba6787a7c9d119d44d4d8110ec3e967697f9aff9996e.zip/node_modules/invert-kv/", + "packageDependencies": [ + [ + "invert-kv", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/invert-kv-npm-2.0.0-a13c12ae68215e2dd4607c309c9754ad5945168e00c2fe60f42d20535533e523.zip/node_modules/invert-kv/", + "packageDependencies": [ + [ + "invert-kv", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "ipaddr.js", + [ + [ + "npm:1.9.0", + { + "packageLocation": "./.yarn/cache/ipaddr.js-npm-1.9.0-daf83ab8980982d7ecf2944df4bec1727cd790cf833f9537f83f3f648ca97b98.zip/node_modules/ipaddr.js/", + "packageDependencies": [ + [ + "ipaddr.js", + "npm:1.9.0" + ] + ] + } + ] + ] + ], + [ + "is-absolute", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-absolute-npm-1.0.0-ef06908634fdb07179fdcd33959d421d7bf485956789e3ae8b638e7cb390267d.zip/node_modules/is-absolute/", + "packageDependencies": [ + [ + "is-absolute", + "npm:1.0.0" + ], + [ + "is-relative", + "npm:1.0.0" + ], + [ + "is-windows", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "is-accessor-descriptor", + [ + [ + "npm:0.1.6", + { + "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-0.1.6-fd94230b50de73a71ad4c5ddb14658ff09e04b5a73fadd3acb5aec8d22270206.zip/node_modules/is-accessor-descriptor/", + "packageDependencies": [ + [ + "is-accessor-descriptor", + "npm:0.1.6" + ], + [ + "kind-of", + "npm:3.2.2" + ] + ] + } + ], + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-accessor-descriptor-npm-1.0.0-38dfa664ffcb9bad107b0a1e13f2d78a1e93ca5ec82aac5e57762457ee4dd7c7.zip/node_modules/is-accessor-descriptor/", + "packageDependencies": [ + [ + "is-accessor-descriptor", + "npm:1.0.0" + ], + [ + "kind-of", + "npm:6.0.2" + ] + ] + } + ] + ] + ], + [ + "is-arrayish", + [ + [ + "npm:0.2.1", + { + "packageLocation": "./.yarn/cache/is-arrayish-npm-0.2.1-18e3d76c6a30bed4b2573788172a1ed87ce894439143403dea9578969b5cf1f1.zip/node_modules/is-arrayish/", + "packageDependencies": [ + [ + "is-arrayish", + "npm:0.2.1" + ] + ] + } + ] + ] + ], + [ + "is-binary-path", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/is-binary-path-npm-1.0.1-88083bb5a53c0561afcbe8c01a2da5aab9048f2128451dd9d0135418654ba936.zip/node_modules/is-binary-path/", + "packageDependencies": [ + [ + "is-binary-path", + "npm:1.0.1" + ], + [ + "binary-extensions", + "npm:1.13.1" + ] + ] + } + ] + ] + ], + [ + "is-buffer", + [ + [ + "npm:1.1.6", + { + "packageLocation": "./.yarn/cache/is-buffer-npm-1.1.6-355c30f3153a6e90db03e130074ec9db893083a3894d63d75cc048415e5c4f9c.zip/node_modules/is-buffer/", + "packageDependencies": [ + [ + "is-buffer", + "npm:1.1.6" + ] + ] + } + ] + ] + ], + [ + "is-callable", + [ + [ + "npm:1.1.4", + { + "packageLocation": "./.yarn/cache/is-callable-npm-1.1.4-8780dcaa768f614b2a1868790280529224f319e70a8bc9434331682e02d2b23a.zip/node_modules/is-callable/", + "packageDependencies": [ + [ + "is-callable", + "npm:1.1.4" + ] + ] + } + ] + ] + ], + [ + "is-ci", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/is-ci-npm-2.0.0-4faa81335ce22f95ae01605d6baac03cc6822ceed284019230a406345c25c67a.zip/node_modules/is-ci/", + "packageDependencies": [ + [ + "is-ci", + "npm:2.0.0" + ], + [ + "ci-info", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "is-data-descriptor", + [ + [ + "npm:0.1.4", + { + "packageLocation": "./.yarn/cache/is-data-descriptor-npm-0.1.4-8ad896bdf03b06e1455783cf96f8a7fad5e44bcbdbea84c21043fde55022c274.zip/node_modules/is-data-descriptor/", + "packageDependencies": [ + [ + "is-data-descriptor", + "npm:0.1.4" + ], + [ + "kind-of", + "npm:3.2.2" + ] + ] + } + ], + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-data-descriptor-npm-1.0.0-cfdeb86c7b8e70b33013908d6e3c81506410ac8d98c5abaacbf8f234577588b5.zip/node_modules/is-data-descriptor/", + "packageDependencies": [ + [ + "is-data-descriptor", + "npm:1.0.0" + ], + [ + "kind-of", + "npm:6.0.2" + ] + ] + } + ] + ] + ], + [ + "is-date-object", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/is-date-object-npm-1.0.1-04b54515d0613950761c2d3ab32bf88df4eb76252f19355455171b82b2ed3795.zip/node_modules/is-date-object/", + "packageDependencies": [ + [ + "is-date-object", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "is-descriptor", + [ + [ + "npm:0.1.6", + { + "packageLocation": "./.yarn/cache/is-descriptor-npm-0.1.6-83d2a642df6e15ae2a1ef183af71b233e69d7a42b65dd3f54872a601175c2833.zip/node_modules/is-descriptor/", + "packageDependencies": [ + [ + "is-descriptor", + "npm:0.1.6" + ], + [ + "is-accessor-descriptor", + "npm:0.1.6" + ], + [ + "is-data-descriptor", + "npm:0.1.4" + ], + [ + "kind-of", + "npm:5.1.0" + ] + ] + } + ], + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/is-descriptor-npm-1.0.2-558ef5d61035e59acd27b6ddebde832d2bdd34435b277deeddb4e2d71950178e.zip/node_modules/is-descriptor/", + "packageDependencies": [ + [ + "is-descriptor", + "npm:1.0.2" + ], + [ + "is-accessor-descriptor", + "npm:1.0.0" + ], + [ + "is-data-descriptor", + "npm:1.0.0" + ], + [ + "kind-of", + "npm:6.0.2" + ] + ] + } + ] + ] + ], + [ + "is-extendable", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/is-extendable-npm-0.1.1-c589ebb36b356667404c448d806831e3f1a71daebb7a3dd4c140488dbfffebc8.zip/node_modules/is-extendable/", + "packageDependencies": [ + [ + "is-extendable", + "npm:0.1.1" + ] + ] + } + ], + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/is-extendable-npm-1.0.1-634f828b756fc5344e12de35263ffb002a19d529524e350163ff1a3b805fe9b9.zip/node_modules/is-extendable/", + "packageDependencies": [ + [ + "is-extendable", + "npm:1.0.1" + ], + [ + "is-plain-object", + "npm:2.0.4" + ] + ] + } + ] + ] + ], + [ + "is-extglob", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/is-extglob-npm-2.1.1-48b0556ff4a6a4b7e4607b17cc8015274a99c3ba0a3895f84a9c002dfa3e7c8e.zip/node_modules/is-extglob/", + "packageDependencies": [ + [ + "is-extglob", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "is-fullwidth-code-point", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-1.0.0-3c1fc40a67f0b90846d48cc9d6dbeaa54a3c4b0068eb45a0c37a28dbd2a815ca.zip/node_modules/is-fullwidth-code-point/", + "packageDependencies": [ + [ + "is-fullwidth-code-point", + "npm:1.0.0" + ], + [ + "number-is-nan", + "npm:1.0.1" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/is-fullwidth-code-point-npm-2.0.0-42ce0742b97e9cc7cb3456c7ef50b001d1074464219e50dfd349e86720cba4ca.zip/node_modules/is-fullwidth-code-point/", + "packageDependencies": [ + [ + "is-fullwidth-code-point", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "is-generator-fn", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/is-generator-fn-npm-2.1.0-02923433845478842f9494bb74d28dafc0c6a8cf4049ff22fb0127e35e8889f8.zip/node_modules/is-generator-fn/", + "packageDependencies": [ + [ + "is-generator-fn", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "is-glob", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/is-glob-npm-3.1.0-2838598fc2ff9a45fce1ee74c12b992d377da856c7851d841ce3f76984e1580c.zip/node_modules/is-glob/", + "packageDependencies": [ + [ + "is-glob", + "npm:3.1.0" + ], + [ + "is-extglob", + "npm:2.1.1" + ] + ] + } + ], + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/is-glob-npm-4.0.1-c94555561016d8e59f512c1cd804f5c6b9bbd335daf1acbd3fecd9ba5e531720.zip/node_modules/is-glob/", + "packageDependencies": [ + [ + "is-glob", + "npm:4.0.1" + ], + [ + "is-extglob", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "is-negated-glob", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-negated-glob-npm-1.0.0-39c3d4e1c7d0b79f2da9c223ce3b5ebf6f3dbea1c21984fad123e7c472a67e57.zip/node_modules/is-negated-glob/", + "packageDependencies": [ + [ + "is-negated-glob", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "is-number", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/is-number-npm-3.0.0-3f85565c83c4c31ff395ea4b946f876911a296f1e65925b7eb68e0667cd2ec88.zip/node_modules/is-number/", + "packageDependencies": [ + [ + "is-number", + "npm:3.0.0" + ], + [ + "kind-of", + "npm:3.2.2" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/is-number-npm-4.0.0-1653a874dd251d4d49e703586c26a36bddd0c25e3e6dafbc9f553f5c07e3bb0d.zip/node_modules/is-number/", + "packageDependencies": [ + [ + "is-number", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "is-plain-object", + [ + [ + "npm:2.0.4", + { + "packageLocation": "./.yarn/cache/is-plain-object-npm-2.0.4-f0eb024d132da64ec7515e011103e261a5492fe7cb01dcac9cec734e0f02b1fe.zip/node_modules/is-plain-object/", + "packageDependencies": [ + [ + "is-plain-object", + "npm:2.0.4" + ], + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "is-promise", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/is-promise-npm-2.1.0-af4337d0551b7d93f2ecc3076115e8dd196c94ee1dc0d4bccba8577a7390cc09.zip/node_modules/is-promise/", + "packageDependencies": [ + [ + "is-promise", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "is-regex", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/is-regex-npm-1.0.4-43f618a9c0e2755b797af5d31f0dd3f717e44cdf59adcaab695639c3c8fa0750.zip/node_modules/is-regex/", + "packageDependencies": [ + [ + "is-regex", + "npm:1.0.4" + ], + [ + "has", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "is-relative", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-relative-npm-1.0.0-b5a3c1fcbc2ee5c06e87de600b108e767b7246dfde74a0a566487ff1fa1cedc5.zip/node_modules/is-relative/", + "packageDependencies": [ + [ + "is-relative", + "npm:1.0.0" + ], + [ + "is-unc-path", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "is-stream", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/is-stream-npm-1.1.0-e2b78b161dc6bb3bda51737b41766e8b3f73b3ccc7570f0caca546703277a77e.zip/node_modules/is-stream/", + "packageDependencies": [ + [ + "is-stream", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "is-symbol", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/is-symbol-npm-1.0.2-c67fc664ce9d2a10df92b0c0f660bb58777495fe36572e88bdfc67496742f87c.zip/node_modules/is-symbol/", + "packageDependencies": [ + [ + "is-symbol", + "npm:1.0.2" + ], + [ + "has-symbols", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "is-typedarray", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-typedarray-npm-1.0.0-b0c967e2971d36bc8bddea27c7a2ae70244bc02c9020aca2d4c15a00727d5da8.zip/node_modules/is-typedarray/", + "packageDependencies": [ + [ + "is-typedarray", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "is-unc-path", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-unc-path-npm-1.0.0-7b86e3e03c124331c0fcd614c0f90ab02f5a56fff5767cedafc16e558200bef2.zip/node_modules/is-unc-path/", + "packageDependencies": [ + [ + "is-unc-path", + "npm:1.0.0" + ], + [ + "unc-path-regex", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "is-utf8", + [ + [ + "npm:0.2.1", + { + "packageLocation": "./.yarn/cache/is-utf8-npm-0.2.1-6f628f5880bca552777d759bdc12a55eea3e7e20f94657e9ef0e11918724d6fa.zip/node_modules/is-utf8/", + "packageDependencies": [ + [ + "is-utf8", + "npm:0.2.1" + ] + ] + } + ] + ] + ], + [ + "is-valid-glob", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/is-valid-glob-npm-1.0.0-cdb4b1c28b682ac05bba341ceb009ca67277296d63ccc5dd8c5bd3fad04ddc4b.zip/node_modules/is-valid-glob/", + "packageDependencies": [ + [ + "is-valid-glob", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "is-windows", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/is-windows-npm-1.0.2-09376b312797016493dda242044128076d4d425f93c1249854be01af99b7a456.zip/node_modules/is-windows/", + "packageDependencies": [ + [ + "is-windows", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "is-wsl", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/is-wsl-npm-1.1.0-f60e1c2486623812e439ab6b10958bee89bc43f665e12ca46de83accca261515.zip/node_modules/is-wsl/", + "packageDependencies": [ + [ + "is-wsl", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "isarray", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/isarray-npm-1.0.0-b8a24133c4d46d92e60308b99f57e1a5266168f07ced472f9c413e2261b2c570.zip/node_modules/isarray/", + "packageDependencies": [ + [ + "isarray", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "isexe", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/isexe-npm-2.0.0-d1b4c3f90d8b946bd1331ddedbb8aa042c73bb22df76332850605d40b67d4855.zip/node_modules/isexe/", + "packageDependencies": [ + [ + "isexe", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "isobject", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/isobject-npm-2.1.0-b24093be39f45976accacbf4fe8c707f59d3ec2fb8be2d16c2ac3457f5121b4a.zip/node_modules/isobject/", + "packageDependencies": [ + [ + "isobject", + "npm:2.1.0" + ], + [ + "isarray", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/isobject-npm-3.0.1-6bda0ef6cd2c77f9799c26e928d58fb00d77684c62fd8503d9ccfc3fd110ec97.zip/node_modules/isobject/", + "packageDependencies": [ + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "isstream", + [ + [ + "npm:0.1.2", + { + "packageLocation": "./.yarn/cache/isstream-npm-0.1.2-4ea66d07cfb0dd1ac8f3e882d2f0db94cc135ae8faee424fcc07dc9a27abccdb.zip/node_modules/isstream/", + "packageDependencies": [ + [ + "isstream", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "istanbul-api", + [ + [ + "npm:2.1.6", + { + "packageLocation": "./.yarn/cache/istanbul-api-npm-2.1.6-69b5bd71a7c3d2d118c9cb81320e3fa31858e6210aa344c5ff5020b28ebdc71c.zip/node_modules/istanbul-api/", + "packageDependencies": [ + [ + "istanbul-api", + "npm:2.1.6" + ], + [ + "async", + "npm:2.6.2" + ], + [ + "compare-versions", + "npm:3.4.0" + ], + [ + "fileset", + "npm:2.0.3" + ], + [ + "istanbul-lib-coverage", + "npm:2.0.5" + ], + [ + "istanbul-lib-hook", + "npm:2.0.7" + ], + [ + "istanbul-lib-instrument", + "npm:3.3.0" + ], + [ + "istanbul-lib-report", + "npm:2.0.8" + ], + [ + "istanbul-lib-source-maps", + "npm:3.0.6" + ], + [ + "istanbul-reports", + "npm:2.2.4" + ], + [ + "js-yaml", + "npm:3.13.1" + ], + [ + "make-dir", + "npm:2.1.0" + ], + [ + "minimatch", + "npm:3.0.4" + ], + [ + "once", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "istanbul-lib-coverage", + [ + [ + "npm:2.0.5", + { + "packageLocation": "./.yarn/cache/istanbul-lib-coverage-npm-2.0.5-ddd68b8b84f73b80e28646174db3603daf0b1913227df67074ecc3e2c9520553.zip/node_modules/istanbul-lib-coverage/", + "packageDependencies": [ + [ + "istanbul-lib-coverage", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "istanbul-lib-hook", + [ + [ + "npm:2.0.7", + { + "packageLocation": "./.yarn/cache/istanbul-lib-hook-npm-2.0.7-e29402c1c3af50bb85d6be60469c7faa5f7b216216c876ee22d35692fb644ea3.zip/node_modules/istanbul-lib-hook/", + "packageDependencies": [ + [ + "istanbul-lib-hook", + "npm:2.0.7" + ], + [ + "append-transform", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "istanbul-lib-instrument", + [ + [ + "npm:3.3.0", + { + "packageLocation": "./.yarn/cache/istanbul-lib-instrument-npm-3.3.0-88dc9d75181708736177225ebd4be2a4d62e82f4c0197291fefea5112ab517c2.zip/node_modules/istanbul-lib-instrument/", + "packageDependencies": [ + [ + "istanbul-lib-instrument", + "npm:3.3.0" + ], + [ + "@babel/generator", + "npm:7.4.4" + ], + [ + "@babel/parser", + "npm:7.4.4" + ], + [ + "@babel/template", + "npm:7.4.4" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "istanbul-lib-coverage", + "npm:2.0.5" + ], + [ + "semver", + "npm:6.0.0" + ] + ] + } + ] + ] + ], + [ + "istanbul-lib-report", + [ + [ + "npm:2.0.8", + { + "packageLocation": "./.yarn/cache/istanbul-lib-report-npm-2.0.8-6ea805809b7f31d5175f3cea9a78a4228ac8d791852851882c769f994dffd6ac.zip/node_modules/istanbul-lib-report/", + "packageDependencies": [ + [ + "istanbul-lib-report", + "npm:2.0.8" + ], + [ + "istanbul-lib-coverage", + "npm:2.0.5" + ], + [ + "make-dir", + "npm:2.1.0" + ], + [ + "supports-color", + "npm:6.1.0" + ] + ] + } + ] + ] + ], + [ + "istanbul-lib-source-maps", + [ + [ + "npm:3.0.6", + { + "packageLocation": "./.yarn/cache/istanbul-lib-source-maps-npm-3.0.6-2041e6672f877fe731e02933c501511f1a569f381d8c1c9d288781f12313d34d.zip/node_modules/istanbul-lib-source-maps/", + "packageDependencies": [ + [ + "istanbul-lib-source-maps", + "npm:3.0.6" + ], + [ + "debug", + "npm:4.1.1" + ], + [ + "istanbul-lib-coverage", + "npm:2.0.5" + ], + [ + "make-dir", + "npm:2.1.0" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "istanbul-reports", + [ + [ + "npm:2.2.4", + { + "packageLocation": "./.yarn/cache/istanbul-reports-npm-2.2.4-e7b7b4420538b87a96d38784b5942929e3b3053e1d86f44765703bb119082a6a.zip/node_modules/istanbul-reports/", + "packageDependencies": [ + [ + "istanbul-reports", + "npm:2.2.4" + ], + [ + "handlebars", + "npm:4.1.2" + ] + ] + } + ] + ] + ], + [ + "jest", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-npm-24.7.1-154193b27e1959d7c6db4d5d4beffba043e08937a0af107523245894d9f7e5c6.zip/node_modules/jest/", + "packageDependencies": [ + [ + "jest", + "npm:24.7.1" + ], + [ + "import-local", + "npm:2.0.0" + ], + [ + "jest-cli", + "npm:24.7.1" + ] + ] + } + ] + ] + ], + [ + "jest-changed-files", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/jest-changed-files-npm-24.7.0-b3f47478a21ad09cb6748ff10b275fa4700f780fb7baa78b707fd2a7091ac5b5.zip/node_modules/jest-changed-files/", + "packageDependencies": [ + [ + "jest-changed-files", + "npm:24.7.0" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "execa", + "npm:1.0.0" + ], + [ + "throat", + "npm:4.1.0" + ] + ] + } + ] + ] + ], + [ + "jest-cli", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-cli-npm-24.7.1-f4630c9a5f753a2309c38b23cb3cc70936935110796fd01409a936c364f0ad66.zip/node_modules/jest-cli/", + "packageDependencies": [ + [ + "jest-cli", + "npm:24.7.1" + ], + [ + "@jest/core", + "npm:24.7.1" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "exit", + "npm:0.1.2" + ], + [ + "import-local", + "npm:2.0.0" + ], + [ + "is-ci", + "npm:2.0.0" + ], + [ + "jest-config", + "npm:24.7.1" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jest-validate", + "npm:24.7.0" + ], + [ + "prompts", + "npm:2.0.4" + ], + [ + "realpath-native", + "npm:1.1.0" + ], + [ + "yargs", + "npm:12.0.5" + ] + ] + } + ] + ] + ], + [ + "jest-config", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-config-npm-24.7.1-c41e679cae48f22307d52b15e74274d762458eac3ce6c5be6bbe613938e8b5c9.zip/node_modules/jest-config/", + "packageDependencies": [ + [ + "jest-config", + "npm:24.7.1" + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@jest/test-sequencer", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "babel-jest", + "virtual:c41e679cae48f22307d52b15e74274d762458eac3ce6c5be6bbe613938e8b5c9cd39246e582e10d7c34807ddec7d4f9e85fdf93bf0b33b4855ff6941cb6da853#npm:24.7.1" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "jest-environment-jsdom", + "npm:24.7.1" + ], + [ + "jest-environment-node", + "npm:24.7.1" + ], + [ + "jest-get-type", + "npm:24.3.0" + ], + [ + "jest-jasmine2", + "npm:24.7.1" + ], + [ + "jest-regex-util", + "npm:24.3.0" + ], + [ + "jest-resolve", + "npm:24.7.1" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jest-validate", + "npm:24.7.0" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "pretty-format", + "npm:24.7.0" + ], + [ + "realpath-native", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "jest-diff", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/jest-diff-npm-24.7.0-4e4034fd22cda6c2dc404715d727907947d8e7eb2bcb684077949b0188f46b0d.zip/node_modules/jest-diff/", + "packageDependencies": [ + [ + "jest-diff", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "diff-sequences", + "npm:24.3.0" + ], + [ + "jest-get-type", + "npm:24.3.0" + ], + [ + "pretty-format", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "jest-docblock", + [ + [ + "npm:24.3.0", + { + "packageLocation": "./.yarn/cache/jest-docblock-npm-24.3.0-7858976ac1724bb9898a252ee6616ee2310974a1f288ec91c3233e5becc27054.zip/node_modules/jest-docblock/", + "packageDependencies": [ + [ + "jest-docblock", + "npm:24.3.0" + ], + [ + "detect-newline", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "jest-each", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-each-npm-24.7.1-8e1655eb2c2379ab1c9526f06ba7a8e755f010deb3781fa8a6f34961b3378ed1.zip/node_modules/jest-each/", + "packageDependencies": [ + [ + "jest-each", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "jest-get-type", + "npm:24.3.0" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "pretty-format", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "jest-environment-jsdom", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-environment-jsdom-npm-24.7.1-294e2de43ccc363820dacd1e881bdabf7dc91b2db6fad3bc9ff9553c61cbd715.zip/node_modules/jest-environment-jsdom/", + "packageDependencies": [ + [ + "jest-environment-jsdom", + "npm:24.7.1" + ], + [ + "@jest/environment", + "npm:24.7.1" + ], + [ + "@jest/fake-timers", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "jest-mock", + "npm:24.7.0" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jsdom", + "npm:11.12.0" + ] + ] + } + ] + ] + ], + [ + "jest-environment-node", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-environment-node-npm-24.7.1-c0ab7c4898e5f61274d4d8a680c3dc68784c6f0e2be758c3c6b0db5e24a4b866.zip/node_modules/jest-environment-node/", + "packageDependencies": [ + [ + "jest-environment-node", + "npm:24.7.1" + ], + [ + "@jest/environment", + "npm:24.7.1" + ], + [ + "@jest/fake-timers", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "jest-mock", + "npm:24.7.0" + ], + [ + "jest-util", + "npm:24.7.1" + ] + ] + } + ] + ] + ], + [ + "jest-get-type", + [ + [ + "npm:24.3.0", + { + "packageLocation": "./.yarn/cache/jest-get-type-npm-24.3.0-5df8f71bddefe8c3cc8195d4285e3de85927ba75efd3083c54e6a09fcca53ff9.zip/node_modules/jest-get-type/", + "packageDependencies": [ + [ + "jest-get-type", + "npm:24.3.0" + ] + ] + } + ] + ] + ], + [ + "jest-haste-map", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-haste-map-npm-24.7.1-cfaf9c5bb4832ed01267881fbdd4aa5db5a599fa9108f01d9a7cae4444ea6d96.zip/node_modules/jest-haste-map/", + "packageDependencies": [ + [ + "jest-haste-map", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "anymatch", + "npm:2.0.0" + ], + [ + "fb-watchman", + "npm:2.0.0" + ], + [ + "fsevents", + "npm:1.2.8" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "invariant", + "npm:2.2.4" + ], + [ + "jest-serializer", + "npm:24.4.0" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jest-worker", + "npm:24.6.0" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "sane", + "npm:4.1.0" + ], + [ + "walker", + "npm:1.0.7" + ] + ] + } + ] + ] + ], + [ + "jest-jasmine2", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-jasmine2-npm-24.7.1-b10c8a09989471b9f0139ac9373e703261548baca4b42d2ca57f9e995e7c0476.zip/node_modules/jest-jasmine2/", + "packageDependencies": [ + [ + "jest-jasmine2", + "npm:24.7.1" + ], + [ + "@babel/traverse", + "npm:7.4.4" + ], + [ + "@jest/environment", + "npm:24.7.1" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "co", + "npm:4.6.0" + ], + [ + "expect", + "npm:24.7.1" + ], + [ + "is-generator-fn", + "npm:2.1.0" + ], + [ + "jest-each", + "npm:24.7.1" + ], + [ + "jest-matcher-utils", + "npm:24.7.0" + ], + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "jest-runtime", + "npm:24.7.1" + ], + [ + "jest-snapshot", + "npm:24.7.1" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "pretty-format", + "npm:24.7.0" + ], + [ + "throat", + "npm:4.1.0" + ] + ] + } + ] + ] + ], + [ + "jest-leak-detector", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/jest-leak-detector-npm-24.7.0-e4e47e234a92689644b470acb6c6bb81bc0f97d6c8c599881feb18aba7d00827.zip/node_modules/jest-leak-detector/", + "packageDependencies": [ + [ + "jest-leak-detector", + "npm:24.7.0" + ], + [ + "pretty-format", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "jest-matcher-utils", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/jest-matcher-utils-npm-24.7.0-9c9497b0ae40c5669fc3bd6acc72cb314b908fa3911767621f10ec725313b1cd.zip/node_modules/jest-matcher-utils/", + "packageDependencies": [ + [ + "jest-matcher-utils", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "jest-diff", + "npm:24.7.0" + ], + [ + "jest-get-type", + "npm:24.3.0" + ], + [ + "pretty-format", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "jest-message-util", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-message-util-npm-24.7.1-ce1a829ff950355ab985dc141b1c20ee67f4b89acbf2915a0be8b6261683cd88.zip/node_modules/jest-message-util/", + "packageDependencies": [ + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "@babel/code-frame", + "npm:7.0.0" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "@types/stack-utils", + "npm:1.0.1" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "slash", + "npm:2.0.0" + ], + [ + "stack-utils", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "jest-mock", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/jest-mock-npm-24.7.0-b5b5a3c952a7ef1453b3d548051778783a2831e79ddd369fcb2282f4c49413b2.zip/node_modules/jest-mock/", + "packageDependencies": [ + [ + "jest-mock", + "npm:24.7.0" + ], + [ + "@jest/types", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "jest-pnp-resolver", + [ + [ + "npm:1.2.1", + { + "packageLocation": "./.yarn/cache/jest-pnp-resolver-npm-1.2.1-2e7db759835f0ebbac8d35556b65efac94cb32ae9eb82a78e8057da0359c3e84.zip/node_modules/jest-pnp-resolver/", + "packageDependencies": [ + [ + "jest-pnp-resolver", + "npm:1.2.1" + ] + ] + } + ], + [ + "virtual:9b451fed4e8a3b7cb8f2b245be77f35d138e1849d38740702ec7634ea70e9e7ed666d06ac17e9a033adaf8b01eee2d6c2f21d59f2f29cb46ae0758dc3f1d655e#npm:1.2.1", + { + "packageLocation": "./.yarn/virtual/jest-pnp-resolver-virtual-5ce0edf9ee8d61ede409a30d46d15b862dafb327b41f58e3db9a5292628cfc5a/node_modules/jest-pnp-resolver/", + "packageDependencies": [ + [ + "jest-pnp-resolver", + "virtual:9b451fed4e8a3b7cb8f2b245be77f35d138e1849d38740702ec7634ea70e9e7ed666d06ac17e9a033adaf8b01eee2d6c2f21d59f2f29cb46ae0758dc3f1d655e#npm:1.2.1" + ], + [ + "jest-resolve", + "npm:24.7.1" + ] + ] + } + ] + ] + ], + [ + "jest-regex-util", + [ + [ + "npm:24.3.0", + { + "packageLocation": "./.yarn/cache/jest-regex-util-npm-24.3.0-069192e2308b97b95aeb7e434973f8e065b6397978a58fee46094da946881854.zip/node_modules/jest-regex-util/", + "packageDependencies": [ + [ + "jest-regex-util", + "npm:24.3.0" + ] + ] + } + ] + ] + ], + [ + "jest-resolve", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-resolve-npm-24.7.1-9b451fed4e8a3b7cb8f2b245be77f35d138e1849d38740702ec7634ea70e9e7e.zip/node_modules/jest-resolve/", + "packageDependencies": [ + [ + "jest-resolve", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "browser-resolve", + "npm:1.11.3" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "jest-pnp-resolver", + "virtual:9b451fed4e8a3b7cb8f2b245be77f35d138e1849d38740702ec7634ea70e9e7ed666d06ac17e9a033adaf8b01eee2d6c2f21d59f2f29cb46ae0758dc3f1d655e#npm:1.2.1" + ], + [ + "realpath-native", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "jest-resolve-dependencies", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-resolve-dependencies-npm-24.7.1-c8c26abcf39b69b67fe05121228f2840e8ee15099e8bccbca0f085be9d4dc7ec.zip/node_modules/jest-resolve-dependencies/", + "packageDependencies": [ + [ + "jest-resolve-dependencies", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "jest-regex-util", + "npm:24.3.0" + ], + [ + "jest-snapshot", + "npm:24.7.1" + ] + ] + } + ] + ] + ], + [ + "jest-runner", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-runner-npm-24.7.1-425494a6b211a195b9ed9faf0457166fba00ea014214cfcc0dd3187fdd8a9403.zip/node_modules/jest-runner/", + "packageDependencies": [ + [ + "jest-runner", + "npm:24.7.1" + ], + [ + "@jest/console", + "npm:24.7.1" + ], + [ + "@jest/environment", + "npm:24.7.1" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "exit", + "npm:0.1.2" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "jest-config", + "npm:24.7.1" + ], + [ + "jest-docblock", + "npm:24.3.0" + ], + [ + "jest-haste-map", + "npm:24.7.1" + ], + [ + "jest-jasmine2", + "npm:24.7.1" + ], + [ + "jest-leak-detector", + "npm:24.7.0" + ], + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "jest-resolve", + "npm:24.7.1" + ], + [ + "jest-runtime", + "npm:24.7.1" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jest-worker", + "npm:24.6.0" + ], + [ + "source-map-support", + "npm:0.5.12" + ], + [ + "throat", + "npm:4.1.0" + ] + ] + } + ] + ] + ], + [ + "jest-runtime", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-runtime-npm-24.7.1-c70dfab9b1c1c94ed5b7f7eaab8424bc650b791f53696bf22647eec5fd96c9fa.zip/node_modules/jest-runtime/", + "packageDependencies": [ + [ + "jest-runtime", + "npm:24.7.1" + ], + [ + "@jest/console", + "npm:24.7.1" + ], + [ + "@jest/environment", + "npm:24.7.1" + ], + [ + "@jest/source-map", + "npm:24.3.0" + ], + [ + "@jest/transform", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "@types/yargs", + "npm:12.0.12" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "exit", + "npm:0.1.2" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "jest-config", + "npm:24.7.1" + ], + [ + "jest-haste-map", + "npm:24.7.1" + ], + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "jest-mock", + "npm:24.7.0" + ], + [ + "jest-regex-util", + "npm:24.3.0" + ], + [ + "jest-resolve", + "npm:24.7.1" + ], + [ + "jest-snapshot", + "npm:24.7.1" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "jest-validate", + "npm:24.7.0" + ], + [ + "realpath-native", + "npm:1.1.0" + ], + [ + "slash", + "npm:2.0.0" + ], + [ + "strip-bom", + "npm:3.0.0" + ], + [ + "yargs", + "npm:12.0.5" + ] + ] + } + ] + ] + ], + [ + "jest-serializer", + [ + [ + "npm:24.4.0", + { + "packageLocation": "./.yarn/cache/jest-serializer-npm-24.4.0-ae10114e1bcf815ce37dafb3c0c87e57bc32a5172d252cb3071fd565f4341906.zip/node_modules/jest-serializer/", + "packageDependencies": [ + [ + "jest-serializer", + "npm:24.4.0" + ] + ] + } + ] + ] + ], + [ + "jest-snapshot", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-snapshot-npm-24.7.1-e46d9485ba93e8b250f27a63a045cccc06520d8b0d2c9e76e78fd3fd5f04a6da.zip/node_modules/jest-snapshot/", + "packageDependencies": [ + [ + "jest-snapshot", + "npm:24.7.1" + ], + [ + "@babel/types", + "npm:7.4.4" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "expect", + "npm:24.7.1" + ], + [ + "jest-diff", + "npm:24.7.0" + ], + [ + "jest-matcher-utils", + "npm:24.7.0" + ], + [ + "jest-message-util", + "npm:24.7.1" + ], + [ + "jest-resolve", + "npm:24.7.1" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "natural-compare", + "npm:1.4.0" + ], + [ + "pretty-format", + "npm:24.7.0" + ], + [ + "semver", + "npm:5.7.0" + ] + ] + } + ] + ] + ], + [ + "jest-util", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-util-npm-24.7.1-7a040f56c80c64cfefce87a204945f5963794051c49c44115109772d31436711.zip/node_modules/jest-util/", + "packageDependencies": [ + [ + "jest-util", + "npm:24.7.1" + ], + [ + "@jest/console", + "npm:24.7.1" + ], + [ + "@jest/fake-timers", + "npm:24.7.1" + ], + [ + "@jest/source-map", + "npm:24.3.0" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "callsites", + "npm:3.1.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "is-ci", + "npm:2.0.0" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "slash", + "npm:2.0.0" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "jest-validate", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/jest-validate-npm-24.7.0-3c8a0502beea65e94b9d05885285f572f9c35749506d6cc3eda535aa3ecd552c.zip/node_modules/jest-validate/", + "packageDependencies": [ + [ + "jest-validate", + "npm:24.7.0" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "camelcase", + "npm:5.3.1" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "jest-get-type", + "npm:24.3.0" + ], + [ + "leven", + "npm:2.1.0" + ], + [ + "pretty-format", + "npm:24.7.0" + ] + ] + } + ] + ] + ], + [ + "jest-watcher", + [ + [ + "npm:24.7.1", + { + "packageLocation": "./.yarn/cache/jest-watcher-npm-24.7.1-c5f2f7d9f149c6d0e9b12c0a9f54a184c905fad8b20344c1b708d89cbdbda8cb.zip/node_modules/jest-watcher/", + "packageDependencies": [ + [ + "jest-watcher", + "npm:24.7.1" + ], + [ + "@jest/test-result", + "npm:24.7.1" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "@types/yargs", + "npm:12.0.12" + ], + [ + "ansi-escapes", + "npm:3.2.0" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "jest-util", + "npm:24.7.1" + ], + [ + "string-length", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "jest-worker", + [ + [ + "npm:24.6.0", + { + "packageLocation": "./.yarn/cache/jest-worker-npm-24.6.0-983fcb37add096fdddec56908048db5271c13bcc3408316fbfa6fa570e02061d.zip/node_modules/jest-worker/", + "packageDependencies": [ + [ + "jest-worker", + "npm:24.6.0" + ], + [ + "merge-stream", + "npm:1.0.1" + ], + [ + "supports-color", + "npm:6.1.0" + ] + ] + } + ] + ] + ], + [ + "js-levenshtein", + [ + [ + "npm:1.1.6", + { + "packageLocation": "./.yarn/cache/js-levenshtein-npm-1.1.6-8b0eba00a92bf67e93ebfb3d973ca4f722435f363127d66bd7bb7e4cb77ec2fd.zip/node_modules/js-levenshtein/", + "packageDependencies": [ + [ + "js-levenshtein", + "npm:1.1.6" + ] + ] + } + ] + ] + ], + [ + "js-tokens", + [ + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/js-tokens-npm-4.0.0-22430affccdac0779eab6f89c6659552bc61e41084732a365082aa9eb5d99a2f.zip/node_modules/js-tokens/", + "packageDependencies": [ + [ + "js-tokens", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "js-yaml", + [ + [ + "npm:3.13.1", + { + "packageLocation": "./.yarn/cache/js-yaml-npm-3.13.1-f9085ba01c1dd9ce28042daf05dff0b9ad739afa8db0fdecef62ed0888feac34.zip/node_modules/js-yaml/", + "packageDependencies": [ + [ + "js-yaml", + "npm:3.13.1" + ], + [ + "argparse", + "npm:1.0.10" + ], + [ + "esprima", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "jsbn", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/jsbn-npm-0.1.1-c2c1ffc34765678605fff3c6ba9d4ef6ef6e10a30ec67696d945e8e6279bc17c.zip/node_modules/jsbn/", + "packageDependencies": [ + [ + "jsbn", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "jsdom", + [ + [ + "npm:11.12.0", + { + "packageLocation": "./.yarn/cache/jsdom-npm-11.12.0-ef808f145e0975eb780aaba7af97b5f684c538d98dc00e87fcb0a235e4fd6e70.zip/node_modules/jsdom/", + "packageDependencies": [ + [ + "jsdom", + "npm:11.12.0" + ], + [ + "abab", + "npm:2.0.0" + ], + [ + "acorn", + "npm:5.7.3" + ], + [ + "acorn-globals", + "npm:4.3.2" + ], + [ + "array-equal", + "npm:1.0.0" + ], + [ + "cssom", + "npm:0.3.6" + ], + [ + "cssstyle", + "npm:1.2.2" + ], + [ + "data-urls", + "npm:1.1.0" + ], + [ + "domexception", + "npm:1.0.1" + ], + [ + "escodegen", + "npm:1.11.1" + ], + [ + "html-encoding-sniffer", + "npm:1.0.2" + ], + [ + "left-pad", + "npm:1.3.0" + ], + [ + "nwsapi", + "npm:2.1.3" + ], + [ + "parse5", + "npm:4.0.0" + ], + [ + "pn", + "npm:1.1.0" + ], + [ + "request", + "npm:2.88.0" + ], + [ + "request-promise-native", + "virtual:ef808f145e0975eb780aaba7af97b5f684c538d98dc00e87fcb0a235e4fd6e7017a88a2020e1f9ce561498cee55ac2f2378f7fa9428688a8195443752da96f59#npm:1.0.7" + ], + [ + "sax", + "npm:1.2.4" + ], + [ + "symbol-tree", + "npm:3.2.2" + ], + [ + "tough-cookie", + "npm:2.5.0" + ], + [ + "w3c-hr-time", + "npm:1.0.1" + ], + [ + "webidl-conversions", + "npm:4.0.2" + ], + [ + "whatwg-encoding", + "npm:1.0.5" + ], + [ + "whatwg-mimetype", + "npm:2.3.0" + ], + [ + "whatwg-url", + "npm:6.5.0" + ], + [ + "ws", + "npm:5.2.2" + ], + [ + "xml-name-validator", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "jsesc", + [ + [ + "npm:0.5.0", + { + "packageLocation": "./.yarn/cache/jsesc-npm-0.5.0-5e00ac044bc3b21a4207bcd5f4a55969dec74ab71bf77c95728e4223bf47919a.zip/node_modules/jsesc/", + "packageDependencies": [ + [ + "jsesc", + "npm:0.5.0" + ] + ] + } + ], + [ + "npm:2.5.2", + { + "packageLocation": "./.yarn/cache/jsesc-npm-2.5.2-774f570180aa1d2d7d98c850493e075199f769582a9f916bed6aa6db47e9fe09.zip/node_modules/jsesc/", + "packageDependencies": [ + [ + "jsesc", + "npm:2.5.2" + ] + ] + } + ] + ] + ], + [ + "json-parse-better-errors", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/json-parse-better-errors-npm-1.0.2-326045f859cfdf52640001471989e929915e45be226f3969824a2a8fcc21681c.zip/node_modules/json-parse-better-errors/", + "packageDependencies": [ + [ + "json-parse-better-errors", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "json-schema", + [ + [ + "npm:0.2.3", + { + "packageLocation": "./.yarn/cache/json-schema-npm-0.2.3-b1dcd99cf9777557097537f8e0e4a92f9a3d30f8108aa49a14ac688735e5f02f.zip/node_modules/json-schema/", + "packageDependencies": [ + [ + "json-schema", + "npm:0.2.3" + ] + ] + } + ] + ] + ], + [ + "json-schema-traverse", + [ + [ + "npm:0.4.1", + { + "packageLocation": "./.yarn/cache/json-schema-traverse-npm-0.4.1-3c700c71bfd7c69e9755452dd7b46fd090cb19c7006c552cd7c96542ab8f0799.zip/node_modules/json-schema-traverse/", + "packageDependencies": [ + [ + "json-schema-traverse", + "npm:0.4.1" + ] + ] + } + ] + ] + ], + [ + "json-stable-stringify-without-jsonify", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/json-stable-stringify-without-jsonify-npm-1.0.1-f7f034a62a4b4429bdea8e9372899b9c9b1c718a8e60f8e3cc136e592d8681e1.zip/node_modules/json-stable-stringify-without-jsonify/", + "packageDependencies": [ + [ + "json-stable-stringify-without-jsonify", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "json-stringify-safe", + [ + [ + "npm:5.0.1", + { + "packageLocation": "./.yarn/cache/json-stringify-safe-npm-5.0.1-57b3ebbbc21c7b1e272a745b67cc0068805073c8297fd9b7018f1d83d0638958.zip/node_modules/json-stringify-safe/", + "packageDependencies": [ + [ + "json-stringify-safe", + "npm:5.0.1" + ] + ] + } + ] + ] + ], + [ + "json5", + [ + [ + "npm:0.5.1", + { + "packageLocation": "./.yarn/cache/json5-npm-0.5.1-d88a050d07c5607172f418407ce7475009a2061f7136647aa119ff5447ed3c9b.zip/node_modules/json5/", + "packageDependencies": [ + [ + "json5", + "npm:0.5.1" + ] + ] + } + ], + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/json5-npm-1.0.1-d57a00d7ccb2990b09c2e3493a9560b40bb307a3ea25ce4b0767a28dcd15c30e.zip/node_modules/json5/", + "packageDependencies": [ + [ + "json5", + "npm:1.0.1" + ], + [ + "minimist", + "npm:1.2.0" + ] + ] + } + ], + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/json5-npm-2.1.0-8405172778a92187c6f572a3ff2b6c709024c5ba68a02a405df86ec0081e760b.zip/node_modules/json5/", + "packageDependencies": [ + [ + "json5", + "npm:2.1.0" + ], + [ + "minimist", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "jsprim", + [ + [ + "npm:1.4.1", + { + "packageLocation": "./.yarn/cache/jsprim-npm-1.4.1-d8b72187afa35c0560cf42bc712995ab29d354dea0e8b17720dc3d833d9f3667.zip/node_modules/jsprim/", + "packageDependencies": [ + [ + "jsprim", + "npm:1.4.1" + ], + [ + "assert-plus", + "npm:1.0.0" + ], + [ + "extsprintf", + "npm:1.3.0" + ], + [ + "json-schema", + "npm:0.2.3" + ], + [ + "verror", + "npm:1.10.0" + ] + ] + } + ] + ] + ], + [ + "jsx-ast-utils", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/jsx-ast-utils-npm-2.1.0-b465b0af8ef482bdff48d7520a62ac8663a62f74b21fb5dbba1a985f2485cda9.zip/node_modules/jsx-ast-utils/", + "packageDependencies": [ + [ + "jsx-ast-utils", + "npm:2.1.0" + ], + [ + "array-includes", + "npm:3.0.3" + ] + ] + } + ] + ] + ], + [ + "just-debounce", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/just-debounce-npm-1.0.0-97f548c6283aec371755a495e50a4c2cb2448c4c26992d6de01df5b028ff341e.zip/node_modules/just-debounce/", + "packageDependencies": [ + [ + "just-debounce", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "kind-of", + [ + [ + "npm:3.2.2", + { + "packageLocation": "./.yarn/cache/kind-of-npm-3.2.2-22fb42122257843047ad137069b13ae41b109ca38bf0d7ef135e36c0cca64f86.zip/node_modules/kind-of/", + "packageDependencies": [ + [ + "kind-of", + "npm:3.2.2" + ], + [ + "is-buffer", + "npm:1.1.6" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/kind-of-npm-4.0.0-928afdf4b9dde8e4a4105bbed4569eff6d37a9558eb76014f33553e1782d7bec.zip/node_modules/kind-of/", + "packageDependencies": [ + [ + "kind-of", + "npm:4.0.0" + ], + [ + "is-buffer", + "npm:1.1.6" + ] + ] + } + ], + [ + "npm:5.1.0", + { + "packageLocation": "./.yarn/cache/kind-of-npm-5.1.0-cf86d311ee468d9dedafa63b7c298529479affc710c790c930595ab4762f4377.zip/node_modules/kind-of/", + "packageDependencies": [ + [ + "kind-of", + "npm:5.1.0" + ] + ] + } + ], + [ + "npm:6.0.2", + { + "packageLocation": "./.yarn/cache/kind-of-npm-6.0.2-acf8556ff96f8431b728a72736f3f4a28dae6b10159bb7b61dbd175bd129b3e0.zip/node_modules/kind-of/", + "packageDependencies": [ + [ + "kind-of", + "npm:6.0.2" + ] + ] + } + ] + ] + ], + [ + "kleur", + [ + [ + "npm:3.0.3", + { + "packageLocation": "./.yarn/cache/kleur-npm-3.0.3-f8d763226d64bc201367274f161fb995ef33ad1bb783e9e3b8d78188835854bb.zip/node_modules/kleur/", + "packageDependencies": [ + [ + "kleur", + "npm:3.0.3" + ] + ] + } + ] + ] + ], + [ + "last-run", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/last-run-npm-1.1.1-615786d2ba6beed0a443fb09aa8f1891a63eda5ca965fc0621b2f58be417e3f4.zip/node_modules/last-run/", + "packageDependencies": [ + [ + "last-run", + "npm:1.1.1" + ], + [ + "default-resolution", + "npm:2.0.0" + ], + [ + "es6-weak-map", + "npm:2.0.2" + ] + ] + } + ] + ] + ], + [ + "lazystream", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/lazystream-npm-1.0.0-4682fa0896397f3f6ace97a858d21f8408bbe220c7cf49379b378f987e62b570.zip/node_modules/lazystream/", + "packageDependencies": [ + [ + "lazystream", + "npm:1.0.0" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "lcid", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/lcid-npm-1.0.0-d1bfda761b2041efc595c694697a6e88b6d5d0b51ca84e92678bc52c12201c70.zip/node_modules/lcid/", + "packageDependencies": [ + [ + "lcid", + "npm:1.0.0" + ], + [ + "invert-kv", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/lcid-npm-2.0.0-a47f02f58a34fdce6b0f71a8448c0fbe4cf93e136a45686682d838c11311175d.zip/node_modules/lcid/", + "packageDependencies": [ + [ + "lcid", + "npm:2.0.0" + ], + [ + "invert-kv", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "lead", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/lead-npm-1.0.0-18bb3073df99c1d1c25621b26d5907c5ca1fcbea78736bba7bb78a161e7fe224.zip/node_modules/lead/", + "packageDependencies": [ + [ + "lead", + "npm:1.0.0" + ], + [ + "flush-write-stream", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "left-pad", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/left-pad-npm-1.3.0-cc3b058030dbb2561dc32a68d5082288c8459927c47d4e265ae3fd215e582dee.zip/node_modules/left-pad/", + "packageDependencies": [ + [ + "left-pad", + "npm:1.3.0" + ] + ] + } + ] + ] + ], + [ + "leven", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/leven-npm-2.1.0-4804983a4ff17f8541c349e75cbeba6d913113412b2f3f5d4ec35261c274dda1.zip/node_modules/leven/", + "packageDependencies": [ + [ + "leven", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "levn", + [ + [ + "npm:0.3.0", + { + "packageLocation": "./.yarn/cache/levn-npm-0.3.0-d38f495c050cea600f2146d6e1b6994de1a59977dc5c480de451ef3ea9713b49.zip/node_modules/levn/", + "packageDependencies": [ + [ + "levn", + "npm:0.3.0" + ], + [ + "prelude-ls", + "npm:1.1.2" + ], + [ + "type-check", + "npm:0.3.2" + ] + ] + } + ] + ] + ], + [ + "liftoff", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/liftoff-npm-3.1.0-3b545dec5ddbaeb40742df154cb0f1d528dba30153aa9a7653dfe5822506070c.zip/node_modules/liftoff/", + "packageDependencies": [ + [ + "liftoff", + "npm:3.1.0" + ], + [ + "extend", + "npm:3.0.2" + ], + [ + "findup-sync", + "npm:3.0.0" + ], + [ + "fined", + "npm:1.2.0" + ], + [ + "flagged-respawn", + "npm:1.0.1" + ], + [ + "is-plain-object", + "npm:2.0.4" + ], + [ + "object.map", + "npm:1.0.1" + ], + [ + "rechoir", + "npm:0.6.2" + ], + [ + "resolve", + "npm:1.10.1" + ] + ] + } + ] + ] + ], + [ + "load-json-file", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/load-json-file-npm-1.1.0-030861be0e1a32702ea997f6fd0910faab314c19931ca8486305151407e1f1e1.zip/node_modules/load-json-file/", + "packageDependencies": [ + [ + "load-json-file", + "npm:1.1.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "parse-json", + "npm:2.2.0" + ], + [ + "pify", + "npm:2.3.0" + ], + [ + "pinkie-promise", + "npm:2.0.1" + ], + [ + "strip-bom", + "npm:2.0.0" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/load-json-file-npm-2.0.0-bc6304942148094f0700bb59f29b190f3fa78aaa27fc7de950b288d46f1e7630.zip/node_modules/load-json-file/", + "packageDependencies": [ + [ + "load-json-file", + "npm:2.0.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "parse-json", + "npm:2.2.0" + ], + [ + "pify", + "npm:2.3.0" + ], + [ + "strip-bom", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/load-json-file-npm-4.0.0-ad222dd1067353ade903497c77eab4a1ab58304177104c27bf7d5bd59f2029aa.zip/node_modules/load-json-file/", + "packageDependencies": [ + [ + "load-json-file", + "npm:4.0.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "parse-json", + "npm:4.0.0" + ], + [ + "pify", + "npm:3.0.0" + ], + [ + "strip-bom", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "loader-runner", + [ + [ + "npm:2.4.0", + { + "packageLocation": "./.yarn/cache/loader-runner-npm-2.4.0-1dda35a78dacedd2f677581b691cbd662fb3f9472e160890736a919ab567e643.zip/node_modules/loader-runner/", + "packageDependencies": [ + [ + "loader-runner", + "npm:2.4.0" + ] + ] + } + ] + ] + ], + [ + "loader-utils", + [ + [ + "npm:0.2.17", + { + "packageLocation": "./.yarn/cache/loader-utils-npm-0.2.17-33c23aa9e7cbedea267c3bac079971a09a761b5953706d73449bc5470e759094.zip/node_modules/loader-utils/", + "packageDependencies": [ + [ + "loader-utils", + "npm:0.2.17" + ], + [ + "big.js", + "npm:3.2.0" + ], + [ + "emojis-list", + "npm:2.1.0" + ], + [ + "json5", + "npm:0.5.1" + ], + [ + "object-assign", + "npm:4.1.1" + ] + ] + } + ], + [ + "npm:1.2.3", + { + "packageLocation": "./.yarn/cache/loader-utils-npm-1.2.3-ee39783194b0f049c97d855afc589ec929a051d4c7c566c3af7a352074b610b1.zip/node_modules/loader-utils/", + "packageDependencies": [ + [ + "loader-utils", + "npm:1.2.3" + ], + [ + "big.js", + "npm:5.2.2" + ], + [ + "emojis-list", + "npm:2.1.0" + ], + [ + "json5", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "locate-path", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/locate-path-npm-2.0.0-3ab3d0d3d7f65a803aff384daab92ba7a720b93b0c13f7112c168f1e03ce28ef.zip/node_modules/locate-path/", + "packageDependencies": [ + [ + "locate-path", + "npm:2.0.0" + ], + [ + "p-locate", + "npm:2.0.0" + ], + [ + "path-exists", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/locate-path-npm-3.0.0-3420d8095ab01ed70e9f399424b94df3d5fabcf42a2ed2a6f71de7e76bff214a.zip/node_modules/locate-path/", + "packageDependencies": [ + [ + "locate-path", + "npm:3.0.0" + ], + [ + "p-locate", + "npm:3.0.0" + ], + [ + "path-exists", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "lodash", + [ + [ + "npm:4.17.11", + { + "packageLocation": "./.yarn/cache/lodash-npm-4.17.11-56f80968133c63167b57de7e890588a809339b58447de90d99c430d2bc81e12b.zip/node_modules/lodash/", + "packageDependencies": [ + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ] + ] + ], + [ + "lodash.clone", + [ + [ + "npm:4.5.0", + { + "packageLocation": "./.yarn/cache/lodash.clone-npm-4.5.0-837335719aa5bc51a4c15b6c7313e86a6777f211a21d54a6d88e7a3de5ec729c.zip/node_modules/lodash.clone/", + "packageDependencies": [ + [ + "lodash.clone", + "npm:4.5.0" + ] + ] + } + ] + ] + ], + [ + "lodash.some", + [ + [ + "npm:4.6.0", + { + "packageLocation": "./.yarn/cache/lodash.some-npm-4.6.0-038c19e3473720aca5b32f8ff1e08b2a7cc09fb2f82b8aab50f81cc4648c6ce5.zip/node_modules/lodash.some/", + "packageDependencies": [ + [ + "lodash.some", + "npm:4.6.0" + ] + ] + } + ] + ] + ], + [ + "lodash.sortby", + [ + [ + "npm:4.7.0", + { + "packageLocation": "./.yarn/cache/lodash.sortby-npm-4.7.0-b95c834a7fad341c634e8355073b4ced2d7292dff12b60304f6cc5aa7fc0fbce.zip/node_modules/lodash.sortby/", + "packageDependencies": [ + [ + "lodash.sortby", + "npm:4.7.0" + ] + ] + } + ] + ] + ], + [ + "loose-envify", + [ + [ + "npm:1.4.0", + { + "packageLocation": "./.yarn/cache/loose-envify-npm-1.4.0-7551e84e27febec6109af287fa9cde53909219b6babc844a5cb6b04e627db1c1.zip/node_modules/loose-envify/", + "packageDependencies": [ + [ + "loose-envify", + "npm:1.4.0" + ], + [ + "js-tokens", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "lower-case", + [ + [ + "npm:1.1.4", + { + "packageLocation": "./.yarn/cache/lower-case-npm-1.1.4-5c9c9f617f1d7f229fbbe9357cec25b3fbd7f20f56c24d75110181d3cb63788e.zip/node_modules/lower-case/", + "packageDependencies": [ + [ + "lower-case", + "npm:1.1.4" + ] + ] + } + ] + ] + ], + [ + "lru-cache", + [ + [ + "npm:5.1.1", + { + "packageLocation": "./.yarn/cache/lru-cache-npm-5.1.1-278604a20697973374db713cb8de8598e3ae758fb7238d65e2cc1e98e33aa277.zip/node_modules/lru-cache/", + "packageDependencies": [ + [ + "lru-cache", + "npm:5.1.1" + ], + [ + "yallist", + "npm:3.0.3" + ] + ] + } + ] + ] + ], + [ + "magic-string", + [ + [ + "npm:0.25.2", + { + "packageLocation": "./.yarn/cache/magic-string-npm-0.25.2-dd169a4d3e8540c3971f1d57837f85b501b59fdf1346c3a69c369c8530a31c82.zip/node_modules/magic-string/", + "packageDependencies": [ + [ + "magic-string", + "npm:0.25.2" + ], + [ + "sourcemap-codec", + "npm:1.4.4" + ] + ] + } + ] + ] + ], + [ + "make-dir", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/make-dir-npm-2.1.0-d3abdeb006d0aa8f502615d972e4c17251ebfafb7020f2958eecf17d311463a2.zip/node_modules/make-dir/", + "packageDependencies": [ + [ + "make-dir", + "npm:2.1.0" + ], + [ + "pify", + "npm:4.0.1" + ], + [ + "semver", + "npm:5.7.0" + ] + ] + } + ] + ] + ], + [ + "make-error", + [ + [ + "npm:1.3.5", + { + "packageLocation": "./.yarn/cache/make-error-npm-1.3.5-2bb2b14be8273807a6a5708e500be9958852631ba48929287f99244c12948bd4.zip/node_modules/make-error/", + "packageDependencies": [ + [ + "make-error", + "npm:1.3.5" + ] + ] + } + ] + ] + ], + [ + "make-error-cause", + [ + [ + "npm:1.2.2", + { + "packageLocation": "./.yarn/cache/make-error-cause-npm-1.2.2-9b3748429d0cdec6e455b8a3f1c6174e5acb9f42f04f7d6ec1b44a068e190ac0.zip/node_modules/make-error-cause/", + "packageDependencies": [ + [ + "make-error-cause", + "npm:1.2.2" + ], + [ + "make-error", + "npm:1.3.5" + ] + ] + } + ] + ] + ], + [ + "make-iterator", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/make-iterator-npm-1.0.1-5b0fd188ff510e2a9eacc6629a15838e52e9ef096a92ef67d9f34481ee2af1d0.zip/node_modules/make-iterator/", + "packageDependencies": [ + [ + "make-iterator", + "npm:1.0.1" + ], + [ + "kind-of", + "npm:6.0.2" + ] + ] + } + ] + ] + ], + [ + "makeerror", + [ + [ + "npm:1.0.11", + { + "packageLocation": "./.yarn/cache/makeerror-npm-1.0.11-66603c97419ef6b7a75b557a89267ff07bab86de6d97eb3a49bfb9695e55f162.zip/node_modules/makeerror/", + "packageDependencies": [ + [ + "makeerror", + "npm:1.0.11" + ], + [ + "tmpl", + "npm:1.0.4" + ] + ] + } + ] + ] + ], + [ + "mamacro", + [ + [ + "npm:0.0.3", + { + "packageLocation": "./.yarn/cache/mamacro-npm-0.0.3-64fb1d943610c9ea4c03137c39b562338f91e921f882b1510334e0f12c9e6c02.zip/node_modules/mamacro/", + "packageDependencies": [ + [ + "mamacro", + "npm:0.0.3" + ] + ] + } + ] + ] + ], + [ + "map-age-cleaner", + [ + [ + "npm:0.1.3", + { + "packageLocation": "./.yarn/cache/map-age-cleaner-npm-0.1.3-d3c56c3e3b4a24ce87ab946d00c03d55a8fc105b0d8bf27849dd568a87d4365f.zip/node_modules/map-age-cleaner/", + "packageDependencies": [ + [ + "map-age-cleaner", + "npm:0.1.3" + ], + [ + "p-defer", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "map-cache", + [ + [ + "npm:0.2.2", + { + "packageLocation": "./.yarn/cache/map-cache-npm-0.2.2-6b1becb759477b5185c4d507a15549d861b180f826783566011b5b7344a9e109.zip/node_modules/map-cache/", + "packageDependencies": [ + [ + "map-cache", + "npm:0.2.2" + ] + ] + } + ] + ] + ], + [ + "map-visit", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/map-visit-npm-1.0.0-a2a36d0f6c435c571c79456a0e004472f9e49478adb7ea7df4fb07a851ecdc58.zip/node_modules/map-visit/", + "packageDependencies": [ + [ + "map-visit", + "npm:1.0.0" + ], + [ + "object-visit", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "matchdep", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/matchdep-npm-2.0.0-983681b03430408c68ddbbbb8d0671df94539d2829a5da03d4ebc2d3178f0b21.zip/node_modules/matchdep/", + "packageDependencies": [ + [ + "matchdep", + "npm:2.0.0" + ], + [ + "findup-sync", + "npm:2.0.0" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "resolve", + "npm:1.10.1" + ], + [ + "stack-trace", + "npm:0.0.10" + ] + ] + } + ] + ] + ], + [ + "md5.js", + [ + [ + "npm:1.3.5", + { + "packageLocation": "./.yarn/cache/md5.js-npm-1.3.5-a5cc1cec980a4250052334f6c1cf651f77cb8d8cd6be5e0137c5ee3bcd17778f.zip/node_modules/md5.js/", + "packageDependencies": [ + [ + "md5.js", + "npm:1.3.5" + ], + [ + "hash-base", + "npm:3.0.4" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "media-typer", + [ + [ + "npm:0.3.0", + { + "packageLocation": "./.yarn/cache/media-typer-npm-0.3.0-fad2bd50cea7edd0b384a9e26591f8469be864862b75131f5c6de6b088912e0a.zip/node_modules/media-typer/", + "packageDependencies": [ + [ + "media-typer", + "npm:0.3.0" + ] + ] + } + ] + ] + ], + [ + "mem", + [ + [ + "npm:4.3.0", + { + "packageLocation": "./.yarn/cache/mem-npm-4.3.0-6b90bd643af018ea9ae8b0f5802ac1bf8828207035afbc5c025e7829d66effb3.zip/node_modules/mem/", + "packageDependencies": [ + [ + "mem", + "npm:4.3.0" + ], + [ + "map-age-cleaner", + "npm:0.1.3" + ], + [ + "mimic-fn", + "npm:2.1.0" + ], + [ + "p-is-promise", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "memory-fs", + [ + [ + "npm:0.4.1", + { + "packageLocation": "./.yarn/cache/memory-fs-npm-0.4.1-5c0e60c828e908bd6a91106d766ffdaa0138402d7848c3e8fee5f215f525f908.zip/node_modules/memory-fs/", + "packageDependencies": [ + [ + "memory-fs", + "npm:0.4.1" + ], + [ + "errno", + "npm:0.1.7" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "merge-descriptors", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/merge-descriptors-npm-1.0.1-bdd5c332867c2989ec35cb9c7361c31f8191fb398bdecbb831016220ee7bf131.zip/node_modules/merge-descriptors/", + "packageDependencies": [ + [ + "merge-descriptors", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "merge-stream", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/merge-stream-npm-1.0.1-2867c619a734acc261f21735dacc288fbeca621503f6ec35b96323222b6aa6ea.zip/node_modules/merge-stream/", + "packageDependencies": [ + [ + "merge-stream", + "npm:1.0.1" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "methods", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/methods-npm-1.1.2-3ebe027fe2e5de7996d63cbdc225184d54e87461dc1bc6644f2cb2281bbde40e.zip/node_modules/methods/", + "packageDependencies": [ + [ + "methods", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "micromatch", + [ + [ + "npm:3.1.10", + { + "packageLocation": "./.yarn/cache/micromatch-npm-3.1.10-b1b5a2a6029e262ad5c528562a6a8d78c37fa11962bd172684bc55601b1ec11f.zip/node_modules/micromatch/", + "packageDependencies": [ + [ + "micromatch", + "npm:3.1.10" + ], + [ + "arr-diff", + "npm:4.0.0" + ], + [ + "array-unique", + "npm:0.3.2" + ], + [ + "braces", + "npm:2.3.2" + ], + [ + "define-property", + "npm:2.0.2" + ], + [ + "extend-shallow", + "npm:3.0.2" + ], + [ + "extglob", + "npm:2.0.4" + ], + [ + "fragment-cache", + "npm:0.2.1" + ], + [ + "kind-of", + "npm:6.0.2" + ], + [ + "nanomatch", + "npm:1.2.13" + ], + [ + "object.pick", + "npm:1.3.0" + ], + [ + "regex-not", + "npm:1.0.2" + ], + [ + "snapdragon", + "npm:0.8.2" + ], + [ + "to-regex", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "miller-rabin", + [ + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/miller-rabin-npm-4.0.1-e906e79c994a02897b2793a103f6c986921a589ee37becc5e26c5fc36203e0e3.zip/node_modules/miller-rabin/", + "packageDependencies": [ + [ + "miller-rabin", + "npm:4.0.1" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "brorand", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "mime", + [ + [ + "npm:1.4.1", + { + "packageLocation": "./.yarn/cache/mime-npm-1.4.1-120e9d038e69d401d8cbceffbd356590e0ad22ad1a8c00709137076765726cac.zip/node_modules/mime/", + "packageDependencies": [ + [ + "mime", + "npm:1.4.1" + ] + ] + } + ], + [ + "npm:1.6.0", + { + "packageLocation": "./.yarn/cache/mime-npm-1.6.0-4642f0ca6e4be911b109adfa5519371277d97892e80cf6de9d556cd8aa9ed269.zip/node_modules/mime/", + "packageDependencies": [ + [ + "mime", + "npm:1.6.0" + ] + ] + } + ] + ] + ], + [ + "mime-db", + [ + [ + "npm:1.40.0", + { + "packageLocation": "./.yarn/cache/mime-db-npm-1.40.0-df3f72152ec779970169fea8c943f7042197be880d475c1a463e000e2a7646a8.zip/node_modules/mime-db/", + "packageDependencies": [ + [ + "mime-db", + "npm:1.40.0" + ] + ] + } + ] + ] + ], + [ + "mime-types", + [ + [ + "npm:2.1.24", + { + "packageLocation": "./.yarn/cache/mime-types-npm-2.1.24-a96f23b634c6eff97606ccc7ed6285c6d93ad13cc7f45d1e405e2f3bf0a88e3f.zip/node_modules/mime-types/", + "packageDependencies": [ + [ + "mime-types", + "npm:2.1.24" + ], + [ + "mime-db", + "npm:1.40.0" + ] + ] + } + ] + ] + ], + [ + "mimic-fn", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/mimic-fn-npm-1.2.0-990c95f793edd370a65ced1a4dc9cf946a530b5c5d6671bd8416d1ca0a1e04e2.zip/node_modules/mimic-fn/", + "packageDependencies": [ + [ + "mimic-fn", + "npm:1.2.0" + ] + ] + } + ], + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/mimic-fn-npm-2.1.0-6c307a971b5bcef2c7eb32846046071a5e555624875b266d0ec03fe9c47e2554.zip/node_modules/mimic-fn/", + "packageDependencies": [ + [ + "mimic-fn", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "minimalistic-assert", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/minimalistic-assert-npm-1.0.1-355df4553c6cc553206a2a6faece423e8a39686d4c8b8ddc323c99e2934a55c4.zip/node_modules/minimalistic-assert/", + "packageDependencies": [ + [ + "minimalistic-assert", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "minimalistic-crypto-utils", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/minimalistic-crypto-utils-npm-1.0.1-bf8a35a9263e3d76a49dfb3c687aa9b9afdd40f73d87ccd13606763ff3952c8c.zip/node_modules/minimalistic-crypto-utils/", + "packageDependencies": [ + [ + "minimalistic-crypto-utils", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "minimatch", + [ + [ + "npm:3.0.4", + { + "packageLocation": "./.yarn/cache/minimatch-npm-3.0.4-23f16b13edbf4675b537979939af31d49e9f4456e43703beef8acfee7c91d83e.zip/node_modules/minimatch/", + "packageDependencies": [ + [ + "minimatch", + "npm:3.0.4" + ], + [ + "brace-expansion", + "npm:1.1.11" + ] + ] + } + ] + ] + ], + [ + "minimist", + [ + [ + "npm:0.0.10", + { + "packageLocation": "./.yarn/cache/minimist-npm-0.0.10-228e94de568c6f31baa748b322cb1588769b1282d38c44eed95577a18b857cf3.zip/node_modules/minimist/", + "packageDependencies": [ + [ + "minimist", + "npm:0.0.10" + ] + ] + } + ], + [ + "npm:0.0.8", + { + "packageLocation": "./.yarn/cache/minimist-npm-0.0.8-7d1855734fe23af8f8b6697ac455571a54adc0ab2c0480f55f3892ff5b19db7c.zip/node_modules/minimist/", + "packageDependencies": [ + [ + "minimist", + "npm:0.0.8" + ] + ] + } + ], + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/minimist-npm-1.2.0-01a8fc02c334c5c89cd352117933fd4c7f9529d50476a44a178f470774b16ca0.zip/node_modules/minimist/", + "packageDependencies": [ + [ + "minimist", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "minipass", + [ + [ + "npm:2.3.5", + { + "packageLocation": "./.yarn/cache/minipass-npm-2.3.5-f8149bb5cf39cb636ea51e816e9d94b04c48e507d03c54dffe1f9897062f83a9.zip/node_modules/minipass/", + "packageDependencies": [ + [ + "minipass", + "npm:2.3.5" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "yallist", + "npm:3.0.3" + ] + ] + } + ] + ] + ], + [ + "minizlib", + [ + [ + "npm:1.2.1", + { + "packageLocation": "./.yarn/cache/minizlib-npm-1.2.1-981673bc61f27ac2805899a69ff548dc03a78fcfcd8a46469474e1a84f704fb1.zip/node_modules/minizlib/", + "packageDependencies": [ + [ + "minizlib", + "npm:1.2.1" + ], + [ + "minipass", + "npm:2.3.5" + ] + ] + } + ] + ] + ], + [ + "mississippi", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/mississippi-npm-3.0.0-f80c20c7b5a0f899c1c793c144f7f18dbbc72b61d3d6b2a3da6501133da9fbe4.zip/node_modules/mississippi/", + "packageDependencies": [ + [ + "mississippi", + "npm:3.0.0" + ], + [ + "concat-stream", + "npm:1.6.2" + ], + [ + "duplexify", + "npm:3.7.1" + ], + [ + "end-of-stream", + "npm:1.4.1" + ], + [ + "flush-write-stream", + "npm:1.1.1" + ], + [ + "from2", + "npm:2.3.0" + ], + [ + "parallel-transform", + "npm:1.1.0" + ], + [ + "pump", + "npm:3.0.0" + ], + [ + "pumpify", + "npm:1.5.1" + ], + [ + "stream-each", + "npm:1.2.3" + ], + [ + "through2", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "mixin-deep", + [ + [ + "npm:1.3.1", + { + "packageLocation": "./.yarn/cache/mixin-deep-npm-1.3.1-2cf61023cd87200a563ade173e3eebad64f744b4a835a14b03e38327bfd4b33c.zip/node_modules/mixin-deep/", + "packageDependencies": [ + [ + "mixin-deep", + "npm:1.3.1" + ], + [ + "for-in", + "npm:1.0.2" + ], + [ + "is-extendable", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "mkdirp", + [ + [ + "npm:0.5.1", + { + "packageLocation": "./.yarn/cache/mkdirp-npm-0.5.1-c591bfa9c3d7de2bf5ebec0a943be4575d831187507bfb43fc585de05f1206fc.zip/node_modules/mkdirp/", + "packageDependencies": [ + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "minimist", + "npm:0.0.8" + ] + ] + } + ] + ] + ], + [ + "move-concurrently", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/move-concurrently-npm-1.0.1-435d5301fe831ee5a84a1d49e8dacdf31ddd107dd9e663b401dd2257a7fc7a52.zip/node_modules/move-concurrently/", + "packageDependencies": [ + [ + "move-concurrently", + "npm:1.0.1" + ], + [ + "aproba", + "npm:1.2.0" + ], + [ + "copy-concurrently", + "npm:1.0.5" + ], + [ + "fs-write-stream-atomic", + "npm:1.0.10" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "run-queue", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "ms", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/ms-npm-2.0.0-4b4709283b6ed26827d21df3aabb0f248c3e0cc3293fceea70199db9e4e51d59.zip/node_modules/ms/", + "packageDependencies": [ + [ + "ms", + "npm:2.0.0" + ] + ] + } + ], + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/ms-npm-2.1.1-2d22b5db02422b972bc190ba8a81a35c7d03e11f9627381cce5576efeb4c773d.zip/node_modules/ms/", + "packageDependencies": [ + [ + "ms", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "mute-stdout", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/mute-stdout-npm-1.0.1-983733362edef07faad15a74281278e9bb48e65aea87cc3868469e25f2cbae93.zip/node_modules/mute-stdout/", + "packageDependencies": [ + [ + "mute-stdout", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "mute-stream", + [ + [ + "npm:0.0.7", + { + "packageLocation": "./.yarn/cache/mute-stream-npm-0.0.7-7d5d49d9c53683b2f5d7e22b1802c161ab05606f0897223ca3493b36493e5166.zip/node_modules/mute-stream/", + "packageDependencies": [ + [ + "mute-stream", + "npm:0.0.7" + ] + ] + } + ] + ] + ], + [ + "nan", + [ + [ + "npm:2.13.2", + { + "packageLocation": "./.yarn/unplugged/nan-npm-2.13.2-895024a11a4c3a7168ffa49d549c63f9738dd104a2eb39eba087e69b6cba0891/node_modules/nan/", + "packageDependencies": [ + [ + "nan", + "npm:2.13.2" + ], + [ + "node-gyp", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "nanomatch", + [ + [ + "npm:1.2.13", + { + "packageLocation": "./.yarn/cache/nanomatch-npm-1.2.13-dc815c173d2e787d58fb32d672f13c56f67fdf941387c1e8ff0fd7da87dc95c0.zip/node_modules/nanomatch/", + "packageDependencies": [ + [ + "nanomatch", + "npm:1.2.13" + ], + [ + "arr-diff", + "npm:4.0.0" + ], + [ + "array-unique", + "npm:0.3.2" + ], + [ + "define-property", + "npm:2.0.2" + ], + [ + "extend-shallow", + "npm:3.0.2" + ], + [ + "fragment-cache", + "npm:0.2.1" + ], + [ + "is-windows", + "npm:1.0.2" + ], + [ + "kind-of", + "npm:6.0.2" + ], + [ + "object.pick", + "npm:1.3.0" + ], + [ + "regex-not", + "npm:1.0.2" + ], + [ + "snapdragon", + "npm:0.8.2" + ], + [ + "to-regex", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "natural-compare", + [ + [ + "npm:1.4.0", + { + "packageLocation": "./.yarn/cache/natural-compare-npm-1.4.0-cc4d797a155f5e74fa0bc6b859352d507ace3f3e0bfac4f0d67a2d361bbac74d.zip/node_modules/natural-compare/", + "packageDependencies": [ + [ + "natural-compare", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "needle", + [ + [ + "npm:2.3.1", + { + "packageLocation": "./.yarn/cache/needle-npm-2.3.1-5bf19df8ace35df2889740bf608e2e34457edc2dd22f3f8a2337e7c4f5c2f164.zip/node_modules/needle/", + "packageDependencies": [ + [ + "needle", + "npm:2.3.1" + ], + [ + "debug", + "npm:4.1.1" + ], + [ + "iconv-lite", + "npm:0.4.24" + ], + [ + "sax", + "npm:1.2.4" + ] + ] + } + ] + ] + ], + [ + "negotiator", + [ + [ + "npm:0.6.1", + { + "packageLocation": "./.yarn/cache/negotiator-npm-0.6.1-5b9dff5b829202296ad38d7ebc9f7c143c57222a993f0ea1171a220a32c7c883.zip/node_modules/negotiator/", + "packageDependencies": [ + [ + "negotiator", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "neo-async", + [ + [ + "npm:2.6.0", + { + "packageLocation": "./.yarn/cache/neo-async-npm-2.6.0-cef2597a0fa22e8421c9c6915b1256e4b0352ee8cca01e9343fc6b33c55973a7.zip/node_modules/neo-async/", + "packageDependencies": [ + [ + "neo-async", + "npm:2.6.0" + ] + ] + } + ] + ] + ], + [ + "next-tick", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/next-tick-npm-1.0.0-28b958407099e69c85b5eeb9092afb34bed75109e3c6f1b6346b08143d9026eb.zip/node_modules/next-tick/", + "packageDependencies": [ + [ + "next-tick", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "nice-try", + [ + [ + "npm:1.0.5", + { + "packageLocation": "./.yarn/cache/nice-try-npm-1.0.5-1b4389500d2e208f98169c362cd24e04ffecdad3f6eb5fd1951e0965d085956b.zip/node_modules/nice-try/", + "packageDependencies": [ + [ + "nice-try", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "no-case", + [ + [ + "npm:2.3.2", + { + "packageLocation": "./.yarn/cache/no-case-npm-2.3.2-145dc9ed481ac380feb442fd3a9dd5e94b49c45d66aaca1f19dcdf4520ea4ece.zip/node_modules/no-case/", + "packageDependencies": [ + [ + "no-case", + "npm:2.3.2" + ], + [ + "lower-case", + "npm:1.1.4" + ] + ] + } + ] + ] + ], + [ + "node-gyp", + [ + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/unplugged/node-gyp-npm-4.0.0-f860d3ead9fda9821ee800e884356e2f164bc34d5f8e1da231540eb3a98f7e70/node_modules/node-gyp/", + "packageDependencies": [ + [ + "node-gyp", + "npm:4.0.0" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "nopt", + "npm:3.0.6" + ], + [ + "npmlog", + "npm:4.1.2" + ], + [ + "osenv", + "npm:0.1.5" + ], + [ + "request", + "npm:2.88.0" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "semver", + "npm:5.3.0" + ], + [ + "tar", + "npm:4.4.8" + ], + [ + "which", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "node-int64", + [ + [ + "npm:0.4.0", + { + "packageLocation": "./.yarn/cache/node-int64-npm-0.4.0-81b3a411ce87ada0d54a201073807837e4b8240a69298105057dc8834a8c37d0.zip/node_modules/node-int64/", + "packageDependencies": [ + [ + "node-int64", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "node-libs-browser", + [ + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/node-libs-browser-npm-2.2.0-67eccb34759ca4750e9c8083b1f9360bdc7fcc942924ceff9b84e8d5f3a53849.zip/node_modules/node-libs-browser/", + "packageDependencies": [ + [ + "node-libs-browser", + "npm:2.2.0" + ], + [ + "assert", + "npm:1.4.1" + ], + [ + "browserify-zlib", + "npm:0.2.0" + ], + [ + "buffer", + "npm:4.9.1" + ], + [ + "console-browserify", + "npm:1.1.0" + ], + [ + "constants-browserify", + "npm:1.0.0" + ], + [ + "crypto-browserify", + "npm:3.12.0" + ], + [ + "domain-browser", + "npm:1.2.0" + ], + [ + "events", + "npm:3.0.0" + ], + [ + "https-browserify", + "npm:1.0.0" + ], + [ + "os-browserify", + "npm:0.3.0" + ], + [ + "path-browserify", + "npm:0.0.0" + ], + [ + "process", + "npm:0.11.10" + ], + [ + "punycode", + "npm:1.4.1" + ], + [ + "querystring-es3", + "npm:0.2.1" + ], + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "stream-browserify", + "npm:2.0.2" + ], + [ + "stream-http", + "npm:2.8.3" + ], + [ + "string_decoder", + "npm:1.2.0" + ], + [ + "timers-browserify", + "npm:2.0.10" + ], + [ + "tty-browserify", + "npm:0.0.0" + ], + [ + "url", + "npm:0.11.0" + ], + [ + "util", + "npm:0.11.1" + ], + [ + "vm-browserify", + "npm:0.0.4" + ] + ] + } + ] + ] + ], + [ + "node-modules-regexp", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/node-modules-regexp-npm-1.0.0-0db2ec292bf8cae5336dbfb4c3476d3dcf5492a8e14cd1e57889eb91dbb7174a.zip/node_modules/node-modules-regexp/", + "packageDependencies": [ + [ + "node-modules-regexp", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "node-notifier", + [ + [ + "npm:5.4.0", + { + "packageLocation": "./.yarn/cache/node-notifier-npm-5.4.0-cdd01a132c77e609eb952a72b38e07d95120a8e80b81fe501d33168485826ca6.zip/node_modules/node-notifier/", + "packageDependencies": [ + [ + "node-notifier", + "npm:5.4.0" + ], + [ + "growly", + "npm:1.3.0" + ], + [ + "is-wsl", + "npm:1.1.0" + ], + [ + "semver", + "npm:5.7.0" + ], + [ + "shellwords", + "npm:0.1.1" + ], + [ + "which", + "npm:1.3.1" + ] + ] + } + ] + ] + ], + [ + "node-pre-gyp", + [ + [ + "npm:0.12.0", + { + "packageLocation": "./.yarn/unplugged/node-pre-gyp-npm-0.12.0-f97c4ce3c64a4b879fd5dd1ef13448967fb8051fe62344daecb73f48f765d8db/node_modules/node-pre-gyp/", + "packageDependencies": [ + [ + "node-pre-gyp", + "npm:0.12.0" + ], + [ + "detect-libc", + "npm:1.0.3" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "needle", + "npm:2.3.1" + ], + [ + "nopt", + "npm:4.0.1" + ], + [ + "npm-packlist", + "npm:1.4.1" + ], + [ + "npmlog", + "npm:4.1.2" + ], + [ + "rc", + "npm:1.2.8" + ], + [ + "rimraf", + "npm:2.6.3" + ], + [ + "semver", + "npm:5.7.0" + ], + [ + "tar", + "npm:4.4.8" + ] + ] + } + ] + ] + ], + [ + "node-releases", + [ + [ + "npm:1.1.17", + { + "packageLocation": "./.yarn/cache/node-releases-npm-1.1.17-0bd4976a78d2929e77782f9958ec7a0eae08ad8231debcd27cdaed3f9beb081f.zip/node_modules/node-releases/", + "packageDependencies": [ + [ + "node-releases", + "npm:1.1.17" + ], + [ + "semver", + "npm:5.7.0" + ] + ] + } + ] + ] + ], + [ + "nopt", + [ + [ + "npm:3.0.6", + { + "packageLocation": "./.yarn/cache/nopt-npm-3.0.6-eda1aad2ea6541991a4ccb9fee4909e930e71fed5595ae2bcf311423a5b72327.zip/node_modules/nopt/", + "packageDependencies": [ + [ + "nopt", + "npm:3.0.6" + ], + [ + "abbrev", + "npm:1.1.1" + ] + ] + } + ], + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/nopt-npm-4.0.1-f86f336a262fe64c91213cebb6b3d299c90c7814d2a73a8657823b94e9a8ef18.zip/node_modules/nopt/", + "packageDependencies": [ + [ + "nopt", + "npm:4.0.1" + ], + [ + "abbrev", + "npm:1.1.1" + ], + [ + "osenv", + "npm:0.1.5" + ] + ] + } + ] + ] + ], + [ + "normalize-package-data", + [ + [ + "npm:2.5.0", + { + "packageLocation": "./.yarn/cache/normalize-package-data-npm-2.5.0-551e03e9ab14b0c3fc952cd2fe10a80060c3b9949a06c9ada732a904d0a21761.zip/node_modules/normalize-package-data/", + "packageDependencies": [ + [ + "normalize-package-data", + "npm:2.5.0" + ], + [ + "hosted-git-info", + "npm:2.7.1" + ], + [ + "resolve", + "npm:1.10.1" + ], + [ + "semver", + "npm:5.7.0" + ], + [ + "validate-npm-package-license", + "npm:3.0.4" + ] + ] + } + ] + ] + ], + [ + "normalize-path", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/normalize-path-npm-2.1.1-e5464124fd3404d7276a7afd09397d980e202e677dd6c82bc324f77cf25fd493.zip/node_modules/normalize-path/", + "packageDependencies": [ + [ + "normalize-path", + "npm:2.1.1" + ], + [ + "remove-trailing-separator", + "npm:1.1.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/normalize-path-npm-3.0.0-dabcecbeab98e8cb8d6c6eee6685db7f15d90926f6b1f11c94bc333069a8c563.zip/node_modules/normalize-path/", + "packageDependencies": [ + [ + "normalize-path", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "now-and-later", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/now-and-later-npm-2.0.1-e2219d74c772458c4fd21ee7f34b55f9e06d9188635b025d708aecdee8f76485.zip/node_modules/now-and-later/", + "packageDependencies": [ + [ + "now-and-later", + "npm:2.0.1" + ], + [ + "once", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "npm-bundled", + [ + [ + "npm:1.0.6", + { + "packageLocation": "./.yarn/cache/npm-bundled-npm-1.0.6-e2f9f0ccf036bb84172beb0388a3a2b3f6bd02a903164f7b23fe7d7f4cbcff5b.zip/node_modules/npm-bundled/", + "packageDependencies": [ + [ + "npm-bundled", + "npm:1.0.6" + ] + ] + } + ] + ] + ], + [ + "npm-packlist", + [ + [ + "npm:1.4.1", + { + "packageLocation": "./.yarn/cache/npm-packlist-npm-1.4.1-eee83f32969c7ea48fa051945757a79475357e34f9946ffcdd2c1d9caa11e8cc.zip/node_modules/npm-packlist/", + "packageDependencies": [ + [ + "npm-packlist", + "npm:1.4.1" + ], + [ + "ignore-walk", + "npm:3.0.1" + ], + [ + "npm-bundled", + "npm:1.0.6" + ] + ] + } + ] + ] + ], + [ + "npm-run-path", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/npm-run-path-npm-2.0.2-aeecb688557c406b9155593817640ec7b5de967a3510c06df5164a73e5281200.zip/node_modules/npm-run-path/", + "packageDependencies": [ + [ + "npm-run-path", + "npm:2.0.2" + ], + [ + "path-key", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "npmlog", + [ + [ + "npm:4.1.2", + { + "packageLocation": "./.yarn/cache/npmlog-npm-4.1.2-28e9c3aad2b0d4e399faa4a9afbb4bec578e4cfb4e00c23f19bdec31d3601ec3.zip/node_modules/npmlog/", + "packageDependencies": [ + [ + "npmlog", + "npm:4.1.2" + ], + [ + "are-we-there-yet", + "npm:1.1.5" + ], + [ + "console-control-strings", + "npm:1.1.0" + ], + [ + "gauge", + "npm:2.7.4" + ], + [ + "set-blocking", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "nth-check", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/nth-check-npm-1.0.2-8a5550d64578c4a4c9a0f7136c7aa5ba50e8d96dde837e3c9514ebcaa07c1076.zip/node_modules/nth-check/", + "packageDependencies": [ + [ + "nth-check", + "npm:1.0.2" + ], + [ + "boolbase", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "number-is-nan", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/number-is-nan-npm-1.0.1-3ba47a586ac83a748ba1e3b5de7a47375b72ced0758951af419e327456c368e3.zip/node_modules/number-is-nan/", + "packageDependencies": [ + [ + "number-is-nan", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "nwsapi", + [ + [ + "npm:2.1.3", + { + "packageLocation": "./.yarn/cache/nwsapi-npm-2.1.3-b1a20b4c265ac2083b86add626d6712e2f5289ab3e692325ebd67ec45c84c065.zip/node_modules/nwsapi/", + "packageDependencies": [ + [ + "nwsapi", + "npm:2.1.3" + ] + ] + } + ] + ] + ], + [ + "oauth-sign", + [ + [ + "npm:0.9.0", + { + "packageLocation": "./.yarn/cache/oauth-sign-npm-0.9.0-db3f28cc182e96df10a4747042057e3c2be594d211bbc1bcaafc096567be5b95.zip/node_modules/oauth-sign/", + "packageDependencies": [ + [ + "oauth-sign", + "npm:0.9.0" + ] + ] + } + ] + ] + ], + [ + "object-assign", + [ + [ + "npm:4.1.1", + { + "packageLocation": "./.yarn/cache/object-assign-npm-4.1.1-0066fa7e69fb285f50b7ab541c1d3e59727b4267255d2bc3726e9fbfbad9c588.zip/node_modules/object-assign/", + "packageDependencies": [ + [ + "object-assign", + "npm:4.1.1" + ] + ] + } + ] + ] + ], + [ + "object-copy", + [ + [ + "npm:0.1.0", + { + "packageLocation": "./.yarn/cache/object-copy-npm-0.1.0-074ff6b41b793474eb26d78041b072562711b7c8167453565739c707dce6500e.zip/node_modules/object-copy/", + "packageDependencies": [ + [ + "object-copy", + "npm:0.1.0" + ], + [ + "copy-descriptor", + "npm:0.1.1" + ], + [ + "define-property", + "npm:0.2.5" + ], + [ + "kind-of", + "npm:3.2.2" + ] + ] + } + ] + ] + ], + [ + "object-keys", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/object-keys-npm-1.1.1-9ddca4865d7b41388938a4cb43bf58c73c0e48c2cc8920413b1c9e61eeb29489.zip/node_modules/object-keys/", + "packageDependencies": [ + [ + "object-keys", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "object-visit", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/object-visit-npm-1.0.1-656b97aa08aa29301eb869c7a04f0703a6821cd519bc3dba6a70e954a43887e1.zip/node_modules/object-visit/", + "packageDependencies": [ + [ + "object-visit", + "npm:1.0.1" + ], + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "object.assign", + [ + [ + "npm:4.1.0", + { + "packageLocation": "./.yarn/cache/object.assign-npm-4.1.0-37fc64e3c21a60de4dbac94b4c7078fc83f89469ee7cf0658b5f2aa0d5be5304.zip/node_modules/object.assign/", + "packageDependencies": [ + [ + "object.assign", + "npm:4.1.0" + ], + [ + "define-properties", + "npm:1.1.3" + ], + [ + "function-bind", + "npm:1.1.1" + ], + [ + "has-symbols", + "npm:1.0.0" + ], + [ + "object-keys", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "object.defaults", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/object.defaults-npm-1.1.0-920d9f2782e4dc4584a262650284a7080d3e9961c814b89edc559adca5003abc.zip/node_modules/object.defaults/", + "packageDependencies": [ + [ + "object.defaults", + "npm:1.1.0" + ], + [ + "array-each", + "npm:1.0.1" + ], + [ + "array-slice", + "npm:1.1.0" + ], + [ + "for-own", + "npm:1.0.0" + ], + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "object.fromentries", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/object.fromentries-npm-2.0.0-9e3926af927331cca138a1e94d6f0a035f591dbf612826d44c44db4f94c45934.zip/node_modules/object.fromentries/", + "packageDependencies": [ + [ + "object.fromentries", + "npm:2.0.0" + ], + [ + "define-properties", + "npm:1.1.3" + ], + [ + "es-abstract", + "npm:1.13.0" + ], + [ + "function-bind", + "npm:1.1.1" + ], + [ + "has", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "object.getownpropertydescriptors", + [ + [ + "npm:2.0.3", + { + "packageLocation": "./.yarn/cache/object.getownpropertydescriptors-npm-2.0.3-ead1513a5f1360fec7ec4e8e08c783ce7f4a0a665b22e9a452d1b80528480e8d.zip/node_modules/object.getownpropertydescriptors/", + "packageDependencies": [ + [ + "object.getownpropertydescriptors", + "npm:2.0.3" + ], + [ + "define-properties", + "npm:1.1.3" + ], + [ + "es-abstract", + "npm:1.13.0" + ] + ] + } + ] + ] + ], + [ + "object.map", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/object.map-npm-1.0.1-d47b116e1bcf5bfb0481927111592f66b305559e0d820df13a762aac8c2d8fd8.zip/node_modules/object.map/", + "packageDependencies": [ + [ + "object.map", + "npm:1.0.1" + ], + [ + "for-own", + "npm:1.0.0" + ], + [ + "make-iterator", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "object.pick", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/object.pick-npm-1.3.0-4df4152692227130cf0b1146dc9933c8aebea1bab71c0827ecb0deff3b88f4e3.zip/node_modules/object.pick/", + "packageDependencies": [ + [ + "object.pick", + "npm:1.3.0" + ], + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "object.reduce", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/object.reduce-npm-1.0.1-5ece08b12e029b7cf421929eb6e128e2b0affe2115703db6308cf7597316a4da.zip/node_modules/object.reduce/", + "packageDependencies": [ + [ + "object.reduce", + "npm:1.0.1" + ], + [ + "for-own", + "npm:1.0.0" + ], + [ + "make-iterator", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "on-finished", + [ + [ + "npm:2.3.0", + { + "packageLocation": "./.yarn/cache/on-finished-npm-2.3.0-ec20b4f05a4dffecf446d9f40eb4ca652b3caf06c579e02cbffd9e75cec31a4a.zip/node_modules/on-finished/", + "packageDependencies": [ + [ + "on-finished", + "npm:2.3.0" + ], + [ + "ee-first", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "once", + [ + [ + "npm:1.4.0", + { + "packageLocation": "./.yarn/cache/once-npm-1.4.0-794c410b486c706adf6c937bf0a6db162870004d99476cf289937ad8daad7f00.zip/node_modules/once/", + "packageDependencies": [ + [ + "once", + "npm:1.4.0" + ], + [ + "wrappy", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "onetime", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/onetime-npm-2.0.1-5a9f8a36392ee2eb3016c1265eb9df7d0cb293bb11a330bc5e3944a025048a1d.zip/node_modules/onetime/", + "packageDependencies": [ + [ + "onetime", + "npm:2.0.1" + ], + [ + "mimic-fn", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "opener", + [ + [ + "npm:1.4.3", + { + "packageLocation": "./.yarn/cache/opener-npm-1.4.3-ff2266ad1ebab64c8411f91c82e36256f19645e5fa810291dad9fe9b6d156338.zip/node_modules/opener/", + "packageDependencies": [ + [ + "opener", + "npm:1.4.3" + ] + ] + } + ], + [ + "npm:1.5.1", + { + "packageLocation": "./.yarn/cache/opener-npm-1.5.1-37a003a311e45613ab23fba740b2975d064a54b5ba0fe47978df5f755263760b.zip/node_modules/opener/", + "packageDependencies": [ + [ + "opener", + "npm:1.5.1" + ] + ] + } + ] + ] + ], + [ + "optimist", + [ + [ + "npm:0.6.1", + { + "packageLocation": "./.yarn/cache/optimist-npm-0.6.1-44e4ca2a072080e4c5e003e72e9f7b20a34150bed249643c02f36b52c526ab00.zip/node_modules/optimist/", + "packageDependencies": [ + [ + "optimist", + "npm:0.6.1" + ], + [ + "minimist", + "npm:0.0.10" + ], + [ + "wordwrap", + "npm:0.0.3" + ] + ] + } + ] + ] + ], + [ + "optionator", + [ + [ + "npm:0.8.2", + { + "packageLocation": "./.yarn/cache/optionator-npm-0.8.2-aa40b8914a89fd1c057db463b2cd6f683a1e9b6f675ae5672c9a10b846658d08.zip/node_modules/optionator/", + "packageDependencies": [ + [ + "optionator", + "npm:0.8.2" + ], + [ + "deep-is", + "npm:0.1.3" + ], + [ + "fast-levenshtein", + "npm:2.0.6" + ], + [ + "levn", + "npm:0.3.0" + ], + [ + "prelude-ls", + "npm:1.1.2" + ], + [ + "type-check", + "npm:0.3.2" + ], + [ + "wordwrap", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "ordered-read-streams", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/ordered-read-streams-npm-1.0.1-293fbfb0d9759e8462e07a57caa129bccd75eebde4d071b9a1d2714e3ec4d96d.zip/node_modules/ordered-read-streams/", + "packageDependencies": [ + [ + "ordered-read-streams", + "npm:1.0.1" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "os-browserify", + [ + [ + "npm:0.3.0", + { + "packageLocation": "./.yarn/cache/os-browserify-npm-0.3.0-f8cf0021f4b03218e6bef9f880c5acbec1a8ebdb7344a94b164851c10ac30e2e.zip/node_modules/os-browserify/", + "packageDependencies": [ + [ + "os-browserify", + "npm:0.3.0" + ] + ] + } + ] + ] + ], + [ + "os-homedir", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/os-homedir-npm-1.0.2-8eb31c9b0ff2df21002291a5e4b19a15180491b4d17061d482c22fb103f13533.zip/node_modules/os-homedir/", + "packageDependencies": [ + [ + "os-homedir", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "os-locale", + [ + [ + "npm:1.4.0", + { + "packageLocation": "./.yarn/cache/os-locale-npm-1.4.0-ea5bb9a8650d101d4ec6703fd61f6d9a92075e2fdfce0cb0ae562aaddb213806.zip/node_modules/os-locale/", + "packageDependencies": [ + [ + "os-locale", + "npm:1.4.0" + ], + [ + "lcid", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/os-locale-npm-3.1.0-cb10cb680ef75483b63d92c709757b309843788ed36ec5c24aaa3fbe8f271359.zip/node_modules/os-locale/", + "packageDependencies": [ + [ + "os-locale", + "npm:3.1.0" + ], + [ + "execa", + "npm:1.0.0" + ], + [ + "lcid", + "npm:2.0.0" + ], + [ + "mem", + "npm:4.3.0" + ] + ] + } + ] + ] + ], + [ + "os-tmpdir", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/os-tmpdir-npm-1.0.2-491d16f1b12617d1d1fa4ba13ebe44af4f281e5295d7e5addbe3a0bddefabe82.zip/node_modules/os-tmpdir/", + "packageDependencies": [ + [ + "os-tmpdir", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "osenv", + [ + [ + "npm:0.1.5", + { + "packageLocation": "./.yarn/cache/osenv-npm-0.1.5-49470eab425272a0eae2cdcfade2a3bd6e5fd9a56def52f6489564ba683682f5.zip/node_modules/osenv/", + "packageDependencies": [ + [ + "osenv", + "npm:0.1.5" + ], + [ + "os-homedir", + "npm:1.0.2" + ], + [ + "os-tmpdir", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "p-defer", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/p-defer-npm-1.0.0-59afd96275a196d6b7290172256317bfb386fe1b8e8f0878e87bc9172bc1cc86.zip/node_modules/p-defer/", + "packageDependencies": [ + [ + "p-defer", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "p-each-series", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/p-each-series-npm-1.0.0-d2625cad46988de1837a48a009de2da3ae6b7efcfd4fc01ba7ef0f587278a4f6.zip/node_modules/p-each-series/", + "packageDependencies": [ + [ + "p-each-series", + "npm:1.0.0" + ], + [ + "p-reduce", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "p-finally", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/p-finally-npm-1.0.0-52394022f0eea558d6a4af2b3f41691b2990249d51504eb6ec8f20a41794aacf.zip/node_modules/p-finally/", + "packageDependencies": [ + [ + "p-finally", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "p-is-promise", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/p-is-promise-npm-2.1.0-1955ebfc8fae05d5b528f4dd15440cd400cb1bbd5c8d7cf1288b31fd5ee5582e.zip/node_modules/p-is-promise/", + "packageDependencies": [ + [ + "p-is-promise", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "p-limit", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/p-limit-npm-1.3.0-550226d704e4a62028cc8e20b5a6c021a0be894ca34599f3fd9edf7079591c46.zip/node_modules/p-limit/", + "packageDependencies": [ + [ + "p-limit", + "npm:1.3.0" + ], + [ + "p-try", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/p-limit-npm-2.2.0-4eb6e0565ae6803603ad40f299814555c12ffc13edd381d67ee926f1e7b1b38a.zip/node_modules/p-limit/", + "packageDependencies": [ + [ + "p-limit", + "npm:2.2.0" + ], + [ + "p-try", + "npm:2.2.0" + ] + ] + } + ] + ] + ], + [ + "p-locate", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/p-locate-npm-2.0.0-67510df6873a68a64f47009bed04f43ff71dbf711bb548e116fc82525ad6e4f7.zip/node_modules/p-locate/", + "packageDependencies": [ + [ + "p-locate", + "npm:2.0.0" + ], + [ + "p-limit", + "npm:1.3.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/p-locate-npm-3.0.0-2e5734fb0e93b06d7fe8c3ac66214a8f7e92043c69cc86da332da4fa60a3a38f.zip/node_modules/p-locate/", + "packageDependencies": [ + [ + "p-locate", + "npm:3.0.0" + ], + [ + "p-limit", + "npm:2.2.0" + ] + ] + } + ] + ] + ], + [ + "p-reduce", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/p-reduce-npm-1.0.0-bcb128c2d5fdc8c50986df48b7720860dc20c7da564d244fec37c7c9f484d47f.zip/node_modules/p-reduce/", + "packageDependencies": [ + [ + "p-reduce", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "p-try", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/p-try-npm-1.0.0-39bcf75320966549d22f2efbe1f3f1f389e53ba57c30f7217e146e16269ed755.zip/node_modules/p-try/", + "packageDependencies": [ + [ + "p-try", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/p-try-npm-2.2.0-6616c024baff7b00d677617bce5ac0f5b264f08a3107884338b7e0e2291eab1d.zip/node_modules/p-try/", + "packageDependencies": [ + [ + "p-try", + "npm:2.2.0" + ] + ] + } + ] + ] + ], + [ + "pako", + [ + [ + "npm:1.0.10", + { + "packageLocation": "./.yarn/cache/pako-npm-1.0.10-e9b21c1ed1fb12fa63b98235034e507a491a2880c36ed54b6578426cd342bda9.zip/node_modules/pako/", + "packageDependencies": [ + [ + "pako", + "npm:1.0.10" + ] + ] + } + ] + ] + ], + [ + "parallel-transform", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/parallel-transform-npm-1.1.0-91716a3cffba093212ecedfc137a1665a950834e5f4c899956f632bd365f958f.zip/node_modules/parallel-transform/", + "packageDependencies": [ + [ + "parallel-transform", + "npm:1.1.0" + ], + [ + "cyclist", + "npm:0.2.2" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "param-case", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/param-case-npm-2.1.1-3773074ce0f4b6354c56402b14b522e4da79b1c92c47b4aaebb8cefdbe834810.zip/node_modules/param-case/", + "packageDependencies": [ + [ + "param-case", + "npm:2.1.1" + ], + [ + "no-case", + "npm:2.3.2" + ] + ] + } + ] + ] + ], + [ + "parent-module", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/parent-module-npm-1.0.1-61f323e6df96d65e671c2cb5cb7354d21c5b9085e9fc51353856a6af8e314ada.zip/node_modules/parent-module/", + "packageDependencies": [ + [ + "parent-module", + "npm:1.0.1" + ], + [ + "callsites", + "npm:3.1.0" + ] + ] + } + ] + ] + ], + [ + "parse-asn1", + [ + [ + "npm:5.1.4", + { + "packageLocation": "./.yarn/cache/parse-asn1-npm-5.1.4-17e2e42e5772391bfd285c325dda34b9c9f5f74c2a2c6c1b83bb19335b6b685e.zip/node_modules/parse-asn1/", + "packageDependencies": [ + [ + "parse-asn1", + "npm:5.1.4" + ], + [ + "asn1.js", + "npm:4.10.1" + ], + [ + "browserify-aes", + "npm:1.2.0" + ], + [ + "create-hash", + "npm:1.2.0" + ], + [ + "evp_bytestokey", + "npm:1.0.3" + ], + [ + "pbkdf2", + "npm:3.0.17" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "parse-filepath", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/parse-filepath-npm-1.0.2-8e7467c806d6209cb0f46987276d3efb53f0a0b75118ff89cca5ebd07266f423.zip/node_modules/parse-filepath/", + "packageDependencies": [ + [ + "parse-filepath", + "npm:1.0.2" + ], + [ + "is-absolute", + "npm:1.0.0" + ], + [ + "map-cache", + "npm:0.2.2" + ], + [ + "path-root", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "parse-json", + [ + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/parse-json-npm-2.2.0-d8b732b51dfffb8abfe5c3ab6d6a7654ce11e8d3cf4936ba9cf83fd59d45fe47.zip/node_modules/parse-json/", + "packageDependencies": [ + [ + "parse-json", + "npm:2.2.0" + ], + [ + "error-ex", + "npm:1.3.2" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/parse-json-npm-4.0.0-b9291ad1286f15bc165bec1af5f2550170bb5c4be0d5756a5314e874a40dc11e.zip/node_modules/parse-json/", + "packageDependencies": [ + [ + "parse-json", + "npm:4.0.0" + ], + [ + "error-ex", + "npm:1.3.2" + ], + [ + "json-parse-better-errors", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "parse-node-version", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/parse-node-version-npm-1.0.1-e049ce43ec19d452366f81f1e25c8afc57dd8998da3e37bdcbe3fff68dd63416.zip/node_modules/parse-node-version/", + "packageDependencies": [ + [ + "parse-node-version", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "parse-passwd", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/parse-passwd-npm-1.0.0-1c9321928ef57a90982dc0497c7c0e192ea0236fcbbbf80b2f2c2cf3d65499e1.zip/node_modules/parse-passwd/", + "packageDependencies": [ + [ + "parse-passwd", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "parse5", + [ + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/parse5-npm-4.0.0-278d97711992b5299219e6c52cea46f530baa10cb09e17a13167c102ce6d3ab2.zip/node_modules/parse5/", + "packageDependencies": [ + [ + "parse5", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "parseurl", + [ + [ + "npm:1.3.3", + { + "packageLocation": "./.yarn/cache/parseurl-npm-1.3.3-14b33ab618d9c49aa11294c264e64096fa2f0aedec1cd46b55c566ef490376b5.zip/node_modules/parseurl/", + "packageDependencies": [ + [ + "parseurl", + "npm:1.3.3" + ] + ] + } + ] + ] + ], + [ + "pascalcase", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/pascalcase-npm-0.1.1-d9a561227adaab9dc2927c72d6cf953a0bb4be33b769a9e7810651f4e22c8791.zip/node_modules/pascalcase/", + "packageDependencies": [ + [ + "pascalcase", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "path-browserify", + [ + [ + "npm:0.0.0", + { + "packageLocation": "./.yarn/cache/path-browserify-npm-0.0.0-657662bf0a325d9341c8d97cc299299a29cd074453fed1f69d037edac4792de4.zip/node_modules/path-browserify/", + "packageDependencies": [ + [ + "path-browserify", + "npm:0.0.0" + ] + ] + } + ] + ] + ], + [ + "path-dirname", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/path-dirname-npm-1.0.2-f768e50c39b8dcca945f075ade118158fd46518cba392ae1a6c6338ea2cb0bc9.zip/node_modules/path-dirname/", + "packageDependencies": [ + [ + "path-dirname", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "path-exists", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/path-exists-npm-2.1.0-4f4b3a17966a310c222f71f79bd4c21d775b0d77718b73dda90a8c25fe4f054c.zip/node_modules/path-exists/", + "packageDependencies": [ + [ + "path-exists", + "npm:2.1.0" + ], + [ + "pinkie-promise", + "npm:2.0.1" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/path-exists-npm-3.0.0-011a64e18ad7150064570b6f2c9d2ad10fbb71a9dd16ec13468415a565ed0a2b.zip/node_modules/path-exists/", + "packageDependencies": [ + [ + "path-exists", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "path-is-absolute", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/path-is-absolute-npm-1.0.1-f8d2b1d193d42295a65c43c7a41f1b66c4b5c9f84218f5130f539af70d92c056.zip/node_modules/path-is-absolute/", + "packageDependencies": [ + [ + "path-is-absolute", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "path-is-inside", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/path-is-inside-npm-1.0.2-e5705424b379086429c351a899679e2ecf475e14e9f575e2332560e096991717.zip/node_modules/path-is-inside/", + "packageDependencies": [ + [ + "path-is-inside", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "path-key", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/path-key-npm-2.0.1-0b0b7cf0ee845648a109f2d5fec82c7806338f606ace6b037af486b988f18d0f.zip/node_modules/path-key/", + "packageDependencies": [ + [ + "path-key", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "path-parse", + [ + [ + "npm:1.0.6", + { + "packageLocation": "./.yarn/cache/path-parse-npm-1.0.6-323234ec90792a36545d627dd7186aba626a879342032b3f104b04ea72f090b0.zip/node_modules/path-parse/", + "packageDependencies": [ + [ + "path-parse", + "npm:1.0.6" + ] + ] + } + ] + ] + ], + [ + "path-root", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/path-root-npm-0.1.1-80cc8db3d6339883a82b754225ba1cae177fcdab76f0ccc0e759143059c9ecad.zip/node_modules/path-root/", + "packageDependencies": [ + [ + "path-root", + "npm:0.1.1" + ], + [ + "path-root-regex", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "path-root-regex", + [ + [ + "npm:0.1.2", + { + "packageLocation": "./.yarn/cache/path-root-regex-npm-0.1.2-9ec99f4267b32508a74c60b6d8105fbae34a25653803b99afd9c4b60f59215e4.zip/node_modules/path-root-regex/", + "packageDependencies": [ + [ + "path-root-regex", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "path-to-regexp", + [ + [ + "npm:0.1.7", + { + "packageLocation": "./.yarn/cache/path-to-regexp-npm-0.1.7-1a40d7d0782b8fa0b41073a4d19970685a7096e6d79fe4e5896b38d47e381103.zip/node_modules/path-to-regexp/", + "packageDependencies": [ + [ + "path-to-regexp", + "npm:0.1.7" + ] + ] + } + ] + ] + ], + [ + "path-type", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/path-type-npm-1.1.0-7ce1091a4337bae28b9ab75855f5fdf8a954583e76e5fd3b7d3eab6d47041b4b.zip/node_modules/path-type/", + "packageDependencies": [ + [ + "path-type", + "npm:1.1.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "pify", + "npm:2.3.0" + ], + [ + "pinkie-promise", + "npm:2.0.1" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/path-type-npm-2.0.0-9bc7355eb710589261bc5764582056ea96056d9becfb4c58b61d9d9d8ffb03a7.zip/node_modules/path-type/", + "packageDependencies": [ + [ + "path-type", + "npm:2.0.0" + ], + [ + "pify", + "npm:2.3.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/path-type-npm-3.0.0-7d1673dbb68e5a3252edfb47bfc0df505ed9c91301b905f7ef38880c323e303f.zip/node_modules/path-type/", + "packageDependencies": [ + [ + "path-type", + "npm:3.0.0" + ], + [ + "pify", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "pbkdf2", + [ + [ + "npm:3.0.17", + { + "packageLocation": "./.yarn/cache/pbkdf2-npm-3.0.17-04a2b65e263b0b4ad47a49a532a8a25622e5ee1840a688cd41a5fb750da27436.zip/node_modules/pbkdf2/", + "packageDependencies": [ + [ + "pbkdf2", + "npm:3.0.17" + ], + [ + "create-hash", + "npm:1.2.0" + ], + [ + "create-hmac", + "npm:1.1.7" + ], + [ + "ripemd160", + "npm:2.0.2" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "sha.js", + "npm:2.4.11" + ] + ] + } + ] + ] + ], + [ + "performance-now", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/performance-now-npm-2.1.0-eedf0620f310d1edaa1dd2fdd62fe9ba02713688391923a8ca1a83a3037766b3.zip/node_modules/performance-now/", + "packageDependencies": [ + [ + "performance-now", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "pify", + [ + [ + "npm:2.3.0", + { + "packageLocation": "./.yarn/cache/pify-npm-2.3.0-8a76f34bc8fcc31e50ccca41940c2af2605278b1cfa183dca47caf73a98db798.zip/node_modules/pify/", + "packageDependencies": [ + [ + "pify", + "npm:2.3.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/pify-npm-3.0.0-0e1369ba1d8add4bd80a946df45b8c29d67bc132c49294b9d4fd2bbcdd515a95.zip/node_modules/pify/", + "packageDependencies": [ + [ + "pify", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/pify-npm-4.0.1-abbe8a6e2805f3452e6cf773791e6b056b0389852994ba0309026597f917356f.zip/node_modules/pify/", + "packageDependencies": [ + [ + "pify", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "pinkie", + [ + [ + "npm:2.0.4", + { + "packageLocation": "./.yarn/cache/pinkie-npm-2.0.4-7a0ba77113d96322872a2b8081e4d3123d0cfb39b4dbdfdfaae9925f2ad85826.zip/node_modules/pinkie/", + "packageDependencies": [ + [ + "pinkie", + "npm:2.0.4" + ] + ] + } + ] + ] + ], + [ + "pinkie-promise", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/pinkie-promise-npm-2.0.1-d6a08f4024c7e5d06a1f26715eadc8b37c17a62a97848172a3152f75d2055a36.zip/node_modules/pinkie-promise/", + "packageDependencies": [ + [ + "pinkie-promise", + "npm:2.0.1" + ], + [ + "pinkie", + "npm:2.0.4" + ] + ] + } + ] + ] + ], + [ + "pirates", + [ + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/pirates-npm-4.0.1-52be3da94b9a29b20a7a0b13748b5f0f51397b8f59f0dcb523e99a0f239590be.zip/node_modules/pirates/", + "packageDependencies": [ + [ + "pirates", + "npm:4.0.1" + ], + [ + "node-modules-regexp", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "pkg-dir", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/pkg-dir-npm-2.0.0-97728ea9e623f32a7a9f9b194a71d57a3d35230bbe7ad173ebeccedf430aa646.zip/node_modules/pkg-dir/", + "packageDependencies": [ + [ + "pkg-dir", + "npm:2.0.0" + ], + [ + "find-up", + "npm:2.1.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/pkg-dir-npm-3.0.0-ae90d3a94ea91c658da36f10c9665eabe0925218af6541770ac366179302251d.zip/node_modules/pkg-dir/", + "packageDependencies": [ + [ + "pkg-dir", + "npm:3.0.0" + ], + [ + "find-up", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "plugin-error", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/plugin-error-npm-1.0.1-da0cd37bca5740ccba194b425758baa8b6b564389746ee762738f634b0a42b62.zip/node_modules/plugin-error/", + "packageDependencies": [ + [ + "plugin-error", + "npm:1.0.1" + ], + [ + "ansi-colors", + "npm:1.1.0" + ], + [ + "arr-diff", + "npm:4.0.0" + ], + [ + "arr-union", + "npm:3.1.0" + ], + [ + "extend-shallow", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "pn", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/pn-npm-1.1.0-a6cb67fb11106776f0cadeca019f0758866e6fe73507368be50ab2ab2e041c3a.zip/node_modules/pn/", + "packageDependencies": [ + [ + "pn", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "pnp-webpack-plugin", + [ + [ + "npm:1.4.3", + { + "packageLocation": "./.yarn/cache/pnp-webpack-plugin-npm-1.4.3-974fedba5e7df2a73a2f275f7a1bfa5035af815448ede226eedfe25fc6cec96a.zip/node_modules/pnp-webpack-plugin/", + "packageDependencies": [ + [ + "pnp-webpack-plugin", + "npm:1.4.3" + ], + [ + "ts-pnp", + "virtual:974fedba5e7df2a73a2f275f7a1bfa5035af815448ede226eedfe25fc6cec96a4bfffbe9ce2c7f52097671b19a7a8f7a889c4903b9a25a3c292b875573656353#npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "portfinder", + [ + [ + "npm:1.0.20", + { + "packageLocation": "./.yarn/cache/portfinder-npm-1.0.20-4cbe8262e181efb00d3ea7dbf318f8a65a402b2b064e9ad01042a5a14ea45bbf.zip/node_modules/portfinder/", + "packageDependencies": [ + [ + "portfinder", + "npm:1.0.20" + ], + [ + "async", + "npm:1.5.2" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "mkdirp", + "npm:0.5.1" + ] + ] + } + ] + ] + ], + [ + "posix-character-classes", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/posix-character-classes-npm-0.1.1-9da76e1830a211fcca3b9f2e9871c73ce06725c1c4ac1ffd3503a038616d7540.zip/node_modules/posix-character-classes/", + "packageDependencies": [ + [ + "posix-character-classes", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "prelude-ls", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/prelude-ls-npm-1.1.2-b39a134e3a8643d11f3d2cc0ec5341f8a6b7c905bf4dccccd2c10f4919f4e2a6.zip/node_modules/prelude-ls/", + "packageDependencies": [ + [ + "prelude-ls", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "prettier", + [ + [ + "npm:1.17.0", + { + "packageLocation": "./.yarn/cache/prettier-npm-1.17.0-8d24ef48856d55b540775cee0771b6dbca5e95581e9bab103a2dc8e60c1ef363.zip/node_modules/prettier/", + "packageDependencies": [ + [ + "prettier", + "npm:1.17.0" + ] + ] + } + ] + ] + ], + [ + "prettier-linter-helpers", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/prettier-linter-helpers-npm-1.0.0-d88507b0296e14ad925b60938b75848ae4ff020dc39aecf9c61b89f8bb372d51.zip/node_modules/prettier-linter-helpers/", + "packageDependencies": [ + [ + "prettier-linter-helpers", + "npm:1.0.0" + ], + [ + "fast-diff", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "pretty-error", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/pretty-error-npm-2.1.1-449ed96c0488eb7dbf408378a1f889119c277b05cb53119e50656376b155027a.zip/node_modules/pretty-error/", + "packageDependencies": [ + [ + "pretty-error", + "npm:2.1.1" + ], + [ + "renderkid", + "npm:2.0.3" + ], + [ + "utila", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "pretty-format", + [ + [ + "npm:24.7.0", + { + "packageLocation": "./.yarn/cache/pretty-format-npm-24.7.0-8c316a854af70023425e8649bb4b7d0c2546e1266e55dadb4db106db3e771f16.zip/node_modules/pretty-format/", + "packageDependencies": [ + [ + "pretty-format", + "npm:24.7.0" + ], + [ + "@jest/types", + "npm:24.7.0" + ], + [ + "ansi-regex", + "npm:4.1.0" + ], + [ + "ansi-styles", + "npm:3.2.1" + ], + [ + "react-is", + "npm:16.8.6" + ] + ] + } + ] + ] + ], + [ + "pretty-hrtime", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/pretty-hrtime-npm-1.0.3-784cdd612c0a3817d5f393ea74fdc3fce0b3f207dd43f5f10b2e8c600c5a34b6.zip/node_modules/pretty-hrtime/", + "packageDependencies": [ + [ + "pretty-hrtime", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "private", + [ + [ + "npm:0.1.8", + { + "packageLocation": "./.yarn/cache/private-npm-0.1.8-d62144fff53c984ed24b32b9191e85a461d29d518ec18b69592c3ef31d322592.zip/node_modules/private/", + "packageDependencies": [ + [ + "private", + "npm:0.1.8" + ] + ] + } + ] + ] + ], + [ + "process", + [ + [ + "npm:0.11.10", + { + "packageLocation": "./.yarn/cache/process-npm-0.11.10-9fe95b99ea2cab3b8e695258a5981094158798d9004af8ebc1a3ea63ca4b9d9d.zip/node_modules/process/", + "packageDependencies": [ + [ + "process", + "npm:0.11.10" + ] + ] + } + ] + ] + ], + [ + "process-nextick-args", + [ + [ + "npm:1.0.7", + { + "packageLocation": "./.yarn/cache/process-nextick-args-npm-1.0.7-cded0b452f8d3d0ed83beeab1623209686f2c3c9295061d8244c6ea69a8a8463.zip/node_modules/process-nextick-args/", + "packageDependencies": [ + [ + "process-nextick-args", + "npm:1.0.7" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/process-nextick-args-npm-2.0.0-7c8b742449d42d1d867c2c190f0ff159bddad09b41120d36643e6b66ca9861ad.zip/node_modules/process-nextick-args/", + "packageDependencies": [ + [ + "process-nextick-args", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "progress", + [ + [ + "npm:2.0.3", + { + "packageLocation": "./.yarn/cache/progress-npm-2.0.3-1602803939d128358222ac2e8d4c0be82a388ab462288b5d0341676ca97dd815.zip/node_modules/progress/", + "packageDependencies": [ + [ + "progress", + "npm:2.0.3" + ] + ] + } + ] + ] + ], + [ + "promise-inflight", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/promise-inflight-npm-1.0.1-283730fa74f98815eb54f4bc95bf986396507e9c5ac37459482f2ddf06e489f0.zip/node_modules/promise-inflight/", + "packageDependencies": [ + [ + "promise-inflight", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "prompts", + [ + [ + "npm:2.0.4", + { + "packageLocation": "./.yarn/cache/prompts-npm-2.0.4-8c4b1288a46892306e2e94bb317fe7f6014a2bdbcab26418d51910be9f0cd87d.zip/node_modules/prompts/", + "packageDependencies": [ + [ + "prompts", + "npm:2.0.4" + ], + [ + "kleur", + "npm:3.0.3" + ], + [ + "sisteransi", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "prop-types", + [ + [ + "npm:15.7.2", + { + "packageLocation": "./.yarn/cache/prop-types-npm-15.7.2-ad621c02aa737aa329d969ec52a0bd41774faff2a5b47079806c20674d02a814.zip/node_modules/prop-types/", + "packageDependencies": [ + [ + "prop-types", + "npm:15.7.2" + ], + [ + "loose-envify", + "npm:1.4.0" + ], + [ + "object-assign", + "npm:4.1.1" + ], + [ + "react-is", + "npm:16.8.6" + ] + ] + } + ] + ] + ], + [ + "proxy-addr", + [ + [ + "npm:2.0.5", + { + "packageLocation": "./.yarn/cache/proxy-addr-npm-2.0.5-ef4cd01f9aad663743e556f6ee0c233f1a3c78267c5454a9a21e12039b41d45b.zip/node_modules/proxy-addr/", + "packageDependencies": [ + [ + "proxy-addr", + "npm:2.0.5" + ], + [ + "forwarded", + "npm:0.1.2" + ], + [ + "ipaddr.js", + "npm:1.9.0" + ] + ] + } + ] + ] + ], + [ + "prr", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/prr-npm-1.0.1-195c2397bcdf13e8deda1cba5f9b3dcd6df843b3b71fb356751d60d0bd8e539b.zip/node_modules/prr/", + "packageDependencies": [ + [ + "prr", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "psl", + [ + [ + "npm:1.1.31", + { + "packageLocation": "./.yarn/cache/psl-npm-1.1.31-642f08fa0cc1795f3aa0fa12b73faa8b5288db0e3945a992ba1a1cf6c7d48dfb.zip/node_modules/psl/", + "packageDependencies": [ + [ + "psl", + "npm:1.1.31" + ] + ] + } + ] + ] + ], + [ + "public-encrypt", + [ + [ + "npm:4.0.3", + { + "packageLocation": "./.yarn/cache/public-encrypt-npm-4.0.3-3cae9acc9688921683aed7cc8f04a15e0a0fe6466a2f3e17f88f209d61d6f828.zip/node_modules/public-encrypt/", + "packageDependencies": [ + [ + "public-encrypt", + "npm:4.0.3" + ], + [ + "bn.js", + "npm:4.11.8" + ], + [ + "browserify-rsa", + "npm:4.0.1" + ], + [ + "create-hash", + "npm:1.2.0" + ], + [ + "parse-asn1", + "npm:5.1.4" + ], + [ + "randombytes", + "npm:2.1.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "pump", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/pump-npm-2.0.1-dcdd4a4c023a2b305ff477d8f681cc2d31a1ac9b8f5b5f5ccf3ec416064c0a2f.zip/node_modules/pump/", + "packageDependencies": [ + [ + "pump", + "npm:2.0.1" + ], + [ + "end-of-stream", + "npm:1.4.1" + ], + [ + "once", + "npm:1.4.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/pump-npm-3.0.0-621080e5b5d55695c4df04159c381595dbca9c34699cd019a452da1d0a634157.zip/node_modules/pump/", + "packageDependencies": [ + [ + "pump", + "npm:3.0.0" + ], + [ + "end-of-stream", + "npm:1.4.1" + ], + [ + "once", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "pumpify", + [ + [ + "npm:1.5.1", + { + "packageLocation": "./.yarn/cache/pumpify-npm-1.5.1-1299a610bfeca79c22bf03490fe28066f1d8ebd2e68b96dfea4ed312dcd4a38a.zip/node_modules/pumpify/", + "packageDependencies": [ + [ + "pumpify", + "npm:1.5.1" + ], + [ + "duplexify", + "npm:3.7.1" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "pump", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "punycode", + [ + [ + "npm:1.3.2", + { + "packageLocation": "./.yarn/cache/punycode-npm-1.3.2-0dc28f015f120dbef6fb799bc163ac397d9784ef81b15fcf1081afbbf88289b7.zip/node_modules/punycode/", + "packageDependencies": [ + [ + "punycode", + "npm:1.3.2" + ] + ] + } + ], + [ + "npm:1.4.1", + { + "packageLocation": "./.yarn/cache/punycode-npm-1.4.1-22a9e27af21be89d092301ea6da7205b633301719091092824bcacdf454c3620.zip/node_modules/punycode/", + "packageDependencies": [ + [ + "punycode", + "npm:1.4.1" + ] + ] + } + ], + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/punycode-npm-2.1.1-6a08098e02f116bd734f4c64a9ebf1d03e6b1bafcc04f3a7f76ace335f1c1480.zip/node_modules/punycode/", + "packageDependencies": [ + [ + "punycode", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "qs", + [ + [ + "npm:2.3.3", + { + "packageLocation": "./.yarn/cache/qs-npm-2.3.3-d0b5c910e7a33208b2df56eae7e1393dd37896821b26534c1a16c1cf052eff4c.zip/node_modules/qs/", + "packageDependencies": [ + [ + "qs", + "npm:2.3.3" + ] + ] + } + ], + [ + "npm:6.5.2", + { + "packageLocation": "./.yarn/cache/qs-npm-6.5.2-681b16242a087b38849c852734939f7cbdb4bd038be111c8d0becd67fd3a5838.zip/node_modules/qs/", + "packageDependencies": [ + [ + "qs", + "npm:6.5.2" + ] + ] + } + ] + ] + ], + [ + "querystring", + [ + [ + "npm:0.2.0", + { + "packageLocation": "./.yarn/cache/querystring-npm-0.2.0-0b3e12f29ad0693026a0d9b9878628b715ef946d6e9cde52b68a65ece3ae7300.zip/node_modules/querystring/", + "packageDependencies": [ + [ + "querystring", + "npm:0.2.0" + ] + ] + } + ] + ] + ], + [ + "querystring-es3", + [ + [ + "npm:0.2.1", + { + "packageLocation": "./.yarn/cache/querystring-es3-npm-0.2.1-133c2ae817d8b9c86c78de2748c2702946df5befa7a279fc4eab322bfb1724e6.zip/node_modules/querystring-es3/", + "packageDependencies": [ + [ + "querystring-es3", + "npm:0.2.1" + ] + ] + } + ] + ] + ], + [ + "randombytes", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/randombytes-npm-2.1.0-730501a23f3a8bc9b2d55ce3ea43471a7fa7a382696216e4c141f11b83e29848.zip/node_modules/randombytes/", + "packageDependencies": [ + [ + "randombytes", + "npm:2.1.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "randomfill", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/randomfill-npm-1.0.4-f897aa7249ece3b43cc6cae2beaaf3ffbf0e8d54c94583883ce9ea39a7037bee.zip/node_modules/randomfill/", + "packageDependencies": [ + [ + "randomfill", + "npm:1.0.4" + ], + [ + "randombytes", + "npm:2.1.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "range-parser", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/range-parser-npm-1.2.0-9a6065a0f05c5d7345f77280083e7551891d246fea1867a9afbd8a7bc7d1c015.zip/node_modules/range-parser/", + "packageDependencies": [ + [ + "range-parser", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "raw-body", + [ + [ + "npm:2.3.3", + { + "packageLocation": "./.yarn/cache/raw-body-npm-2.3.3-94f5538b794c0907e5769d94c650982014bbce01abfbfaf85e1e799878607d59.zip/node_modules/raw-body/", + "packageDependencies": [ + [ + "raw-body", + "npm:2.3.3" + ], + [ + "bytes", + "npm:3.0.0" + ], + [ + "http-errors", + "npm:1.6.3" + ], + [ + "iconv-lite", + "npm:0.4.23" + ], + [ + "unpipe", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "rc", + [ + [ + "npm:1.2.8", + { + "packageLocation": "./.yarn/cache/rc-npm-1.2.8-1627751389893c338defe7df0e9534b84724dc63fcc8874df54a52a7422de178.zip/node_modules/rc/", + "packageDependencies": [ + [ + "rc", + "npm:1.2.8" + ], + [ + "deep-extend", + "npm:0.6.0" + ], + [ + "ini", + "npm:1.3.5" + ], + [ + "minimist", + "npm:1.2.0" + ], + [ + "strip-json-comments", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "react", + [ + [ + "npm:16.8.6", + { + "packageLocation": "./.yarn/cache/react-npm-16.8.6-4f8c439da1fef97bea5523a416fbfc0005aa720dacf7db14265b2576173a220e.zip/node_modules/react/", + "packageDependencies": [ + [ + "react", + "npm:16.8.6" + ], + [ + "loose-envify", + "npm:1.4.0" + ], + [ + "object-assign", + "npm:4.1.1" + ], + [ + "prop-types", + "npm:15.7.2" + ], + [ + "scheduler", + "npm:0.13.6" + ] + ] + } + ] + ] + ], + [ + "react-dom", + [ + [ + "npm:16.8.6", + { + "packageLocation": "./.yarn/cache/react-dom-npm-16.8.6-a779059f773bba2417840e551db1b124158ee8035241f5b079c50910ec11e1a1.zip/node_modules/react-dom/", + "packageDependencies": [ + [ + "react-dom", + "npm:16.8.6" + ], + [ + "loose-envify", + "npm:1.4.0" + ], + [ + "object-assign", + "npm:4.1.1" + ], + [ + "prop-types", + "npm:15.7.2" + ], + [ + "scheduler", + "npm:0.13.6" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:16.8.6", + { + "packageLocation": "./.yarn/virtual/react-dom-virtual-7a84ed30b1b49156a10d3ce81308146534b672fcbf788126110bcd8d8ef9b3b8/node_modules/react-dom/", + "packageDependencies": [ + [ + "react-dom", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:16.8.6" + ], + [ + "loose-envify", + "npm:1.4.0" + ], + [ + "object-assign", + "npm:4.1.1" + ], + [ + "prop-types", + "npm:15.7.2" + ], + [ + "react", + "npm:16.8.6" + ], + [ + "scheduler", + "npm:0.13.6" + ] + ] + } + ] + ] + ], + [ + "react-is", + [ + [ + "npm:16.8.6", + { + "packageLocation": "./.yarn/cache/react-is-npm-16.8.6-9a80d9fe3f744648a0718a7952f622dbab045ef925ea5179d6a83f0bef37f51a.zip/node_modules/react-is/", + "packageDependencies": [ + [ + "react-is", + "npm:16.8.6" + ] + ] + } + ] + ] + ], + [ + "read-pkg", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/read-pkg-npm-1.1.0-3ba25f1f673a3cc57f347c5d0bea9388506c7fbffbd6700ed9a48b93abe9fc2f.zip/node_modules/read-pkg/", + "packageDependencies": [ + [ + "read-pkg", + "npm:1.1.0" + ], + [ + "load-json-file", + "npm:1.1.0" + ], + [ + "normalize-package-data", + "npm:2.5.0" + ], + [ + "path-type", + "npm:1.1.0" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/read-pkg-npm-2.0.0-f99c4271d1194708d8c1bbfe707ffbe270896864aeb1aa94807280a210caec72.zip/node_modules/read-pkg/", + "packageDependencies": [ + [ + "read-pkg", + "npm:2.0.0" + ], + [ + "load-json-file", + "npm:2.0.0" + ], + [ + "normalize-package-data", + "npm:2.5.0" + ], + [ + "path-type", + "npm:2.0.0" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/read-pkg-npm-3.0.0-b1e027e0453f686f98b6aadbfa2b398752353ebeb581a64671c0524b27755c0f.zip/node_modules/read-pkg/", + "packageDependencies": [ + [ + "read-pkg", + "npm:3.0.0" + ], + [ + "load-json-file", + "npm:4.0.0" + ], + [ + "normalize-package-data", + "npm:2.5.0" + ], + [ + "path-type", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "read-pkg-up", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/read-pkg-up-npm-1.0.1-243e4746eb618e5e4c4f52ae21eb97e54a5d224f0a519a3dbb1fc9ab64783e24.zip/node_modules/read-pkg-up/", + "packageDependencies": [ + [ + "read-pkg-up", + "npm:1.0.1" + ], + [ + "find-up", + "npm:1.1.2" + ], + [ + "read-pkg", + "npm:1.1.0" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/read-pkg-up-npm-2.0.0-df82a2aef03ab518fc9be5e940f11176ae025f0a483a6a19639aab6f50d8e58f.zip/node_modules/read-pkg-up/", + "packageDependencies": [ + [ + "read-pkg-up", + "npm:2.0.0" + ], + [ + "find-up", + "npm:2.1.0" + ], + [ + "read-pkg", + "npm:2.0.0" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/read-pkg-up-npm-4.0.0-d96d09775e76285c2308a2003cbbb5b049e77f5d3f2b91f59447e92a1d3591ec.zip/node_modules/read-pkg-up/", + "packageDependencies": [ + [ + "read-pkg-up", + "npm:4.0.0" + ], + [ + "find-up", + "npm:3.0.0" + ], + [ + "read-pkg", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "readable-stream", + [ + [ + "npm:2.3.6", + { + "packageLocation": "./.yarn/cache/readable-stream-npm-2.3.6-fbab54b6298c2ef3e597d8a3c077350aa2b1fb77c1f7d3b86958224fe294b614.zip/node_modules/readable-stream/", + "packageDependencies": [ + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "core-util-is", + "npm:1.0.2" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "isarray", + "npm:1.0.0" + ], + [ + "process-nextick-args", + "npm:2.0.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "string_decoder", + "npm:1.1.1" + ], + [ + "util-deprecate", + "npm:1.0.2" + ] + ] + } + ], + [ + "npm:3.3.0", + { + "packageLocation": "./.yarn/cache/readable-stream-npm-3.3.0-a7635de1bc1e819ded69547fca9b1ddeb1146792138abe722ed1e10968d47a76.zip/node_modules/readable-stream/", + "packageDependencies": [ + [ + "readable-stream", + "npm:3.3.0" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "string_decoder", + "npm:1.2.0" + ], + [ + "util-deprecate", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "readdirp", + [ + [ + "npm:2.2.1", + { + "packageLocation": "./.yarn/cache/readdirp-npm-2.2.1-47142d20340570c219e62ffdf3f26e71b3b3c3f550488d94708474cdcf09a50d.zip/node_modules/readdirp/", + "packageDependencies": [ + [ + "readdirp", + "npm:2.2.1" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "realpath-native", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/realpath-native-npm-1.1.0-1382f31e92125dbe1b3266e4ef26090412e60c05e3cacfa2f436f2f7757793a9.zip/node_modules/realpath-native/", + "packageDependencies": [ + [ + "realpath-native", + "npm:1.1.0" + ], + [ + "util.promisify", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "rechoir", + [ + [ + "npm:0.6.2", + { + "packageLocation": "./.yarn/cache/rechoir-npm-0.6.2-626cec180b2cc4684d5ee390bee7aee09f4adc85a97b2eaeb077d789144007d9.zip/node_modules/rechoir/", + "packageDependencies": [ + [ + "rechoir", + "npm:0.6.2" + ], + [ + "resolve", + "npm:1.10.1" + ] + ] + } + ] + ] + ], + [ + "regenerate", + [ + [ + "npm:1.4.0", + { + "packageLocation": "./.yarn/cache/regenerate-npm-1.4.0-c41125641c8ed9ac37156e3694977569173b57fa6a9afefccd5770dc4265ab90.zip/node_modules/regenerate/", + "packageDependencies": [ + [ + "regenerate", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "regenerate-unicode-properties", + [ + [ + "npm:8.0.2", + { + "packageLocation": "./.yarn/cache/regenerate-unicode-properties-npm-8.0.2-e345edcfe2a4d5756b339066db376ed442bc16169470d91dad0f94fdf659fad7.zip/node_modules/regenerate-unicode-properties/", + "packageDependencies": [ + [ + "regenerate-unicode-properties", + "npm:8.0.2" + ], + [ + "regenerate", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "regenerator-runtime", + [ + [ + "npm:0.13.2", + { + "packageLocation": "./.yarn/cache/regenerator-runtime-npm-0.13.2-50b4e6a65634c2788c113abb68d037d860929b51fb0ba37ba17a5d7592559398.zip/node_modules/regenerator-runtime/", + "packageDependencies": [ + [ + "regenerator-runtime", + "npm:0.13.2" + ] + ] + } + ] + ] + ], + [ + "regenerator-transform", + [ + [ + "npm:0.13.4", + { + "packageLocation": "./.yarn/cache/regenerator-transform-npm-0.13.4-c2059ad7195ebda4a96c09869932318db51aedd9e6fa129bc1442243005ce3bd.zip/node_modules/regenerator-transform/", + "packageDependencies": [ + [ + "regenerator-transform", + "npm:0.13.4" + ], + [ + "private", + "npm:0.1.8" + ] + ] + } + ] + ] + ], + [ + "regex-not", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/regex-not-npm-1.0.2-405f02b978a6a4089135aaf2b2777b913cd4277d87bc9d5e43cb8bc2c9f01628.zip/node_modules/regex-not/", + "packageDependencies": [ + [ + "regex-not", + "npm:1.0.2" + ], + [ + "extend-shallow", + "npm:3.0.2" + ], + [ + "safe-regex", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "regexp-tree", + [ + [ + "npm:0.1.5", + { + "packageLocation": "./.yarn/cache/regexp-tree-npm-0.1.5-a79962ed9bff2d272860ee0adb9728b629b16783ca876795dbefa1027b4f9299.zip/node_modules/regexp-tree/", + "packageDependencies": [ + [ + "regexp-tree", + "npm:0.1.5" + ] + ] + } + ] + ] + ], + [ + "regexpp", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/regexpp-npm-2.0.1-10dc72403815ae25b463dc711bb2da7c7d071182e0a0185d17619edf64df4093.zip/node_modules/regexpp/", + "packageDependencies": [ + [ + "regexpp", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "regexpu-core", + [ + [ + "npm:4.5.4", + { + "packageLocation": "./.yarn/cache/regexpu-core-npm-4.5.4-f6ef828a8a620a17f9772bf20a50e16fb18af302bf5c4cfe28302c3e00aff19f.zip/node_modules/regexpu-core/", + "packageDependencies": [ + [ + "regexpu-core", + "npm:4.5.4" + ], + [ + "regenerate", + "npm:1.4.0" + ], + [ + "regenerate-unicode-properties", + "npm:8.0.2" + ], + [ + "regjsgen", + "npm:0.5.0" + ], + [ + "regjsparser", + "npm:0.6.0" + ], + [ + "unicode-match-property-ecmascript", + "npm:1.0.4" + ], + [ + "unicode-match-property-value-ecmascript", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "regjsgen", + [ + [ + "npm:0.5.0", + { + "packageLocation": "./.yarn/cache/regjsgen-npm-0.5.0-c01e9697f91173c4a4d6f34c9a192d7f18851d4cf902b59c2211d115afc037cd.zip/node_modules/regjsgen/", + "packageDependencies": [ + [ + "regjsgen", + "npm:0.5.0" + ] + ] + } + ] + ] + ], + [ + "regjsparser", + [ + [ + "npm:0.6.0", + { + "packageLocation": "./.yarn/cache/regjsparser-npm-0.6.0-0dddddf42a4cd7278dfaaac63d1fab41633a8e5b3554159486dca9ce88eeed7b.zip/node_modules/regjsparser/", + "packageDependencies": [ + [ + "regjsparser", + "npm:0.6.0" + ], + [ + "jsesc", + "npm:0.5.0" + ] + ] + } + ] + ] + ], + [ + "relateurl", + [ + [ + "npm:0.2.7", + { + "packageLocation": "./.yarn/cache/relateurl-npm-0.2.7-94c082ee24485e2d57d057a9fa1872dc45cce81f6c320b40e2550aa8ec769396.zip/node_modules/relateurl/", + "packageDependencies": [ + [ + "relateurl", + "npm:0.2.7" + ] + ] + } + ] + ] + ], + [ + "remove-bom-buffer", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/remove-bom-buffer-npm-3.0.0-2f86c7a7461fdf416c5b48dc61ca4d08f627a953fdbea52336cdec8a20d62944.zip/node_modules/remove-bom-buffer/", + "packageDependencies": [ + [ + "remove-bom-buffer", + "npm:3.0.0" + ], + [ + "is-buffer", + "npm:1.1.6" + ], + [ + "is-utf8", + "npm:0.2.1" + ] + ] + } + ] + ] + ], + [ + "remove-bom-stream", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/remove-bom-stream-npm-1.2.0-6cc49295172e6fde302dc0504a2daeae09b914d4a17a0b6f912f57da3d5bd948.zip/node_modules/remove-bom-stream/", + "packageDependencies": [ + [ + "remove-bom-stream", + "npm:1.2.0" + ], + [ + "remove-bom-buffer", + "npm:3.0.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "through2", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "remove-trailing-separator", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/remove-trailing-separator-npm-1.1.0-2772452f30fb4174f4d9c406c495821bec6eb83ec68d4cfa862069a6ae0a4f24.zip/node_modules/remove-trailing-separator/", + "packageDependencies": [ + [ + "remove-trailing-separator", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "renderkid", + [ + [ + "npm:2.0.3", + { + "packageLocation": "./.yarn/cache/renderkid-npm-2.0.3-692d72624c5f6cce58e8cc3967aa58655f80b375ffda164767affe10940a2103.zip/node_modules/renderkid/", + "packageDependencies": [ + [ + "renderkid", + "npm:2.0.3" + ], + [ + "css-select", + "npm:1.2.0" + ], + [ + "dom-converter", + "npm:0.2.0" + ], + [ + "htmlparser2", + "npm:3.10.1" + ], + [ + "strip-ansi", + "npm:3.0.1" + ], + [ + "utila", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "repeat-element", + [ + [ + "npm:1.1.3", + { + "packageLocation": "./.yarn/cache/repeat-element-npm-1.1.3-1b92c86e20710acf31c8e170326460a23fe09fdbcc5125bcff8ee8dc39e5455d.zip/node_modules/repeat-element/", + "packageDependencies": [ + [ + "repeat-element", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "repeat-string", + [ + [ + "npm:1.6.1", + { + "packageLocation": "./.yarn/cache/repeat-string-npm-1.6.1-f4c75d4eb57bbd6e44727422301f8fa308cf1b14e633744b9963015112a53e39.zip/node_modules/repeat-string/", + "packageDependencies": [ + [ + "repeat-string", + "npm:1.6.1" + ] + ] + } + ] + ] + ], + [ + "replace-ext", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/replace-ext-npm-1.0.0-470dd17ecfbbcb625f0335706b8ccf7fb185e40969e95f932533844dac899097.zip/node_modules/replace-ext/", + "packageDependencies": [ + [ + "replace-ext", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "replace-homedir", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/replace-homedir-npm-1.0.0-ae5365f1b63bdd7b5eb0f9a9db87c45f5ede6503c34670e7f03d76f3f8d6c0c1.zip/node_modules/replace-homedir/", + "packageDependencies": [ + [ + "replace-homedir", + "npm:1.0.0" + ], + [ + "homedir-polyfill", + "npm:1.0.3" + ], + [ + "is-absolute", + "npm:1.0.0" + ], + [ + "remove-trailing-separator", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "request", + [ + [ + "npm:2.88.0", + { + "packageLocation": "./.yarn/cache/request-npm-2.88.0-48813a3c6df4402646dc095f9ab7b82e744f39a7b10c66fc28b132f169b82cef.zip/node_modules/request/", + "packageDependencies": [ + [ + "request", + "npm:2.88.0" + ], + [ + "aws-sign2", + "npm:0.7.0" + ], + [ + "aws4", + "npm:1.8.0" + ], + [ + "caseless", + "npm:0.12.0" + ], + [ + "combined-stream", + "npm:1.0.7" + ], + [ + "extend", + "npm:3.0.2" + ], + [ + "forever-agent", + "npm:0.6.1" + ], + [ + "form-data", + "npm:2.3.3" + ], + [ + "har-validator", + "npm:5.1.3" + ], + [ + "http-signature", + "npm:1.2.0" + ], + [ + "is-typedarray", + "npm:1.0.0" + ], + [ + "isstream", + "npm:0.1.2" + ], + [ + "json-stringify-safe", + "npm:5.0.1" + ], + [ + "mime-types", + "npm:2.1.24" + ], + [ + "oauth-sign", + "npm:0.9.0" + ], + [ + "performance-now", + "npm:2.1.0" + ], + [ + "qs", + "npm:6.5.2" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "tough-cookie", + "npm:2.4.3" + ], + [ + "tunnel-agent", + "npm:0.6.0" + ], + [ + "uuid", + "npm:3.3.2" + ] + ] + } + ] + ] + ], + [ + "request-promise-core", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/request-promise-core-npm-1.1.2-3e270898d78b33c21755ef69d54f54ff7e1dd37f25e7fe529b23436dbefd9d4b.zip/node_modules/request-promise-core/", + "packageDependencies": [ + [ + "request-promise-core", + "npm:1.1.2" + ], + [ + "lodash", + "npm:4.17.11" + ] + ] + } + ], + [ + "virtual:3fe07a9c0f364ddec9d473b95832b6b33d11c753e65a8e7c5f6959c7ca93a265b0a0046fda1db8e9447021bb625514afb7a8b6038caad43a2b2ccb27a5c07dcc#npm:1.1.2", + { + "packageLocation": "./.yarn/virtual/request-promise-core-virtual-0784d5b9737e068e0577995b7125af2d9433b503c4685659eb4efbd2047a592b/node_modules/request-promise-core/", + "packageDependencies": [ + [ + "request-promise-core", + "virtual:3fe07a9c0f364ddec9d473b95832b6b33d11c753e65a8e7c5f6959c7ca93a265b0a0046fda1db8e9447021bb625514afb7a8b6038caad43a2b2ccb27a5c07dcc#npm:1.1.2" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "request", + "npm:2.88.0" + ] + ] + } + ] + ] + ], + [ + "request-promise-native", + [ + [ + "npm:1.0.7", + { + "packageLocation": "./.yarn/cache/request-promise-native-npm-1.0.7-9b5c7fc7b48d23a178595f340cf0ae449393a8b23c848839a332760d6e7fac05.zip/node_modules/request-promise-native/", + "packageDependencies": [ + [ + "request-promise-native", + "npm:1.0.7" + ], + [ + "request-promise-core", + "npm:1.1.2" + ], + [ + "stealthy-require", + "npm:1.1.1" + ], + [ + "tough-cookie", + "npm:2.5.0" + ] + ] + } + ], + [ + "virtual:ef808f145e0975eb780aaba7af97b5f684c538d98dc00e87fcb0a235e4fd6e7017a88a2020e1f9ce561498cee55ac2f2378f7fa9428688a8195443752da96f59#npm:1.0.7", + { + "packageLocation": "./.yarn/virtual/request-promise-native-virtual-3fe07a9c0f364ddec9d473b95832b6b33d11c753e65a8e7c5f6959c7ca93a265/node_modules/request-promise-native/", + "packageDependencies": [ + [ + "request-promise-native", + "virtual:ef808f145e0975eb780aaba7af97b5f684c538d98dc00e87fcb0a235e4fd6e7017a88a2020e1f9ce561498cee55ac2f2378f7fa9428688a8195443752da96f59#npm:1.0.7" + ], + [ + "request", + "npm:2.88.0" + ], + [ + "request-promise-core", + "virtual:3fe07a9c0f364ddec9d473b95832b6b33d11c753e65a8e7c5f6959c7ca93a265b0a0046fda1db8e9447021bb625514afb7a8b6038caad43a2b2ccb27a5c07dcc#npm:1.1.2" + ], + [ + "stealthy-require", + "npm:1.1.1" + ], + [ + "tough-cookie", + "npm:2.5.0" + ] + ] + } + ] + ] + ], + [ + "require-directory", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/require-directory-npm-2.1.1-c479f1e7059e43cb4411823190f800f67d1a55bc47f97dbab16cfc4831f0e223.zip/node_modules/require-directory/", + "packageDependencies": [ + [ + "require-directory", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "require-main-filename", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/require-main-filename-npm-1.0.1-853340429658b14ca2403b2b72f97c03f16472e07a9863fd30ed3d6f73b68b0b.zip/node_modules/require-main-filename/", + "packageDependencies": [ + [ + "require-main-filename", + "npm:1.0.1" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/require-main-filename-npm-2.0.0-9e922169a9e3bf8bd49c78b638ffe4fca489ef4092aa21075fe73fee7f895036.zip/node_modules/require-main-filename/", + "packageDependencies": [ + [ + "require-main-filename", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "requires-port", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/requires-port-npm-1.0.0-3b2433c0722c706fb35eb8efbc6460625079be5cea15d95ec7f37fd5981396b8.zip/node_modules/requires-port/", + "packageDependencies": [ + [ + "requires-port", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "resolve", + [ + [ + "npm:1.1.7", + { + "packageLocation": "./.yarn/cache/resolve-npm-1.1.7-66fdcab1d24546015a41326cfab33e3f3eae855d3ed894a008653d76921d777f.zip/node_modules/resolve/", + "packageDependencies": [ + [ + "resolve", + "npm:1.1.7" + ] + ] + } + ], + [ + "npm:1.10.1", + { + "packageLocation": "./.yarn/cache/resolve-npm-1.10.1-c5efd8356fea6c422811c9e2126879f2a28ef383ddff73e9b70325b54cc802e0.zip/node_modules/resolve/", + "packageDependencies": [ + [ + "resolve", + "npm:1.10.1" + ], + [ + "path-parse", + "npm:1.0.6" + ] + ] + } + ] + ] + ], + [ + "resolve-cwd", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/resolve-cwd-npm-2.0.0-898fee80539407e8d5f75459f2d83eb6fd6b6787337310ff66b58210fd651029.zip/node_modules/resolve-cwd/", + "packageDependencies": [ + [ + "resolve-cwd", + "npm:2.0.0" + ], + [ + "resolve-from", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "resolve-dir", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/resolve-dir-npm-1.0.1-4d7c2e0bf4972c7d392a4bb68a2ca54ff43cd66a29638b63b91a68b944dabe1c.zip/node_modules/resolve-dir/", + "packageDependencies": [ + [ + "resolve-dir", + "npm:1.0.1" + ], + [ + "expand-tilde", + "npm:2.0.2" + ], + [ + "global-modules", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "resolve-from", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/resolve-from-npm-3.0.0-74dcaf63c1f463e471b3f8ba7af943b8e98efd1b8936368b608ba4553904abd8.zip/node_modules/resolve-from/", + "packageDependencies": [ + [ + "resolve-from", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/resolve-from-npm-4.0.0-99cdd50683c2cc1e27687ed263811dd77c5dd7b903fda4b2797495207b0634c0.zip/node_modules/resolve-from/", + "packageDependencies": [ + [ + "resolve-from", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "resolve-options", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/resolve-options-npm-1.1.0-9e68b8bccaec78335705c667c0657a2c748c0977196f40cfd26c32f15907a81b.zip/node_modules/resolve-options/", + "packageDependencies": [ + [ + "resolve-options", + "npm:1.1.0" + ], + [ + "value-or-function", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "resolve-url", + [ + [ + "npm:0.2.1", + { + "packageLocation": "./.yarn/cache/resolve-url-npm-0.2.1-ec3028a25774a7d4faa3c1acab6245768be5d67134c368542859b465d3c6a46b.zip/node_modules/resolve-url/", + "packageDependencies": [ + [ + "resolve-url", + "npm:0.2.1" + ] + ] + } + ] + ] + ], + [ + "restore-cursor", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/restore-cursor-npm-2.0.0-3536a5f7f263321e30c6d6bf2405b0f910e2d54e8f3e8c6e01c9dfa2c2d1ce0c.zip/node_modules/restore-cursor/", + "packageDependencies": [ + [ + "restore-cursor", + "npm:2.0.0" + ], + [ + "onetime", + "npm:2.0.1" + ], + [ + "signal-exit", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "ret", + [ + [ + "npm:0.1.15", + { + "packageLocation": "./.yarn/cache/ret-npm-0.1.15-bb23b4c610c662eb37485a23ccbb79f01a9ca9cd733026078ba0f50c7c8d3d4c.zip/node_modules/ret/", + "packageDependencies": [ + [ + "ret", + "npm:0.1.15" + ] + ] + } + ] + ] + ], + [ + "rimraf", + [ + [ + "npm:2.6.3", + { + "packageLocation": "./.yarn/cache/rimraf-npm-2.6.3-0f7ef1f8a19b619aa38636b2117fe2eafbf57806ddfa6487c43742fe966ced5d.zip/node_modules/rimraf/", + "packageDependencies": [ + [ + "rimraf", + "npm:2.6.3" + ], + [ + "glob", + "npm:7.1.3" + ] + ] + } + ] + ] + ], + [ + "ripemd160", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/ripemd160-npm-2.0.2-76333df6313d970889e004e861660f7d3802ed8ce5085557b3b0c280647ec9f7.zip/node_modules/ripemd160/", + "packageDependencies": [ + [ + "ripemd160", + "npm:2.0.2" + ], + [ + "hash-base", + "npm:3.0.4" + ], + [ + "inherits", + "npm:2.0.3" + ] + ] + } + ] + ] + ], + [ + "rollup", + [ + [ + "npm:1.10.1", + { + "packageLocation": "./.yarn/cache/rollup-npm-1.10.1-c784718f905a637f30e6f6d868644035e3f7df09fa14f89bd1f417709a6fe722.zip/node_modules/rollup/", + "packageDependencies": [ + [ + "rollup", + "npm:1.10.1" + ], + [ + "@types/estree", + "npm:0.0.39" + ], + [ + "@types/node", + "npm:11.13.8" + ], + [ + "acorn", + "npm:6.1.1" + ] + ] + } + ] + ] + ], + [ + "rollup-plugin-commonjs", + [ + [ + "npm:9.3.4", + { + "packageLocation": "./.yarn/cache/rollup-plugin-commonjs-npm-9.3.4-b09da00a5f5a6de1ddfc894d56c6986bb733004c032a058adfc1c552d0a5f872.zip/node_modules/rollup-plugin-commonjs/", + "packageDependencies": [ + [ + "rollup-plugin-commonjs", + "npm:9.3.4" + ], + [ + "estree-walker", + "npm:0.6.0" + ], + [ + "magic-string", + "npm:0.25.2" + ], + [ + "resolve", + "npm:1.10.1" + ], + [ + "rollup-pluginutils", + "npm:2.6.0" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:9.3.4", + { + "packageLocation": "./.yarn/virtual/rollup-plugin-commonjs-virtual-7d55fd9b473eda43d433a765f6056579042dab4139d7ffadf3db1ea67e0fd9ed/node_modules/rollup-plugin-commonjs/", + "packageDependencies": [ + [ + "rollup-plugin-commonjs", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:9.3.4" + ], + [ + "estree-walker", + "npm:0.6.0" + ], + [ + "magic-string", + "npm:0.25.2" + ], + [ + "resolve", + "npm:1.10.1" + ], + [ + "rollup", + "npm:1.10.1" + ], + [ + "rollup-pluginutils", + "npm:2.6.0" + ] + ] + } + ] + ] + ], + [ + "rollup-plugin-pnp-resolve", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/rollup-plugin-pnp-resolve-npm-1.0.1-d74200be75fa69f919bac58cd7dcb2360a2a6c4210957a498819655e4c412886.zip/node_modules/rollup-plugin-pnp-resolve/", + "packageDependencies": [ + [ + "rollup-plugin-pnp-resolve", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "rollup-pluginutils", + [ + [ + "npm:2.6.0", + { + "packageLocation": "./.yarn/cache/rollup-pluginutils-npm-2.6.0-afdaa66cfed60938315db924bb391de538688750ad1e860707a2388445bdb7d4.zip/node_modules/rollup-pluginutils/", + "packageDependencies": [ + [ + "rollup-pluginutils", + "npm:2.6.0" + ], + [ + "estree-walker", + "npm:0.6.0" + ], + [ + "micromatch", + "npm:3.1.10" + ] + ] + } + ] + ] + ], + [ + "root-workspace-988eec", + [ + [ + "workspace:.", + { + "packageLocation": "./", + "packageDependencies": [ + [ + "root-workspace-988eec", + "workspace:." + ], + [ + "@babel/core", + "npm:7.4.4" + ], + [ + "@babel/plugin-proposal-class-properties", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/plugin-proposal-decorators", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/plugin-transform-runtime", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/preset-env", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.4.4" + ], + [ + "@babel/preset-react", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.0.0" + ], + [ + "@babel/runtime", + "npm:7.4.4" + ], + [ + "babel-eslint", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:10.0.1" + ], + [ + "babel-loader", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:8.0.5" + ], + [ + "core-decorators", + "npm:0.20.0" + ], + [ + "eslint", + "npm:5.16.0" + ], + [ + "eslint-config-prettier", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:4.2.0" + ], + [ + "eslint-plugin-import", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:2.17.2" + ], + [ + "eslint-plugin-jest", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:22.5.1" + ], + [ + "eslint-plugin-prettier", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.0.1" + ], + [ + "eslint-plugin-react", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:7.12.4" + ], + [ + "gulp", + "npm:4.0.1" + ], + [ + "gulp-if", + "npm:2.0.2" + ], + [ + "gulp-uglify", + "npm:3.0.2" + ], + [ + "html-webpack-plugin", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.2.0" + ], + [ + "http-server", + "npm:0.11.1" + ], + [ + "jest", + "npm:24.7.1" + ], + [ + "pnp-webpack-plugin", + "npm:1.4.3" + ], + [ + "prettier", + "npm:1.17.0" + ], + [ + "react", + "npm:16.8.6" + ], + [ + "react-dom", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:16.8.6" + ], + [ + "rollup", + "npm:1.10.1" + ], + [ + "rollup-plugin-commonjs", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:9.3.4" + ], + [ + "rollup-plugin-pnp-resolve", + "npm:1.0.1" + ], + [ + "rxjs", + "npm:6.5.1" + ], + [ + "rxjs-compat", + "npm:6.5.1" + ], + [ + "webpack", + "npm:4.30.0" + ], + [ + "webpack-bundle-analyzer", + "npm:3.3.2" + ], + [ + "webpack-cli", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.3.1" + ], + [ + "webpack-stream", + "npm:5.2.1" + ] + ] + } + ] + ] + ], + [ + "rsvp", + [ + [ + "npm:4.8.4", + { + "packageLocation": "./.yarn/cache/rsvp-npm-4.8.4-4759e505b4ee0d9f76b5c964ff598c90e0a4d270716d445d31653f6c8d958a92.zip/node_modules/rsvp/", + "packageDependencies": [ + [ + "rsvp", + "npm:4.8.4" + ] + ] + } + ] + ] + ], + [ + "run-async", + [ + [ + "npm:2.3.0", + { + "packageLocation": "./.yarn/cache/run-async-npm-2.3.0-009ea505cc8e59ebdf7bedcd80b1a3cc6fde57e59b7b0714ab2dc81bead643aa.zip/node_modules/run-async/", + "packageDependencies": [ + [ + "run-async", + "npm:2.3.0" + ], + [ + "is-promise", + "npm:2.1.0" + ] + ] + } + ] + ] + ], + [ + "run-queue", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/run-queue-npm-1.0.3-c6679ced1b902636c794d452e2593e48ba90c183dec0b367af2900fe4d56d733.zip/node_modules/run-queue/", + "packageDependencies": [ + [ + "run-queue", + "npm:1.0.3" + ], + [ + "aproba", + "npm:1.2.0" + ] + ] + } + ] + ] + ], + [ + "rxjs", + [ + [ + "npm:6.5.1", + { + "packageLocation": "./.yarn/cache/rxjs-npm-6.5.1-d778d2b5d3bafea06f728f430abfa7053fee18c4a9fe99ed7605c997247d49d8.zip/node_modules/rxjs/", + "packageDependencies": [ + [ + "rxjs", + "npm:6.5.1" + ], + [ + "tslib", + "npm:1.9.3" + ] + ] + } + ] + ] + ], + [ + "rxjs-compat", + [ + [ + "npm:6.5.1", + { + "packageLocation": "./.yarn/cache/rxjs-compat-npm-6.5.1-3ee8d189822e88bee6946f614c59f835dd9ae81cd607991c390e32ede3af08e9.zip/node_modules/rxjs-compat/", + "packageDependencies": [ + [ + "rxjs-compat", + "npm:6.5.1" + ] + ] + } + ] + ] + ], + [ + "safe-buffer", + [ + [ + "npm:5.1.2", + { + "packageLocation": "./.yarn/cache/safe-buffer-npm-5.1.2-21d427e513509e077f1ab34a7dd8d14f32096e3565594fede6ca263eccd868f2.zip/node_modules/safe-buffer/", + "packageDependencies": [ + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "safe-regex", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/safe-regex-npm-1.1.0-bb044a6193a62942ef87aae464401d5275b4882eb473364eb918a6bcd77d2ac4.zip/node_modules/safe-regex/", + "packageDependencies": [ + [ + "safe-regex", + "npm:1.1.0" + ], + [ + "ret", + "npm:0.1.15" + ] + ] + } + ] + ] + ], + [ + "safer-buffer", + [ + [ + "npm:2.1.2", + { + "packageLocation": "./.yarn/cache/safer-buffer-npm-2.1.2-94e2886027ad0565245108a47586376fc7f128f432412cb9586bdb88bc4048b9.zip/node_modules/safer-buffer/", + "packageDependencies": [ + [ + "safer-buffer", + "npm:2.1.2" + ] + ] + } + ] + ] + ], + [ + "sane", + [ + [ + "npm:4.1.0", + { + "packageLocation": "./.yarn/cache/sane-npm-4.1.0-f9b8852b5aa40e169de33c03f7e517662dd2a207f039ae0de6d526d5ebf526aa.zip/node_modules/sane/", + "packageDependencies": [ + [ + "sane", + "npm:4.1.0" + ], + [ + "@cnakazawa/watch", + "npm:1.0.3" + ], + [ + "anymatch", + "npm:2.0.0" + ], + [ + "capture-exit", + "npm:2.0.0" + ], + [ + "exec-sh", + "npm:0.3.2" + ], + [ + "execa", + "npm:1.0.0" + ], + [ + "fb-watchman", + "npm:2.0.0" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "minimist", + "npm:1.2.0" + ], + [ + "walker", + "npm:1.0.7" + ] + ] + } + ] + ] + ], + [ + "sax", + [ + [ + "npm:1.2.4", + { + "packageLocation": "./.yarn/cache/sax-npm-1.2.4-a8badd55720d95400b379c5a0763fa9f1049f4d4051818726e5a7e5f9b167d3d.zip/node_modules/sax/", + "packageDependencies": [ + [ + "sax", + "npm:1.2.4" + ] + ] + } + ] + ] + ], + [ + "scheduler", + [ + [ + "npm:0.13.6", + { + "packageLocation": "./.yarn/cache/scheduler-npm-0.13.6-15624f21a0746c1e4e298de36c58348bea70d7f67ef0d89a18bbb6e12db776e1.zip/node_modules/scheduler/", + "packageDependencies": [ + [ + "scheduler", + "npm:0.13.6" + ], + [ + "loose-envify", + "npm:1.4.0" + ], + [ + "object-assign", + "npm:4.1.1" + ] + ] + } + ] + ] + ], + [ + "schema-utils", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/schema-utils-npm-1.0.0-72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4.zip/node_modules/schema-utils/", + "packageDependencies": [ + [ + "schema-utils", + "npm:1.0.0" + ], + [ + "ajv", + "npm:6.10.0" + ], + [ + "ajv-errors", + "virtual:72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4011decc198459eee047b3469b5403420e7b7dbf3ba8a6b7e574c03385cb39e0c#npm:1.0.1" + ], + [ + "ajv-keywords", + "virtual:72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4011decc198459eee047b3469b5403420e7b7dbf3ba8a6b7e574c03385cb39e0c#npm:3.4.0" + ] + ] + } + ] + ] + ], + [ + "semver", + [ + [ + "npm:5.3.0", + { + "packageLocation": "./.yarn/cache/semver-npm-5.3.0-8505dbd5aae5f1172ccde37efe99ba39fccb8d28a62b071e8d631266416dc07d.zip/node_modules/semver/", + "packageDependencies": [ + [ + "semver", + "npm:5.3.0" + ] + ] + } + ], + [ + "npm:5.7.0", + { + "packageLocation": "./.yarn/cache/semver-npm-5.7.0-90d221b6db8ac49cd695be07e32e88e80877263c518448ddf92b5eb2c8d58ebe.zip/node_modules/semver/", + "packageDependencies": [ + [ + "semver", + "npm:5.7.0" + ] + ] + } + ], + [ + "npm:6.0.0", + { + "packageLocation": "./.yarn/cache/semver-npm-6.0.0-6d3c916af92382b77fc63e229fa017021e7ef0b26d59f79c418b817a05bead08.zip/node_modules/semver/", + "packageDependencies": [ + [ + "semver", + "npm:6.0.0" + ] + ] + } + ] + ] + ], + [ + "semver-greatest-satisfied-range", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/semver-greatest-satisfied-range-npm-1.1.0-918cda662f49baf1d26858d9674e9f2942f1bc230061dc8d2ee3b7280d53c383.zip/node_modules/semver-greatest-satisfied-range/", + "packageDependencies": [ + [ + "semver-greatest-satisfied-range", + "npm:1.1.0" + ], + [ + "sver-compat", + "npm:1.5.0" + ] + ] + } + ] + ] + ], + [ + "send", + [ + [ + "npm:0.16.2", + { + "packageLocation": "./.yarn/cache/send-npm-0.16.2-09b2f1ccb867d67c13df30cdef70d295526725397e8e5147927f8606210a2fee.zip/node_modules/send/", + "packageDependencies": [ + [ + "send", + "npm:0.16.2" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "depd", + "npm:1.1.2" + ], + [ + "destroy", + "npm:1.0.4" + ], + [ + "encodeurl", + "npm:1.0.2" + ], + [ + "escape-html", + "npm:1.0.3" + ], + [ + "etag", + "npm:1.8.1" + ], + [ + "fresh", + "npm:0.5.2" + ], + [ + "http-errors", + "npm:1.6.3" + ], + [ + "mime", + "npm:1.4.1" + ], + [ + "ms", + "npm:2.0.0" + ], + [ + "on-finished", + "npm:2.3.0" + ], + [ + "range-parser", + "npm:1.2.0" + ], + [ + "statuses", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "serialize-javascript", + [ + [ + "npm:1.7.0", + { + "packageLocation": "./.yarn/cache/serialize-javascript-npm-1.7.0-6242f21a549e4969e20a22ada37dd930ba1f63dba2f4c50ee8b9a1e1ccc5cba0.zip/node_modules/serialize-javascript/", + "packageDependencies": [ + [ + "serialize-javascript", + "npm:1.7.0" + ] + ] + } + ] + ] + ], + [ + "serve-static", + [ + [ + "npm:1.13.2", + { + "packageLocation": "./.yarn/cache/serve-static-npm-1.13.2-165e0a07830f2dacd607a6314f91a9b9d410aa50ff087f52e6336fa1f16bc08a.zip/node_modules/serve-static/", + "packageDependencies": [ + [ + "serve-static", + "npm:1.13.2" + ], + [ + "encodeurl", + "npm:1.0.2" + ], + [ + "escape-html", + "npm:1.0.3" + ], + [ + "parseurl", + "npm:1.3.3" + ], + [ + "send", + "npm:0.16.2" + ] + ] + } + ] + ] + ], + [ + "set-blocking", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/set-blocking-npm-2.0.0-9cc208f820bf24e65593f97e3016a8bc99e8237a7b359f58eef36afdfbecc94f.zip/node_modules/set-blocking/", + "packageDependencies": [ + [ + "set-blocking", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "set-value", + [ + [ + "npm:0.4.3", + { + "packageLocation": "./.yarn/cache/set-value-npm-0.4.3-5a6a057a0cd86465de897f20342356ea827499957740325247e52bbea3aed4a5.zip/node_modules/set-value/", + "packageDependencies": [ + [ + "set-value", + "npm:0.4.3" + ], + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "is-extendable", + "npm:0.1.1" + ], + [ + "is-plain-object", + "npm:2.0.4" + ], + [ + "to-object-path", + "npm:0.3.0" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/set-value-npm-2.0.0-dffb4607b74507ad1dd46e6a000c565eb0977865b113b5fec8033fd5b107b3ea.zip/node_modules/set-value/", + "packageDependencies": [ + [ + "set-value", + "npm:2.0.0" + ], + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "is-extendable", + "npm:0.1.1" + ], + [ + "is-plain-object", + "npm:2.0.4" + ], + [ + "split-string", + "npm:3.1.0" + ] + ] + } + ] + ] + ], + [ + "setimmediate", + [ + [ + "npm:1.0.5", + { + "packageLocation": "./.yarn/cache/setimmediate-npm-1.0.5-41964e92dad19b0eb773ea9a9f281525964e6472f723f40ee53a8d7361b59b70.zip/node_modules/setimmediate/", + "packageDependencies": [ + [ + "setimmediate", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "setprototypeof", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/setprototypeof-npm-1.1.0-8fc47ab25b40d47987d73fe572be160b53f1f18535c970f6f15cac10286f16ff.zip/node_modules/setprototypeof/", + "packageDependencies": [ + [ + "setprototypeof", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "sha.js", + [ + [ + "npm:2.4.11", + { + "packageLocation": "./.yarn/cache/sha.js-npm-2.4.11-e84cb9d8bb1af82cfde0367706205ae268622d7b80156b9ee651d9fed67945a1.zip/node_modules/sha.js/", + "packageDependencies": [ + [ + "sha.js", + "npm:2.4.11" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "shebang-command", + [ + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/shebang-command-npm-1.2.0-30a77bb393967a24b6fd0665d4c4248a8fa048f3f4b163972abe33fff3060151.zip/node_modules/shebang-command/", + "packageDependencies": [ + [ + "shebang-command", + "npm:1.2.0" + ], + [ + "shebang-regex", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "shebang-regex", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/shebang-regex-npm-1.0.0-59169b4f7333c2441090fa27c3a4f4c82818e5dc77b2b2d7768060acaf112933.zip/node_modules/shebang-regex/", + "packageDependencies": [ + [ + "shebang-regex", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "shellwords", + [ + [ + "npm:0.1.1", + { + "packageLocation": "./.yarn/cache/shellwords-npm-0.1.1-6b819b33088a15baa818a7b5c1126d240763068c31a60bb3573ddcdd46333211.zip/node_modules/shellwords/", + "packageDependencies": [ + [ + "shellwords", + "npm:0.1.1" + ] + ] + } + ] + ] + ], + [ + "signal-exit", + [ + [ + "npm:3.0.2", + { + "packageLocation": "./.yarn/cache/signal-exit-npm-3.0.2-d90eb939325af718053937395a324f00526292cae49f4e3030c757a93fdca5df.zip/node_modules/signal-exit/", + "packageDependencies": [ + [ + "signal-exit", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "sisteransi", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/sisteransi-npm-1.0.0-afe2882a8ebdbe4b83f1048db49234bffddb1e5b2a5353859e08abb5f3b7a5fb.zip/node_modules/sisteransi/", + "packageDependencies": [ + [ + "sisteransi", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "slash", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/slash-npm-2.0.0-749b7381986a4cd4e31f00f116037d5a9f3d55e22c57fd12042e11c8eb54894a.zip/node_modules/slash/", + "packageDependencies": [ + [ + "slash", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "slice-ansi", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/slice-ansi-npm-2.1.0-306d3e5c88b5b5ec787e7641b9a2dff8b8705a9d7acee3dfeaf0ae93a6f4a152.zip/node_modules/slice-ansi/", + "packageDependencies": [ + [ + "slice-ansi", + "npm:2.1.0" + ], + [ + "ansi-styles", + "npm:3.2.1" + ], + [ + "astral-regex", + "npm:1.0.0" + ], + [ + "is-fullwidth-code-point", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "snapdragon", + [ + [ + "npm:0.8.2", + { + "packageLocation": "./.yarn/cache/snapdragon-npm-0.8.2-1038bc533997241dce9c8d5dbeba5ca87248506a19dc9f63da5e7f8877281618.zip/node_modules/snapdragon/", + "packageDependencies": [ + [ + "snapdragon", + "npm:0.8.2" + ], + [ + "base", + "npm:0.11.2" + ], + [ + "debug", + "npm:2.6.9" + ], + [ + "define-property", + "npm:0.2.5" + ], + [ + "extend-shallow", + "npm:2.0.1" + ], + [ + "map-cache", + "npm:0.2.2" + ], + [ + "source-map", + "npm:0.5.7" + ], + [ + "source-map-resolve", + "npm:0.5.2" + ], + [ + "use", + "npm:3.1.1" + ] + ] + } + ] + ] + ], + [ + "snapdragon-node", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/snapdragon-node-npm-2.1.1-34ba11a53b283d920b3a210e0f66393326b96d9910eb90bf050c50cce789afd4.zip/node_modules/snapdragon-node/", + "packageDependencies": [ + [ + "snapdragon-node", + "npm:2.1.1" + ], + [ + "define-property", + "npm:1.0.0" + ], + [ + "isobject", + "npm:3.0.1" + ], + [ + "snapdragon-util", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "snapdragon-util", + [ + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/snapdragon-util-npm-3.0.1-a5940a2858f017d531e9cbfe474326f36383530d1aba6acd7b184d7965834e03.zip/node_modules/snapdragon-util/", + "packageDependencies": [ + [ + "snapdragon-util", + "npm:3.0.1" + ], + [ + "kind-of", + "npm:3.2.2" + ] + ] + } + ] + ] + ], + [ + "source-list-map", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/source-list-map-npm-2.0.1-e3053c0559322471c350687e325d102137556ffcfc0f69f4ad3e30b59393c705.zip/node_modules/source-list-map/", + "packageDependencies": [ + [ + "source-list-map", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "source-map", + [ + [ + "npm:0.5.7", + { + "packageLocation": "./.yarn/cache/source-map-npm-0.5.7-e1044ec2e814649a218bb928c5cb8d195a1108fc7e3c57f5a830139d2dcac8cb.zip/node_modules/source-map/", + "packageDependencies": [ + [ + "source-map", + "npm:0.5.7" + ] + ] + } + ], + [ + "npm:0.6.1", + { + "packageLocation": "./.yarn/cache/source-map-npm-0.6.1-dd48ef0bb938492fa1deb8274ed8159b7196a421132ae6c6b86bcb8c49f0740c.zip/node_modules/source-map/", + "packageDependencies": [ + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "source-map-resolve", + [ + [ + "npm:0.5.2", + { + "packageLocation": "./.yarn/cache/source-map-resolve-npm-0.5.2-00ae448185ed5ccad0c925a152c5f57b5ffe6e464ad64cf6aaa45ad8522201e3.zip/node_modules/source-map-resolve/", + "packageDependencies": [ + [ + "source-map-resolve", + "npm:0.5.2" + ], + [ + "atob", + "npm:2.1.2" + ], + [ + "decode-uri-component", + "npm:0.2.0" + ], + [ + "resolve-url", + "npm:0.2.1" + ], + [ + "source-map-url", + "npm:0.4.0" + ], + [ + "urix", + "npm:0.1.0" + ] + ] + } + ] + ] + ], + [ + "source-map-support", + [ + [ + "npm:0.5.12", + { + "packageLocation": "./.yarn/cache/source-map-support-npm-0.5.12-f9718d24cce2f6a3d7e02a0bf7c2152c29429274727e790f567a8cc7a3676649.zip/node_modules/source-map-support/", + "packageDependencies": [ + [ + "source-map-support", + "npm:0.5.12" + ], + [ + "buffer-from", + "npm:1.1.1" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "source-map-url", + [ + [ + "npm:0.4.0", + { + "packageLocation": "./.yarn/cache/source-map-url-npm-0.4.0-46b7385bad72e50d77a4beb6f67b087f5fad18c1e665690e4dbd0b254a1f428f.zip/node_modules/source-map-url/", + "packageDependencies": [ + [ + "source-map-url", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "sourcemap-codec", + [ + [ + "npm:1.4.4", + { + "packageLocation": "./.yarn/cache/sourcemap-codec-npm-1.4.4-b79d27c67e3daa22173c6dfa50989b3f2841edc190eaba435c4179cc7dfdc253.zip/node_modules/sourcemap-codec/", + "packageDependencies": [ + [ + "sourcemap-codec", + "npm:1.4.4" + ] + ] + } + ] + ] + ], + [ + "sparkles", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/sparkles-npm-1.0.1-021e6d0b051cd27801975f42c0e51b68c3eb1eb97976ee748f17c13087971cad.zip/node_modules/sparkles/", + "packageDependencies": [ + [ + "sparkles", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "spdx-correct", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/spdx-correct-npm-3.1.0-aa15198e21cb332d846e11e1b01e669bccd3ac74c6ebb51c2ab9ff288b988296.zip/node_modules/spdx-correct/", + "packageDependencies": [ + [ + "spdx-correct", + "npm:3.1.0" + ], + [ + "spdx-expression-parse", + "npm:3.0.0" + ], + [ + "spdx-license-ids", + "npm:3.0.4" + ] + ] + } + ] + ] + ], + [ + "spdx-exceptions", + [ + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/spdx-exceptions-npm-2.2.0-96769442e221eeb9369b38b2441a6f4a80c5a8a736e0e1f1141b45c16a3d1b9c.zip/node_modules/spdx-exceptions/", + "packageDependencies": [ + [ + "spdx-exceptions", + "npm:2.2.0" + ] + ] + } + ] + ] + ], + [ + "spdx-expression-parse", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/spdx-expression-parse-npm-3.0.0-7618396a5cb5ee99d225bae37e5c5c1fb3771151766db35ed3391f5a91084991.zip/node_modules/spdx-expression-parse/", + "packageDependencies": [ + [ + "spdx-expression-parse", + "npm:3.0.0" + ], + [ + "spdx-exceptions", + "npm:2.2.0" + ], + [ + "spdx-license-ids", + "npm:3.0.4" + ] + ] + } + ] + ] + ], + [ + "spdx-license-ids", + [ + [ + "npm:3.0.4", + { + "packageLocation": "./.yarn/cache/spdx-license-ids-npm-3.0.4-33bef4d0e986ed91e5fb15b3d4ee1850936f925ff1b08763fa9897995b8c03aa.zip/node_modules/spdx-license-ids/", + "packageDependencies": [ + [ + "spdx-license-ids", + "npm:3.0.4" + ] + ] + } + ] + ] + ], + [ + "split-string", + [ + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/split-string-npm-3.1.0-5562e242fde59dc44dcb3dfdc56fe64099d8150c7f26fad968147605268cbe13.zip/node_modules/split-string/", + "packageDependencies": [ + [ + "split-string", + "npm:3.1.0" + ], + [ + "extend-shallow", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "sprintf-js", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/sprintf-js-npm-1.0.3-bde65fdf34028eff6da06450f0c706868684639e3c12d9218cf57c2b68c1f18c.zip/node_modules/sprintf-js/", + "packageDependencies": [ + [ + "sprintf-js", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "sshpk", + [ + [ + "npm:1.16.1", + { + "packageLocation": "./.yarn/cache/sshpk-npm-1.16.1-0664e7a47e5037c757b0845a60231706c94f903afa5ca2fb68a9f11300ffd5e5.zip/node_modules/sshpk/", + "packageDependencies": [ + [ + "sshpk", + "npm:1.16.1" + ], + [ + "asn1", + "npm:0.2.4" + ], + [ + "assert-plus", + "npm:1.0.0" + ], + [ + "bcrypt-pbkdf", + "npm:1.0.2" + ], + [ + "dashdash", + "npm:1.14.1" + ], + [ + "ecc-jsbn", + "npm:0.1.2" + ], + [ + "getpass", + "npm:0.1.7" + ], + [ + "jsbn", + "npm:0.1.1" + ], + [ + "safer-buffer", + "npm:2.1.2" + ], + [ + "tweetnacl", + "npm:0.14.5" + ] + ] + } + ] + ] + ], + [ + "ssri", + [ + [ + "npm:6.0.1", + { + "packageLocation": "./.yarn/cache/ssri-npm-6.0.1-49e766705c3d90e1be8072683fc32b0f5f6e0e689bb7e463486f4cb2cf4fd5ca.zip/node_modules/ssri/", + "packageDependencies": [ + [ + "ssri", + "npm:6.0.1" + ], + [ + "figgy-pudding", + "npm:3.5.1" + ] + ] + } + ] + ] + ], + [ + "stack-trace", + [ + [ + "npm:0.0.10", + { + "packageLocation": "./.yarn/cache/stack-trace-npm-0.0.10-bb4a78f731d2dd5b63ed3fb871bf633a00e1136ba992e1527c127da3e42dcd9e.zip/node_modules/stack-trace/", + "packageDependencies": [ + [ + "stack-trace", + "npm:0.0.10" + ] + ] + } + ] + ] + ], + [ + "stack-utils", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/stack-utils-npm-1.0.2-6cf570d3074ffa33d528687f9aae4e2248073de0fcb38fbd9ab6f9a59f831999.zip/node_modules/stack-utils/", + "packageDependencies": [ + [ + "stack-utils", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "static-extend", + [ + [ + "npm:0.1.2", + { + "packageLocation": "./.yarn/cache/static-extend-npm-0.1.2-089d64824504bf5aa3ebdaf7b21ba7695063d61a908f95451be43e8c5d120dae.zip/node_modules/static-extend/", + "packageDependencies": [ + [ + "static-extend", + "npm:0.1.2" + ], + [ + "define-property", + "npm:0.2.5" + ], + [ + "object-copy", + "npm:0.1.0" + ] + ] + } + ] + ] + ], + [ + "statuses", + [ + [ + "npm:1.4.0", + { + "packageLocation": "./.yarn/cache/statuses-npm-1.4.0-c0dfe9f92376475a7fb8faaacd8a4debadd3c25eeb716b6a4e507aa9d35fc5df.zip/node_modules/statuses/", + "packageDependencies": [ + [ + "statuses", + "npm:1.4.0" + ] + ] + } + ] + ] + ], + [ + "stealthy-require", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/stealthy-require-npm-1.1.1-59a10a59e1e49079ff03888b194528080b91eaf1f77e54d458c32f2ffc439e89.zip/node_modules/stealthy-require/", + "packageDependencies": [ + [ + "stealthy-require", + "npm:1.1.1" + ] + ] + } + ] + ] + ], + [ + "stream-browserify", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/stream-browserify-npm-2.0.2-7199e1be68bf1778f3fd93d4004b9e849e83b3bd8f3f488b3bc2a3cd16c93be6.zip/node_modules/stream-browserify/", + "packageDependencies": [ + [ + "stream-browserify", + "npm:2.0.2" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:2.3.6" + ] + ] + } + ] + ] + ], + [ + "stream-each", + [ + [ + "npm:1.2.3", + { + "packageLocation": "./.yarn/cache/stream-each-npm-1.2.3-e1b79d8c21e6783075951e07b4264787f9f5598011fa63b4ba58eb27dd40f39f.zip/node_modules/stream-each/", + "packageDependencies": [ + [ + "stream-each", + "npm:1.2.3" + ], + [ + "end-of-stream", + "npm:1.4.1" + ], + [ + "stream-shift", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "stream-exhaust", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/stream-exhaust-npm-1.0.2-6bd691fa106508da09804da07e3710819ff9b6be691fbc7f07f3cde310b1e4a7.zip/node_modules/stream-exhaust/", + "packageDependencies": [ + [ + "stream-exhaust", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "stream-http", + [ + [ + "npm:2.8.3", + { + "packageLocation": "./.yarn/cache/stream-http-npm-2.8.3-6bacb614ae96dfb5eb48fac2bb66a16b7f1ea23b46bb209fd570e6e385f31b0e.zip/node_modules/stream-http/", + "packageDependencies": [ + [ + "stream-http", + "npm:2.8.3" + ], + [ + "builtin-status-codes", + "npm:3.0.0" + ], + [ + "inherits", + "npm:2.0.3" + ], + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "to-arraybuffer", + "npm:1.0.1" + ], + [ + "xtend", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "stream-shift", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/stream-shift-npm-1.0.0-6c69c4113cd4c5884a516f87031693c4b058cd90f1f9cc8856419f7554bb2196.zip/node_modules/stream-shift/", + "packageDependencies": [ + [ + "stream-shift", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "string-length", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/string-length-npm-2.0.0-c2ac3e3cdd343689661819d9eab4ab7db2e37dbd7de2c6a9ef8b6e875c120417.zip/node_modules/string-length/", + "packageDependencies": [ + [ + "string-length", + "npm:2.0.0" + ], + [ + "astral-regex", + "npm:1.0.0" + ], + [ + "strip-ansi", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "string-width", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/string-width-npm-1.0.2-414242a537280882b2e413e129aee409602c9b117825da42114f0843b3e07183.zip/node_modules/string-width/", + "packageDependencies": [ + [ + "string-width", + "npm:1.0.2" + ], + [ + "code-point-at", + "npm:1.1.0" + ], + [ + "is-fullwidth-code-point", + "npm:1.0.0" + ], + [ + "strip-ansi", + "npm:3.0.1" + ] + ] + } + ], + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/string-width-npm-2.1.1-f7470cad46162ecc95ce2792be96cf88b425f299bc0d829d3ef085abbb03e3eb.zip/node_modules/string-width/", + "packageDependencies": [ + [ + "string-width", + "npm:2.1.1" + ], + [ + "is-fullwidth-code-point", + "npm:2.0.0" + ], + [ + "strip-ansi", + "npm:4.0.0" + ] + ] + } + ], + [ + "npm:3.1.0", + { + "packageLocation": "./.yarn/cache/string-width-npm-3.1.0-4e8f0a9993d0a96fe9d5a4ea61f32f4b36f1ad8da0fd09750163b6854e7b712f.zip/node_modules/string-width/", + "packageDependencies": [ + [ + "string-width", + "npm:3.1.0" + ], + [ + "emoji-regex", + "npm:7.0.3" + ], + [ + "is-fullwidth-code-point", + "npm:2.0.0" + ], + [ + "strip-ansi", + "npm:5.2.0" + ] + ] + } + ] + ] + ], + [ + "string_decoder", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/string_decoder-npm-1.1.1-ab04f5f5e77b83f3c5c1b857715f5d2a38cfa079a1c64dbfd5af4dca508f87e3.zip/node_modules/string_decoder/", + "packageDependencies": [ + [ + "string_decoder", + "npm:1.1.1" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ], + [ + "npm:1.2.0", + { + "packageLocation": "./.yarn/cache/string_decoder-npm-1.2.0-1d50ba703e235fb48c8a84511b2913416b58dd4f47a1e3dc09c8a69504c40285.zip/node_modules/string_decoder/", + "packageDependencies": [ + [ + "string_decoder", + "npm:1.2.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "strip-ansi", + [ + [ + "npm:3.0.1", + { + "packageLocation": "./.yarn/cache/strip-ansi-npm-3.0.1-2dff4d910217766ba9e6839a1cc2c2e7e2581ed86545d0c9f84b77a8a47d9e8c.zip/node_modules/strip-ansi/", + "packageDependencies": [ + [ + "strip-ansi", + "npm:3.0.1" + ], + [ + "ansi-regex", + "npm:2.1.1" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/strip-ansi-npm-4.0.0-0a4dce1e1065a8b9270a893601895d38f62879f069973984e468a48b92cf0890.zip/node_modules/strip-ansi/", + "packageDependencies": [ + [ + "strip-ansi", + "npm:4.0.0" + ], + [ + "ansi-regex", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:5.2.0", + { + "packageLocation": "./.yarn/cache/strip-ansi-npm-5.2.0-6ae14885df2c0e3a79afb4bc1c3dfe06ca489de1e14cca8a045bfacb9703cf72.zip/node_modules/strip-ansi/", + "packageDependencies": [ + [ + "strip-ansi", + "npm:5.2.0" + ], + [ + "ansi-regex", + "npm:4.1.0" + ] + ] + } + ] + ] + ], + [ + "strip-bom", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/strip-bom-npm-2.0.0-f9293632c208fdfe3c2fe1bf09ca971d1ff496c2007eeac08626fb311ad8c019.zip/node_modules/strip-bom/", + "packageDependencies": [ + [ + "strip-bom", + "npm:2.0.0" + ], + [ + "is-utf8", + "npm:0.2.1" + ] + ] + } + ], + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/strip-bom-npm-3.0.0-477340b7c7d6c4e09aeb8cdbb2c7544e62a872905e8aae16f8d137ae586b94f8.zip/node_modules/strip-bom/", + "packageDependencies": [ + [ + "strip-bom", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "strip-eof", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/strip-eof-npm-1.0.0-477e34a782d72f881503bc42a671814908399387d54f3f2d127f807394595708.zip/node_modules/strip-eof/", + "packageDependencies": [ + [ + "strip-eof", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "strip-json-comments", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/strip-json-comments-npm-2.0.1-58e60c9fea72c46b788a3059277b6495111bffaa7e212cec8b6d6bc7fa20caa3.zip/node_modules/strip-json-comments/", + "packageDependencies": [ + [ + "strip-json-comments", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "supports-color", + [ + [ + "npm:5.5.0", + { + "packageLocation": "./.yarn/cache/supports-color-npm-5.5.0-bc0df33b8bddd09aa0166b259651e37843703d145decdde83bd6f6467d18fe29.zip/node_modules/supports-color/", + "packageDependencies": [ + [ + "supports-color", + "npm:5.5.0" + ], + [ + "has-flag", + "npm:3.0.0" + ] + ] + } + ], + [ + "npm:6.1.0", + { + "packageLocation": "./.yarn/cache/supports-color-npm-6.1.0-a71ece519bd6fa532cb7a93b16636101ed00ee8025e57d6c94e73bc5ee09d76a.zip/node_modules/supports-color/", + "packageDependencies": [ + [ + "supports-color", + "npm:6.1.0" + ], + [ + "has-flag", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "sver-compat", + [ + [ + "npm:1.5.0", + { + "packageLocation": "./.yarn/cache/sver-compat-npm-1.5.0-b13e4168687b60ba973d161090772f8f8e9b318b4431655c396f306150c4309b.zip/node_modules/sver-compat/", + "packageDependencies": [ + [ + "sver-compat", + "npm:1.5.0" + ], + [ + "es6-iterator", + "npm:2.0.3" + ], + [ + "es6-symbol", + "npm:3.1.1" + ] + ] + } + ] + ] + ], + [ + "symbol-tree", + [ + [ + "npm:3.2.2", + { + "packageLocation": "./.yarn/cache/symbol-tree-npm-3.2.2-427d776662cd8632e600e0b8e2e89961601b7d69f8510feea6b59dd251b7e751.zip/node_modules/symbol-tree/", + "packageDependencies": [ + [ + "symbol-tree", + "npm:3.2.2" + ] + ] + } + ] + ] + ], + [ + "table", + [ + [ + "npm:5.2.3", + { + "packageLocation": "./.yarn/cache/table-npm-5.2.3-687557095fb88d6a3c2bff0827bdea64b54d13f78865dcbda341431798ee43b7.zip/node_modules/table/", + "packageDependencies": [ + [ + "table", + "npm:5.2.3" + ], + [ + "ajv", + "npm:6.10.0" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "slice-ansi", + "npm:2.1.0" + ], + [ + "string-width", + "npm:3.1.0" + ] + ] + } + ] + ] + ], + [ + "tapable", + [ + [ + "npm:1.1.3", + { + "packageLocation": "./.yarn/cache/tapable-npm-1.1.3-e777e120887c68f709db7bd2155405a3245c93b3b61d1f343a87a753485daad4.zip/node_modules/tapable/", + "packageDependencies": [ + [ + "tapable", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "tar", + [ + [ + "npm:4.4.8", + { + "packageLocation": "./.yarn/cache/tar-npm-4.4.8-925c7a5df99da1fd0e02f122d94541215c6699063840bd5d6b367cbee0b4779d.zip/node_modules/tar/", + "packageDependencies": [ + [ + "tar", + "npm:4.4.8" + ], + [ + "chownr", + "npm:1.1.1" + ], + [ + "fs-minipass", + "npm:1.2.5" + ], + [ + "minipass", + "npm:2.3.5" + ], + [ + "minizlib", + "npm:1.2.1" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "safe-buffer", + "npm:5.1.2" + ], + [ + "yallist", + "npm:3.0.3" + ] + ] + } + ] + ] + ], + [ + "ternary-stream", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/ternary-stream-npm-2.0.1-3ac6517dd18993d6f4d463c8a22a0d94fb08b8ca8802fd8b3330b18344f0ffe9.zip/node_modules/ternary-stream/", + "packageDependencies": [ + [ + "ternary-stream", + "npm:2.0.1" + ], + [ + "duplexify", + "npm:3.7.1" + ], + [ + "fork-stream", + "npm:0.0.4" + ], + [ + "merge-stream", + "npm:1.0.1" + ], + [ + "through2", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "terser", + [ + [ + "npm:3.17.0", + { + "packageLocation": "./.yarn/cache/terser-npm-3.17.0-cb190a16599095e1386abe5b61c8e804821ac8f2b5d482ccca1f1695ff021276.zip/node_modules/terser/", + "packageDependencies": [ + [ + "terser", + "npm:3.17.0" + ], + [ + "commander", + "npm:2.20.0" + ], + [ + "source-map", + "npm:0.6.1" + ], + [ + "source-map-support", + "npm:0.5.12" + ] + ] + } + ] + ] + ], + [ + "terser-webpack-plugin", + [ + [ + "npm:1.2.3", + { + "packageLocation": "./.yarn/cache/terser-webpack-plugin-npm-1.2.3-a1caa8216cd1f445a1bb234beb2898612cbf29db523ebb772bc969c9a2c53215.zip/node_modules/terser-webpack-plugin/", + "packageDependencies": [ + [ + "terser-webpack-plugin", + "npm:1.2.3" + ], + [ + "cacache", + "npm:11.3.2" + ], + [ + "find-cache-dir", + "npm:2.1.0" + ], + [ + "schema-utils", + "npm:1.0.0" + ], + [ + "serialize-javascript", + "npm:1.7.0" + ], + [ + "source-map", + "npm:0.6.1" + ], + [ + "terser", + "npm:3.17.0" + ], + [ + "webpack-sources", + "npm:1.3.0" + ], + [ + "worker-farm", + "npm:1.6.0" + ] + ] + } + ], + [ + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:1.2.3", + { + "packageLocation": "./.yarn/virtual/terser-webpack-plugin-virtual-998568b914e44f614c5b45f5b152be33b227478fb9656dfe762f679bac9027ab/node_modules/terser-webpack-plugin/", + "packageDependencies": [ + [ + "terser-webpack-plugin", + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:1.2.3" + ], + [ + "cacache", + "npm:11.3.2" + ], + [ + "find-cache-dir", + "npm:2.1.0" + ], + [ + "schema-utils", + "npm:1.0.0" + ], + [ + "serialize-javascript", + "npm:1.7.0" + ], + [ + "source-map", + "npm:0.6.1" + ], + [ + "terser", + "npm:3.17.0" + ], + [ + "webpack", + "npm:4.30.0" + ], + [ + "webpack-sources", + "npm:1.3.0" + ], + [ + "worker-farm", + "npm:1.6.0" + ] + ] + } + ] + ] + ], + [ + "test-exclude", + [ + [ + "npm:5.2.3", + { + "packageLocation": "./.yarn/cache/test-exclude-npm-5.2.3-c8818e41f19499bce9e088566159bc6cb66d5e89ba78920a62debd54e133dbc0.zip/node_modules/test-exclude/", + "packageDependencies": [ + [ + "test-exclude", + "npm:5.2.3" + ], + [ + "glob", + "npm:7.1.3" + ], + [ + "minimatch", + "npm:3.0.4" + ], + [ + "read-pkg-up", + "npm:4.0.0" + ], + [ + "require-main-filename", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "text-table", + [ + [ + "npm:0.2.0", + { + "packageLocation": "./.yarn/cache/text-table-npm-0.2.0-1f7662a99bd221eeea32f1b58940c39c74b965b5160d0f6cd5bb69cb73108eb6.zip/node_modules/text-table/", + "packageDependencies": [ + [ + "text-table", + "npm:0.2.0" + ] + ] + } + ] + ] + ], + [ + "throat", + [ + [ + "npm:4.1.0", + { + "packageLocation": "./.yarn/cache/throat-npm-4.1.0-5c534ad16bba885d87c00faa706614d06f7fdae6c2d58d099c86061e997a7dc7.zip/node_modules/throat/", + "packageDependencies": [ + [ + "throat", + "npm:4.1.0" + ] + ] + } + ] + ] + ], + [ + "through", + [ + [ + "npm:2.3.8", + { + "packageLocation": "./.yarn/cache/through-npm-2.3.8-823c97dbf8d72ac039fce12653ed2655a798fe069c30189200e42b6beadc9700.zip/node_modules/through/", + "packageDependencies": [ + [ + "through", + "npm:2.3.8" + ] + ] + } + ] + ] + ], + [ + "through2", + [ + [ + "npm:2.0.5", + { + "packageLocation": "./.yarn/cache/through2-npm-2.0.5-6e2c3c00393403084da976c33a118b5840a77bad8cfb1a846e227dd097174d20.zip/node_modules/through2/", + "packageDependencies": [ + [ + "through2", + "npm:2.0.5" + ], + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "xtend", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "through2-filter", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/through2-filter-npm-3.0.0-293140f0b6d7bdbeacf903269ae0d82ea9c649ae4775dc7fb86a4aefc2fb22b4.zip/node_modules/through2-filter/", + "packageDependencies": [ + [ + "through2-filter", + "npm:3.0.0" + ], + [ + "through2", + "npm:2.0.5" + ], + [ + "xtend", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "time-stamp", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/time-stamp-npm-1.1.0-c643267d160cc84884837503a9364365351108f8d2e03d222442e1f586fa0705.zip/node_modules/time-stamp/", + "packageDependencies": [ + [ + "time-stamp", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "timers-browserify", + [ + [ + "npm:2.0.10", + { + "packageLocation": "./.yarn/cache/timers-browserify-npm-2.0.10-6475dd90db9cf603b9c5a8b530bf194cf4b9d4c8d7f0a7a180121c4075378ab6.zip/node_modules/timers-browserify/", + "packageDependencies": [ + [ + "timers-browserify", + "npm:2.0.10" + ], + [ + "setimmediate", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "tmp", + [ + [ + "npm:0.0.33", + { + "packageLocation": "./.yarn/cache/tmp-npm-0.0.33-a61bcf1dbcef5bde6a21f4b52280f475faad365ebd7e6259e7df77302db17129.zip/node_modules/tmp/", + "packageDependencies": [ + [ + "tmp", + "npm:0.0.33" + ], + [ + "os-tmpdir", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "tmpl", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/tmpl-npm-1.0.4-368e7faa64dd81066e2a00ec9d1c12874933ab3a9c1b3de8607393ed07909ced.zip/node_modules/tmpl/", + "packageDependencies": [ + [ + "tmpl", + "npm:1.0.4" + ] + ] + } + ] + ] + ], + [ + "to-absolute-glob", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/to-absolute-glob-npm-2.0.2-5d7e72f62eeb18566f181de5fb1e83599dbbb84f27f3aa38804c796fb1ade74f.zip/node_modules/to-absolute-glob/", + "packageDependencies": [ + [ + "to-absolute-glob", + "npm:2.0.2" + ], + [ + "is-absolute", + "npm:1.0.0" + ], + [ + "is-negated-glob", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "to-arraybuffer", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/to-arraybuffer-npm-1.0.1-c0b731cc21aa2a40b3d3f39fe1db0ddb062408b9e0ab96ea2c8169e9fc321091.zip/node_modules/to-arraybuffer/", + "packageDependencies": [ + [ + "to-arraybuffer", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "to-fast-properties", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/to-fast-properties-npm-2.0.0-456268784d81ce0aeb482a9051effd67749310f2e518998f8daa52cf5a2f33d3.zip/node_modules/to-fast-properties/", + "packageDependencies": [ + [ + "to-fast-properties", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "to-object-path", + [ + [ + "npm:0.3.0", + { + "packageLocation": "./.yarn/cache/to-object-path-npm-0.3.0-f9b2af90c0935fb4b1d45c43b5a70fa2aea198b5caf25b064737cd651eb9626f.zip/node_modules/to-object-path/", + "packageDependencies": [ + [ + "to-object-path", + "npm:0.3.0" + ], + [ + "kind-of", + "npm:3.2.2" + ] + ] + } + ] + ] + ], + [ + "to-regex", + [ + [ + "npm:3.0.2", + { + "packageLocation": "./.yarn/cache/to-regex-npm-3.0.2-262ff98e7f36f4a047dffa820071894b95cc7528d36169ba948c846e4a6becf4.zip/node_modules/to-regex/", + "packageDependencies": [ + [ + "to-regex", + "npm:3.0.2" + ], + [ + "define-property", + "npm:2.0.2" + ], + [ + "extend-shallow", + "npm:3.0.2" + ], + [ + "regex-not", + "npm:1.0.2" + ], + [ + "safe-regex", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "to-regex-range", + [ + [ + "npm:2.1.1", + { + "packageLocation": "./.yarn/cache/to-regex-range-npm-2.1.1-2e528bc747871655b66af875043376c6eda59114565093263ff1f96e9dc64a83.zip/node_modules/to-regex-range/", + "packageDependencies": [ + [ + "to-regex-range", + "npm:2.1.1" + ], + [ + "is-number", + "npm:3.0.0" + ], + [ + "repeat-string", + "npm:1.6.1" + ] + ] + } + ] + ] + ], + [ + "to-through", + [ + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/to-through-npm-2.0.0-107eca4a3b3382dc2660c4bb6b56fe04b4634c8ab611c2dc304e1ed0d37f5bd4.zip/node_modules/to-through/", + "packageDependencies": [ + [ + "to-through", + "npm:2.0.0" + ], + [ + "through2", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "toposort", + [ + [ + "npm:1.0.7", + { + "packageLocation": "./.yarn/cache/toposort-npm-1.0.7-6ab0df9236bb487a106aeb7bd2d492a78b36fec2fde1275c0cc40c312db410dd.zip/node_modules/toposort/", + "packageDependencies": [ + [ + "toposort", + "npm:1.0.7" + ] + ] + } + ] + ] + ], + [ + "tough-cookie", + [ + [ + "npm:2.4.3", + { + "packageLocation": "./.yarn/cache/tough-cookie-npm-2.4.3-9dfe2ba78f2f37e33d6fe87c7983066eebd56454c5157c28678226e50131f62f.zip/node_modules/tough-cookie/", + "packageDependencies": [ + [ + "tough-cookie", + "npm:2.4.3" + ], + [ + "psl", + "npm:1.1.31" + ], + [ + "punycode", + "npm:1.4.1" + ] + ] + } + ], + [ + "npm:2.5.0", + { + "packageLocation": "./.yarn/cache/tough-cookie-npm-2.5.0-c84bcb439b4626eb97498f0cb8f66357c81aa431393a7bd0bb650b2bcd584d5a.zip/node_modules/tough-cookie/", + "packageDependencies": [ + [ + "tough-cookie", + "npm:2.5.0" + ], + [ + "psl", + "npm:1.1.31" + ], + [ + "punycode", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "tr46", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/tr46-npm-1.0.1-841daaa1ea4e5739f0eecbee81f9f895b587034113313ff552ee33a130ac931f.zip/node_modules/tr46/", + "packageDependencies": [ + [ + "tr46", + "npm:1.0.1" + ], + [ + "punycode", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "trim-right", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/trim-right-npm-1.0.1-baa7d857e16528d0a72f865a59d19486b4292b703acc54381ef691b2040b0e79.zip/node_modules/trim-right/", + "packageDependencies": [ + [ + "trim-right", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "tryer", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/tryer-npm-1.0.1-1351e85c19381bcf4fd746868ce0e4e275219b30bfe5c537e31aa4a8f699043e.zip/node_modules/tryer/", + "packageDependencies": [ + [ + "tryer", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "ts-pnp", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/ts-pnp-npm-1.1.2-908b85f2f22bd47799f853b00f82cb99992ebdd73f40cea9c1a4eff02ae9ea3e.zip/node_modules/ts-pnp/", + "packageDependencies": [ + [ + "ts-pnp", + "npm:1.1.2" + ] + ] + } + ], + [ + "virtual:974fedba5e7df2a73a2f275f7a1bfa5035af815448ede226eedfe25fc6cec96a4bfffbe9ce2c7f52097671b19a7a8f7a889c4903b9a25a3c292b875573656353#npm:1.1.2", + { + "packageLocation": "./.yarn/virtual/ts-pnp-virtual-f4880fc258ac742f4670ed34b5459efe97871986c473d5ca5e5bf24c88339cd9/node_modules/ts-pnp/", + "packageDependencies": [ + [ + "ts-pnp", + "virtual:974fedba5e7df2a73a2f275f7a1bfa5035af815448ede226eedfe25fc6cec96a4bfffbe9ce2c7f52097671b19a7a8f7a889c4903b9a25a3c292b875573656353#npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "tslib", + [ + [ + "npm:1.9.3", + { + "packageLocation": "./.yarn/cache/tslib-npm-1.9.3-8323ac5d9f340c79c9ded614a0edebcf747eb4fbc9c58a6fd1d9b8f169f5a2e5.zip/node_modules/tslib/", + "packageDependencies": [ + [ + "tslib", + "npm:1.9.3" + ] + ] + } + ] + ] + ], + [ + "tty-browserify", + [ + [ + "npm:0.0.0", + { + "packageLocation": "./.yarn/cache/tty-browserify-npm-0.0.0-1b7ab50399465f44915d73f12cf61d587424e5c499971293371c634cd08fef19.zip/node_modules/tty-browserify/", + "packageDependencies": [ + [ + "tty-browserify", + "npm:0.0.0" + ] + ] + } + ] + ] + ], + [ + "tunnel-agent", + [ + [ + "npm:0.6.0", + { + "packageLocation": "./.yarn/cache/tunnel-agent-npm-0.6.0-90013d995e35cca8d3a3b646d51b1e5756726a6ddd1acdf612060b5c5c688462.zip/node_modules/tunnel-agent/", + "packageDependencies": [ + [ + "tunnel-agent", + "npm:0.6.0" + ], + [ + "safe-buffer", + "npm:5.1.2" + ] + ] + } + ] + ] + ], + [ + "tweetnacl", + [ + [ + "npm:0.14.5", + { + "packageLocation": "./.yarn/cache/tweetnacl-npm-0.14.5-c47b63525e0ff18d0583285bc5a3ddb27c24c88598fdb064ab6ccc6ccce4ebb1.zip/node_modules/tweetnacl/", + "packageDependencies": [ + [ + "tweetnacl", + "npm:0.14.5" + ] + ] + } + ] + ] + ], + [ + "type-check", + [ + [ + "npm:0.3.2", + { + "packageLocation": "./.yarn/cache/type-check-npm-0.3.2-0799f5823c08a5d3f714f67f4cab31921ace4fed79ea8c70f210d7b2dee6fcd9.zip/node_modules/type-check/", + "packageDependencies": [ + [ + "type-check", + "npm:0.3.2" + ], + [ + "prelude-ls", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "type-is", + [ + [ + "npm:1.6.18", + { + "packageLocation": "./.yarn/cache/type-is-npm-1.6.18-e7be2adaf4fa408e0e1b1cd89a765d7db99ee066a08cfc8d96272c17574a48f4.zip/node_modules/type-is/", + "packageDependencies": [ + [ + "type-is", + "npm:1.6.18" + ], + [ + "media-typer", + "npm:0.3.0" + ], + [ + "mime-types", + "npm:2.1.24" + ] + ] + } + ] + ] + ], + [ + "typedarray", + [ + [ + "npm:0.0.6", + { + "packageLocation": "./.yarn/cache/typedarray-npm-0.0.6-55d52e5ae757bdd5672a56408fbdcbe0f44bfdfb7a132676b3902dc5711a30d0.zip/node_modules/typedarray/", + "packageDependencies": [ + [ + "typedarray", + "npm:0.0.6" + ] + ] + } + ] + ] + ], + [ + "uglify-js", + [ + [ + "npm:3.4.10", + { + "packageLocation": "./.yarn/cache/uglify-js-npm-3.4.10-60e3cf344397048e38490f7ad4a234038e62724289f6c770bac07adc586e67d6.zip/node_modules/uglify-js/", + "packageDependencies": [ + [ + "uglify-js", + "npm:3.4.10" + ], + [ + "commander", + "npm:2.19.0" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ], + [ + "npm:3.5.9", + { + "packageLocation": "./.yarn/cache/uglify-js-npm-3.5.9-c0bc8881de90af0312448184d5430deb8071bc7c9a8d957664f04235d92cf199.zip/node_modules/uglify-js/", + "packageDependencies": [ + [ + "uglify-js", + "npm:3.5.9" + ], + [ + "commander", + "npm:2.20.0" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "unc-path-regex", + [ + [ + "npm:0.1.2", + { + "packageLocation": "./.yarn/cache/unc-path-regex-npm-0.1.2-6dbbd7679e9f189a2cb883c84ef756775cdd5e8133da0e45972c7c3c59714ad4.zip/node_modules/unc-path-regex/", + "packageDependencies": [ + [ + "unc-path-regex", + "npm:0.1.2" + ] + ] + } + ] + ] + ], + [ + "undertaker", + [ + [ + "npm:1.2.1", + { + "packageLocation": "./.yarn/cache/undertaker-npm-1.2.1-f02aa1875be1f2dbee57d8959c88b5c5d2cbda07523ffb8f9831d0c5475c465e.zip/node_modules/undertaker/", + "packageDependencies": [ + [ + "undertaker", + "npm:1.2.1" + ], + [ + "arr-flatten", + "npm:1.1.0" + ], + [ + "arr-map", + "npm:2.0.2" + ], + [ + "bach", + "npm:1.2.0" + ], + [ + "collection-map", + "npm:1.0.0" + ], + [ + "es6-weak-map", + "npm:2.0.2" + ], + [ + "last-run", + "npm:1.1.1" + ], + [ + "object.defaults", + "npm:1.1.0" + ], + [ + "object.reduce", + "npm:1.0.1" + ], + [ + "undertaker-registry", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "undertaker-registry", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/undertaker-registry-npm-1.0.1-00b8bb00d3a4db17703111cd4b89464e1c0c48d29724e443b1a246999539d3ef.zip/node_modules/undertaker-registry/", + "packageDependencies": [ + [ + "undertaker-registry", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "unicode-canonical-property-names-ecmascript", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/unicode-canonical-property-names-ecmascript-npm-1.0.4-4e53e524f5e4ee08f626a5b8b0fd4ec7b1e8055a80a6349b61b1c285bac190a0.zip/node_modules/unicode-canonical-property-names-ecmascript/", + "packageDependencies": [ + [ + "unicode-canonical-property-names-ecmascript", + "npm:1.0.4" + ] + ] + } + ] + ] + ], + [ + "unicode-match-property-ecmascript", + [ + [ + "npm:1.0.4", + { + "packageLocation": "./.yarn/cache/unicode-match-property-ecmascript-npm-1.0.4-b71e8e1fde4816b3c523be29968a37f85e7a52a99449b2df807948574b895c5c.zip/node_modules/unicode-match-property-ecmascript/", + "packageDependencies": [ + [ + "unicode-match-property-ecmascript", + "npm:1.0.4" + ], + [ + "unicode-canonical-property-names-ecmascript", + "npm:1.0.4" + ], + [ + "unicode-property-aliases-ecmascript", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "unicode-match-property-value-ecmascript", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/unicode-match-property-value-ecmascript-npm-1.1.0-517fbb5415fb19c2fee0d46209a34bd60d0ee26b61dcc53c5e16258cd4e925f9.zip/node_modules/unicode-match-property-value-ecmascript/", + "packageDependencies": [ + [ + "unicode-match-property-value-ecmascript", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "unicode-property-aliases-ecmascript", + [ + [ + "npm:1.0.5", + { + "packageLocation": "./.yarn/cache/unicode-property-aliases-ecmascript-npm-1.0.5-84221825b62c0eca9ec74a1a3153e6d8d10849d68dc0d00e001ba0bd977b96a1.zip/node_modules/unicode-property-aliases-ecmascript/", + "packageDependencies": [ + [ + "unicode-property-aliases-ecmascript", + "npm:1.0.5" + ] + ] + } + ] + ] + ], + [ + "union", + [ + [ + "npm:0.4.6", + { + "packageLocation": "./.yarn/cache/union-npm-0.4.6-4924f7a599de62c699aa7e13c5dd2dd560e0a6a5960acfa4fb1dfdb1484de409.zip/node_modules/union/", + "packageDependencies": [ + [ + "union", + "npm:0.4.6" + ], + [ + "qs", + "npm:2.3.3" + ] + ] + } + ] + ] + ], + [ + "union-value", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/union-value-npm-1.0.0-29659aac55ba42a50c67a62ab6e1398849ce40f6e06c686fcab5332d659a9f7c.zip/node_modules/union-value/", + "packageDependencies": [ + [ + "union-value", + "npm:1.0.0" + ], + [ + "arr-union", + "npm:3.1.0" + ], + [ + "get-value", + "npm:2.0.6" + ], + [ + "is-extendable", + "npm:0.1.1" + ], + [ + "set-value", + "npm:0.4.3" + ] + ] + } + ] + ] + ], + [ + "unique-filename", + [ + [ + "npm:1.1.1", + { + "packageLocation": "./.yarn/cache/unique-filename-npm-1.1.1-3f8caa124171d2d26084527d5d693871e2c1231a0d28c2334167c7f4b7402392.zip/node_modules/unique-filename/", + "packageDependencies": [ + [ + "unique-filename", + "npm:1.1.1" + ], + [ + "unique-slug", + "npm:2.0.1" + ] + ] + } + ] + ] + ], + [ + "unique-slug", + [ + [ + "npm:2.0.1", + { + "packageLocation": "./.yarn/cache/unique-slug-npm-2.0.1-3383fbdf4bbdd1845fb2d14eb368028353d0256c557ca21daefc9a4075c47323.zip/node_modules/unique-slug/", + "packageDependencies": [ + [ + "unique-slug", + "npm:2.0.1" + ], + [ + "imurmurhash", + "npm:0.1.4" + ] + ] + } + ] + ] + ], + [ + "unique-stream", + [ + [ + "npm:2.3.1", + { + "packageLocation": "./.yarn/cache/unique-stream-npm-2.3.1-3963ba187c54e827cd5983d70489bf33fed770fb73d0e4a7a1c4cc9770c3494d.zip/node_modules/unique-stream/", + "packageDependencies": [ + [ + "unique-stream", + "npm:2.3.1" + ], + [ + "json-stable-stringify-without-jsonify", + "npm:1.0.1" + ], + [ + "through2-filter", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "unpipe", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/unpipe-npm-1.0.0-70558b560a2354fa04135a2aef12ea3cb329698774400972b8f544606fc8d5a4.zip/node_modules/unpipe/", + "packageDependencies": [ + [ + "unpipe", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "unset-value", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/unset-value-npm-1.0.0-b436376d085f535601b404d9be4451265939f948a6c0fcc506148dc74718522e.zip/node_modules/unset-value/", + "packageDependencies": [ + [ + "unset-value", + "npm:1.0.0" + ], + [ + "has-value", + "npm:0.3.1" + ], + [ + "isobject", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "upath", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/upath-npm-1.1.2-4bf1913de850d07e88a4684a5a81f73e71dc84fd999b32f0c055ed823c485319.zip/node_modules/upath/", + "packageDependencies": [ + [ + "upath", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "upper-case", + [ + [ + "npm:1.1.3", + { + "packageLocation": "./.yarn/cache/upper-case-npm-1.1.3-9689c25fd17caf410a5504d5e2f5cfd6a8d77c094f329daa65d6cfcf4fce89a4.zip/node_modules/upper-case/", + "packageDependencies": [ + [ + "upper-case", + "npm:1.1.3" + ] + ] + } + ] + ] + ], + [ + "uri-js", + [ + [ + "npm:4.2.2", + { + "packageLocation": "./.yarn/cache/uri-js-npm-4.2.2-f07de78d80b8cf6abe4ed33f58afbf5c76a86c7ef9f4e8494a6c4691a45e745b.zip/node_modules/uri-js/", + "packageDependencies": [ + [ + "uri-js", + "npm:4.2.2" + ], + [ + "punycode", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "urix", + [ + [ + "npm:0.1.0", + { + "packageLocation": "./.yarn/cache/urix-npm-0.1.0-30bf36106988ede6249f1863d64b6d24c66d3594c599b81e3c1a4ae1a29e4e8a.zip/node_modules/urix/", + "packageDependencies": [ + [ + "urix", + "npm:0.1.0" + ] + ] + } + ] + ] + ], + [ + "url", + [ + [ + "npm:0.11.0", + { + "packageLocation": "./.yarn/cache/url-npm-0.11.0-1a28ea261e744934c0cc84004bab51a9793f16c80a35961e46109fb4d03b3d69.zip/node_modules/url/", + "packageDependencies": [ + [ + "url", + "npm:0.11.0" + ], + [ + "punycode", + "npm:1.3.2" + ], + [ + "querystring", + "npm:0.2.0" + ] + ] + } + ] + ] + ], + [ + "url-join", + [ + [ + "npm:2.0.5", + { + "packageLocation": "./.yarn/cache/url-join-npm-2.0.5-471636779f45ab4f01c30f2745d5d3045a43ae80c63800d814643013f2857b56.zip/node_modules/url-join/", + "packageDependencies": [ + [ + "url-join", + "npm:2.0.5" + ] + ] + } + ] + ] + ], + [ + "use", + [ + [ + "npm:3.1.1", + { + "packageLocation": "./.yarn/cache/use-npm-3.1.1-d2c9777e6d7c846aef0ffbe015b23f3797209358ff0ab70b7208a7d8fb8b0ace.zip/node_modules/use/", + "packageDependencies": [ + [ + "use", + "npm:3.1.1" + ] + ] + } + ] + ] + ], + [ + "util", + [ + [ + "npm:0.10.3", + { + "packageLocation": "./.yarn/cache/util-npm-0.10.3-f56d028e89c08cd0f55f0db7b881bd6da38f273650bce5ca232d615a4337d8e0.zip/node_modules/util/", + "packageDependencies": [ + [ + "util", + "npm:0.10.3" + ], + [ + "inherits", + "npm:2.0.1" + ] + ] + } + ], + [ + "npm:0.11.1", + { + "packageLocation": "./.yarn/cache/util-npm-0.11.1-b3dc5f3899bb8af9562c5cf8f3503d4d387a8e0b55908eaa8841ecda01a49fa7.zip/node_modules/util/", + "packageDependencies": [ + [ + "util", + "npm:0.11.1" + ], + [ + "inherits", + "npm:2.0.3" + ] + ] + } + ] + ] + ], + [ + "util-deprecate", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/util-deprecate-npm-1.0.2-9ecf5b2f9f93c3167ff7040fc7b88e5813069455ccde9bb67509f4c7254f781e.zip/node_modules/util-deprecate/", + "packageDependencies": [ + [ + "util-deprecate", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "util.promisify", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/util.promisify-npm-1.0.0-25fefe50bc9e0ac7fb8e40b83d83095ca7647553ed855fb13bf03a643de01c57.zip/node_modules/util.promisify/", + "packageDependencies": [ + [ + "util.promisify", + "npm:1.0.0" + ], + [ + "define-properties", + "npm:1.1.3" + ], + [ + "object.getownpropertydescriptors", + "npm:2.0.3" + ] + ] + } + ] + ] + ], + [ + "utila", + [ + [ + "npm:0.4.0", + { + "packageLocation": "./.yarn/cache/utila-npm-0.4.0-61118e7d9dc1d93b02c1c73c1cc73c10c0721c4b5982471b60d705738feed32d.zip/node_modules/utila/", + "packageDependencies": [ + [ + "utila", + "npm:0.4.0" + ] + ] + } + ] + ] + ], + [ + "utils-merge", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/utils-merge-npm-1.0.1-5366aaa5b7a63d99c2055c61d123f37d3da9eeef189cc2c8c322eec4a01102f2.zip/node_modules/utils-merge/", + "packageDependencies": [ + [ + "utils-merge", + "npm:1.0.1" + ] + ] + } + ] + ] + ], + [ + "uuid", + [ + [ + "npm:3.3.2", + { + "packageLocation": "./.yarn/cache/uuid-npm-3.3.2-3aad97ece48c58efad10917f544b5854fa3da515f5a15a15d4854e05ac02ae54.zip/node_modules/uuid/", + "packageDependencies": [ + [ + "uuid", + "npm:3.3.2" + ] + ] + } + ] + ] + ], + [ + "v8-compile-cache", + [ + [ + "npm:2.0.2", + { + "packageLocation": "./.yarn/cache/v8-compile-cache-npm-2.0.2-17947293ffecdaee7d9e4d938ebcb88b57ddf1a30ac12649ae97e13402e339d0.zip/node_modules/v8-compile-cache/", + "packageDependencies": [ + [ + "v8-compile-cache", + "npm:2.0.2" + ] + ] + } + ] + ] + ], + [ + "v8flags", + [ + [ + "npm:3.1.2", + { + "packageLocation": "./.yarn/cache/v8flags-npm-3.1.2-9c5eb268473c90a0a70f0718f4790469f0aaa97e250392033b40af1545982c35.zip/node_modules/v8flags/", + "packageDependencies": [ + [ + "v8flags", + "npm:3.1.2" + ], + [ + "homedir-polyfill", + "npm:1.0.3" + ] + ] + } + ] + ] + ], + [ + "validate-npm-package-license", + [ + [ + "npm:3.0.4", + { + "packageLocation": "./.yarn/cache/validate-npm-package-license-npm-3.0.4-abbdf76690ffb8200519ac67154d9f7095e940c46666785f175cb96166f4132f.zip/node_modules/validate-npm-package-license/", + "packageDependencies": [ + [ + "validate-npm-package-license", + "npm:3.0.4" + ], + [ + "spdx-correct", + "npm:3.1.0" + ], + [ + "spdx-expression-parse", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "value-or-function", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/value-or-function-npm-3.0.0-b3025048d4e079358424fab8fcb2bcc9450a8d998c540ecb1b73d8c7742d1516.zip/node_modules/value-or-function/", + "packageDependencies": [ + [ + "value-or-function", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "vary", + [ + [ + "npm:1.1.2", + { + "packageLocation": "./.yarn/cache/vary-npm-1.1.2-edf75b3a6f9122bbc7b51b8526312bd0c58d9df4160c1bd398246fe47f342da5.zip/node_modules/vary/", + "packageDependencies": [ + [ + "vary", + "npm:1.1.2" + ] + ] + } + ] + ] + ], + [ + "verror", + [ + [ + "npm:1.10.0", + { + "packageLocation": "./.yarn/cache/verror-npm-1.10.0-d8db30d14c33c49256998c85eca819aea17eeb0117a67c996673c17e18581f25.zip/node_modules/verror/", + "packageDependencies": [ + [ + "verror", + "npm:1.10.0" + ], + [ + "assert-plus", + "npm:1.0.0" + ], + [ + "core-util-is", + "npm:1.0.2" + ], + [ + "extsprintf", + "npm:1.3.0" + ] + ] + } + ] + ] + ], + [ + "vinyl", + [ + [ + "npm:2.2.0", + { + "packageLocation": "./.yarn/cache/vinyl-npm-2.2.0-c3521c2085e8d79100c614b94eec8cb258d120e192ed73f837643482c6d0b047.zip/node_modules/vinyl/", + "packageDependencies": [ + [ + "vinyl", + "npm:2.2.0" + ], + [ + "clone", + "npm:2.1.2" + ], + [ + "clone-buffer", + "npm:1.0.0" + ], + [ + "clone-stats", + "npm:1.0.0" + ], + [ + "cloneable-readable", + "npm:1.1.2" + ], + [ + "remove-trailing-separator", + "npm:1.1.0" + ], + [ + "replace-ext", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "vinyl-fs", + [ + [ + "npm:3.0.3", + { + "packageLocation": "./.yarn/cache/vinyl-fs-npm-3.0.3-926d43a9bfdd073321688b87e5e90d819185a38773b1516d87dd1002b7f10a60.zip/node_modules/vinyl-fs/", + "packageDependencies": [ + [ + "vinyl-fs", + "npm:3.0.3" + ], + [ + "fs-mkdirp-stream", + "npm:1.0.0" + ], + [ + "glob-stream", + "npm:6.1.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "is-valid-glob", + "npm:1.0.0" + ], + [ + "lazystream", + "npm:1.0.0" + ], + [ + "lead", + "npm:1.0.0" + ], + [ + "object.assign", + "npm:4.1.0" + ], + [ + "pumpify", + "npm:1.5.1" + ], + [ + "readable-stream", + "npm:2.3.6" + ], + [ + "remove-bom-buffer", + "npm:3.0.0" + ], + [ + "remove-bom-stream", + "npm:1.2.0" + ], + [ + "resolve-options", + "npm:1.1.0" + ], + [ + "through2", + "npm:2.0.5" + ], + [ + "to-through", + "npm:2.0.0" + ], + [ + "value-or-function", + "npm:3.0.0" + ], + [ + "vinyl", + "npm:2.2.0" + ], + [ + "vinyl-sourcemap", + "npm:1.1.0" + ] + ] + } + ] + ] + ], + [ + "vinyl-sourcemap", + [ + [ + "npm:1.1.0", + { + "packageLocation": "./.yarn/cache/vinyl-sourcemap-npm-1.1.0-0e749c5fa206477f7ea1f80f85ba100e2d848c575dbe758102b561582fc36b59.zip/node_modules/vinyl-sourcemap/", + "packageDependencies": [ + [ + "vinyl-sourcemap", + "npm:1.1.0" + ], + [ + "append-buffer", + "npm:1.0.2" + ], + [ + "convert-source-map", + "npm:1.6.0" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "normalize-path", + "npm:2.1.1" + ], + [ + "now-and-later", + "npm:2.0.1" + ], + [ + "remove-bom-buffer", + "npm:3.0.0" + ], + [ + "vinyl", + "npm:2.2.0" + ] + ] + } + ] + ] + ], + [ + "vinyl-sourcemaps-apply", + [ + [ + "npm:0.2.1", + { + "packageLocation": "./.yarn/cache/vinyl-sourcemaps-apply-npm-0.2.1-f9c87783219989d759473197f58ec09958535a8b84a621f84e8b2c70c59ca500.zip/node_modules/vinyl-sourcemaps-apply/", + "packageDependencies": [ + [ + "vinyl-sourcemaps-apply", + "npm:0.2.1" + ], + [ + "source-map", + "npm:0.5.7" + ] + ] + } + ] + ] + ], + [ + "vm-browserify", + [ + [ + "npm:0.0.4", + { + "packageLocation": "./.yarn/cache/vm-browserify-npm-0.0.4-a33db56c2459dbb161d8c6e901a2a393675aca518582fdb9614f341db5554c95.zip/node_modules/vm-browserify/", + "packageDependencies": [ + [ + "vm-browserify", + "npm:0.0.4" + ], + [ + "indexof", + "npm:0.0.1" + ] + ] + } + ] + ] + ], + [ + "w3c-hr-time", + [ + [ + "npm:1.0.1", + { + "packageLocation": "./.yarn/cache/w3c-hr-time-npm-1.0.1-26fb426a51f0e961506aa3a8ce50f8055560ba3f5ce0be508da6bb0f43330e3a.zip/node_modules/w3c-hr-time/", + "packageDependencies": [ + [ + "w3c-hr-time", + "npm:1.0.1" + ], + [ + "browser-process-hrtime", + "npm:0.1.3" + ] + ] + } + ] + ] + ], + [ + "walker", + [ + [ + "npm:1.0.7", + { + "packageLocation": "./.yarn/cache/walker-npm-1.0.7-73611a8b803d0791d9eada8ef769848a1382791bead3c2d408f171562f3179bc.zip/node_modules/walker/", + "packageDependencies": [ + [ + "walker", + "npm:1.0.7" + ], + [ + "makeerror", + "npm:1.0.11" + ] + ] + } + ] + ] + ], + [ + "watchpack", + [ + [ + "npm:1.6.0", + { + "packageLocation": "./.yarn/cache/watchpack-npm-1.6.0-c6f5b3fb7d20a7f383b75fd328d05ce98d185891e805a0cf6a22cd9b3f76d205.zip/node_modules/watchpack/", + "packageDependencies": [ + [ + "watchpack", + "npm:1.6.0" + ], + [ + "chokidar", + "npm:2.1.5" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "neo-async", + "npm:2.6.0" + ] + ] + } + ] + ] + ], + [ + "webidl-conversions", + [ + [ + "npm:4.0.2", + { + "packageLocation": "./.yarn/cache/webidl-conversions-npm-4.0.2-8dfa2c14df744f758f85d408c5ecb5432cf223268a5ccf284a67103160cbd54b.zip/node_modules/webidl-conversions/", + "packageDependencies": [ + [ + "webidl-conversions", + "npm:4.0.2" + ] + ] + } + ] + ] + ], + [ + "webpack", + [ + [ + "npm:4.30.0", + { + "packageLocation": "./.yarn/cache/webpack-npm-4.30.0-755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f18.zip/node_modules/webpack/", + "packageDependencies": [ + [ + "webpack", + "npm:4.30.0" + ], + [ + "@webassemblyjs/ast", + "npm:1.8.5" + ], + [ + "@webassemblyjs/helper-module-context", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-edit", + "npm:1.8.5" + ], + [ + "@webassemblyjs/wasm-parser", + "npm:1.8.5" + ], + [ + "acorn", + "npm:6.1.1" + ], + [ + "acorn-dynamic-import", + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:4.0.0" + ], + [ + "ajv", + "npm:6.10.0" + ], + [ + "ajv-keywords", + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:3.4.0" + ], + [ + "chrome-trace-event", + "npm:1.0.0" + ], + [ + "enhanced-resolve", + "npm:4.1.0" + ], + [ + "eslint-scope", + "npm:4.0.3" + ], + [ + "json-parse-better-errors", + "npm:1.0.2" + ], + [ + "loader-runner", + "npm:2.4.0" + ], + [ + "loader-utils", + "npm:1.2.3" + ], + [ + "memory-fs", + "npm:0.4.1" + ], + [ + "micromatch", + "npm:3.1.10" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "neo-async", + "npm:2.6.0" + ], + [ + "node-libs-browser", + "npm:2.2.0" + ], + [ + "schema-utils", + "npm:1.0.0" + ], + [ + "tapable", + "npm:1.1.3" + ], + [ + "terser-webpack-plugin", + "virtual:755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f183bdac9c3c286e9b527a8b28df89f76c93ff2aca1e4b02a3fea69ac64f4886ed6#npm:1.2.3" + ], + [ + "watchpack", + "npm:1.6.0" + ], + [ + "webpack-sources", + "npm:1.3.0" + ] + ] + } + ] + ] + ], + [ + "webpack-bundle-analyzer", + [ + [ + "npm:3.3.2", + { + "packageLocation": "./.yarn/cache/webpack-bundle-analyzer-npm-3.3.2-755cae6a24ac33e8319ab168a4791933ac44f5892a7d03dcd5b6394bb500a42c.zip/node_modules/webpack-bundle-analyzer/", + "packageDependencies": [ + [ + "webpack-bundle-analyzer", + "npm:3.3.2" + ], + [ + "acorn", + "npm:6.1.1" + ], + [ + "acorn-walk", + "npm:6.1.1" + ], + [ + "bfj", + "npm:6.1.1" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "commander", + "npm:2.20.0" + ], + [ + "ejs", + "npm:2.6.1" + ], + [ + "express", + "npm:4.16.4" + ], + [ + "filesize", + "npm:3.6.1" + ], + [ + "gzip-size", + "npm:5.1.0" + ], + [ + "lodash", + "npm:4.17.11" + ], + [ + "mkdirp", + "npm:0.5.1" + ], + [ + "opener", + "npm:1.5.1" + ], + [ + "ws", + "npm:6.2.1" + ] + ] + } + ] + ] + ], + [ + "webpack-cli", + [ + [ + "npm:3.3.1", + { + "packageLocation": "./.yarn/unplugged/webpack-cli-npm-3.3.1-65c4ff5cda895cda35e70189039a898991481ca268e5bfc40b502ccec690bbc3/node_modules/webpack-cli/", + "packageDependencies": [ + [ + "webpack-cli", + "npm:3.3.1" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "cross-spawn", + "npm:6.0.5" + ], + [ + "enhanced-resolve", + "npm:4.1.0" + ], + [ + "findup-sync", + "npm:2.0.0" + ], + [ + "global-modules", + "npm:1.0.0" + ], + [ + "import-local", + "npm:2.0.0" + ], + [ + "interpret", + "npm:1.2.0" + ], + [ + "loader-utils", + "npm:1.2.3" + ], + [ + "supports-color", + "npm:5.5.0" + ], + [ + "v8-compile-cache", + "npm:2.0.2" + ], + [ + "yargs", + "npm:12.0.5" + ] + ] + } + ], + [ + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.3.1", + { + "packageLocation": "./.yarn/unplugged/webpack-cli-virtual-fa763e60b873dfce57218b23d13f25b5c542a043490330c559bedf8509bdac1f/node_modules/webpack-cli/", + "packageDependencies": [ + [ + "webpack-cli", + "virtual:dc29733bcf61a43796c4b9a2f353c9a0a9fae657f398ab317ac802f0788cb3382efdba0e7d5e1734520f1710799f81350a42e4c66b69e33e4ae49992e0a44c46#npm:3.3.1" + ], + [ + "chalk", + "npm:2.4.2" + ], + [ + "cross-spawn", + "npm:6.0.5" + ], + [ + "enhanced-resolve", + "npm:4.1.0" + ], + [ + "findup-sync", + "npm:2.0.0" + ], + [ + "global-modules", + "npm:1.0.0" + ], + [ + "import-local", + "npm:2.0.0" + ], + [ + "interpret", + "npm:1.2.0" + ], + [ + "loader-utils", + "npm:1.2.3" + ], + [ + "supports-color", + "npm:5.5.0" + ], + [ + "v8-compile-cache", + "npm:2.0.2" + ], + [ + "webpack", + "npm:4.30.0" + ], + [ + "yargs", + "npm:12.0.5" + ] + ] + } + ] + ] + ], + [ + "webpack-sources", + [ + [ + "npm:1.3.0", + { + "packageLocation": "./.yarn/cache/webpack-sources-npm-1.3.0-9f9e0044ba75694fc21545c7ca42ab67f67de1db6a498c28da1f9fdb240d6e88.zip/node_modules/webpack-sources/", + "packageDependencies": [ + [ + "webpack-sources", + "npm:1.3.0" + ], + [ + "source-list-map", + "npm:2.0.1" + ], + [ + "source-map", + "npm:0.6.1" + ] + ] + } + ] + ] + ], + [ + "webpack-stream", + [ + [ + "npm:5.2.1", + { + "packageLocation": "./.yarn/cache/webpack-stream-npm-5.2.1-f62df0144a2e906c9b1f2ca192a01b6d4f5ed31b3aa7ac3d421845e9c6eb75ed.zip/node_modules/webpack-stream/", + "packageDependencies": [ + [ + "webpack-stream", + "npm:5.2.1" + ], + [ + "fancy-log", + "npm:1.3.3" + ], + [ + "lodash.clone", + "npm:4.5.0" + ], + [ + "lodash.some", + "npm:4.6.0" + ], + [ + "memory-fs", + "npm:0.4.1" + ], + [ + "plugin-error", + "npm:1.0.1" + ], + [ + "supports-color", + "npm:5.5.0" + ], + [ + "through", + "npm:2.3.8" + ], + [ + "vinyl", + "npm:2.2.0" + ], + [ + "webpack", + "npm:4.30.0" + ] + ] + } + ] + ] + ], + [ + "whatwg-encoding", + [ + [ + "npm:1.0.5", + { + "packageLocation": "./.yarn/cache/whatwg-encoding-npm-1.0.5-1322912bbabfbe130fa5d25781df4453c215a4ca7a01116226799cc12c8a8ca4.zip/node_modules/whatwg-encoding/", + "packageDependencies": [ + [ + "whatwg-encoding", + "npm:1.0.5" + ], + [ + "iconv-lite", + "npm:0.4.24" + ] + ] + } + ] + ] + ], + [ + "whatwg-mimetype", + [ + [ + "npm:2.3.0", + { + "packageLocation": "./.yarn/cache/whatwg-mimetype-npm-2.3.0-f4a27dc8ddccb5df51e96af023272c3dd370c43f55300a20961d5ea8b4fb45fb.zip/node_modules/whatwg-mimetype/", + "packageDependencies": [ + [ + "whatwg-mimetype", + "npm:2.3.0" + ] + ] + } + ] + ] + ], + [ + "whatwg-url", + [ + [ + "npm:6.5.0", + { + "packageLocation": "./.yarn/cache/whatwg-url-npm-6.5.0-76d17126eb1d62b4fe4de8bd9ab3e9939b4414b5e03a55c78b2846529ee44a36.zip/node_modules/whatwg-url/", + "packageDependencies": [ + [ + "whatwg-url", + "npm:6.5.0" + ], + [ + "lodash.sortby", + "npm:4.7.0" + ], + [ + "tr46", + "npm:1.0.1" + ], + [ + "webidl-conversions", + "npm:4.0.2" + ] + ] + } + ], + [ + "npm:7.0.0", + { + "packageLocation": "./.yarn/cache/whatwg-url-npm-7.0.0-8300a8afa8cc9f5ca7eb2e888ebb63f427142a743aeead7a9fde074e58ddfca8.zip/node_modules/whatwg-url/", + "packageDependencies": [ + [ + "whatwg-url", + "npm:7.0.0" + ], + [ + "lodash.sortby", + "npm:4.7.0" + ], + [ + "tr46", + "npm:1.0.1" + ], + [ + "webidl-conversions", + "npm:4.0.2" + ] + ] + } + ] + ] + ], + [ + "which", + [ + [ + "npm:1.3.1", + { + "packageLocation": "./.yarn/cache/which-npm-1.3.1-b884326ecb347e77009bba24579d1626fb1b59135951b4fcd8e3976e3ed5c409.zip/node_modules/which/", + "packageDependencies": [ + [ + "which", + "npm:1.3.1" + ], + [ + "isexe", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "which-module", + [ + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/which-module-npm-1.0.0-da5bc61d9c5da893b968e71965d48024992373a2d8bea70c7b969cf57d6bdea6.zip/node_modules/which-module/", + "packageDependencies": [ + [ + "which-module", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:2.0.0", + { + "packageLocation": "./.yarn/cache/which-module-npm-2.0.0-9af7bd1ba11284dd5bbb62453562ae5d3a459631cda2cf388d01cc9fcf17123e.zip/node_modules/which-module/", + "packageDependencies": [ + [ + "which-module", + "npm:2.0.0" + ] + ] + } + ] + ] + ], + [ + "wide-align", + [ + [ + "npm:1.1.3", + { + "packageLocation": "./.yarn/cache/wide-align-npm-1.1.3-76f5cdf078f4d2b1e16e1a529bdc31e6f37d142b635f4a4d6e7097fc8e0dee6f.zip/node_modules/wide-align/", + "packageDependencies": [ + [ + "wide-align", + "npm:1.1.3" + ], + [ + "string-width", + "npm:2.1.1" + ] + ] + } + ] + ] + ], + [ + "wordwrap", + [ + [ + "npm:0.0.3", + { + "packageLocation": "./.yarn/cache/wordwrap-npm-0.0.3-d354b06d539616cf5ac61d5be39d24ae5af937eeb880ef7b431eb3575934baf2.zip/node_modules/wordwrap/", + "packageDependencies": [ + [ + "wordwrap", + "npm:0.0.3" + ] + ] + } + ], + [ + "npm:1.0.0", + { + "packageLocation": "./.yarn/cache/wordwrap-npm-1.0.0-7ee9a989a132335d2da8108d8b3b35140b2373fd3fd5cf447e0026468698ff5e.zip/node_modules/wordwrap/", + "packageDependencies": [ + [ + "wordwrap", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "worker-farm", + [ + [ + "npm:1.6.0", + { + "packageLocation": "./.yarn/cache/worker-farm-npm-1.6.0-0653c70d504f8f28804803489533910df8892f066035402a6ede27b9f13a2ef6.zip/node_modules/worker-farm/", + "packageDependencies": [ + [ + "worker-farm", + "npm:1.6.0" + ], + [ + "errno", + "npm:0.1.7" + ] + ] + } + ] + ] + ], + [ + "wrap-ansi", + [ + [ + "npm:2.1.0", + { + "packageLocation": "./.yarn/cache/wrap-ansi-npm-2.1.0-e4ce545bc7bdea2ad2f31981cb5be5fee57f4a0aeb2497de87de58d165427e7b.zip/node_modules/wrap-ansi/", + "packageDependencies": [ + [ + "wrap-ansi", + "npm:2.1.0" + ], + [ + "string-width", + "npm:1.0.2" + ], + [ + "strip-ansi", + "npm:3.0.1" + ] + ] + } + ] + ] + ], + [ + "wrappy", + [ + [ + "npm:1.0.2", + { + "packageLocation": "./.yarn/cache/wrappy-npm-1.0.2-df5d6419d820e7bcde1c8403b78cedfa4c9b67ee273d3a4bb9ffedc02c2eace1.zip/node_modules/wrappy/", + "packageDependencies": [ + [ + "wrappy", + "npm:1.0.2" + ] + ] + } + ] + ] + ], + [ + "write", + [ + [ + "npm:1.0.3", + { + "packageLocation": "./.yarn/cache/write-npm-1.0.3-245e61e7896b5bca28c1caf951e9faa4246d3c4c43b990fb37cb4fabb59eb575.zip/node_modules/write/", + "packageDependencies": [ + [ + "write", + "npm:1.0.3" + ], + [ + "mkdirp", + "npm:0.5.1" + ] + ] + } + ] + ] + ], + [ + "write-file-atomic", + [ + [ + "npm:2.4.1", + { + "packageLocation": "./.yarn/cache/write-file-atomic-npm-2.4.1-085e824a63f826a74d15a0f89463e8680335ae78b1d34764be7b1993b73cf449.zip/node_modules/write-file-atomic/", + "packageDependencies": [ + [ + "write-file-atomic", + "npm:2.4.1" + ], + [ + "graceful-fs", + "npm:4.1.15" + ], + [ + "imurmurhash", + "npm:0.1.4" + ], + [ + "signal-exit", + "npm:3.0.2" + ] + ] + } + ] + ] + ], + [ + "ws", + [ + [ + "npm:5.2.2", + { + "packageLocation": "./.yarn/cache/ws-npm-5.2.2-8b2d5b70470630165eebd16bdd8e30d9667d8a5a078316ef8b60e0e3a86a6828.zip/node_modules/ws/", + "packageDependencies": [ + [ + "ws", + "npm:5.2.2" + ], + [ + "async-limiter", + "npm:1.0.0" + ] + ] + } + ], + [ + "npm:6.2.1", + { + "packageLocation": "./.yarn/cache/ws-npm-6.2.1-8ab2b16111ee7b61df37a4f6df0f60f20aa115d4e30bb5782b271c1ff8253707.zip/node_modules/ws/", + "packageDependencies": [ + [ + "ws", + "npm:6.2.1" + ], + [ + "async-limiter", + "npm:1.0.0" + ] + ] + } + ] + ] + ], + [ + "xml-name-validator", + [ + [ + "npm:3.0.0", + { + "packageLocation": "./.yarn/cache/xml-name-validator-npm-3.0.0-684c128769305540d3346030d4b88080dd32870f2d9a1e89df02b913dae64033.zip/node_modules/xml-name-validator/", + "packageDependencies": [ + [ + "xml-name-validator", + "npm:3.0.0" + ] + ] + } + ] + ] + ], + [ + "xtend", + [ + [ + "npm:4.0.1", + { + "packageLocation": "./.yarn/cache/xtend-npm-4.0.1-385c35fc55882c94c5025a709a169fbee383ca9a7cc13cd0562412ab424edf09.zip/node_modules/xtend/", + "packageDependencies": [ + [ + "xtend", + "npm:4.0.1" + ] + ] + } + ] + ] + ], + [ + "y18n", + [ + [ + "npm:3.2.1", + { + "packageLocation": "./.yarn/cache/y18n-npm-3.2.1-b6160891833ab9768c30ab22f02842a6bba8b3ede82df8737a37b3d29e425425.zip/node_modules/y18n/", + "packageDependencies": [ + [ + "y18n", + "npm:3.2.1" + ] + ] + } + ], + [ + "npm:4.0.0", + { + "packageLocation": "./.yarn/cache/y18n-npm-4.0.0-e651611f639ebd2a9e68ff9eacf45384a4d9192e5d28eb88c690090eaf7a9896.zip/node_modules/y18n/", + "packageDependencies": [ + [ + "y18n", + "npm:4.0.0" + ] + ] + } + ] + ] + ], + [ + "yallist", + [ + [ + "npm:3.0.3", + { + "packageLocation": "./.yarn/cache/yallist-npm-3.0.3-5a3340944e8f6f377f853ff4323d2dedfa102abae3861f0058080021775df965.zip/node_modules/yallist/", + "packageDependencies": [ + [ + "yallist", + "npm:3.0.3" + ] + ] + } + ] + ] + ], + [ + "yargs", + [ + [ + "npm:12.0.5", + { + "packageLocation": "./.yarn/cache/yargs-npm-12.0.5-18c426aea9a03bc58a6704778e77147379425224d79bf4e3635adf4a736a13f8.zip/node_modules/yargs/", + "packageDependencies": [ + [ + "yargs", + "npm:12.0.5" + ], + [ + "cliui", + "npm:4.1.0" + ], + [ + "decamelize", + "npm:1.2.0" + ], + [ + "find-up", + "npm:3.0.0" + ], + [ + "get-caller-file", + "npm:1.0.3" + ], + [ + "os-locale", + "npm:3.1.0" + ], + [ + "require-directory", + "npm:2.1.1" + ], + [ + "require-main-filename", + "npm:1.0.1" + ], + [ + "set-blocking", + "npm:2.0.0" + ], + [ + "string-width", + "npm:2.1.1" + ], + [ + "which-module", + "npm:2.0.0" + ], + [ + "y18n", + "npm:4.0.0" + ], + [ + "yargs-parser", + "npm:11.1.1" + ] + ] + } + ], + [ + "npm:7.1.0", + { + "packageLocation": "./.yarn/cache/yargs-npm-7.1.0-f6a7e06488f1e6383b3941250602a7e27f0dbbed7e40e4cf515119b1683f92df.zip/node_modules/yargs/", + "packageDependencies": [ + [ + "yargs", + "npm:7.1.0" + ], + [ + "camelcase", + "npm:3.0.0" + ], + [ + "cliui", + "npm:3.2.0" + ], + [ + "decamelize", + "npm:1.2.0" + ], + [ + "get-caller-file", + "npm:1.0.3" + ], + [ + "os-locale", + "npm:1.4.0" + ], + [ + "read-pkg-up", + "npm:1.0.1" + ], + [ + "require-directory", + "npm:2.1.1" + ], + [ + "require-main-filename", + "npm:1.0.1" + ], + [ + "set-blocking", + "npm:2.0.0" + ], + [ + "string-width", + "npm:1.0.2" + ], + [ + "which-module", + "npm:1.0.0" + ], + [ + "y18n", + "npm:3.2.1" + ], + [ + "yargs-parser", + "npm:5.0.0" + ] + ] + } + ] + ] + ], + [ + "yargs-parser", + [ + [ + "npm:11.1.1", + { + "packageLocation": "./.yarn/cache/yargs-parser-npm-11.1.1-401c5211a9384ef28520a85fc7f4b657ebb8643bc3bfe014f0f4f18271e074c4.zip/node_modules/yargs-parser/", + "packageDependencies": [ + [ + "yargs-parser", + "npm:11.1.1" + ], + [ + "camelcase", + "npm:5.3.1" + ], + [ + "decamelize", + "npm:1.2.0" + ] + ] + } + ], + [ + "npm:5.0.0", + { + "packageLocation": "./.yarn/cache/yargs-parser-npm-5.0.0-606553367976fbf7513fdd0ad87cfa138203186177b330d66ecb1da128e89028.zip/node_modules/yargs-parser/", + "packageDependencies": [ + [ + "yargs-parser", + "npm:5.0.0" + ], + [ + "camelcase", + "npm:3.0.0" + ] + ] + } + ] + ] + ] + ], + "locationBlacklistData": [], + "locationLengthData": [ + 220, + 212, + 208, + 204, + 202, + 200, + 198, + 196, + 194, + 192, + 190, + 188, + 186, + 184, + 182, + 180, + 178, + 176, + 174, + 172, + 170, + 168, + 166, + 164, + 162, + 160, + 159, + 158, + 156, + 155, + 154, + 153, + 152, + 151, + 150, + 149, + 148, + 147, + 146, + 145, + 144, + 143, + 142, + 141, + 140, + 139, + 138, + 137, + 136, + 135, + 134, + 133, + 132, + 131, + 130, + 129, + 128, + 127, + 126, + 125, + 124, + 123, + 122, + 121, + 120, + 119, + 118, + 117, + 116, + 115, + 114, + 112, + 110, + 2 + ] + }, {basePath: __dirname}); + } + +module.exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(1); +const fs_1 = __importDefault(__webpack_require__(3)); +const module_1 = __importDefault(__webpack_require__(17)); +const path_1 = __importDefault(__webpack_require__(4)); +const string_decoder_1 = __importDefault(__webpack_require__(18)); +const applyPatch_1 = __webpack_require__(19); +const hydrateRuntimeState_1 = __webpack_require__(21); +const makeApi_1 = __webpack_require__(22); +// We must copy the fs into a local, because otherwise +// 1. we would make the NodeFS instance use the function that we patched (infinite loop) +// 2. Object.create(fs) isn't enough, since it won't prevent the proto from being modified +const localFs = Object.assign({}, fs_1.default); +const nodeFs = new fslib_1.NodeFS(localFs); +const zipOpenFs = new fslib_1.ZipOpenFS({ baseFs: nodeFs }); +module.exports = makeApi_1.makeApi($$SETUP_STATE(hydrateRuntimeState_1.hydrateRuntimeState), { + compatibilityMode: true, + pnpapiResolution: path_1.default.resolve(__dirname, __filename), + fakeFs: zipOpenFs, +}); +if (__non_webpack_module__.parent && __non_webpack_module__.parent.id === 'internal/preload') { + applyPatch_1.applyPatch(module.exports, { + compatibilityMode: true, + fakeFs: zipOpenFs, + }); + if (__non_webpack_module__.filename) { + // We delete it from the cache in order to support the case where the CLI resolver is invoked from "yarn run" + // It's annoying because it might cause some issues when the file is multiple times in NODE_OPTIONS, but it shouldn't happen anyway. + delete module_1.default._cache[__non_webpack_module__.filename]; + } +} +// @ts-ignore +if (process.mainModule === __non_webpack_module__) { + const reportError = (code, message, data) => { + process.stdout.write(`${JSON.stringify([{ code, message, data }, null])}\n`); + }; + const reportSuccess = (resolution) => { + process.stdout.write(`${JSON.stringify([null, resolution])}\n`); + }; + const processResolution = (request, issuer) => { + try { + reportSuccess(module.exports.resolveRequest(request, issuer)); + } + catch (error) { + reportError(error.code, error.message, error.data); + } + }; + const processRequest = (data) => { + try { + const [request, issuer] = JSON.parse(data); + processResolution(request, issuer); + } + catch (error) { + reportError(`INVALID_JSON`, error.message, error.data); + } + }; + if (process.argv.length > 2) { + if (process.argv.length !== 4) { + process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} \n`); + process.exitCode = 64; /* EX_USAGE */ + } + else { + processResolution(process.argv[2], process.argv[3]); + } + } + else { + let buffer = ''; + const decoder = new string_decoder_1.default.StringDecoder(); + process.stdin.on('data', chunk => { + buffer += decoder.write(chunk); + do { + const index = buffer.indexOf('\n'); + if (index === -1) + break; + const line = buffer.slice(0, index); + buffer = buffer.slice(index + 1); + processRequest(line); + } while (true); + }); + } +} + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const NodeFS_1 = __webpack_require__(2); +var AliasFS_1 = __webpack_require__(6); +exports.AliasFS = AliasFS_1.AliasFS; +var FakeFS_1 = __webpack_require__(5); +exports.FakeFS = FakeFS_1.FakeFS; +var CwdFS_1 = __webpack_require__(7); +exports.CwdFS = CwdFS_1.CwdFS; +var JailFS_1 = __webpack_require__(8); +exports.JailFS = JailFS_1.JailFS; +var NodeFS_2 = __webpack_require__(2); +exports.NodeFS = NodeFS_2.NodeFS; +var PosixFS_1 = __webpack_require__(9); +exports.PosixFS = PosixFS_1.PosixFS; +var ZipFS_1 = __webpack_require__(10); +exports.ZipFS = ZipFS_1.ZipFS; +var ZipOpenFS_1 = __webpack_require__(16); +exports.ZipOpenFS = ZipOpenFS_1.ZipOpenFS; +function wrapSync(fn) { + return fn; +} +function wrapAsync(fn) { + return function (...args) { + const cb = typeof args[args.length - 1] === `function` + ? args.pop() + : null; + setImmediate(() => { + let error, result; + try { + result = fn(...args); + } + catch (caught) { + error = caught; + } + cb(error, result); + }); + }; +} +function patchFs(patchedFs, fakeFs) { + const SYNC_IMPLEMENTATIONS = new Set([ + `accessSync`, + `createReadStream`, + `chmodSync`, + `copyFileSync`, + `lstatSync`, + `openSync`, + `readlinkSync`, + `readFileSync`, + `readdirSync`, + `readlinkSync`, + `realpathSync`, + `rmdirSync`, + `statSync`, + `symlinkSync`, + `unlinkSync`, + `utimesSync`, + `writeFileSync`, + ]); + const ASYNC_IMPLEMENTATIONS = new Set([ + `accessPromise`, + `chmodPromise`, + `copyFilePromise`, + `lstatPromise`, + `openPromise`, + `readdirPromise`, + `realpathPromise`, + `readFilePromise`, + `readdirPromise`, + `readlinkPromise`, + `rmdirPromise`, + `statPromise`, + `symlinkPromise`, + `unlinkPromise`, + `utimesPromise`, + `writeFilePromise`, + ]); + patchedFs.existsSync = (p) => { + try { + return fakeFs.existsSync(p); + } + catch (error) { + return false; + } + }; + patchedFs.exists = (p, callback) => { + fakeFs.existsPromise(p).then(result => { + if (callback) { + callback(result); + } + }, () => { + if (callback) { + callback(false); + } + }); + }; + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const fakeImpl = fakeFs[fnName].bind(fakeFs); + const origName = fnName.replace(/Promise$/, ``); + patchedFs[origName] = (...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { }; + fakeImpl(...args).then((result) => { + callback(undefined, result); + }, (error) => { + callback(error); + }); + }; + } + for (const fnName of SYNC_IMPLEMENTATIONS) { + const fakeImpl = fakeFs[fnName].bind(fakeFs); + const origName = fnName; + patchedFs[origName] = fakeImpl; + } + patchedFs.realpathSync.native = patchedFs.realpathSync; + patchedFs.realpath.native = patchedFs.realpath; +} +exports.patchFs = patchFs; +function extendFs(realFs, fakeFs) { + const patchedFs = Object.create(realFs); + patchFs(patchedFs, fakeFs); + return patchedFs; +} +exports.extendFs = extendFs; +exports.xfs = new NodeFS_1.NodeFS(); + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(__webpack_require__(3)); +const path_1 = __webpack_require__(4); +const FakeFS_1 = __webpack_require__(5); +const PORTABLE_PATH_PREFIX = `/mnt/`; +const PORTABLE_PREFIX_REGEXP = /^\/mnt\/([a-z])(?:\/(.*))?$/; +class NodeFS extends FakeFS_1.FakeFS { + constructor(realFs = fs_1.default) { + super(); + this.realFs = realFs; + } + getRealPath() { + return `/`; + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(NodeFS.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(NodeFS.fromPortablePath(p), flags, mode); + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.realFs.createReadStream(NodeFS.fromPortablePath(p), opts); + } + createWriteStream(p, opts) { + return this.realFs.createWriteStream(NodeFS.fromPortablePath(p), opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(NodeFS.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then(path => { + return NodeFS.toPortablePath(path); + }); + } + realpathSync(p) { + return NodeFS.toPortablePath(this.realFs.realpathSync(NodeFS.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise(resolve => { + this.realFs.exists(NodeFS.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(NodeFS.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(NodeFS.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(NodeFS.fromPortablePath(p)); + } + async statPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.stat(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + statSync(p) { + return this.realFs.statSync(NodeFS.fromPortablePath(p)); + } + async lstatPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.lstat(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + lstatSync(p) { + return this.realFs.lstatSync(NodeFS.fromPortablePath(p)); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(NodeFS.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(NodeFS.fromPortablePath(p), mask); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(NodeFS.fromPortablePath(oldP), NodeFS.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(NodeFS.fromPortablePath(oldP), NodeFS.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(NodeFS.fromPortablePath(sourceP), NodeFS.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(NodeFS.fromPortablePath(sourceP), NodeFS.fromPortablePath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.writeFile(NodeFS.fromPortablePath(p), content, opts, this.makeCallback(resolve, reject)); + } + else { + this.realFs.writeFile(NodeFS.fromPortablePath(p), content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + if (opts) { + this.realFs.writeFileSync(NodeFS.fromPortablePath(p), content, opts); + } + else { + this.realFs.writeFileSync(NodeFS.fromPortablePath(p), content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(NodeFS.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(NodeFS.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(NodeFS.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p) { + return this.realFs.mkdirSync(NodeFS.fromPortablePath(p)); + } + async rmdirPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.rmdir(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + rmdirSync(p) { + return this.realFs.rmdirSync(NodeFS.fromPortablePath(p)); + } + async symlinkPromise(target, p) { + const type = target.endsWith(`/`) ? `dir` : `file`; + return await new Promise((resolve, reject) => { + this.realFs.symlink(NodeFS.fromPortablePath(target.replace(/\/+$/, ``)), NodeFS.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p) { + const type = target.endsWith(`/`) ? `dir` : `file`; + return this.realFs.symlinkSync(NodeFS.fromPortablePath(target.replace(/\/+$/, ``)), NodeFS.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + this.realFs.readFile(NodeFS.fromPortablePath(p), encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + return this.realFs.readFileSync(NodeFS.fromPortablePath(p), encoding); + } + async readdirPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readdir(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + readdirSync(p) { + return this.realFs.readdirSync(NodeFS.fromPortablePath(p)); + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then(path => { + return NodeFS.toPortablePath(path); + }); + } + readlinkSync(p) { + return NodeFS.toPortablePath(this.realFs.readlinkSync(NodeFS.fromPortablePath(p))); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } + else { + resolve(result); + } + }; + } + static fromPortablePath(p) { + if (process.platform !== `win32`) + return p; + // Path should look like "/mnt/n/berry/scripts/plugin-pack.js" + // And transform to "N:\berry/scripts/plugin-pack.js" + const match = p.match(PORTABLE_PREFIX_REGEXP); + if (!match) + return p; + const [, drive, pathWithoutPrefix = ''] = match; + const windowsPath = pathWithoutPrefix.replace(/\//g, '\\'); + return `${drive.toUpperCase()}:\\${windowsPath}`; + } + static toPortablePath(p) { + if (process.platform !== `win32`) + return p; + // Path should look like "N:\berry/scripts/plugin-pack.js" + // And transform to "/mnt/n/berry/scripts/plugin-pack.js" + // Skip if the path is already portable + if (p.startsWith(PORTABLE_PATH_PREFIX)) + return p; + const { root } = path_1.win32.parse(p); + // If relative path, just replace win32 slashes by posix slashes + if (!root) + return p.replace(/\\/g, '/'); + const driveLetter = root[0].toLowerCase(); + const pathWithoutRoot = p.substr(root.length); + const posixPath = pathWithoutRoot.replace(/\\/g, '/'); + return `${PORTABLE_PATH_PREFIX}${driveLetter}/${posixPath}`; + } +} +exports.NodeFS = NodeFS; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + +module.exports = require("fs"); + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + +module.exports = require("path"); + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __webpack_require__(4); +class FakeFS { + resolve(p) { + return path_1.posix.resolve(`/`, p); + } + async removePromise(p) { + let stat; + try { + stat = await this.lstatPromise(p); + } + catch (error) { + if (error.code === `ENOENT`) { + return; + } + else { + throw error; + } + } + if (stat.isDirectory()) { + for (const entry of await this.readdirPromise(p)) + await this.removePromise(path_1.posix.resolve(p, entry)); + // 5 gives 1s worth of retries at worst + for (let t = 0; t < 5; ++t) { + try { + await this.rmdirPromise(p); + break; + } + catch (error) { + if (error.code === `EBUSY` || error.code === `ENOTEMPTY`) { + await new Promise(resolve => setTimeout(resolve, t * 100)); + continue; + } + else { + throw error; + } + } + } + } + else { + await this.unlinkPromise(p); + } + } + removeSync(p) { + let stat; + try { + stat = this.lstatSync(p); + } + catch (error) { + if (error.code === `ENOENT`) { + return; + } + else { + throw error; + } + } + if (stat.isDirectory()) { + for (const entry of this.readdirSync(p)) + this.removeSync(path_1.posix.resolve(p, entry)); + this.rmdirSync(p); + } + else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === `/`) + return; + const parts = p.split(`/`); + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(`/`); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } + catch (error) { + if (error.code === `EEXIST`) { + continue; + } + else { + throw error; + } + } + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } + } + } + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === `/`) + return; + const parts = p.split(`/`); + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(`/`); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } + catch (error) { + if (error.code === `EEXIST`) { + continue; + } + else { + throw error; + } + } + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } + } + } + } + async copyPromise(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = await baseFs.lstatPromise(source); + if (stat.isDirectory()) { + await this.mkdirpPromise(destination); + const directoryListing = await baseFs.readdirPromise(source); + await Promise.all(directoryListing.map(entry => { + return this.copyPromise(path_1.posix.join(destination, entry), path_1.posix.join(source, entry), { baseFs, overwrite }); + })); + } + else if (stat.isFile()) { + if (!await this.existsPromise(destination) || overwrite) { + const content = await baseFs.readFilePromise(source); + await this.writeFilePromise(destination, content); + } + } + else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 0o777; + await this.chmodPromise(destination, mode); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(path_1.posix.join(destination, entry), path_1.posix.join(source, entry), { baseFs, overwrite }); + } + } + else if (stat.isFile()) { + if (!this.existsSync(destination) || overwrite) { + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } + else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 0o777; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content) { + try { + const current = await this.readFilePromise(p, `utf8`); + if (current === content) { + return; + } + } + catch (error) { + // ignore errors, no big deal + } + await this.writeFilePromise(p, content); + } + changeFileSync(p, content) { + try { + const current = this.readFileSync(p, `utf8`); + if (current === content) { + return; + } + } + catch (error) { + // ignore errors, no big deal + } + this.writeFileSync(p, content); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } + catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } + else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } + catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } + else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.lock`; + const interval = 1000 / 60; + const timeout = Date.now() + 60 * 1000; + let fd = null; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } + catch (error) { + if (error.code === `EEXIST`) { + if (Date.now() < timeout) { + await new Promise(resolve => setTimeout(resolve, interval)); + } + else { + throw new Error(`Couldn't acquire a lock in a reasonable time (${timeout / 1000}s)`); + } + } + else { + throw error; + } + } + } + try { + await callback(); + } + finally { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } + } +} +exports.FakeFS = FakeFS; +; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const FakeFS_1 = __webpack_require__(5); +class AliasFS extends FakeFS_1.FakeFS { + constructor(target, { baseFs }) { + super(); + this.target = target; + this.baseFs = baseFs; + } + getRealPath() { + return this.target; + } + getBaseFs() { + return this.baseFs; + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(p, flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(p, flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p, opts); + } + async realpathPromise(p) { + return await this.baseFs.realpathPromise(p); + } + realpathSync(p) { + return this.baseFs.realpathSync(p); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(p); + } + existsSync(p) { + return this.baseFs.existsSync(p); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(p, mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(p, mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(p); + } + statSync(p) { + return this.baseFs.statSync(p); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(p); + } + lstatSync(p) { + return this.baseFs.lstatSync(p); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(p, mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(p, mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(oldP, newP); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(oldP, newP); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(sourceP, destP, flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(p, content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(p, content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(p); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(p); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(p, atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(p); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(p); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(p); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(p); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, p); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, p); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(p, encoding); + default: + return await this.baseFs.readFilePromise(p, encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(p, encoding); + default: + return this.baseFs.readFileSync(p, encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(p); + } + readdirSync(p) { + return this.baseFs.readdirSync(p); + } + async readlinkPromise(p) { + return await this.baseFs.readlinkPromise(p); + } + readlinkSync(p) { + return this.baseFs.readlinkSync(p); + } +} +exports.AliasFS = AliasFS; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __webpack_require__(4); +const FakeFS_1 = __webpack_require__(5); +const NodeFS_1 = __webpack_require__(2); +class CwdFS extends FakeFS_1.FakeFS { + constructor(target, { baseFs = new NodeFS_1.NodeFS() } = {}) { + super(); + this.target = target; + this.baseFs = baseFs; + } + getRealPath() { + return path_1.posix.resolve(this.baseFs.getRealPath(), this.target); + } + getTarget() { + return this.target; + } + getBaseFs() { + return this.baseFs; + } + resolve(p) { + return this.baseFs.resolve(this.fromCwdPath(p)); + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(this.fromCwdPath(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.fromCwdPath(p), flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(this.fromCwdPath(p), opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(this.fromCwdPath(p), opts); + } + async realpathPromise(p) { + return await this.baseFs.realpathPromise(this.fromCwdPath(p)); + } + realpathSync(p) { + return this.baseFs.realpathSync(this.fromCwdPath(p)); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(this.fromCwdPath(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.fromCwdPath(p)); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(this.fromCwdPath(p), mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.fromCwdPath(p), mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(this.fromCwdPath(p)); + } + statSync(p) { + return this.baseFs.statSync(this.fromCwdPath(p)); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(this.fromCwdPath(p)); + } + lstatSync(p) { + return this.baseFs.lstatSync(this.fromCwdPath(p)); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(this.fromCwdPath(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.fromCwdPath(p), mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(this.fromCwdPath(oldP), this.fromCwdPath(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.fromCwdPath(oldP), this.fromCwdPath(newP)); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(this.fromCwdPath(sourceP), this.fromCwdPath(destP), flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(this.fromCwdPath(sourceP), this.fromCwdPath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(this.fromCwdPath(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fromCwdPath(p), content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(this.fromCwdPath(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.fromCwdPath(p)); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(this.fromCwdPath(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.fromCwdPath(p), atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(this.fromCwdPath(p)); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(this.fromCwdPath(p)); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(this.fromCwdPath(p)); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(this.fromCwdPath(p)); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, this.fromCwdPath(p)); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, this.fromCwdPath(p)); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(this.fromCwdPath(p), encoding); + default: + return await this.baseFs.readFilePromise(this.fromCwdPath(p), encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(this.fromCwdPath(p), encoding); + default: + return this.baseFs.readFileSync(this.fromCwdPath(p), encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(this.fromCwdPath(p)); + } + readdirSync(p) { + return this.baseFs.readdirSync(this.fromCwdPath(p)); + } + async readlinkPromise(p) { + return await this.baseFs.readlinkPromise(this.fromCwdPath(p)); + } + readlinkSync(p) { + return this.baseFs.readlinkSync(this.fromCwdPath(p)); + } + fromCwdPath(p) { + return path_1.posix.resolve(this.getRealPath(), p); + } +} +exports.CwdFS = CwdFS; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __webpack_require__(4); +const FakeFS_1 = __webpack_require__(5); +const NodeFS_1 = __webpack_require__(2); +class JailFS extends FakeFS_1.FakeFS { + constructor(target, { baseFs = new NodeFS_1.NodeFS() } = {}) { + super(); + this.target = path_1.posix.resolve(`/`, target); + this.baseFs = baseFs; + } + getRealPath() { + return path_1.posix.resolve(this.baseFs.getRealPath(), path_1.posix.relative(`/`, this.target)); + } + getTarget() { + return this.target; + } + getBaseFs() { + return this.baseFs; + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(this.fromJailedPath(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.fromJailedPath(p), flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(this.fromJailedPath(p), opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(this.fromJailedPath(p), opts); + } + async realpathPromise(p) { + return this.toJailedPath(await this.baseFs.realpathPromise(this.fromJailedPath(p))); + } + realpathSync(p) { + return this.toJailedPath(this.baseFs.realpathSync(this.fromJailedPath(p))); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(this.fromJailedPath(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.fromJailedPath(p)); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(this.fromJailedPath(p), mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.fromJailedPath(p), mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(this.fromJailedPath(p)); + } + statSync(p) { + return this.baseFs.statSync(this.fromJailedPath(p)); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(this.fromJailedPath(p)); + } + lstatSync(p) { + return this.baseFs.lstatSync(this.fromJailedPath(p)); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(this.fromJailedPath(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.fromJailedPath(p), mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(this.fromJailedPath(oldP), this.fromJailedPath(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.fromJailedPath(oldP), this.fromJailedPath(newP)); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(this.fromJailedPath(sourceP), this.fromJailedPath(destP), flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(this.fromJailedPath(sourceP), this.fromJailedPath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(this.fromJailedPath(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fromJailedPath(p), content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(this.fromJailedPath(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.fromJailedPath(p)); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(this.fromJailedPath(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.fromJailedPath(p), atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(this.fromJailedPath(p)); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(this.fromJailedPath(p)); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(this.fromJailedPath(p)); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(this.fromJailedPath(p)); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, this.fromJailedPath(p)); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, this.fromJailedPath(p)); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(this.fromJailedPath(p), encoding); + default: + return await this.baseFs.readFilePromise(this.fromJailedPath(p), encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(this.fromJailedPath(p), encoding); + default: + return this.baseFs.readFileSync(this.fromJailedPath(p), encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(this.fromJailedPath(p)); + } + readdirSync(p) { + return this.baseFs.readdirSync(this.fromJailedPath(p)); + } + async readlinkPromise(p) { + return await this.baseFs.readlinkPromise(this.fromJailedPath(p)); + } + readlinkSync(p) { + return this.baseFs.readlinkSync(this.fromJailedPath(p)); + } + fromJailedPath(p) { + const normalized = path_1.posix.normalize(p); + if (path_1.posix.isAbsolute(p)) + return path_1.posix.resolve(this.target, path_1.posix.relative(`/`, p)); + if (normalized.match(/^\.\.\//)) + throw new Error(`Resolving this path (${p}) would escape the jail`); + return path_1.posix.resolve(this.target, p); + } + toJailedPath(p) { + return path_1.posix.resolve(`/`, path_1.posix.relative(this.target, p)); + } +} +exports.JailFS = JailFS; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const FakeFS_1 = __webpack_require__(5); +const NodeFS_1 = __webpack_require__(2); +class PosixFS extends FakeFS_1.FakeFS { + constructor(baseFs) { + super(); + this.baseFs = baseFs; + } + getRealPath() { + return NodeFS_1.NodeFS.fromPortablePath(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(NodeFS_1.NodeFS.toPortablePath(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(NodeFS_1.NodeFS.toPortablePath(p), flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(NodeFS_1.NodeFS.toPortablePath(p), opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(NodeFS_1.NodeFS.toPortablePath(p), opts); + } + async realpathPromise(p) { + return NodeFS_1.NodeFS.fromPortablePath(await this.baseFs.realpathPromise(NodeFS_1.NodeFS.toPortablePath(p))); + } + realpathSync(p) { + return NodeFS_1.NodeFS.fromPortablePath(this.baseFs.realpathSync(NodeFS_1.NodeFS.toPortablePath(p))); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + existsSync(p) { + return this.baseFs.existsSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(NodeFS_1.NodeFS.toPortablePath(p), mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(NodeFS_1.NodeFS.toPortablePath(p), mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + statSync(p) { + return this.baseFs.statSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + lstatSync(p) { + return this.baseFs.lstatSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(NodeFS_1.NodeFS.toPortablePath(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(NodeFS_1.NodeFS.toPortablePath(p), mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(NodeFS_1.NodeFS.toPortablePath(oldP), NodeFS_1.NodeFS.toPortablePath(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(NodeFS_1.NodeFS.toPortablePath(oldP), NodeFS_1.NodeFS.toPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(NodeFS_1.NodeFS.toPortablePath(sourceP), NodeFS_1.NodeFS.toPortablePath(destP), flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(NodeFS_1.NodeFS.toPortablePath(sourceP), NodeFS_1.NodeFS.toPortablePath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(NodeFS_1.NodeFS.toPortablePath(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(NodeFS_1.NodeFS.toPortablePath(p), content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(NodeFS_1.NodeFS.toPortablePath(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(NodeFS_1.NodeFS.toPortablePath(p), atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, NodeFS_1.NodeFS.toPortablePath(p)); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, NodeFS_1.NodeFS.toPortablePath(p)); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(NodeFS_1.NodeFS.toPortablePath(p), encoding); + default: + return await this.baseFs.readFilePromise(NodeFS_1.NodeFS.toPortablePath(p), encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(NodeFS_1.NodeFS.toPortablePath(p), encoding); + default: + return this.baseFs.readFileSync(NodeFS_1.NodeFS.toPortablePath(p), encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + readdirSync(p) { + return this.baseFs.readdirSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async readlinkPromise(p) { + return NodeFS_1.NodeFS.fromPortablePath(await this.baseFs.readlinkPromise(NodeFS_1.NodeFS.toPortablePath(p))); + } + readlinkSync(p) { + return NodeFS_1.NodeFS.fromPortablePath(this.baseFs.readlinkSync(NodeFS_1.NodeFS.toPortablePath(p))); + } +} +exports.PosixFS = PosixFS; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const libzip_1 = __importDefault(__webpack_require__(11)); +const fs_1 = __webpack_require__(3); +const path_1 = __webpack_require__(4); +const stream_1 = __webpack_require__(14); +const util_1 = __webpack_require__(15); +const FakeFS_1 = __webpack_require__(5); +const NodeFS_1 = __webpack_require__(2); +const S_IFMT = 0o170000; +const S_IFDIR = 0o040000; +const S_IFREG = 0o100000; +const S_IFLNK = 0o120000; +class StatEntry { + constructor() { + this.dev = 0; + this.ino = 0; + this.mode = 0; + this.nlink = 1; + this.rdev = 0; + this.blocks = 1; + } + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & S_IFMT) === S_IFDIR; + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & S_IFMT) === S_IFREG; + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & S_IFMT) === S_IFLNK; + } +} +function toUnixTimestamp(time) { + if (typeof time === 'string' && String(+time) === time) { + return +time; + } + // @ts-ignore + if (Number.isFinite(time)) { + if (time < 0) { + return Date.now() / 1000; + } + else { + return time; + } + } + if (util_1.isDate(time)) { + // convert to 123.456 UNIX timestamp + // @ts-ignore + return time.getTime() / 1000; + } + throw new Error(`Invalid time`); +} +class ZipFS extends FakeFS_1.FakeFS { + constructor(p, { baseFs = new NodeFS_1.NodeFS(), create = false, readOnly = false, stats } = {}) { + super(); + this.listings = new Map(); + this.entries = new Map(); + this.ready = false; + this.path = p; + this.baseFs = baseFs; + if (stats) { + this.stats = stats; + } + else { + try { + this.stats = this.baseFs.statSync(p); + } + catch (error) { + if (error.code === `ENOENT` && create) { + this.stats = Object.assign(new StatEntry(), { uid: 0, gid: 0, size: 0, blksize: 0, atimeMs: 0, mtimeMs: 0, ctimeMs: 0, birthtimeMs: 0, atime: new Date(0), mtime: new Date(0), ctime: new Date(0), birthtime: new Date(0), mode: S_IFREG | 0o644 }); + } + else { + throw error; + } + } + } + const errPtr = libzip_1.default.malloc(4); + try { + let flags = 0; + if (create) + flags |= libzip_1.default.ZIP_CREATE | libzip_1.default.ZIP_TRUNCATE; + if (readOnly) + flags |= libzip_1.default.ZIP_RDONLY; + this.zip = libzip_1.default.open(NodeFS_1.NodeFS.fromPortablePath(p), flags, errPtr); + if (this.zip === 0) { + const error = libzip_1.default.struct.errorS(); + libzip_1.default.error.initWithCode(error, libzip_1.default.getValue(errPtr, `i32`)); + throw new Error(libzip_1.default.error.strerror(error)); + } + } + finally { + libzip_1.default.free(errPtr); + } + const entryCount = libzip_1.default.getNumEntries(this.zip, 0); + this.listings.set(`/`, new Set()); + for (let t = 0; t < entryCount; ++t) { + const raw = libzip_1.default.getName(this.zip, t, 0); + if (path_1.posix.isAbsolute(raw)) + continue; + const p = path_1.posix.resolve(`/`, raw); + this.registerEntry(p, t); + // If the raw path is a directory, register it + // to prevent empty folder being skipped + if (raw.endsWith('/')) { + this.registerListing(p); + } + } + this.ready = true; + } + getRealPath() { + return this.path; + } + saveAndClose() { + if (!this.ready) + throw Object.assign(new Error(`EBUSY: archive closed, close`), { code: `EBUSY` }); + const previousMod = this.baseFs.existsSync(this.path) + ? this.baseFs.statSync(this.path).mode & 0o777 + : null; + const rc = libzip_1.default.close(this.zip); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + // Libzip overrides the chmod when writing the archive, which is a weird + // behavior I don't totally understand (plus the umask seems bogus in some + // weird cases - maybe related to emscripten?) + // + // See also https://github.com/nih-at/libzip/issues/77 + if (previousMod !== null && previousMod !== (this.baseFs.statSync(this.path).mode & 0o777)) + this.baseFs.chmodSync(this.path, previousMod); + this.ready = false; + } + discardAndClose() { + libzip_1.default.discard(this.zip); + this.ready = false; + } + async openPromise(p, flags, mode) { + return this.openSync(p, flags, mode); + } + openSync(p, flags, mode) { + throw new Error(`Unimplemented`); + } + async closePromise(fd) { + this.closeSync(fd); + } + closeSync(fd) { + throw new Error(`Unimplemented`); + } + createReadStream(p, { encoding } = {}) { + const stream = Object.assign(new stream_1.PassThrough(), { + bytesRead: 0, + path: p, + close: () => { + clearImmediate(immediate); + } + }); + const immediate = setImmediate(() => { + try { + const data = this.readFileSync(p, encoding); + stream.bytesRead = data.length; + stream.write(data); + stream.end(); + } + catch (error) { + stream.emit(`error`, error); + stream.end(); + } + }); + return stream; + } + createWriteStream(p, { encoding } = {}) { + const stream = Object.assign(new stream_1.PassThrough(), { + bytesWritten: 0, + path: p, + close: () => { + stream.end(); + }, + }); + const chunks = []; + stream.on(`data`, chunk => { + const chunkBuffer = Buffer.from(chunk); + stream.bytesWritten += chunkBuffer.length; + chunks.push(chunkBuffer); + }); + stream.on(`end`, () => { + this.writeFileSync(p, Buffer.concat(chunks), encoding); + }); + return stream; + } + async realpathPromise(p) { + return this.realpathSync(p); + } + realpathSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, lstat '${p}'`), { code: `ENOENT` }); + return resolvedP; + } + async existsPromise(p) { + return this.existsSync(p); + } + existsSync(p) { + let resolvedP; + try { + resolvedP = this.resolveFilename(`stat '${p}'`, p); + } + catch (error) { + return false; + } + return this.entries.has(resolvedP) || this.listings.has(resolvedP); + } + async accessPromise(p, mode) { + return this.accessSync(p, mode); + } + accessSync(p, mode) { + const resolvedP = this.resolveFilename(`access '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + throw Object.assign(new Error(`ENOENT: no such file or directory, access '${p}'`), { code: `ENOENT` }); + } + } + async statPromise(p) { + return this.statSync(p); + } + statSync(p) { + const resolvedP = this.resolveFilename(`stat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, stat '${p}'`), { code: `ENOENT` }); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, stat '${p}'`), { code: `ENOTDIR` }); + return this.statImpl(`stat '${p}'`, resolvedP); + } + async lstatPromise(p) { + return this.lstatSync(p); + } + lstatSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, lstat '${p}'`), { code: `ENOENT` }); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, lstat '${p}'`), { code: `ENOTDIR` }); + return this.statImpl(`lstat '${p}'`, resolvedP); + } + statImpl(reason, p) { + if (this.listings.has(p)) { + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = 0; + const blksize = 512; + const blocks = 0; + const atimeMs = this.stats.mtimeMs; + const birthtimeMs = this.stats.mtimeMs; + const ctimeMs = this.stats.mtimeMs; + const mtimeMs = this.stats.mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = S_IFDIR | 0o755; + return Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode }); + } + const entry = this.entries.get(p); + if (entry !== undefined) { + const stat = libzip_1.default.struct.statS(); + const rc = libzip_1.default.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = (libzip_1.default.struct.statSize(stat) >>> 0); + const blksize = 512; + const blocks = Math.ceil(size / blksize); + const mtimeMs = (libzip_1.default.struct.statMtime(stat) >>> 0) * 1000; + const atimeMs = mtimeMs; + const birthtimeMs = mtimeMs; + const ctimeMs = mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = this.getUnixMode(entry, S_IFREG | 0o644); + return Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode }); + } + throw new Error(`Unreachable`); + } + getUnixMode(index, defaultMode) { + const rc = libzip_1.default.file.getExternalAttributes(this.zip, index, 0, 0, libzip_1.default.uint08S, libzip_1.default.uint32S); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const opsys = libzip_1.default.getValue(libzip_1.default.uint08S, `i8`) >>> 0; + if (opsys !== libzip_1.default.ZIP_OPSYS_UNIX) + return defaultMode; + return libzip_1.default.getValue(libzip_1.default.uint32S, `i32`) >>> 16; + } + registerListing(p) { + let listing = this.listings.get(p); + if (listing) + return listing; + const parentListing = this.registerListing(path_1.posix.dirname(p)); + listing = new Set(); + parentListing.add(path_1.posix.basename(p)); + this.listings.set(p, listing); + return listing; + } + registerEntry(p, index) { + const parentListing = this.registerListing(path_1.posix.dirname(p)); + parentListing.add(path_1.posix.basename(p)); + this.entries.set(p, index); + } + resolveFilename(reason, p, resolveLastComponent = true) { + if (!this.ready) + throw Object.assign(new Error(`EBUSY: archive closed, ${reason}`), { code: `EBUSY` }); + let resolvedP = path_1.posix.resolve(`/`, p); + if (resolvedP === `/`) + return `/`; + while (true) { + const parentP = this.resolveFilename(reason, path_1.posix.dirname(resolvedP), true); + const isDir = this.listings.has(parentP); + const doesExist = this.entries.has(parentP); + if (!isDir && !doesExist) + throw Object.assign(new Error(`ENOENT: no such file or directory, ${reason}`), { code: `ENOENT` }); + if (!isDir) + throw Object.assign(new Error(`ENOTDIR: not a directory, ${reason}`), { code: `ENOTDIR` }); + resolvedP = path_1.posix.resolve(parentP, path_1.posix.basename(resolvedP)); + if (!resolveLastComponent) + break; + const index = libzip_1.default.name.locate(this.zip, resolvedP); + if (index === -1) + break; + if (this.isSymbolicLink(index)) { + const target = this.getFileSource(index).toString(); + resolvedP = path_1.posix.resolve(path_1.posix.dirname(resolvedP), target); + } + else { + break; + } + } + return resolvedP; + } + setFileSource(p, content) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content); + const buffer = libzip_1.default.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + // Copy the file into the Emscripten heap + const heap = new Uint8Array(libzip_1.default.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content); + const source = libzip_1.default.source.fromBuffer(this.zip, buffer, content.byteLength, 0, true); + if (source === 0) { + libzip_1.default.free(buffer); + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + return libzip_1.default.file.add(this.zip, path_1.posix.relative(`/`, p), source, libzip_1.default.ZIP_FL_OVERWRITE); + } + isSymbolicLink(index) { + const attrs = libzip_1.default.file.getExternalAttributes(this.zip, index, 0, 0, libzip_1.default.uint08S, libzip_1.default.uint32S); + if (attrs === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const opsys = libzip_1.default.getValue(libzip_1.default.uint08S, `i8`) >>> 0; + if (opsys !== libzip_1.default.ZIP_OPSYS_UNIX) + return false; + const attributes = libzip_1.default.getValue(libzip_1.default.uint32S, `i32`) >>> 16; + return (attributes & S_IFMT) === S_IFLNK; + } + getFileSource(index) { + const stat = libzip_1.default.struct.statS(); + const rc = libzip_1.default.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const size = libzip_1.default.struct.statSize(stat); + const buffer = libzip_1.default.malloc(size); + try { + const file = libzip_1.default.fopenIndex(this.zip, index, 0, 0); + if (file === 0) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + try { + const rc = libzip_1.default.fread(file, buffer, size, 0); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.file.getError(file))); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + const memory = libzip_1.default.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + return data; + } + finally { + libzip_1.default.fclose(file); + } + } + finally { + libzip_1.default.free(buffer); + } + } + async chmodPromise(p, mask) { + return this.chmodSync(p, mask); + } + chmodSync(p, mask) { + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + // We silently ignore chmod requests for directories + if (this.listings.has(resolvedP)) + return; + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const oldMod = this.getUnixMode(entry, S_IFREG | 0o000); + const newMod = oldMod & (~0o777) | mask; + const rc = libzip_1.default.file.setExternalAttributes(this.zip, entry, 0, 0, libzip_1.default.ZIP_OPSYS_UNIX, newMod << 16); + if (rc === -1) { + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + } + async renamePromise(oldP, newP) { + return this.renameSync(oldP, newP); + } + renameSync(oldP, newP) { + throw new Error(`Unimplemented`); + } + async copyFilePromise(sourceP, destP, flags) { + return this.copyFileSync(sourceP, destP, flags); + } + copyFileSync(sourceP, destP, flags = 0) { + if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`ENOSYS: unsupported clone operation, copyfile '${sourceP}' -> ${destP}'`), { code: `ENOSYS` }); + const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); + const indexSource = this.entries.get(resolvedSourceP); + if (typeof indexSource === `undefined`) + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), { code: `EINVAL` }); + const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); + const indexDest = this.entries.get(resolvedDestP); + if ((flags & (fs_1.constants.COPYFILE_EXCL | fs_1.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), { code: `EEXIST` }); + const source = this.getFileSource(indexSource); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + async writeFilePromise(p, content, opts) { + return this.writeFileSync(p, content, opts); + } + writeFileSync(p, content, opts) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EISDIR: illegal operation on a directory, open '${p}'`), { code: `EISDIR` }); + const index = this.entries.get(resolvedP); + if (index !== undefined && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); + let encoding = null; + if (typeof opts === `string`) + encoding = opts; + else if (typeof opts === `object` && opts.encoding) + encoding = opts.encoding; + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) { + this.registerEntry(resolvedP, newIndex); + } + } + async unlinkPromise(p) { + return this.unlinkSync(p); + } + unlinkSync(p) { + throw new Error(`Unimplemented`); + } + async utimesPromise(p, atime, mtime) { + return this.utimesSync(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + const resolvedP = this.resolveFilename(`chmod '${p}'`, p); + return this.utimesImpl(resolvedP, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.lutimesSync(p, atime, mtime); + } + lutimesSync(p, atime, mtime) { + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + return this.utimesImpl(resolvedP, mtime); + } + utimesImpl(resolvedP, mtime) { + if (this.listings.has(resolvedP)) + if (!this.entries.has(resolvedP)) + this.hydrateDirectory(resolvedP); + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const rc = libzip_1.default.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0); + if (rc === -1) { + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + } + async mkdirPromise(p) { + return this.mkdirSync(p); + } + mkdirSync(p) { + const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); + if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) + throw Object.assign(new Error(`EEXIST: file already exists, mkdir '${p}'`), { code: `EEXIST` }); + this.hydrateDirectory(resolvedP); + } + async rmdirPromise(p) { + return this.rmdirSync(p); + } + rmdirSync(p) { + throw new Error(`Unimplemented`); + } + hydrateDirectory(resolvedP) { + const index = libzip_1.default.dir.add(this.zip, path_1.posix.relative(`/`, resolvedP)); + if (index === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + this.registerListing(resolvedP); + this.registerEntry(resolvedP, index); + return index; + } + async symlinkPromise(target, p) { + return this.symlinkSync(target, p); + } + symlinkSync(target, p) { + const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EISDIR: illegal operation on a directory, symlink '${target}' -> '${p}'`), { code: `EISDIR` }); + if (this.entries.has(resolvedP)) + throw Object.assign(new Error(`EEXIST: file already exists, symlink '${target}' -> '${p}'`), { code: `EEXIST` }); + const index = this.setFileSource(resolvedP, target); + this.registerEntry(resolvedP, index); + const rc = libzip_1.default.file.setExternalAttributes(this.zip, index, 0, 0, libzip_1.default.ZIP_OPSYS_UNIX, (0o120000 | 0o777) << 16); + if (rc === -1) { + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.readFileSync(p, encoding); + default: + return this.readFileSync(p, encoding); + } + } + readFileSync(p, encoding) { + // This is messed up regarding the TS signatures + if (typeof encoding === `object`) + // @ts-ignore + encoding = encoding ? encoding.encoding : undefined; + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, open '${p}'`), { code: `ENOENT` }); + // Ensures that the last component is a directory, if the user said so (even if it is we'll throw right after with EISDIR anyway) + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, open '${p}'`), { code: `ENOTDIR` }); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EISDIR: illegal operation on a directory, read`), { code: `EISDIR` }); + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const data = this.getFileSource(entry); + return encoding ? data.toString(encoding) : data; + } + async readdirPromise(p) { + return this.readdirSync(p); + } + readdirSync(p) { + const resolvedP = this.resolveFilename(`scandir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, scandir '${p}'`), { code: `ENOENT` }); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw Object.assign(new Error(`ENOTDIR: not a directory, scandir '${p}'`), { code: `ENOTDIR` }); + return Array.from(directoryListing); + } + async readlinkPromise(p) { + return this.readlinkSync(p); + } + readlinkSync(p) { + const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, readlink '${p}'`), { code: `ENOENT` }); + // Ensure that the last component is a directory (if it is we'll throw right after with EISDIR anyway) + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, open '${p}'`), { code: `ENOTDIR` }); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EINVAL: invalid argument, readlink '${p}'`), { code: `EINVAL` }); + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const rc = libzip_1.default.file.getExternalAttributes(this.zip, entry, 0, 0, libzip_1.default.uint08S, libzip_1.default.uint32S); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const opsys = libzip_1.default.getValue(libzip_1.default.uint08S, `i8`) >>> 0; + if (opsys !== libzip_1.default.ZIP_OPSYS_UNIX) + throw Object.assign(new Error(`EINVAL: invalid argument, readlink '${p}'`), { code: `EINVAL` }); + const attributes = libzip_1.default.getValue(libzip_1.default.uint32S, `i32`) >>> 16; + if ((attributes & 0o170000) !== 0o120000) + throw Object.assign(new Error(`EINVAL: invalid argument, readlink '${p}'`), { code: `EINVAL` }); + return this.getFileSource(entry).toString(); + } +} +exports.ZipFS = ZipFS; +; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const libzip_1 = __importDefault(__webpack_require__(12)); +const number64 = [ + `number`, + `number`, +]; +exports.default = { + // Those are getters because they can change after memory growth + get HEAP8() { return libzip_1.default.HEAP8; }, + get HEAPU8() { return libzip_1.default.HEAPU8; }, + ZIP_CHECKCONS: 4, + ZIP_CREATE: 1, + ZIP_EXCL: 2, + ZIP_TRUNCATE: 8, + ZIP_RDONLY: 16, + ZIP_FL_OVERWRITE: 8192, + ZIP_OPSYS_DOS: 0x00, + ZIP_OPSYS_AMIGA: 0x01, + ZIP_OPSYS_OPENVMS: 0x02, + ZIP_OPSYS_UNIX: 0x03, + ZIP_OPSYS_VM_CMS: 0x04, + ZIP_OPSYS_ATARI_ST: 0x05, + ZIP_OPSYS_OS_2: 0x06, + ZIP_OPSYS_MACINTOSH: 0x07, + ZIP_OPSYS_Z_SYSTEM: 0x08, + ZIP_OPSYS_CPM: 0x09, + ZIP_OPSYS_WINDOWS_NTFS: 0x0a, + ZIP_OPSYS_MVS: 0x0b, + ZIP_OPSYS_VSE: 0x0c, + ZIP_OPSYS_ACORN_RISC: 0x0d, + ZIP_OPSYS_VFAT: 0x0e, + ZIP_OPSYS_ALTERNATE_MVS: 0x0f, + ZIP_OPSYS_BEOS: 0x10, + ZIP_OPSYS_TANDEM: 0x11, + ZIP_OPSYS_OS_400: 0x12, + ZIP_OPSYS_OS_X: 0x13, + uint08S: libzip_1.default._malloc(1), + uint16S: libzip_1.default._malloc(2), + uint32S: libzip_1.default._malloc(4), + uint64S: libzip_1.default._malloc(8), + malloc: libzip_1.default._malloc, + free: libzip_1.default._free, + getValue: libzip_1.default.getValue, + open: libzip_1.default.cwrap(`zip_open`, `number`, [`string`, `number`, `number`]), + close: libzip_1.default.cwrap(`zip_close`, `number`, [`number`]), + discard: libzip_1.default.cwrap(`zip_discard`, `void`, [`number`]), + getError: libzip_1.default.cwrap(`zip_get_error`, `number`, [`number`]), + getName: libzip_1.default.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), + getNumEntries: libzip_1.default.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), + stat: libzip_1.default.cwrap(`zip_stat`, `number`, [`number`, `string`, `number`, `number`]), + statIndex: libzip_1.default.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), + fopen: libzip_1.default.cwrap(`zip_fopen`, `number`, [`number`, `string`, `number`]), + fopenIndex: libzip_1.default.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), + fread: libzip_1.default.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), + fclose: libzip_1.default.cwrap(`zip_fclose`, `number`, [`number`]), + dir: { + add: libzip_1.default.cwrap(`zip_dir_add`, `number`, [`number`, `string`]), + }, + file: { + add: libzip_1.default.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), + getError: libzip_1.default.cwrap(`zip_file_get_error`, `number`, [`number`]), + getExternalAttributes: libzip_1.default.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setExternalAttributes: libzip_1.default.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setMtime: libzip_1.default.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), + }, + error: { + initWithCode: libzip_1.default.cwrap(`zip_error_init_with_code`, `void`, [`number`, `number`]), + strerror: libzip_1.default.cwrap(`zip_error_strerror`, `string`, [`number`]), + }, + name: { + locate: libzip_1.default.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]), + }, + source: { + fromBuffer: libzip_1.default.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), + }, + struct: { + stat: libzip_1.default.cwrap(`zipstruct_stat`, `number`, []), + statS: libzip_1.default.cwrap(`zipstruct_statS`, `number`, []), + statName: libzip_1.default.cwrap(`zipstruct_stat_name`, `string`, [`number`]), + statIndex: libzip_1.default.cwrap(`zipstruct_stat_index`, `number`, [`number`]), + statSize: libzip_1.default.cwrap(`zipstruct_stat_size`, `number`, [`number`]), + statMtime: libzip_1.default.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), + error: libzip_1.default.cwrap(`zipstruct_error`, `number`, []), + errorS: libzip_1.default.cwrap(`zipstruct_errorS`, `number`, []), + }, +}; + + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +var frozenFs = Object.assign({}, __webpack_require__(3)); +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=true;if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)")}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){if(!(typeof process==="object"&&"function"==="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=frozenFs;if(!nodePath)nodePath=__webpack_require__(4);filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(true){module["exports"]=Module}(function(){})("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));(function(){})("unhandledRejection",abort);Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else{throw new Error("environment detection error")}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;assert(typeof Module["memoryInitializerPrefixURL"]==="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]==="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]==="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]==="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");stackSave=stackRestore=stackAlloc=(function(){abort("cannot use the stack before compiled code is ready to run, and has provided stack access")});function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})};var functionPointers=new Array(0);var tempRet0=0;var setTempRet0=(function(value){tempRet0=value});var GLOBAL_BASE=1024;function getSafeHeapType(bytes,isFloat){switch(bytes){case 1:return"i8";case 2:return"i16";case 4:return isFloat?"float":"i32";case 8:return"double";default:assert(0)}}function SAFE_HEAP_STORE(dest,value,bytes,isFloat){if(dest<=0)abort("segmentation fault storing "+bytes+" bytes to address "+dest);if(dest%bytes!==0)abort("alignment error storing to address "+dest+", which was expected to be aligned to a multiple of "+bytes);if(dest+bytes>HEAP32[DYNAMICTOP_PTR>>2])abort("segmentation fault, exceeded the top of the available dynamic heap when storing "+bytes+" bytes to address "+dest+". DYNAMICTOP="+HEAP32[DYNAMICTOP_PTR>>2]);assert(DYNAMICTOP_PTR);assert(HEAP32[DYNAMICTOP_PTR>>2]<=TOTAL_MEMORY);setValue(dest,value,getSafeHeapType(bytes,isFloat),1)}function SAFE_HEAP_STORE_D(dest,value,bytes){SAFE_HEAP_STORE(dest,value,bytes,true)}function SAFE_HEAP_LOAD(dest,bytes,unsigned,isFloat){if(dest<=0)abort("segmentation fault loading "+bytes+" bytes from address "+dest);if(dest%bytes!==0)abort("alignment error loading from address "+dest+", which was expected to be aligned to a multiple of "+bytes);if(dest+bytes>HEAP32[DYNAMICTOP_PTR>>2])abort("segmentation fault, exceeded the top of the available dynamic heap when loading "+bytes+" bytes from address "+dest+". DYNAMICTOP="+HEAP32[DYNAMICTOP_PTR>>2]);assert(DYNAMICTOP_PTR);assert(HEAP32[DYNAMICTOP_PTR>>2]<=TOTAL_MEMORY);var type=getSafeHeapType(bytes,isFloat);var ret=getValue(dest,type,1);if(unsigned)ret=unSign(ret,parseInt(type.substr(1)),1);return ret}function SAFE_HEAP_LOAD_D(dest,bytes,unsigned){return SAFE_HEAP_LOAD(dest,bytes,unsigned,true)}function segfault(){abort("segmentation fault")}function alignfault(){abort("alignment fault")}var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){function convertReturnValue(ret){if(returnType==="string")return Pointer_stringify(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}else{switch(type){case"i1":SAFE_HEAP_STORE(ptr|0,value|0,1);break;case"i8":SAFE_HEAP_STORE(ptr|0,value|0,1);break;case"i16":SAFE_HEAP_STORE(ptr|0,value|0,2);break;case"i32":SAFE_HEAP_STORE(ptr|0,value|0,4);break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/4294967296)>>>0:0)],SAFE_HEAP_STORE(ptr|0,tempI64[0]|0,4),SAFE_HEAP_STORE(ptr+4|0,tempI64[1]|0,4);break;case"float":SAFE_HEAP_STORE_D(ptr|0,Math_fround(value),4);break;case"double":SAFE_HEAP_STORE_D(ptr|0,+value,8);break;default:abort("invalid type for setValue: "+type)}}}function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";if(noSafe){switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}}else{switch(type){case"i1":return SAFE_HEAP_LOAD(ptr|0,1,0)|0;case"i8":return SAFE_HEAP_LOAD(ptr|0,1,0)|0;case"i16":return SAFE_HEAP_LOAD(ptr|0,2,0)|0;case"i32":return SAFE_HEAP_LOAD(ptr|0,4,0)|0;case"i64":return SAFE_HEAP_LOAD(ptr|0,8,0)|0;case"float":return Math_fround(SAFE_HEAP_LOAD_D(ptr|0,4,0));case"double":return+SAFE_HEAP_LOAD_D(ptr|0,8,0);default:abort("invalid type for getValue: "+type)}}return null}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE=1024,STACK_BASE=22720,STACK_MAX=5265600,DYNAMIC_BASE=5265600,DYNAMICTOP_PTR=22464;assert(STACK_BASE%16===0,"stack must start aligned");assert(DYNAMIC_BASE%16===0,"heap must start aligned");function writeStackCookie(){assert((STACK_MAX&3)==0);HEAPU32[(STACK_MAX>>2)-1]=34821223;HEAPU32[(STACK_MAX>>2)-2]=2310721022}function checkStackCookie(){if(HEAPU32[(STACK_MAX>>2)-1]!=34821223||HEAPU32[(STACK_MAX>>2)-2]!=2310721022){abort("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x"+HEAPU32[(STACK_MAX>>2)-2].toString(16)+" "+HEAPU32[(STACK_MAX>>2)-1].toString(16))}if(HEAP32[0]!==1668509029)throw"Runtime error: The application has corrupted its heap memory area (address zero)!"}function abortStackOverflow(allocSize){abort("Stack overflow! Attempted to allocate "+allocSize+" bytes on the stack, but stack has only "+(STACK_MAX-stackSave()+allocSize)+" bytes available!")}function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){assert(HEAP32[DYNAMICTOP_PTR>>2]>TOTAL_MEMORY);var PAGE_MULTIPLE=65536;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){err("Cannot enlarge memory, asked to go up to "+HEAP32[DYNAMICTOP_PTR>>2]+" bytes, but the limit is "+LIMIT+" bytes!");return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT);if(TOTAL_MEMORY===OLD_TOTAL_MEMORY){warnOnce("Cannot ask for more memory since we reached the practical limit in browsers (which is just below 2GB), so the request would have failed. Requesting only "+TOTAL_MEMORY)}}}var start=Date.now();var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){err("Failed to grow the heap from "+OLD_TOTAL_MEMORY+" bytes to "+TOTAL_MEMORY+" bytes, not enough memory!");if(replacement){err("Expected to get back a buffer of size "+TOTAL_MEMORY+" bytes, but instead got back a buffer of size "+replacement.byteLength)}TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=5242880;if(Module["TOTAL_STACK"])assert(TOTAL_STACK===Module["TOTAL_STACK"],"the stack size can no longer be determined at runtime");var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY>2]=DYNAMIC_BASE;function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw"Runtime error: expected the system to be little-endian!";function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){checkStackCookie();if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){checkStackCookie();callRuntimeCallbacks(__ATMAIN__)}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i=0){return value}return bits<=32?2*Math.abs(1<=0){err("Memory size incompatibility issues may be due to changing TOTAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set TOTAL_MEMORY at runtime to something smaller than it was at compile time).")}return false}receiveInstance(instance,module);return exports}Module["asmPreload"]=Module["asm"];var wasmReallocBuffer=(function(size){var PAGE_MULTIPLE=65536;size=alignUp(size,PAGE_MULTIPLE);var old=Module["buffer"];var oldSize=old.byteLength;try{var result=Module["wasmMemory"].grow((size-oldSize)/wasmPageSize);if(result!==(-1|0)){return Module["buffer"]=Module["wasmMemory"].buffer}else{return null}}catch(e){console.error("Module.reallocBuffer: Attempted to grow from "+oldSize+" bytes to "+size+" bytes, but got error: "+e);return null}});Module["reallocBuffer"]=(function(size){return wasmReallocBuffer(size)});Module["asm"]=(function(global,env,providedBuffer){if(!env["table"]){assert(Module["wasmTableSize"]!==undefined);var TABLE_SIZE=Module["wasmTableSize"];var MAX_TABLE_SIZE=Module["wasmMaxTableSize"];if(typeof WebAssembly==="object"&&typeof WebAssembly.Table==="function"){if(MAX_TABLE_SIZE!==undefined){env["table"]=new WebAssembly.Table({"initial":TABLE_SIZE,"maximum":MAX_TABLE_SIZE,"element":"anyfunc"})}else{env["table"]=new WebAssembly.Table({"initial":TABLE_SIZE,element:"anyfunc"})}}else{env["table"]=new Array(TABLE_SIZE)}Module["wasmTable"]=env["table"]}if(!env["__memory_base"]){env["__memory_base"]=Module["STATIC_BASE"]}if(!env["__table_base"]){env["__table_base"]=0}var exports=createWasm(global,env,providedBuffer);assert(exports,"binaryen setup failed (no wasm support?)");return exports})}integrateWasmJS();STATIC_BASE=GLOBAL_BASE;__ATINIT__.push({func:(function(){___emscripten_environ_constructor()})});var STATIC_BUMP=21696;Module["STATIC_BASE"]=STATIC_BASE;Module["STATIC_BUMP"]=STATIC_BUMP;var tempDoublePtr=22704;assert(tempDoublePtr%8==0);var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);SAFE_HEAP_STORE(envPtr|0,poolPtr|0,4);SAFE_HEAP_STORE(environ|0,envPtr|0,4)}else{envPtr=SAFE_HEAP_LOAD(environ|0,4,0)|0;poolPtr=SAFE_HEAP_LOAD(envPtr|0,4,0)|0}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var NODERAWFS={lookupPath:(function(path){return{path:path,node:{mode:NODEFS.getMode(path)}}}),createStandardStreams:(function(){FS.streams[0]={fd:0,nfd:0,position:0,path:"",flags:0,tty:true,seekable:false};for(var i=1;i<3;i++){FS.streams[i]={fd:i,nfd:i,position:0,path:"",flags:577,tty:true,seekable:false}}}),cwd:(function(){return process.cwd()}),chdir:(function(){process.chdir.apply(void 0,arguments)}),mknod:(function(path,mode){if(FS.isDir(path)){fs.mkdirSync(path,mode)}else{fs.writeFileSync(path,"",{mode:mode})}}),mkdir:(function(){fs.mkdirSync.apply(void 0,arguments)}),symlink:(function(){fs.symlinkSync.apply(void 0,arguments)}),rename:(function(){fs.renameSync.apply(void 0,arguments)}),rmdir:(function(){fs.rmdirSync.apply(void 0,arguments)}),readdir:(function(){fs.readdirSync.apply(void 0,arguments)}),unlink:(function(){fs.unlinkSync.apply(void 0,arguments)}),readlink:(function(){return fs.readlinkSync.apply(void 0,arguments)}),stat:(function(){return fs.statSync.apply(void 0,arguments)}),lstat:(function(){return fs.lstatSync.apply(void 0,arguments)}),chmod:(function(){fs.chmodSync.apply(void 0,arguments)}),fchmod:(function(){fs.fchmodSync.apply(void 0,arguments)}),chown:(function(){fs.chownSync.apply(void 0,arguments)}),fchown:(function(){fs.fchownSync.apply(void 0,arguments)}),truncate:(function(){fs.truncateSync.apply(void 0,arguments)}),ftruncate:(function(){fs.ftruncateSync.apply(void 0,arguments)}),utime:(function(){fs.utimesSync.apply(void 0,arguments)}),open:(function(path,flags,mode,suggestFD){if(typeof flags==="string"){flags=VFS.modeStringToFlags(flags)}var nfd=fs.openSync(path,NODEFS.flagsForNode(flags),mode);var fd=suggestFD!=null?suggestFD:FS.nextfd(nfd);var stream={fd:fd,nfd:nfd,position:0,path:path,flags:flags,seekable:true};FS.streams[fd]=stream;return stream}),close:(function(stream){if(!stream.stream_ops){fs.closeSync(stream.nfd)}FS.closeStream(stream.fd)}),llseek:(function(stream,offset,whence){if(stream.stream_ops){return VFS.llseek(stream,offset,whence)}var position=offset;if(whence===1){position+=stream.position}else if(whence===2){position+=fs.fstatSync(stream.nfd).size}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}stream.position=position;return position}),read:(function(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.read(stream,buffer,offset,length,position)}var seeking=typeof position!=="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesRead=fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.write(stream,buffer,offset,length,position)}if(stream.flags&+"1024"){FS.llseek(stream,0,+"2")}var seeking=typeof position!=="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesWritten=fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);if(!seeking)stream.position+=bytesWritten;return bytesWritten}),allocate:(function(){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}),mmap:(function(){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}),msync:(function(){return 0}),munmap:(function(){return 0}),ioctl:(function(){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)})};var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0}),mayOpen:(function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(29)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);SAFE_HEAP_STORE(result|0,stream.position|0,4);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall15(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),mode=SYSCALLS.get();FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;SAFE_HEAP_STORE(arg+offset|0,2|0,2);return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall38(which,varargs){SYSCALLS.varargs=varargs;try{var old_path=SYSCALLS.getStr(),new_path=SYSCALLS.getStr();FS.rename(old_path,new_path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall40(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.rmdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();SAFE_HEAP_STORE(argp|0,0|0,4);return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall60(which,varargs){SYSCALLS.varargs=varargs;try{var mask=SYSCALLS.get();var old=SYSCALLS.umask;SYSCALLS.umask=mask;return old}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}var ___tm_current=22560;var ___tm_timezone=(stringToUTF8("GMT",22608,4),22608);function _tzset(){if(_tzset.called)return;_tzset.called=true;SAFE_HEAP_STORE(__get_timezone()|0,(new Date).getTimezoneOffset()*60|0,4);var winter=new Date(2e3,0,1);var summer=new Date(2e3,6,1);SAFE_HEAP_STORE(__get_daylight()|0,Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset())|0,4);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocate(intArrayFromString(winterName),"i8",ALLOC_NORMAL);var summerNamePtr=allocate(intArrayFromString(summerName),"i8",ALLOC_NORMAL);if(summer.getTimezoneOffset()0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}SAFE_HEAP_STORE(tmPtr+24|0,date.getDay()|0,4);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;SAFE_HEAP_STORE(tmPtr+28|0,yday|0,4);return date.getTime()/1e3|0}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){SAFE_HEAP_STORE(ptr|0,ret|0,4)}return ret}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof self==="object"&&self["performance"]&&typeof self["performance"]["now"]==="function"){_emscripten_get_now=(function(){return self["performance"]["now"]()})}else if(typeof performance==="object"&&typeof performance["now"]==="function"){_emscripten_get_now=(function(){return performance["now"]()})}else{_emscripten_get_now=Date.now}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=frozenFs;var NODEJS_PATH=__webpack_require__(4);NODEFS.staticInit()}if(ENVIRONMENT_IS_NODE){var _wrapNodeError=(function(func){return(function(){try{return func.apply(this,arguments)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})});var VFS=Object.assign({},FS);for(var _key in NODERAWFS)FS[_key]=_wrapNodeError(NODERAWFS[_key])}else{throw new Error("NODERAWFS is currently only supported on Node.js environment.")}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}writeStackCookie();preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}checkStackCookie()}Module["run"]=run;var abortDecorators=[];function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + + +/***/ }), +/* 13 */ +/***/ (function(module, exports) { + +module.exports = require("crypto"); + +/***/ }), +/* 14 */ +/***/ (function(module, exports) { + +module.exports = require("stream"); + +/***/ }), +/* 15 */ +/***/ (function(module, exports) { + +module.exports = require("util"); + +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __webpack_require__(3); +const path_1 = __webpack_require__(4); +const FakeFS_1 = __webpack_require__(5); +const NodeFS_1 = __webpack_require__(2); +const ZipFS_1 = __webpack_require__(10); +class ZipOpenFS extends FakeFS_1.FakeFS { + constructor({ baseFs = new NodeFS_1.NodeFS(), filter = null, useCache = true } = {}) { + super(); + this.isZip = new Set(); + this.notZip = new Set(); + this.baseFs = baseFs; + this.zipInstances = useCache ? new Map() : null; + this.filter = filter; + this.isZip = new Set(); + this.notZip = new Set(); + } + static open(fn) { + const zipOpenFs = new ZipOpenFS(); + try { + return fn(zipOpenFs); + } + finally { + zipOpenFs.saveAndClose(); + } + } + static async openPromise(fn) { + const zipOpenFs = new ZipOpenFS(); + try { + return await fn(zipOpenFs); + } + finally { + zipOpenFs.saveAndClose(); + } + } + getRealPath() { + return this.baseFs.getRealPath(); + } + saveAndClose() { + if (this.zipInstances) { + for (const [path, zipFs] of this.zipInstances.entries()) { + zipFs.saveAndClose(); + this.zipInstances.delete(path); + } + } + } + discardAndClose() { + if (this.zipInstances) { + for (const [path, zipFs] of this.zipInstances.entries()) { + zipFs.discardAndClose(); + this.zipInstances.delete(path); + } + } + } + async openPromise(p, flags, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.openPromise(p, flags, mode); + }, async (zipFs, { archivePath, subPath }) => { + throw new Error(`Unsupported action (we wouldn't be able to disambiguate the close)`); + }); + } + openSync(p, flags, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.openSync(p, flags, mode); + }, (zipFs, { archivePath, subPath }) => { + throw new Error(`Unsupported action (we wouldn't be able to disambiguate the close)`); + }); + } + async closePromise(fd) { + return await this.baseFs.closePromise(fd); + } + closeSync(fd) { + return this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.createReadStream(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.createReadStream(subPath, opts); + }); + } + createWriteStream(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.createWriteStream(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.createWriteStream(subPath, opts); + }); + } + async realpathPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.realpathPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return path_1.posix.resolve(archivePath, path_1.posix.relative(`/`, await zipFs.realpathPromise(subPath))); + }); + } + realpathSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.realpathSync(p); + }, (zipFs, { archivePath, subPath }) => { + return path_1.posix.resolve(archivePath, path_1.posix.relative(`/`, zipFs.realpathSync(subPath))); + }); + } + async existsPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.existsPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.existsPromise(subPath); + }); + } + existsSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.existsSync(p); + }, (zipFs, { subPath }) => { + return zipFs.existsSync(subPath); + }); + } + async accessPromise(p, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.accessPromise(p, mode); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.accessPromise(subPath, mode); + }); + } + accessSync(p, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.accessSync(p, mode); + }, (zipFs, { subPath }) => { + return zipFs.accessSync(subPath, mode); + }); + } + async statPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.statPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.statPromise(subPath); + }); + } + statSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.statSync(p); + }, (zipFs, { subPath }) => { + return zipFs.statSync(subPath); + }); + } + async lstatPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lstatPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.lstatPromise(subPath); + }); + } + lstatSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.lstatSync(p); + }, (zipFs, { subPath }) => { + return zipFs.lstatSync(subPath); + }); + } + async chmodPromise(p, mask) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chmodPromise(p, mask); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.chmodPromise(subPath, mask); + }); + } + chmodSync(p, mask) { + return this.makeCallSync(p, () => { + return this.baseFs.chmodSync(p, mask); + }, (zipFs, { subPath }) => { + return zipFs.chmodSync(subPath, mask); + }); + } + async renamePromise(oldP, newP) { + return await this.makeCallPromise(oldP, async () => { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.renamePromise(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, async (zipFsO, { archivePath: archivePathO, subPath: subPathO }) => { + return await this.makeCallPromise(newP, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, async (zipFsN, { archivePath: archivePathN, subPath: subPathN }) => { + if (zipFsO !== zipFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } + else { + return await zipFsO.renamePromise(subPathO, subPathN); + } + }); + }); + } + renameSync(oldP, newP) { + return this.makeCallSync(oldP, () => { + return this.makeCallSync(newP, () => { + return this.baseFs.renameSync(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, (zipFsO, { archivePath: archivePathO, subPath: subPathO }) => { + return this.makeCallSync(newP, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, (zipFsN, { archivePath: archivePathN, subPath: subPathN }) => { + if (zipFsO !== zipFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } + else { + return zipFsO.renameSync(subPathO, subPathN); + } + }); + }); + } + async copyFilePromise(sourceP, destP, flags = 0) { + const fallback = async (sourceFs, sourceP, destFs, destP) => { + if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP}' -> ${destP}'`), { code: `EXDEV` }); + if ((flags & fs_1.constants.COPYFILE_EXCL) && await this.existsPromise(sourceP)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), { code: `EEXIST` }); + let content; + try { + content = await sourceFs.readFilePromise(sourceP); + } + catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), { code: `EINVAL` }); + } + await destFs.writeFilePromise(destP, content); + }; + return await this.makeCallPromise(sourceP, async () => { + return await this.makeCallPromise(destP, async () => { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + }, async (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + return await fallback(this.baseFs, sourceP, zipFsD, subPathD); + }); + }, async (zipFsS, { archivePath: archivePathS, subPath: subPathS }) => { + return await this.makeCallPromise(destP, async () => { + return await fallback(zipFsS, subPathS, this.baseFs, destP); + }, async (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + if (zipFsS !== zipFsD) { + return await fallback(zipFsS, subPathS, zipFsD, subPathD); + } + else { + return await zipFsS.copyFilePromise(subPathS, subPathD, flags); + } + }); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + const fallback = (sourceFs, sourceP, destFs, destP) => { + if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP}' -> ${destP}'`), { code: `EXDEV` }); + if ((flags & fs_1.constants.COPYFILE_EXCL) && this.existsSync(sourceP)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), { code: `EEXIST` }); + let content; + try { + content = sourceFs.readFileSync(sourceP); + } + catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), { code: `EINVAL` }); + } + destFs.writeFileSync(destP, content); + }; + return this.makeCallSync(sourceP, () => { + return this.makeCallSync(destP, () => { + return this.baseFs.copyFileSync(sourceP, destP, flags); + }, (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + return fallback(this.baseFs, sourceP, zipFsD, subPathD); + }); + }, (zipFsS, { archivePath: archivePathS, subPath: subPathS }) => { + return this.makeCallSync(destP, () => { + return fallback(zipFsS, subPathS, this.baseFs, destP); + }, (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + if (zipFsS !== zipFsD) { + return fallback(zipFsS, subPathS, zipFsD, subPathD); + } + else { + return zipFsS.copyFileSync(subPathS, subPathD, flags); + } + }); + }); + } + async writeFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.writeFilePromise(p, content, opts); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.writeFilePromise(subPath, content, opts); + }); + } + writeFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.writeFileSync(p, content, opts); + }, (zipFs, { subPath }) => { + return zipFs.writeFileSync(subPath, content, opts); + }); + } + async unlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.unlinkPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.unlinkPromise(subPath); + }); + } + unlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.unlinkSync(p); + }, (zipFs, { subPath }) => { + return zipFs.unlinkSync(subPath); + }); + } + async utimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.utimesPromise(p, atime, mtime); + }, async (zipFs, { subPath }) => { + return await zipFs.utimesPromise(subPath, atime, mtime); + }); + } + utimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.utimesSync(p, atime, mtime); + }, (zipFs, { subPath }) => { + return zipFs.utimesSync(subPath, atime, mtime); + }); + } + async mkdirPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.mkdirPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.mkdirPromise(subPath); + }); + } + mkdirSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.mkdirSync(p); + }, (zipFs, { subPath }) => { + return zipFs.mkdirSync(subPath); + }); + } + async rmdirPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmdirPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.rmdirPromise(subPath); + }); + } + rmdirSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.rmdirSync(p); + }, (zipFs, { subPath }) => { + return zipFs.rmdirSync(subPath); + }); + } + async symlinkPromise(target, p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.symlinkPromise(target, p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.symlinkPromise(target, subPath); + }); + } + symlinkSync(target, p) { + return this.makeCallSync(p, () => { + return this.baseFs.symlinkSync(target, p); + }, (zipFs, { subPath }) => { + return zipFs.symlinkSync(target, subPath); + }); + } + async readFilePromise(p, encoding) { + return this.makeCallPromise(p, async () => { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(p, encoding); + default: + return await this.baseFs.readFilePromise(p, encoding); + } + }, async (zipFs, { subPath }) => { + return await zipFs.readFilePromise(subPath, encoding); + }); + } + readFileSync(p, encoding) { + return this.makeCallSync(p, () => { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(p, encoding); + default: + return this.baseFs.readFileSync(p, encoding); + } + }, (zipFs, { subPath }) => { + return zipFs.readFileSync(subPath, encoding); + }); + } + async readdirPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readdirPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.readdirPromise(subPath); + }, { + requireSubpath: false, + }); + } + readdirSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readdirSync(p); + }, (zipFs, { subPath }) => { + return zipFs.readdirSync(subPath); + }, { + requireSubpath: false, + }); + } + async readlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readlinkPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.readlinkPromise(subPath); + }); + } + readlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readlinkSync(p); + }, (zipFs, { subPath }) => { + return zipFs.readlinkSync(subPath); + }); + } + async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { + p = path_1.posix.normalize(path_1.posix.resolve(`/`, p)); + const zipInfo = this.findZip(p); + if (!zipInfo) + return await discard(); + if (requireSubpath && zipInfo.subPath === `/`) + return await discard(); + return await this.getZipPromise(zipInfo.archivePath, async (zipFs) => await accept(zipFs, zipInfo)); + } + makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { + p = path_1.posix.normalize(path_1.posix.resolve(`/`, p)); + const zipInfo = this.findZip(p); + if (!zipInfo) + return discard(); + if (requireSubpath && zipInfo.subPath === `/`) + return discard(); + return this.getZipSync(zipInfo.archivePath, zipFs => accept(zipFs, zipInfo)); + } + findZip(p) { + if (this.filter && !this.filter.test(p)) + return null; + const parts = p.split(/\//g); + for (let t = 2; t <= parts.length; ++t) { + const archivePath = parts.slice(0, t).join(`/`); + if (this.notZip.has(archivePath)) + continue; + if (this.isZip.has(archivePath)) + return { archivePath, subPath: path_1.posix.resolve(`/`, parts.slice(t).join(`/`)) }; + let realArchivePath = archivePath; + let stat; + while (true) { + try { + stat = this.baseFs.lstatSync(realArchivePath); + } + catch (error) { + return null; + } + if (stat.isSymbolicLink()) { + realArchivePath = path_1.posix.resolve(path_1.posix.dirname(realArchivePath), this.baseFs.readlinkSync(realArchivePath)); + } + else { + break; + } + } + const isZip = stat.isFile() && path_1.posix.extname(realArchivePath) === `.zip`; + if (isZip) { + this.isZip.add(archivePath); + return { archivePath, subPath: path_1.posix.resolve(`/`, parts.slice(t).join(`/`)) }; + } + else { + this.notZip.add(archivePath); + if (stat.isFile()) { + return null; + } + } + } + return null; + } + async getZipPromise(p, accept) { + if (this.zipInstances) { + let zipFs = this.zipInstances.get(p); + if (!zipFs) + this.zipInstances.set(p, zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs, stats: await this.baseFs.statPromise(p) })); + return await accept(zipFs); + } + else { + const zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs, stats: await this.baseFs.statPromise(p) }); + try { + return await accept(zipFs); + } + finally { + zipFs.saveAndClose(); + } + } + } + getZipSync(p, accept) { + if (this.zipInstances) { + let zipFs = this.zipInstances.get(p); + if (!zipFs) + this.zipInstances.set(p, zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs })); + return accept(zipFs); + } + else { + const zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs }); + try { + return accept(zipFs); + } + finally { + zipFs.saveAndClose(); + } + } + } +} +exports.ZipOpenFS = ZipOpenFS; + + +/***/ }), +/* 17 */ +/***/ (function(module, exports) { + +module.exports = require("module"); + +/***/ }), +/* 18 */ +/***/ (function(module, exports) { + +module.exports = require("string_decoder"); + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(1); +const fs_1 = __importDefault(__webpack_require__(3)); +const module_1 = __importDefault(__webpack_require__(17)); +const path_1 = __importDefault(__webpack_require__(4)); +const internalTools_1 = __webpack_require__(20); +function applyPatch(pnpapi, opts) { + // @ts-ignore + const builtinModules = new Set(module_1.default.builtinModules || Object.keys(process.binding('natives'))); + // The callback function gets called to wrap the return value of the module names matching the regexp + const patchedModules = []; + if (opts.compatibilityMode) { + // Modern versions of `resolve` support a specific entry point that custom resolvers can use + // to inject a specific resolution logic without having to patch the whole package. + // + // Cf: https://github.com/browserify/resolve/pull/174 + patchedModules.push([ + /^\.\/normalize-options\.js$/, + (issuer, normalizeOptions) => { + if (!issuer || issuer.name !== 'resolve') + return normalizeOptions; + return (request, opts) => { + opts = opts || {}; + if (opts.forceNodeResolution) + return opts; + opts.preserveSymlinks = true; + opts.paths = function (request, basedir, getNodeModulesDir, opts) { + // Extract the name of the package being requested (1=full name, 2=scope name, 3=local name) + const parts = request.match(/^((?:(@[^\/]+)\/)?([^\/]+))/); + if (!parts) + throw new Error(`Assertion failed: Expected the "resolve" package to call the "paths" callback with package names only (got "${request}")`); + // make sure that basedir ends with a slash + if (basedir.charAt(basedir.length - 1) !== '/') + basedir = path_1.default.join(basedir, '/'); + // TODO Handle portable paths + // This is guaranteed to return the path to the "package.json" file from the given package + const manifestPath = pnpapi.resolveToUnqualified(`${parts[1]}/package.json`, basedir, { + considerBuiltins: false, + }); + if (manifestPath === null) + throw new Error(`Assertion failed: The resolution thinks that "${parts[1]}" is a Node builtin`); + // The first dirname strips the package.json, the second strips the local named folder + let nodeModules = path_1.default.dirname(path_1.default.dirname(manifestPath)); + // Strips the scope named folder if needed + if (parts[2]) + nodeModules = path_1.default.dirname(nodeModules); + return [nodeModules]; + }; + return opts; + }; + }, + ]); + } + /** + * Used to disable the resolution hooks (for when we want to fallback to the previous resolution - we then need + * a way to "reset" the environment temporarily) + */ + let enableNativeHooks = true; + // @ts-ignore + process.versions.pnp = String(pnpapi.VERSIONS.std); + // A small note: we don't replace the cache here (and instead use the native one). This is an effort to not + // break code similar to "delete require.cache[require.resolve(FOO)]", where FOO is a package located outside + // of the Yarn dependency tree. In this case, we defer the load to the native loader. If we were to replace the + // cache by our own, the native loader would populate its own cache, which wouldn't be exposed anymore, so the + // delete call would be broken. + const originalModuleLoad = module_1.default._load; + module_1.default._load = function (request, parent, isMain) { + if (!enableNativeHooks) { + return originalModuleLoad.call(module_1.default, request, parent, isMain); + } + // Builtins are managed by the regular Node loader + if (builtinModules.has(request)) { + try { + enableNativeHooks = false; + return originalModuleLoad.call(module_1.default, request, parent, isMain); + } + finally { + enableNativeHooks = true; + } + } + // The 'pnpapi' name is reserved to return the PnP api currently in use by the program + if (request === `pnpapi`) + return pnpapi; + // Request `Module._resolveFilename` (ie. `resolveRequest`) to tell us which file we should load + const modulePath = module_1.default._resolveFilename(request, parent, isMain); + // Check if the module has already been created for the given file + const cacheEntry = module_1.default._cache[modulePath]; + if (cacheEntry) + return cacheEntry.exports; + // Create a new module and store it into the cache + // @ts-ignore + const module = new module_1.default(modulePath, parent); + module_1.default._cache[modulePath] = module; + // The main module is exposed as global variable + if (isMain) { + // @ts-ignore + process.mainModule = module; + module.id = '.'; + } + // Try to load the module, and remove it from the cache if it fails + let hasThrown = true; + try { + module.load(modulePath); + hasThrown = false; + } + finally { + if (hasThrown) { + delete module_1.default._cache[modulePath]; + } + } + // Some modules might have to be patched for compatibility purposes + for (const [filter, patchFn] of patchedModules) { + if (filter.test(request)) { + const issuer = parent && parent.filename ? pnpapi.findPackageLocator(parent.filename) : null; + module.exports = patchFn(issuer, module.exports); + } + } + return module.exports; + }; + const originalModuleResolveFilename = module_1.default._resolveFilename; + module_1.default._resolveFilename = function (request, parent, isMain, options) { + if (request === `pnpapi`) + return request; + if (!enableNativeHooks) + return originalModuleResolveFilename.call(module_1.default, request, parent, isMain, options); + if (options && options.plugnplay === false) { + try { + enableNativeHooks = false; + return originalModuleResolveFilename.call(module_1.default, request, parent, isMain, options); + } + finally { + enableNativeHooks = true; + } + } + let issuers; + if (options) { + const optionNames = new Set(Object.keys(options)); + optionNames.delete(`paths`); + optionNames.delete(`plugnplay`); + if (optionNames.size > 0) { + throw internalTools_1.makeError(`UNSUPPORTED`, `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(', ')})`); + } + if (options.paths) { + issuers = options.paths.map((entry) => { + return `${path_1.default.normalize(entry)}/`; + }); + } + } + if (!issuers) { + const issuerModule = internalTools_1.getIssuerModule(parent); + const issuer = issuerModule ? issuerModule.filename : `${fslib_1.NodeFS.toPortablePath(process.cwd())}/`; + issuers = [issuer]; + } + // When Node is called, it tries to require the main script but can't + // because PnP already patched 'Module' + // We test it for an absolute Windows path and convert it to a portable path. + // We should probably always call toPortablePath and check for this directly + if (/^[A-Z]:.*/.test(request)) { + request = fslib_1.NodeFS.toPortablePath(request); + } + let firstError; + for (const issuer of issuers) { + let resolution; + try { + resolution = pnpapi.resolveRequest(request, issuer); + } + catch (error) { + firstError = firstError || error; + continue; + } + return resolution !== null ? resolution : request; + } + throw firstError; + }; + const originalFindPath = module_1.default._findPath; + module_1.default._findPath = function (request, paths, isMain) { + if (request === `pnpapi`) + return false; + if (!enableNativeHooks) + return originalFindPath.call(module_1.default, request, paths, isMain); + for (const path of paths) { + let resolution; + try { + // TODO Convert path to portable path? + resolution = pnpapi.resolveRequest(request, path); + } + catch (error) { + continue; + } + if (resolution) { + return resolution; + } + } + return false; + }; + fslib_1.patchFs(fs_1.default, new fslib_1.PosixFS(opts.fakeFs)); +} +exports.applyPatch = applyPatch; +; + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * Simple helper function that assign an error code to an error, so that it can more easily be caught and used + * by third-parties. + */ +Object.defineProperty(exports, "__esModule", { value: true }); +function makeError(code, message, data = {}) { + const error = new Error(message); + return Object.assign(error, { code, data }); +} +exports.makeError = makeError; +/** + * Returns the module that should be used to resolve require calls. It's usually the direct parent, except if we're + * inside an eval expression. + */ +function getIssuerModule(parent) { + let issuer = parent; + while (issuer && (issuer.id === '[eval]' || issuer.id === '' || !issuer.filename)) { + issuer = issuer.parent; + } + return issuer; +} +exports.getIssuerModule = getIssuerModule; + + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(1); +const path_1 = __webpack_require__(4); +function hydrateRuntimeState(data, { basePath }) { + const portablePath = fslib_1.NodeFS.toPortablePath(basePath); + const ignorePattern = data.ignorePatternData + ? new RegExp(data.ignorePatternData) + : null; + const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => { + return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => { + return [packageReference, { + packageLocation: path_1.posix.resolve(portablePath, packageInformationData.packageLocation), + packageDependencies: new Map(packageInformationData.packageDependencies), + }]; + }))]; + })); + const packageLocatorsByLocations = new Map(data.locationBlacklistData.map(location => { + return [location, null]; + })); + for (const [packageName, storeData] of data.packageRegistryData) { + for (const [packageReference, packageInformationData] of storeData) { + if ((packageName === null) !== (packageReference === null)) + throw new Error(`Assertion failed: The name and reference should be null, or neither should`); + // @ts-ignore: TypeScript isn't smart enough to understand the type assertion + const packageLocator = { name: packageName, reference: packageReference }; + packageLocatorsByLocations.set(packageInformationData.packageLocation, packageLocator); + } + } + const packageLocationLengths = data.locationLengthData; + return { + basePath: portablePath, + ignorePattern, + packageRegistry, + packageLocatorsByLocations, + packageLocationLengths, + }; +} +exports.hydrateRuntimeState = hydrateRuntimeState; + + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(1); +const module_1 = __importDefault(__webpack_require__(17)); +const path_1 = __webpack_require__(4); +const internalTools_1 = __webpack_require__(20); +function makeApi(runtimeState, opts) { + // @ts-ignore + const builtinModules = new Set(module_1.default.builtinModules || Object.keys(process.binding('natives'))); + // Splits a require request into its components, or return null if the request is a file path + const pathRegExp = /^(?![a-zA-Z]:[\\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^\/]+\/)?[^\/]+)\/?(.*|)$/; + // Matches if the path starts with a valid path qualifier (./, ../, /) + // eslint-disable-next-line no-unused-vars + const isStrictRegExp = /^\.{0,2}\//; + // Matches if the path must point to a directory (ie ends with /) + const isDirRegExp = /\/$/; + // Matches backslashes of Windows paths + const backwardSlashRegExp = /\\/g; + // We only instantiate one of those so that we can use strict-equal comparisons + const topLevelLocator = { name: null, reference: null }; + // Used for compatibility purposes - cf setupCompatibilityLayer + const fallbackLocators = [topLevelLocator]; + if (opts.compatibilityMode) { + // ESLint currently doesn't have any portable way for shared configs to + // specify their own plugins that should be used (cf issue #10125). This + // will likely get fixed at some point but it'll take time, so in the + // meantime we'll just add additional fallback entries for common shared + // configs. + // Similarly, Gatsby generates files within the `public` folder located + // within the project, but doesn't pre-resolve the `require` calls to use + // its own dependencies. Meaning that when PnP see a file from the `public` + // folder making a require, it thinks that your project forgot to list one + // of your dependencies. + for (const name of [`react-scripts`, `gatsby`]) { + const packageStore = runtimeState.packageRegistry.get(name); + if (packageStore) { + for (const reference of packageStore.keys()) { + if (reference === null) { + throw new Error(`Assertion failed: This reference shouldn't be null`); + } + else { + fallbackLocators.push({ name, reference }); + } + } + } + } + } + /** + * The setup code will be injected here. The tables listed below are guaranteed to be filled after the call to + * the $$DYNAMICALLY_GENERATED_CODE function. + */ + const { ignorePattern, packageRegistry, packageLocatorsByLocations, packageLocationLengths, } = runtimeState; + /** + * Allows to print useful logs just be setting a value in the environment + */ + function makeLogEntry(name, args) { + return { + fn: name, + args: args, + error: null, + result: null, + }; + } + function maybeLog(name, fn) { + if (opts.allowDebug === false) + return fn; + const level = Number(process.env.PNP_DEBUG_LEVEL); + if (Number.isFinite(level)) { + if (level >= 2) { + return (...args) => { + const logEntry = makeLogEntry(name, args); + try { + return logEntry.result = fn(...args); + } + catch (error) { + throw logEntry.error = error; + } + finally { + console.error(logEntry); + } + }; + } + else if (level >= 1) { + return (...args) => { + try { + return fn(...args); + } + catch (error) { + const logEntry = makeLogEntry(name, args); + logEntry.error = error; + console.error(logEntry); + throw error; + } + }; + } + } + return fn; + } + /** + * Returns information about a package in a safe way (will throw if they cannot be retrieved) + */ + function getPackageInformationSafe(packageLocator) { + const packageInformation = getPackageInformation(packageLocator); + if (!packageInformation) { + throw internalTools_1.makeError(`INTERNAL`, `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)`); + } + return packageInformation; + } + /** + * Implements the node resolution for folder access and extension selection + */ + function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) { + // We use this "infinite while" so that we can restart the process as long as we hit package folders + while (true) { + let stat; + try { + candidates.push(unqualifiedPath); + stat = opts.fakeFs.statSync(unqualifiedPath); + } + catch (error) { } + // If the file exists and is a file, we can stop right there + if (stat && !stat.isDirectory()) { + // If the very last component of the resolved path is a symlink to a file, we then resolve it to a file. We only + // do this first the last component, and not the rest of the path! This allows us to support the case of bin + // symlinks, where a symlink in "/xyz/pkg-name/.bin/bin-name" will point somewhere else (like "/xyz/pkg-name/index.js"). + // In such a case, we want relative requires to be resolved relative to "/xyz/pkg-name/" rather than "/xyz/pkg-name/.bin/". + // + // Also note that the reason we must use readlink on the last component (instead of realpath on the whole path) + // is that we must preserve the other symlinks, in particular those used by pnp to deambiguate packages using + // peer dependencies. For example, "/xyz/.pnp/local/pnp-01234569/.bin/bin-name" should see its relative requires + // be resolved relative to "/xyz/.pnp/local/pnp-0123456789/" rather than "/xyz/pkg-with-peers/", because otherwise + // we would lose the information that would tell us what are the dependencies of pkg-with-peers relative to its + // ancestors. + if (opts.fakeFs.lstatSync(unqualifiedPath).isSymbolicLink()) + unqualifiedPath = path_1.posix.normalize(path_1.posix.resolve(path_1.posix.dirname(unqualifiedPath), opts.fakeFs.readlinkSync(unqualifiedPath))); + return unqualifiedPath; + } + // If the file is a directory, we must check if it contains a package.json with a "main" entry + if (stat && stat.isDirectory()) { + let pkgJson; + try { + pkgJson = JSON.parse(opts.fakeFs.readFileSync(`${unqualifiedPath}/package.json`, `utf8`)); + } + catch (error) { } + let nextUnqualifiedPath; + if (pkgJson && pkgJson.main) + nextUnqualifiedPath = path_1.posix.resolve(unqualifiedPath, pkgJson.main); + // If the "main" field changed the path, we start again from this new location + if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) { + const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions }); + if (resolution !== null) { + return resolution; + } + } + } + // Otherwise we check if we find a file that match one of the supported extensions + const qualifiedPath = extensions + .map(extension => { + return `${unqualifiedPath}${extension}`; + }) + .find(candidateFile => { + candidates.push(candidateFile); + return opts.fakeFs.existsSync(candidateFile); + }); + if (qualifiedPath) + return qualifiedPath; + // Otherwise, we check if the path is a folder - in such a case, we try to use its index + if (stat && stat.isDirectory()) { + const indexPath = extensions + .map(extension => { + return `${unqualifiedPath}/index${extension}`; + }) + .find(candidateFile => { + candidates.push(candidateFile); + return opts.fakeFs.existsSync(candidateFile); + }); + if (indexPath) { + return indexPath; + } + } + // Otherwise there's nothing else we can do :( + return null; + } + } + /** + * This function creates fake modules that can be used with the _resolveFilename function. + * Ideally it would be nice to be able to avoid this, since it causes useless allocations + * and cannot be cached efficiently (we recompute the nodeModulePaths every time). + * + * Fortunately, this should only affect the fallback, and there hopefully shouldn't have a + * lot of them. + */ + function makeFakeModule(path) { + // @ts-ignore + const fakeModule = new module_1.default(path, null); + fakeModule.filename = path; + fakeModule.paths = module_1.default._nodeModulePaths(path); + return fakeModule; + } + /** + * Normalize path to posix format. + */ + function normalizePath(p) { + p = path_1.posix.normalize(p); + if (process.platform === 'win32') + p = p.replace(backwardSlashRegExp, '/'); + return p; + } + /** + * Forward the resolution to the next resolver (usually the native one) + */ + function callNativeResolution(request, issuer) { + if (issuer.endsWith('/')) + issuer += 'internal.js'; + request = fslib_1.NodeFS.fromPortablePath(request); + issuer = fslib_1.NodeFS.fromPortablePath(issuer); + // Since we would need to create a fake module anyway (to call _resolveLookupPath that + // would give us the paths to give to _resolveFilename), we can as well not use + // the {paths} option at all, since it internally makes _resolveFilename create another + // fake module anyway. + return module_1.default._resolveFilename(request, makeFakeModule(issuer), false, { plugnplay: false }); + } + /** + * This key indicates which version of the standard is implemented by this resolver. The `std` key is the + * Plug'n'Play standard, and any other key are third-party extensions. Third-party extensions are not allowed + * to override the standard, and can only offer new methods. + * + * If an new version of the Plug'n'Play standard is released and some extensions conflict with newly added + * functions, they'll just have to fix the conflicts and bump their own version number. + */ + const VERSIONS = { std: 1 }; + /** + * We export a special symbol for easy access to the top level locator. + */ + const topLevel = topLevelLocator; + /** + * Gets the package information for a given locator. Returns null if they cannot be retrieved. + */ + function getPackageInformation({ name, reference }) { + const packageInformationStore = packageRegistry.get(name); + if (!packageInformationStore) + return null; + const packageInformation = packageInformationStore.get(reference); + if (!packageInformation) + return null; + return packageInformation; + } + /** + * Finds the package locator that owns the specified path. If none is found, returns null instead. + */ + function findPackageLocator(location) { + let relativeLocation = normalizePath(path_1.posix.relative(runtimeState.basePath, location)); + if (!relativeLocation.match(isStrictRegExp)) + relativeLocation = `./${relativeLocation}`; + if (location.match(isDirRegExp) && !relativeLocation.endsWith(`/`)) + relativeLocation = `${relativeLocation}/`; + let from = 0; + // If someone wants to use a binary search to go from O(n) to O(log n), be my guest + while (from < packageLocationLengths.length && packageLocationLengths[from] > relativeLocation.length) + from += 1; + for (let t = from; t < packageLocationLengths.length; ++t) { + const locator = packageLocatorsByLocations.get(relativeLocation.substr(0, packageLocationLengths[t])); + if (!locator) + continue; + // Ensures that the returned locator isn't a blacklisted one. + // + // Blacklisted packages are packages that cannot be used because their dependencies cannot be deduced. This only + // happens with peer dependencies, which effectively have different sets of dependencies depending on their + // parents. + // + // In order to deambiguate those different sets of dependencies, the Yarn implementation of PnP will generate a + // symlink for each combination of // it will find, and will + // blacklist the target of those symlinks. By doing this, we ensure that files loaded through a specific path + // will always have the same set of dependencies, provided the symlinks are correctly preserved. + // + // Unfortunately, some tools do not preserve them, and when it happens PnP isn't able anymore to deduce the set of + // dependencies based on the path of the file that makes the require calls. But since we've blacklisted those + // paths, we're able to print a more helpful error message that points out that a third-party package is doing + // something incompatible! + if (locator === null) { + throw internalTools_1.makeError(`BLACKLISTED`, [ + `A package has been resolved through a blacklisted path - this is usually caused by one of your tool`, + `calling "realpath" on the return value of "require.resolve". Since the returned values use symlinks to`, + `disambiguate peer dependencies, they must be passed untransformed to "require".`, + ].join(` `)); + } + return locator; + } + return null; + } + /** + * Transforms a request (what's typically passed as argument to the require function) into an unqualified path. + * This path is called "unqualified" because it only changes the package name to the package location on the disk, + * which means that the end result still cannot be directly accessed (for example, it doesn't try to resolve the + * file extension, or to resolve directories to their "index.js" content). Use the "resolveUnqualified" function + * to convert them to fully-qualified paths, or just use "resolveRequest" that do both operations in one go. + * + * Note that it is extremely important that the `issuer` path ends with a forward slash if the issuer is to be + * treated as a folder (ie. "/tmp/foo/" rather than "/tmp/foo" if "foo" is a directory). Otherwise relative + * imports won't be computed correctly (they'll get resolved relative to "/tmp/" instead of "/tmp/foo/"). + */ + function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) { + // The 'pnpapi' request is reserved and will always return the path to the PnP file, from everywhere + if (request === `pnpapi`) + return opts.pnpapiResolution; + // Bailout if the request is a native module + if (considerBuiltins && builtinModules.has(request)) + return null; + // We allow disabling the pnp resolution for some subpaths. This is because some projects, often legacy, + // contain multiple levels of dependencies (ie. a yarn.lock inside a subfolder of a yarn.lock). This is + // typically solved using workspaces, but not all of them have been converted already. + if (ignorePattern && issuer && ignorePattern.test(normalizePath(issuer))) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw internalTools_1.makeError(`BUILTIN_NODE_RESOLUTION_FAIL`, `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)\n\nRequire request: "${request}"\nRequired by: ${issuer}\n`, { request, issuer }); + } + return result; + } + let unqualifiedPath; + // If the request is a relative or absolute path, we just return it normalized + const dependencyNameMatch = request.match(pathRegExp); + if (!dependencyNameMatch) { + if (path_1.posix.isAbsolute(request)) { + unqualifiedPath = path_1.posix.normalize(request); + } + else { + if (!issuer) { + throw internalTools_1.makeError(`API_ERROR`, `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, { request, issuer }); + } + if (issuer.match(isDirRegExp)) { + unqualifiedPath = path_1.posix.normalize(path_1.posix.resolve(issuer, request)); + } + else { + unqualifiedPath = path_1.posix.normalize(path_1.posix.resolve(path_1.posix.dirname(issuer), request)); + } + } + } + // Things are more hairy if it's a package require - we then need to figure out which package is needed, and in + // particular the exact version for the given location on the dependency tree + else { + if (!issuer) { + throw internalTools_1.makeError(`API_ERROR`, `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`, { request, issuer }); + } + const [, dependencyName, subPath] = dependencyNameMatch; + const issuerLocator = findPackageLocator(issuer); + // If the issuer file doesn't seem to be owned by a package managed through pnp, then we resort to using the next + // resolution algorithm in the chain, usually the native Node resolution one + if (!issuerLocator) { + const result = callNativeResolution(request, issuer); + if (result === false) { + throw internalTools_1.makeError(`BUILTIN_NODE_RESOLUTION_FAIL`, `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree)\n\nRequire path: "${request}"\nRequired by: ${issuer}\n`, { request, issuer }); + } + return result; + } + const issuerInformation = getPackageInformationSafe(issuerLocator); + // We obtain the dependency reference in regard to the package that request it + let dependencyReference = issuerInformation.packageDependencies.get(dependencyName); + // If we can't find it, we check if we can potentially load it from the packages that have been defined as potential fallbacks. + // It's a bit of a hack, but it improves compatibility with the existing Node ecosystem. Hopefully we should eventually be able + // to kill this logic and become stricter once pnp gets enough traction and the affected packages fix themselves. + if (issuerLocator.name !== null) { + for (let t = 0, T = fallbackLocators.length; dependencyReference === undefined && t < T; ++t) { + const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]); + dependencyReference = fallbackInformation.packageDependencies.get(dependencyName); + } + } + // If we can't find the path, and if the package making the request is the top-level, we can offer nicer error messages + if (!dependencyReference) { + if (dependencyReference === null) { + if (issuerLocator.name === null) { + throw internalTools_1.makeError(`MISSING_PEER_DEPENDENCY`, `Something that got detected as your top-level application (because it doesn't seem to belong to any package) tried to access a peer dependency; this isn't allowed as the peer dependency cannot be provided by any parent package\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuer}\n`, { request, issuer, dependencyName }); + } + else { + throw internalTools_1.makeError(`MISSING_PEER_DEPENDENCY`, `A package is trying to access a peer dependency that should be provided by its direct ancestor but isn't\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuer})\n`, { request, issuer, issuerLocator: Object.assign({}, issuerLocator), dependencyName }); + } + } + else { + if (issuerLocator.name === null) { + throw internalTools_1.makeError(`UNDECLARED_DEPENDENCY`, `Something that got detected as your top-level application (because it doesn't seem to belong to any package) tried to access a package that is not declared in your dependencies\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuer}\n`, { request, issuer, dependencyName }); + } + else { + const candidates = Array.from(issuerInformation.packageDependencies.keys()); + throw internalTools_1.makeError(`UNDECLARED_DEPENDENCY`, `A package is trying to access another package without the second one being listed as a dependency of the first one\n\nRequired package: ${dependencyName} (via "${request}")\nRequired by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuer})\n`, { request, issuer, issuerLocator: Object.assign({}, issuerLocator), dependencyName, candidates }); + } + } + } + // We need to check that the package exists on the filesystem, because it might not have been installed + const dependencyLocator = { name: dependencyName, reference: dependencyReference }; + const dependencyInformation = getPackageInformationSafe(dependencyLocator); + if (!dependencyInformation.packageLocation) { + throw internalTools_1.makeError(`MISSING_DEPENDENCY`, `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${dependencyLocator.name}@${dependencyLocator.reference} (via "${request}")\nRequired by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuer})\n`, { request, issuer, dependencyLocator: Object.assign({}, dependencyLocator) }); + } + // Now that we know which package we should resolve to, we only have to find out the file location + const dependencyLocation = path_1.posix.resolve(runtimeState.basePath, dependencyInformation.packageLocation); + if (subPath) { + unqualifiedPath = path_1.posix.resolve(dependencyLocation, subPath); + } + else { + unqualifiedPath = dependencyLocation; + } + } + return path_1.posix.normalize(unqualifiedPath); + } + ; + /** + * Transforms an unqualified path into a qualified path by using the Node resolution algorithm (which automatically + * appends ".js" / ".json", and transforms directory accesses into "index.js"). + */ + function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(module_1.default._extensions) } = {}) { + const candidates = []; + const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }); + if (qualifiedPath) { + return path_1.posix.normalize(qualifiedPath); + } + else { + throw internalTools_1.makeError(`QUALIFIED_PATH_RESOLUTION_FAILED`, `Couldn't find a suitable Node resolution for the specified unqualified path\n\nSource path: ${unqualifiedPath}\n${candidates.map(candidate => `Rejected resolution: ${candidate}\n`).join(``)}`, { unqualifiedPath }); + } + } + ; + /** + * Transforms a request into a fully qualified path. + * + * Note that it is extremely important that the `issuer` path ends with a forward slash if the issuer is to be + * treated as a folder (ie. "/tmp/foo/" rather than "/tmp/foo" if "foo" is a directory). Otherwise relative + * imports won't be computed correctly (they'll get resolved relative to "/tmp/" instead of "/tmp/foo/"). + */ + function resolveRequest(request, issuer, { considerBuiltins, extensions } = {}) { + let unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins }); + if (unqualifiedPath === null) { + return null; + } + try { + return resolveUnqualified(unqualifiedPath, { extensions }); + } + catch (resolutionError) { + if (resolutionError.code === 'QUALIFIED_PATH_RESOLUTION_FAILED') { + Object.assign(resolutionError.data, { request, issuer }); + } + throw resolutionError; + } + } + ; + return { + VERSIONS, + topLevel, + getPackageInformation: (locator) => { + const info = getPackageInformation(locator); + if (info === null) + return null; + const packageLocation = fslib_1.NodeFS.fromPortablePath(info.packageLocation); + const nativeInfo = Object.assign({}, info, { packageLocation }); + return nativeInfo; + }, + findPackageLocator: (path) => { + path = fslib_1.NodeFS.toPortablePath(path); + return findPackageLocator(path); + }, + resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts) => { + request = fslib_1.NodeFS.toPortablePath(request); + if (issuer !== null) + issuer = fslib_1.NodeFS.toPortablePath(issuer); + const resolution = resolveToUnqualified(request, issuer, opts); + if (resolution === null) + return null; + return fslib_1.NodeFS.fromPortablePath(resolution); + }), + resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts) => { + unqualifiedPath = fslib_1.NodeFS.fromPortablePath(unqualifiedPath); + return fslib_1.NodeFS.fromPortablePath(resolveUnqualified(unqualifiedPath, opts)); + }), + resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts) => { + request = fslib_1.NodeFS.toPortablePath(request); + if (issuer !== null) + issuer = fslib_1.NodeFS.toPortablePath(issuer); + const resolution = resolveRequest(request, issuer, opts); + if (resolution === null) + return null; + return fslib_1.NodeFS.fromPortablePath(resolution); + }), + }; +} +exports.makeApi = makeApi; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/.prettierrc b/.prettierrc index 6eb31a6..6f3d9bf 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,6 +1,6 @@ { - "singleQuote": true, - "trailingComma": "all", - "bracketSpacing": false, - "printWidth": 120 + "singleQuote": true, + "trailingComma": "all", + "bracketSpacing": false, + "printWidth": 120 } diff --git a/.yarn/build-state.yml b/.yarn/build-state.yml new file mode 100644 index 0000000..015f1a8 --- /dev/null +++ b/.yarn/build-state.yml @@ -0,0 +1,8 @@ +# Warning: This file is automatically generated. Removing it is fine, but will +# cause all your builds to become invalidated. + +65c4ff5cda895cda35e70189039a898991481ca268e5bfc40b502ccec690bbc33a4cdeb4b71cc4c0772d190263329dc08cb50a2381fdb53b2cca93ffabc5e46a: 2676c8f8afdf2b0488f9a7182cdc1e3b06afe095ac645720d8f1661852124ae0678ea012a5659a36ccd50a621f563a65baf7529f27f5806db0e43fb8e17f1724 + +c731014c103ef1b150f52ce6edd0d214eca4bddaa20015f61aaf22ec6f7afe12872149d7209dce3a8d47a0f937bad1f4cd4058191a1a93512e000c1f1a769e93: d2ab1c095e5c750775053ea21692c5bff33138d9884856c3516d8fc6675462111a8e310cbf7e01bec199c7168ee5ca28926b31520298d900250b757e7b2dff18 + +fa763e60b873dfce57218b23d13f25b5c542a043490330c559bedf8509bdac1f0a447df490a494c93ae31abb8b0c8482e3499518bf216571e2c5a8ed8a7fdacb: 26c3e4c098ff9a962ffccb8212a561dfa1af679faecbea12eee403f41c9e11658092ce9109fad41b0f4da2d325640ce57315ba22802d4c4d7baa665682c25c58 diff --git a/.yarn/cache/@babel-code-frame-npm-7.0.0-9215195d5cc804c7cc3461c8ead201d29b9b4b586ee500fcf0ff5b7e64a5beb7.zip b/.yarn/cache/@babel-code-frame-npm-7.0.0-9215195d5cc804c7cc3461c8ead201d29b9b4b586ee500fcf0ff5b7e64a5beb7.zip new file mode 100644 index 0000000..448aac2 Binary files /dev/null and b/.yarn/cache/@babel-code-frame-npm-7.0.0-9215195d5cc804c7cc3461c8ead201d29b9b4b586ee500fcf0ff5b7e64a5beb7.zip differ diff --git a/.yarn/cache/@babel-core-npm-7.4.4-68728ded386943aec0f0d9416209578c4e5e2307bf792c28875875094793e6e3.zip b/.yarn/cache/@babel-core-npm-7.4.4-68728ded386943aec0f0d9416209578c4e5e2307bf792c28875875094793e6e3.zip new file mode 100644 index 0000000..3591db2 Binary files /dev/null and b/.yarn/cache/@babel-core-npm-7.4.4-68728ded386943aec0f0d9416209578c4e5e2307bf792c28875875094793e6e3.zip differ diff --git a/.yarn/cache/@babel-generator-npm-7.4.4-2fa2e6a0123f934f469198881d6267cc7e2fe1deab7d19a07dab250127d50402.zip b/.yarn/cache/@babel-generator-npm-7.4.4-2fa2e6a0123f934f469198881d6267cc7e2fe1deab7d19a07dab250127d50402.zip new file mode 100644 index 0000000..847990a Binary files /dev/null and b/.yarn/cache/@babel-generator-npm-7.4.4-2fa2e6a0123f934f469198881d6267cc7e2fe1deab7d19a07dab250127d50402.zip differ diff --git a/.yarn/cache/@babel-helper-annotate-as-pure-npm-7.0.0-c36e2328b02f83f4c00588437ed7ad23ec27d977fee7005bf0b274e7d3c1516a.zip b/.yarn/cache/@babel-helper-annotate-as-pure-npm-7.0.0-c36e2328b02f83f4c00588437ed7ad23ec27d977fee7005bf0b274e7d3c1516a.zip new file mode 100644 index 0000000..088bd88 Binary files /dev/null and b/.yarn/cache/@babel-helper-annotate-as-pure-npm-7.0.0-c36e2328b02f83f4c00588437ed7ad23ec27d977fee7005bf0b274e7d3c1516a.zip differ diff --git a/.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.1.0-2bd9e5e527edbaa4cc9f1a96f3d298fd5d04ca45efc4992b5c3cf0894cc1ba25.zip b/.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.1.0-2bd9e5e527edbaa4cc9f1a96f3d298fd5d04ca45efc4992b5c3cf0894cc1ba25.zip new file mode 100644 index 0000000..e1ef51c Binary files /dev/null and b/.yarn/cache/@babel-helper-builder-binary-assignment-operator-visitor-npm-7.1.0-2bd9e5e527edbaa4cc9f1a96f3d298fd5d04ca45efc4992b5c3cf0894cc1ba25.zip differ diff --git a/.yarn/cache/@babel-helper-builder-react-jsx-npm-7.3.0-9cc2edf46bf6b1a6c4a9183e2cf6540277f7b430eccb21ebc06b92932160f17f.zip b/.yarn/cache/@babel-helper-builder-react-jsx-npm-7.3.0-9cc2edf46bf6b1a6c4a9183e2cf6540277f7b430eccb21ebc06b92932160f17f.zip new file mode 100644 index 0000000..8622171 Binary files /dev/null and b/.yarn/cache/@babel-helper-builder-react-jsx-npm-7.3.0-9cc2edf46bf6b1a6c4a9183e2cf6540277f7b430eccb21ebc06b92932160f17f.zip differ diff --git a/.yarn/cache/@babel-helper-call-delegate-npm-7.4.4-f3ae77d13d65cd28c9d7fd35311a2f93869236b5e2ab3087b06b47c859a8e55d.zip b/.yarn/cache/@babel-helper-call-delegate-npm-7.4.4-f3ae77d13d65cd28c9d7fd35311a2f93869236b5e2ab3087b06b47c859a8e55d.zip new file mode 100644 index 0000000..af3746f Binary files /dev/null and b/.yarn/cache/@babel-helper-call-delegate-npm-7.4.4-f3ae77d13d65cd28c9d7fd35311a2f93869236b5e2ab3087b06b47c859a8e55d.zip differ diff --git a/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.4.4-584a42506abc580f1fa93675343622ed5a901617d480090395f2f21f3a21a710.zip b/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.4.4-584a42506abc580f1fa93675343622ed5a901617d480090395f2f21f3a21a710.zip new file mode 100644 index 0000000..2defcd4 Binary files /dev/null and b/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.4.4-584a42506abc580f1fa93675343622ed5a901617d480090395f2f21f3a21a710.zip differ diff --git a/.yarn/cache/@babel-helper-define-map-npm-7.4.4-b04eb901032b9ac03eeb12aa39c402d08d72b138a657d7bb3d1c2fe661c0078a.zip b/.yarn/cache/@babel-helper-define-map-npm-7.4.4-b04eb901032b9ac03eeb12aa39c402d08d72b138a657d7bb3d1c2fe661c0078a.zip new file mode 100644 index 0000000..40ce30b Binary files /dev/null and b/.yarn/cache/@babel-helper-define-map-npm-7.4.4-b04eb901032b9ac03eeb12aa39c402d08d72b138a657d7bb3d1c2fe661c0078a.zip differ diff --git a/.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.1.0-f7cf7b9198cca894e25179052f4fc093a6a01aaa16b7ee9d39291b8727b6adb7.zip b/.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.1.0-f7cf7b9198cca894e25179052f4fc093a6a01aaa16b7ee9d39291b8727b6adb7.zip new file mode 100644 index 0000000..491dc58 Binary files /dev/null and b/.yarn/cache/@babel-helper-explode-assignable-expression-npm-7.1.0-f7cf7b9198cca894e25179052f4fc093a6a01aaa16b7ee9d39291b8727b6adb7.zip differ diff --git a/.yarn/cache/@babel-helper-function-name-npm-7.1.0-d361e8e2e4581a1bb80bcc269bbc39f015541b7889a615b3e718e2288d887132.zip b/.yarn/cache/@babel-helper-function-name-npm-7.1.0-d361e8e2e4581a1bb80bcc269bbc39f015541b7889a615b3e718e2288d887132.zip new file mode 100644 index 0000000..fd12edd Binary files /dev/null and b/.yarn/cache/@babel-helper-function-name-npm-7.1.0-d361e8e2e4581a1bb80bcc269bbc39f015541b7889a615b3e718e2288d887132.zip differ diff --git a/.yarn/cache/@babel-helper-get-function-arity-npm-7.0.0-51153db2db8a5dddc7df5aac543c0fa5d7950523705494a217232461cb084db5.zip b/.yarn/cache/@babel-helper-get-function-arity-npm-7.0.0-51153db2db8a5dddc7df5aac543c0fa5d7950523705494a217232461cb084db5.zip new file mode 100644 index 0000000..acad8e5 Binary files /dev/null and b/.yarn/cache/@babel-helper-get-function-arity-npm-7.0.0-51153db2db8a5dddc7df5aac543c0fa5d7950523705494a217232461cb084db5.zip differ diff --git a/.yarn/cache/@babel-helper-hoist-variables-npm-7.4.4-97d7b627da3acd1c694af49363d6f83e1b4bc9477231a6b838b6106ebf8d4162.zip b/.yarn/cache/@babel-helper-hoist-variables-npm-7.4.4-97d7b627da3acd1c694af49363d6f83e1b4bc9477231a6b838b6106ebf8d4162.zip new file mode 100644 index 0000000..82e1dae Binary files /dev/null and b/.yarn/cache/@babel-helper-hoist-variables-npm-7.4.4-97d7b627da3acd1c694af49363d6f83e1b4bc9477231a6b838b6106ebf8d4162.zip differ diff --git a/.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.0.0-b72f17fade5e38105edc4ad7ff50a5b97881fc1dfa41ea94b86658276bef31ed.zip b/.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.0.0-b72f17fade5e38105edc4ad7ff50a5b97881fc1dfa41ea94b86658276bef31ed.zip new file mode 100644 index 0000000..da573f9 Binary files /dev/null and b/.yarn/cache/@babel-helper-member-expression-to-functions-npm-7.0.0-b72f17fade5e38105edc4ad7ff50a5b97881fc1dfa41ea94b86658276bef31ed.zip differ diff --git a/.yarn/cache/@babel-helper-module-imports-npm-7.0.0-000aa453317ff62896adddf8258d7603b805efb8883ac5e8e2d8ba2fdfc5131a.zip b/.yarn/cache/@babel-helper-module-imports-npm-7.0.0-000aa453317ff62896adddf8258d7603b805efb8883ac5e8e2d8ba2fdfc5131a.zip new file mode 100644 index 0000000..19c473a Binary files /dev/null and b/.yarn/cache/@babel-helper-module-imports-npm-7.0.0-000aa453317ff62896adddf8258d7603b805efb8883ac5e8e2d8ba2fdfc5131a.zip differ diff --git a/.yarn/cache/@babel-helper-module-transforms-npm-7.4.4-fc9b7d990e82333aef569672f5d5912aaee103452c586992208bba9d5e451797.zip b/.yarn/cache/@babel-helper-module-transforms-npm-7.4.4-fc9b7d990e82333aef569672f5d5912aaee103452c586992208bba9d5e451797.zip new file mode 100644 index 0000000..219c106 Binary files /dev/null and b/.yarn/cache/@babel-helper-module-transforms-npm-7.4.4-fc9b7d990e82333aef569672f5d5912aaee103452c586992208bba9d5e451797.zip differ diff --git a/.yarn/cache/@babel-helper-optimise-call-expression-npm-7.0.0-b901288b943c92834c321f6853e50bec64284da1600e45d3dcba628ed4f990f4.zip b/.yarn/cache/@babel-helper-optimise-call-expression-npm-7.0.0-b901288b943c92834c321f6853e50bec64284da1600e45d3dcba628ed4f990f4.zip new file mode 100644 index 0000000..a1a89ab Binary files /dev/null and b/.yarn/cache/@babel-helper-optimise-call-expression-npm-7.0.0-b901288b943c92834c321f6853e50bec64284da1600e45d3dcba628ed4f990f4.zip differ diff --git a/.yarn/cache/@babel-helper-plugin-utils-npm-7.0.0-39d23bf690d153913f42613de1caafdb5cc1976fa73e54c74ebff2f9670c95ab.zip b/.yarn/cache/@babel-helper-plugin-utils-npm-7.0.0-39d23bf690d153913f42613de1caafdb5cc1976fa73e54c74ebff2f9670c95ab.zip new file mode 100644 index 0000000..64ca23e Binary files /dev/null and b/.yarn/cache/@babel-helper-plugin-utils-npm-7.0.0-39d23bf690d153913f42613de1caafdb5cc1976fa73e54c74ebff2f9670c95ab.zip differ diff --git a/.yarn/cache/@babel-helper-regex-npm-7.4.4-3a976dd3cfc663e13fe605fa58945bea92144c9d3ba3fb93fc92109286a99d16.zip b/.yarn/cache/@babel-helper-regex-npm-7.4.4-3a976dd3cfc663e13fe605fa58945bea92144c9d3ba3fb93fc92109286a99d16.zip new file mode 100644 index 0000000..cb64562 Binary files /dev/null and b/.yarn/cache/@babel-helper-regex-npm-7.4.4-3a976dd3cfc663e13fe605fa58945bea92144c9d3ba3fb93fc92109286a99d16.zip differ diff --git a/.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.1.0-def30b73e8568a06990fe7a649bf2bb45ad85d52008a2b48d218201d3fe2a721.zip b/.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.1.0-def30b73e8568a06990fe7a649bf2bb45ad85d52008a2b48d218201d3fe2a721.zip new file mode 100644 index 0000000..e1ccef8 Binary files /dev/null and b/.yarn/cache/@babel-helper-remap-async-to-generator-npm-7.1.0-def30b73e8568a06990fe7a649bf2bb45ad85d52008a2b48d218201d3fe2a721.zip differ diff --git a/.yarn/cache/@babel-helper-replace-supers-npm-7.4.4-140f2cff3d47b8669f871f9d58ca344f919dc3dbf2890d8dddfa1933527a7729.zip b/.yarn/cache/@babel-helper-replace-supers-npm-7.4.4-140f2cff3d47b8669f871f9d58ca344f919dc3dbf2890d8dddfa1933527a7729.zip new file mode 100644 index 0000000..530b996 Binary files /dev/null and b/.yarn/cache/@babel-helper-replace-supers-npm-7.4.4-140f2cff3d47b8669f871f9d58ca344f919dc3dbf2890d8dddfa1933527a7729.zip differ diff --git a/.yarn/cache/@babel-helper-simple-access-npm-7.1.0-b72935be623dbc1dc87045186b56959cd0e2adf95ffc6a7f67cffe6854337a4b.zip b/.yarn/cache/@babel-helper-simple-access-npm-7.1.0-b72935be623dbc1dc87045186b56959cd0e2adf95ffc6a7f67cffe6854337a4b.zip new file mode 100644 index 0000000..5a1eaba Binary files /dev/null and b/.yarn/cache/@babel-helper-simple-access-npm-7.1.0-b72935be623dbc1dc87045186b56959cd0e2adf95ffc6a7f67cffe6854337a4b.zip differ diff --git a/.yarn/cache/@babel-helper-split-export-declaration-npm-7.4.4-ff0d0b13341dee578a5583d1b5b08c108c661b0e46ef148267e513b080f4ca53.zip b/.yarn/cache/@babel-helper-split-export-declaration-npm-7.4.4-ff0d0b13341dee578a5583d1b5b08c108c661b0e46ef148267e513b080f4ca53.zip new file mode 100644 index 0000000..2676a02 Binary files /dev/null and b/.yarn/cache/@babel-helper-split-export-declaration-npm-7.4.4-ff0d0b13341dee578a5583d1b5b08c108c661b0e46ef148267e513b080f4ca53.zip differ diff --git a/.yarn/cache/@babel-helper-wrap-function-npm-7.2.0-b0d86ff2dd4a9e9a31119900fd8a8a6ad29f536d76a080d644bab31d1eb66323.zip b/.yarn/cache/@babel-helper-wrap-function-npm-7.2.0-b0d86ff2dd4a9e9a31119900fd8a8a6ad29f536d76a080d644bab31d1eb66323.zip new file mode 100644 index 0000000..3216daa Binary files /dev/null and b/.yarn/cache/@babel-helper-wrap-function-npm-7.2.0-b0d86ff2dd4a9e9a31119900fd8a8a6ad29f536d76a080d644bab31d1eb66323.zip differ diff --git a/.yarn/cache/@babel-helpers-npm-7.4.4-b5d4636f456d97e8a379d97e5d71515d7be09e86778dba85a47f0d07935ffc5d.zip b/.yarn/cache/@babel-helpers-npm-7.4.4-b5d4636f456d97e8a379d97e5d71515d7be09e86778dba85a47f0d07935ffc5d.zip new file mode 100644 index 0000000..7f80691 Binary files /dev/null and b/.yarn/cache/@babel-helpers-npm-7.4.4-b5d4636f456d97e8a379d97e5d71515d7be09e86778dba85a47f0d07935ffc5d.zip differ diff --git a/.yarn/cache/@babel-highlight-npm-7.0.0-2428398367170ce5325767ccac6eb625fafb89ff55774bbb83b33cec3e7eeec9.zip b/.yarn/cache/@babel-highlight-npm-7.0.0-2428398367170ce5325767ccac6eb625fafb89ff55774bbb83b33cec3e7eeec9.zip new file mode 100644 index 0000000..b1543f4 Binary files /dev/null and b/.yarn/cache/@babel-highlight-npm-7.0.0-2428398367170ce5325767ccac6eb625fafb89ff55774bbb83b33cec3e7eeec9.zip differ diff --git a/.yarn/cache/@babel-parser-npm-7.4.4-255a272eac9b6ce2b8ba70e203c632cad81368c00feff1c4aa13e4fdaefdb435.zip b/.yarn/cache/@babel-parser-npm-7.4.4-255a272eac9b6ce2b8ba70e203c632cad81368c00feff1c4aa13e4fdaefdb435.zip new file mode 100644 index 0000000..6c05f8d Binary files /dev/null and b/.yarn/cache/@babel-parser-npm-7.4.4-255a272eac9b6ce2b8ba70e203c632cad81368c00feff1c4aa13e4fdaefdb435.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.2.0-a7273b5154f0d12dcc157eb570e42b9974e79f399b538412200cc01f16223422.zip b/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.2.0-a7273b5154f0d12dcc157eb570e42b9974e79f399b538412200cc01f16223422.zip new file mode 100644 index 0000000..1236469 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-async-generator-functions-npm-7.2.0-a7273b5154f0d12dcc157eb570e42b9974e79f399b538412200cc01f16223422.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.4.4-7a2569c594dcd01733360806c3141fb6e6de2e6c5476108a37a52d11d77bcd03.zip b/.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.4.4-7a2569c594dcd01733360806c3141fb6e6de2e6c5476108a37a52d11d77bcd03.zip new file mode 100644 index 0000000..9019646 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-class-properties-npm-7.4.4-7a2569c594dcd01733360806c3141fb6e6de2e6c5476108a37a52d11d77bcd03.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-decorators-npm-7.4.4-ad9d4294db540da35e1946c6f2a700126706fd304439ad5963d0ed6c20982786.zip b/.yarn/cache/@babel-plugin-proposal-decorators-npm-7.4.4-ad9d4294db540da35e1946c6f2a700126706fd304439ad5963d0ed6c20982786.zip new file mode 100644 index 0000000..5a1852c Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-decorators-npm-7.4.4-ad9d4294db540da35e1946c6f2a700126706fd304439ad5963d0ed6c20982786.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.2.0-d982dbfe549190f9aea0258f750122aaf5fb703ba5ba827579fac9f65f7b26f8.zip b/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.2.0-d982dbfe549190f9aea0258f750122aaf5fb703ba5ba827579fac9f65f7b26f8.zip new file mode 100644 index 0000000..8c8fef1 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-json-strings-npm-7.2.0-d982dbfe549190f9aea0258f750122aaf5fb703ba5ba827579fac9f65f7b26f8.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.4.4-49552a88c898447cc8245ee03caeb6492fd226d25a869595fd37becc4bfd7b8d.zip b/.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.4.4-49552a88c898447cc8245ee03caeb6492fd226d25a869595fd37becc4bfd7b8d.zip new file mode 100644 index 0000000..43b8b30 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-object-rest-spread-npm-7.4.4-49552a88c898447cc8245ee03caeb6492fd226d25a869595fd37becc4bfd7b8d.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.2.0-d6022b0cc406b26ba0b41a0f319b951ba6f571f350af3a3c74b1dfc904e79f20.zip b/.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.2.0-d6022b0cc406b26ba0b41a0f319b951ba6f571f350af3a3c74b1dfc904e79f20.zip new file mode 100644 index 0000000..66ed155 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-optional-catch-binding-npm-7.2.0-d6022b0cc406b26ba0b41a0f319b951ba6f571f350af3a3c74b1dfc904e79f20.zip differ diff --git a/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.4.4-394311e46ab05af88adeb9f95d68935bf0dd883f2dae1e97318671670fa83634.zip b/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.4.4-394311e46ab05af88adeb9f95d68935bf0dd883f2dae1e97318671670fa83634.zip new file mode 100644 index 0000000..41f2465 Binary files /dev/null and b/.yarn/cache/@babel-plugin-proposal-unicode-property-regex-npm-7.4.4-394311e46ab05af88adeb9f95d68935bf0dd883f2dae1e97318671670fa83634.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-async-generators-npm-7.2.0-56052ba1fce800c355d1d0ae28a07ff7abb8f82fe18286cd21282998cef77e4b.zip b/.yarn/cache/@babel-plugin-syntax-async-generators-npm-7.2.0-56052ba1fce800c355d1d0ae28a07ff7abb8f82fe18286cd21282998cef77e4b.zip new file mode 100644 index 0000000..1975630 Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-async-generators-npm-7.2.0-56052ba1fce800c355d1d0ae28a07ff7abb8f82fe18286cd21282998cef77e4b.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-decorators-npm-7.2.0-1149291ab7d7cceaf2c533d78ea8bdcb0cbc55f0fe7ea670b7f523ed9ef38117.zip b/.yarn/cache/@babel-plugin-syntax-decorators-npm-7.2.0-1149291ab7d7cceaf2c533d78ea8bdcb0cbc55f0fe7ea670b7f523ed9ef38117.zip new file mode 100644 index 0000000..bca6f1a Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-decorators-npm-7.2.0-1149291ab7d7cceaf2c533d78ea8bdcb0cbc55f0fe7ea670b7f523ed9ef38117.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-json-strings-npm-7.2.0-ace2a02bfc6722bd93afb2f190b9448731e8923b831fba06a088b96733e1dced.zip b/.yarn/cache/@babel-plugin-syntax-json-strings-npm-7.2.0-ace2a02bfc6722bd93afb2f190b9448731e8923b831fba06a088b96733e1dced.zip new file mode 100644 index 0000000..58ad2d9 Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-json-strings-npm-7.2.0-ace2a02bfc6722bd93afb2f190b9448731e8923b831fba06a088b96733e1dced.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-jsx-npm-7.2.0-aacb3bb293af315341b1c3cfe1cc9281cc4d712c3c0ce8131302a2fe60610d15.zip b/.yarn/cache/@babel-plugin-syntax-jsx-npm-7.2.0-aacb3bb293af315341b1c3cfe1cc9281cc4d712c3c0ce8131302a2fe60610d15.zip new file mode 100644 index 0000000..0c556fe Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-jsx-npm-7.2.0-aacb3bb293af315341b1c3cfe1cc9281cc4d712c3c0ce8131302a2fe60610d15.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-object-rest-spread-npm-7.2.0-c9b7d141d0a582d35d17327bf1e9221946b886ad398cee4474b5db45d70d4a34.zip b/.yarn/cache/@babel-plugin-syntax-object-rest-spread-npm-7.2.0-c9b7d141d0a582d35d17327bf1e9221946b886ad398cee4474b5db45d70d4a34.zip new file mode 100644 index 0000000..1d94d62 Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-object-rest-spread-npm-7.2.0-c9b7d141d0a582d35d17327bf1e9221946b886ad398cee4474b5db45d70d4a34.zip differ diff --git a/.yarn/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.2.0-f92dd992101e1849714ebd5c74feb7f83ef1e577ff78f967f9006eae0ae23953.zip b/.yarn/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.2.0-f92dd992101e1849714ebd5c74feb7f83ef1e577ff78f967f9006eae0ae23953.zip new file mode 100644 index 0000000..2b7ab20 Binary files /dev/null and b/.yarn/cache/@babel-plugin-syntax-optional-catch-binding-npm-7.2.0-f92dd992101e1849714ebd5c74feb7f83ef1e577ff78f967f9006eae0ae23953.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.2.0-cbeb9261ce04540f7c1dcd00a0ab68123652051888de879794d59eda2f6eebb9.zip b/.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.2.0-cbeb9261ce04540f7c1dcd00a0ab68123652051888de879794d59eda2f6eebb9.zip new file mode 100644 index 0000000..d29a153 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-arrow-functions-npm-7.2.0-cbeb9261ce04540f7c1dcd00a0ab68123652051888de879794d59eda2f6eebb9.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.4.4-3e386255514cf34fe1b71502f7b899444377b9fd2afe9e9dab81fabc600e688e.zip b/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.4.4-3e386255514cf34fe1b71502f7b899444377b9fd2afe9e9dab81fabc600e688e.zip new file mode 100644 index 0000000..63d5469 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-async-to-generator-npm-7.4.4-3e386255514cf34fe1b71502f7b899444377b9fd2afe9e9dab81fabc600e688e.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-block-scoped-functions-npm-7.2.0-de4d12683c496e4d4b5f11c741a629caab6c7540aea8a9d847295796a752e3ea.zip b/.yarn/cache/@babel-plugin-transform-block-scoped-functions-npm-7.2.0-de4d12683c496e4d4b5f11c741a629caab6c7540aea8a9d847295796a752e3ea.zip new file mode 100644 index 0000000..881e164 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-block-scoped-functions-npm-7.2.0-de4d12683c496e4d4b5f11c741a629caab6c7540aea8a9d847295796a752e3ea.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.4.4-0f5e2238d9e6cd329982d95e2c161b880440a0fccee4375a3f6fe36b58e75aee.zip b/.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.4.4-0f5e2238d9e6cd329982d95e2c161b880440a0fccee4375a3f6fe36b58e75aee.zip new file mode 100644 index 0000000..a912128 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-block-scoping-npm-7.4.4-0f5e2238d9e6cd329982d95e2c161b880440a0fccee4375a3f6fe36b58e75aee.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-classes-npm-7.4.4-2413ae0e7d4a74f39de2861648d748a1a8d4c73a71c725f72e798aad12c1b5f8.zip b/.yarn/cache/@babel-plugin-transform-classes-npm-7.4.4-2413ae0e7d4a74f39de2861648d748a1a8d4c73a71c725f72e798aad12c1b5f8.zip new file mode 100644 index 0000000..159bb3e Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-classes-npm-7.4.4-2413ae0e7d4a74f39de2861648d748a1a8d4c73a71c725f72e798aad12c1b5f8.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.2.0-e7977a2d1cc8848bd978f17faa764f137954ba7e96f722418fb60e65365a1123.zip b/.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.2.0-e7977a2d1cc8848bd978f17faa764f137954ba7e96f722418fb60e65365a1123.zip new file mode 100644 index 0000000..0b34c70 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-computed-properties-npm-7.2.0-e7977a2d1cc8848bd978f17faa764f137954ba7e96f722418fb60e65365a1123.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-destructuring-npm-7.4.4-90d6718ff2fcf28f8f49cbbcf2610e53a8a8d842b0a39388431fcee608ae461d.zip b/.yarn/cache/@babel-plugin-transform-destructuring-npm-7.4.4-90d6718ff2fcf28f8f49cbbcf2610e53a8a8d842b0a39388431fcee608ae461d.zip new file mode 100644 index 0000000..b35b284 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-destructuring-npm-7.4.4-90d6718ff2fcf28f8f49cbbcf2610e53a8a8d842b0a39388431fcee608ae461d.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.4.4-bb484586101829708c865c66dba102bca64324419e44817d737e48e50b0a8284.zip b/.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.4.4-bb484586101829708c865c66dba102bca64324419e44817d737e48e50b0a8284.zip new file mode 100644 index 0000000..d5b4d7c Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-dotall-regex-npm-7.4.4-bb484586101829708c865c66dba102bca64324419e44817d737e48e50b0a8284.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.2.0-c4766a2d8b9e0dfa11ce1f6623e2024c8522efb9fc6ade7b72a089e1c56e9b34.zip b/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.2.0-c4766a2d8b9e0dfa11ce1f6623e2024c8522efb9fc6ade7b72a089e1c56e9b34.zip new file mode 100644 index 0000000..12e5882 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-duplicate-keys-npm-7.2.0-c4766a2d8b9e0dfa11ce1f6623e2024c8522efb9fc6ade7b72a089e1c56e9b34.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.2.0-0732e6bddc9c1db7c97598a91a05656d793737bb280e8163eadff7dc53092a86.zip b/.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.2.0-0732e6bddc9c1db7c97598a91a05656d793737bb280e8163eadff7dc53092a86.zip new file mode 100644 index 0000000..a676722 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-exponentiation-operator-npm-7.2.0-0732e6bddc9c1db7c97598a91a05656d793737bb280e8163eadff7dc53092a86.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-for-of-npm-7.4.4-5baecd675df74d2dc694b7dd5210387f6431fa56f81d1ea0feb2e697826b73d0.zip b/.yarn/cache/@babel-plugin-transform-for-of-npm-7.4.4-5baecd675df74d2dc694b7dd5210387f6431fa56f81d1ea0feb2e697826b73d0.zip new file mode 100644 index 0000000..c84a872 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-for-of-npm-7.4.4-5baecd675df74d2dc694b7dd5210387f6431fa56f81d1ea0feb2e697826b73d0.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-function-name-npm-7.4.4-69b86624c6e8548fa8a995c62ec028072b7e50e131107e651a31282ba67b2d85.zip b/.yarn/cache/@babel-plugin-transform-function-name-npm-7.4.4-69b86624c6e8548fa8a995c62ec028072b7e50e131107e651a31282ba67b2d85.zip new file mode 100644 index 0000000..83d6321 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-function-name-npm-7.4.4-69b86624c6e8548fa8a995c62ec028072b7e50e131107e651a31282ba67b2d85.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-literals-npm-7.2.0-eee5a4f7e945ef583859d1833176d07047dbac7276c3765281888aff9628d6be.zip b/.yarn/cache/@babel-plugin-transform-literals-npm-7.2.0-eee5a4f7e945ef583859d1833176d07047dbac7276c3765281888aff9628d6be.zip new file mode 100644 index 0000000..3333e92 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-literals-npm-7.2.0-eee5a4f7e945ef583859d1833176d07047dbac7276c3765281888aff9628d6be.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-member-expression-literals-npm-7.2.0-c8bcb8208a98b7676e1607e933a23c29aa1a632a0fdafc72598007f52f543576.zip b/.yarn/cache/@babel-plugin-transform-member-expression-literals-npm-7.2.0-c8bcb8208a98b7676e1607e933a23c29aa1a632a0fdafc72598007f52f543576.zip new file mode 100644 index 0000000..2f8227c Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-member-expression-literals-npm-7.2.0-c8bcb8208a98b7676e1607e933a23c29aa1a632a0fdafc72598007f52f543576.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.2.0-fbf5d84872ff89cd34d62b80ddaddba5b1a23d97ff47d4f5726c558a7f360d95.zip b/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.2.0-fbf5d84872ff89cd34d62b80ddaddba5b1a23d97ff47d4f5726c558a7f360d95.zip new file mode 100644 index 0000000..f26996a Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-amd-npm-7.2.0-fbf5d84872ff89cd34d62b80ddaddba5b1a23d97ff47d4f5726c558a7f360d95.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.4.4-d0eb8fc2c746d5050da9762f06da41bee536ef7940be9fcdf0bae807ab935968.zip b/.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.4.4-d0eb8fc2c746d5050da9762f06da41bee536ef7940be9fcdf0bae807ab935968.zip new file mode 100644 index 0000000..52a4624 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-commonjs-npm-7.4.4-d0eb8fc2c746d5050da9762f06da41bee536ef7940be9fcdf0bae807ab935968.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.4.4-acc182b45f4a9621d04f579c18088909eba38512e15975f5fbae9507d4a8930d.zip b/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.4.4-acc182b45f4a9621d04f579c18088909eba38512e15975f5fbae9507d4a8930d.zip new file mode 100644 index 0000000..6b3f18e Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-systemjs-npm-7.4.4-acc182b45f4a9621d04f579c18088909eba38512e15975f5fbae9507d4a8930d.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.2.0-42b9e1286a92833b1d848ee9e47265008ccca0d30a4f7d99c9e4a9f725bfc757.zip b/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.2.0-42b9e1286a92833b1d848ee9e47265008ccca0d30a4f7d99c9e4a9f725bfc757.zip new file mode 100644 index 0000000..587346c Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-modules-umd-npm-7.2.0-42b9e1286a92833b1d848ee9e47265008ccca0d30a4f7d99c9e4a9f725bfc757.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.4.4-b8fc4cfcf3a28e72efdf2c050dfda1a10c5b40c422e09cf15ee8b111e605e2f7.zip b/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.4.4-b8fc4cfcf3a28e72efdf2c050dfda1a10c5b40c422e09cf15ee8b111e605e2f7.zip new file mode 100644 index 0000000..dfd84e2 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-named-capturing-groups-regex-npm-7.4.4-b8fc4cfcf3a28e72efdf2c050dfda1a10c5b40c422e09cf15ee8b111e605e2f7.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-new-target-npm-7.4.4-f052f09038d21a65c4c28a33bd0495bf40e7ff30c542ade1f8714f1e096d24db.zip b/.yarn/cache/@babel-plugin-transform-new-target-npm-7.4.4-f052f09038d21a65c4c28a33bd0495bf40e7ff30c542ade1f8714f1e096d24db.zip new file mode 100644 index 0000000..439e335 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-new-target-npm-7.4.4-f052f09038d21a65c4c28a33bd0495bf40e7ff30c542ade1f8714f1e096d24db.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-object-super-npm-7.2.0-03a71be53b2967aa68ebfa16500d65ebe3be20b39fba91232288cf8cabf5cbc7.zip b/.yarn/cache/@babel-plugin-transform-object-super-npm-7.2.0-03a71be53b2967aa68ebfa16500d65ebe3be20b39fba91232288cf8cabf5cbc7.zip new file mode 100644 index 0000000..fa15999 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-object-super-npm-7.2.0-03a71be53b2967aa68ebfa16500d65ebe3be20b39fba91232288cf8cabf5cbc7.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-parameters-npm-7.4.4-743aab0717900cd536d9e0e94748bae81fd49761c32d43e93a91a51d72897f34.zip b/.yarn/cache/@babel-plugin-transform-parameters-npm-7.4.4-743aab0717900cd536d9e0e94748bae81fd49761c32d43e93a91a51d72897f34.zip new file mode 100644 index 0000000..bb30e7e Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-parameters-npm-7.4.4-743aab0717900cd536d9e0e94748bae81fd49761c32d43e93a91a51d72897f34.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-property-literals-npm-7.2.0-fab879c3a5833c9e2d9847ca68be0469e344601876aba899ecdbdf0a644068ec.zip b/.yarn/cache/@babel-plugin-transform-property-literals-npm-7.2.0-fab879c3a5833c9e2d9847ca68be0469e344601876aba899ecdbdf0a644068ec.zip new file mode 100644 index 0000000..474680c Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-property-literals-npm-7.2.0-fab879c3a5833c9e2d9847ca68be0469e344601876aba899ecdbdf0a644068ec.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-react-display-name-npm-7.2.0-871d02761b5340785d9d7e0dd0a41db8bf2ed7a35c87dff1560dd7030a9faff5.zip b/.yarn/cache/@babel-plugin-transform-react-display-name-npm-7.2.0-871d02761b5340785d9d7e0dd0a41db8bf2ed7a35c87dff1560dd7030a9faff5.zip new file mode 100644 index 0000000..623f7a5 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-react-display-name-npm-7.2.0-871d02761b5340785d9d7e0dd0a41db8bf2ed7a35c87dff1560dd7030a9faff5.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.3.0-36172ffd526b08029fda9b0d54d944eaa64b0329c3917c7d6e2816d0d30ae28d.zip b/.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.3.0-36172ffd526b08029fda9b0d54d944eaa64b0329c3917c7d6e2816d0d30ae28d.zip new file mode 100644 index 0000000..2c108c4 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-react-jsx-npm-7.3.0-36172ffd526b08029fda9b0d54d944eaa64b0329c3917c7d6e2816d0d30ae28d.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-react-jsx-self-npm-7.2.0-ae34dd00e76caa842404a2ebb3d9700825bf35d42daec825f40da9563f9144e0.zip b/.yarn/cache/@babel-plugin-transform-react-jsx-self-npm-7.2.0-ae34dd00e76caa842404a2ebb3d9700825bf35d42daec825f40da9563f9144e0.zip new file mode 100644 index 0000000..b585b93 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-react-jsx-self-npm-7.2.0-ae34dd00e76caa842404a2ebb3d9700825bf35d42daec825f40da9563f9144e0.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-react-jsx-source-npm-7.2.0-c984443351d3694bea9da599816c21c4e36729f1dfd55999b666fb4538f5d340.zip b/.yarn/cache/@babel-plugin-transform-react-jsx-source-npm-7.2.0-c984443351d3694bea9da599816c21c4e36729f1dfd55999b666fb4538f5d340.zip new file mode 100644 index 0000000..8af1c28 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-react-jsx-source-npm-7.2.0-c984443351d3694bea9da599816c21c4e36729f1dfd55999b666fb4538f5d340.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.4.4-f82edc564df66c04a2423d1b67b7b283f4408fe079c7685699e1e3562d69b152.zip b/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.4.4-f82edc564df66c04a2423d1b67b7b283f4408fe079c7685699e1e3562d69b152.zip new file mode 100644 index 0000000..bf9b5ee Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.4.4-f82edc564df66c04a2423d1b67b7b283f4408fe079c7685699e1e3562d69b152.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.2.0-ec8ea33fce6412220607fad07ebb8c7c182083d66fbbcddeb0b11bfbf8869b86.zip b/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.2.0-ec8ea33fce6412220607fad07ebb8c7c182083d66fbbcddeb0b11bfbf8869b86.zip new file mode 100644 index 0000000..161b178 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-reserved-words-npm-7.2.0-ec8ea33fce6412220607fad07ebb8c7c182083d66fbbcddeb0b11bfbf8869b86.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-runtime-npm-7.4.4-03e2496d771dfb8ab06661878cbe7d217beb8f539b10d56930ad813a89f07077.zip b/.yarn/cache/@babel-plugin-transform-runtime-npm-7.4.4-03e2496d771dfb8ab06661878cbe7d217beb8f539b10d56930ad813a89f07077.zip new file mode 100644 index 0000000..3dc4d4d Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-runtime-npm-7.4.4-03e2496d771dfb8ab06661878cbe7d217beb8f539b10d56930ad813a89f07077.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-shorthand-properties-npm-7.2.0-f8349323b8de72e7b7fd41780eeaf9225670fb666c125d70fd49221e143767be.zip b/.yarn/cache/@babel-plugin-transform-shorthand-properties-npm-7.2.0-f8349323b8de72e7b7fd41780eeaf9225670fb666c125d70fd49221e143767be.zip new file mode 100644 index 0000000..544e2de Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-shorthand-properties-npm-7.2.0-f8349323b8de72e7b7fd41780eeaf9225670fb666c125d70fd49221e143767be.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-spread-npm-7.2.2-63441564cb32baa20545c29fcba0386cad080a5656baa3637f755b7f96ef00af.zip b/.yarn/cache/@babel-plugin-transform-spread-npm-7.2.2-63441564cb32baa20545c29fcba0386cad080a5656baa3637f755b7f96ef00af.zip new file mode 100644 index 0000000..018e83a Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-spread-npm-7.2.2-63441564cb32baa20545c29fcba0386cad080a5656baa3637f755b7f96ef00af.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.2.0-4bc03f2b9d4a04e98fe22c3d34609ff1ebd139cafe6a69ac813941dcdf79005c.zip b/.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.2.0-4bc03f2b9d4a04e98fe22c3d34609ff1ebd139cafe6a69ac813941dcdf79005c.zip new file mode 100644 index 0000000..721b372 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-sticky-regex-npm-7.2.0-4bc03f2b9d4a04e98fe22c3d34609ff1ebd139cafe6a69ac813941dcdf79005c.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-template-literals-npm-7.4.4-5dd4453d150e33501402316bebc110e89f788c9178fd1f2116135a666f547590.zip b/.yarn/cache/@babel-plugin-transform-template-literals-npm-7.4.4-5dd4453d150e33501402316bebc110e89f788c9178fd1f2116135a666f547590.zip new file mode 100644 index 0000000..62e5dd1 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-template-literals-npm-7.4.4-5dd4453d150e33501402316bebc110e89f788c9178fd1f2116135a666f547590.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.2.0-e8fbbe6e15e9d8fa92f6a84c013538881df5a5703766bf1cb2a795c11159d6f8.zip b/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.2.0-e8fbbe6e15e9d8fa92f6a84c013538881df5a5703766bf1cb2a795c11159d6f8.zip new file mode 100644 index 0000000..ba6c563 Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-typeof-symbol-npm-7.2.0-e8fbbe6e15e9d8fa92f6a84c013538881df5a5703766bf1cb2a795c11159d6f8.zip differ diff --git a/.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.4.4-53dd29db47c23164938ac3d67870ed3130cc2cfede9cb2fdf3d95aa4be25118b.zip b/.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.4.4-53dd29db47c23164938ac3d67870ed3130cc2cfede9cb2fdf3d95aa4be25118b.zip new file mode 100644 index 0000000..0ad36ea Binary files /dev/null and b/.yarn/cache/@babel-plugin-transform-unicode-regex-npm-7.4.4-53dd29db47c23164938ac3d67870ed3130cc2cfede9cb2fdf3d95aa4be25118b.zip differ diff --git a/.yarn/cache/@babel-preset-env-npm-7.4.4-2e52076a5ac574935a92e9788d07fa8ec56b8e643789f5446ac0ae2cbc905bc8.zip b/.yarn/cache/@babel-preset-env-npm-7.4.4-2e52076a5ac574935a92e9788d07fa8ec56b8e643789f5446ac0ae2cbc905bc8.zip new file mode 100644 index 0000000..30ee1a9 Binary files /dev/null and b/.yarn/cache/@babel-preset-env-npm-7.4.4-2e52076a5ac574935a92e9788d07fa8ec56b8e643789f5446ac0ae2cbc905bc8.zip differ diff --git a/.yarn/cache/@babel-preset-react-npm-7.0.0-64c0cb5df451c2cd8e36a54568888d6fd60883c4770fd2b8d3d705917548e3fb.zip b/.yarn/cache/@babel-preset-react-npm-7.0.0-64c0cb5df451c2cd8e36a54568888d6fd60883c4770fd2b8d3d705917548e3fb.zip new file mode 100644 index 0000000..7d433bd Binary files /dev/null and b/.yarn/cache/@babel-preset-react-npm-7.0.0-64c0cb5df451c2cd8e36a54568888d6fd60883c4770fd2b8d3d705917548e3fb.zip differ diff --git a/.yarn/cache/@babel-runtime-npm-7.4.4-9ffeb059fc3ee93b91d55bd5b19b679f8863d43ea7accb07adafba286600f4a4.zip b/.yarn/cache/@babel-runtime-npm-7.4.4-9ffeb059fc3ee93b91d55bd5b19b679f8863d43ea7accb07adafba286600f4a4.zip new file mode 100644 index 0000000..9f030db Binary files /dev/null and b/.yarn/cache/@babel-runtime-npm-7.4.4-9ffeb059fc3ee93b91d55bd5b19b679f8863d43ea7accb07adafba286600f4a4.zip differ diff --git a/.yarn/cache/@babel-template-npm-7.4.4-e0d4d19672bffaee71431a425236d54924f140f54271b868566e7c46284b133d.zip b/.yarn/cache/@babel-template-npm-7.4.4-e0d4d19672bffaee71431a425236d54924f140f54271b868566e7c46284b133d.zip new file mode 100644 index 0000000..834a711 Binary files /dev/null and b/.yarn/cache/@babel-template-npm-7.4.4-e0d4d19672bffaee71431a425236d54924f140f54271b868566e7c46284b133d.zip differ diff --git a/.yarn/cache/@babel-traverse-npm-7.4.4-a14a2db8c4a06a868e51caaf04bee8e129c363c12cfa3b0fd07f6822112f7dea.zip b/.yarn/cache/@babel-traverse-npm-7.4.4-a14a2db8c4a06a868e51caaf04bee8e129c363c12cfa3b0fd07f6822112f7dea.zip new file mode 100644 index 0000000..7ea3a3a Binary files /dev/null and b/.yarn/cache/@babel-traverse-npm-7.4.4-a14a2db8c4a06a868e51caaf04bee8e129c363c12cfa3b0fd07f6822112f7dea.zip differ diff --git a/.yarn/cache/@babel-types-npm-7.4.4-03ba5cac16e7b25c51a13d7f35286478fdd209719e54eccff5c981a541819cbc.zip b/.yarn/cache/@babel-types-npm-7.4.4-03ba5cac16e7b25c51a13d7f35286478fdd209719e54eccff5c981a541819cbc.zip new file mode 100644 index 0000000..69a93eb Binary files /dev/null and b/.yarn/cache/@babel-types-npm-7.4.4-03ba5cac16e7b25c51a13d7f35286478fdd209719e54eccff5c981a541819cbc.zip differ diff --git a/.yarn/cache/@cnakazawa-watch-npm-1.0.3-c62495773c1c610ba76fa3a6cebca048dc103f369527f41eec7a4fc1b17f059e.zip b/.yarn/cache/@cnakazawa-watch-npm-1.0.3-c62495773c1c610ba76fa3a6cebca048dc103f369527f41eec7a4fc1b17f059e.zip new file mode 100644 index 0000000..9df815c Binary files /dev/null and b/.yarn/cache/@cnakazawa-watch-npm-1.0.3-c62495773c1c610ba76fa3a6cebca048dc103f369527f41eec7a4fc1b17f059e.zip differ diff --git a/.yarn/cache/@jest-console-npm-24.7.1-6c92990402378ac11cbf55f3d3b468ae774d86b1b76c953065c39a30f191e3ad.zip b/.yarn/cache/@jest-console-npm-24.7.1-6c92990402378ac11cbf55f3d3b468ae774d86b1b76c953065c39a30f191e3ad.zip new file mode 100644 index 0000000..2627fde Binary files /dev/null and b/.yarn/cache/@jest-console-npm-24.7.1-6c92990402378ac11cbf55f3d3b468ae774d86b1b76c953065c39a30f191e3ad.zip differ diff --git a/.yarn/cache/@jest-core-npm-24.7.1-9f8820239b8bc5ab5234965fd15dcfe812bf5fd26350a236a916903e38509483.zip b/.yarn/cache/@jest-core-npm-24.7.1-9f8820239b8bc5ab5234965fd15dcfe812bf5fd26350a236a916903e38509483.zip new file mode 100644 index 0000000..161d188 Binary files /dev/null and b/.yarn/cache/@jest-core-npm-24.7.1-9f8820239b8bc5ab5234965fd15dcfe812bf5fd26350a236a916903e38509483.zip differ diff --git a/.yarn/cache/@jest-environment-npm-24.7.1-3aea1d722fe058319dea86abe2cff4b86e1c626514f324ae8c2b939b313183a3.zip b/.yarn/cache/@jest-environment-npm-24.7.1-3aea1d722fe058319dea86abe2cff4b86e1c626514f324ae8c2b939b313183a3.zip new file mode 100644 index 0000000..842e21e Binary files /dev/null and b/.yarn/cache/@jest-environment-npm-24.7.1-3aea1d722fe058319dea86abe2cff4b86e1c626514f324ae8c2b939b313183a3.zip differ diff --git a/.yarn/cache/@jest-fake-timers-npm-24.7.1-31492f69096ec500a5fa4cd3745141b5fe7f91fe912aa09097d8dbdbf32bc3d9.zip b/.yarn/cache/@jest-fake-timers-npm-24.7.1-31492f69096ec500a5fa4cd3745141b5fe7f91fe912aa09097d8dbdbf32bc3d9.zip new file mode 100644 index 0000000..ad18d6e Binary files /dev/null and b/.yarn/cache/@jest-fake-timers-npm-24.7.1-31492f69096ec500a5fa4cd3745141b5fe7f91fe912aa09097d8dbdbf32bc3d9.zip differ diff --git a/.yarn/cache/@jest-reporters-npm-24.7.1-e1506ab73317c4e546ba02f845f23534f72434dae2fabcb578b5805328098509.zip b/.yarn/cache/@jest-reporters-npm-24.7.1-e1506ab73317c4e546ba02f845f23534f72434dae2fabcb578b5805328098509.zip new file mode 100644 index 0000000..ac388ad Binary files /dev/null and b/.yarn/cache/@jest-reporters-npm-24.7.1-e1506ab73317c4e546ba02f845f23534f72434dae2fabcb578b5805328098509.zip differ diff --git a/.yarn/cache/@jest-source-map-npm-24.3.0-ca6f1e63dbf28d65985f174f9b4b4332f3f2cc13935d6defdc31bf9286d062e0.zip b/.yarn/cache/@jest-source-map-npm-24.3.0-ca6f1e63dbf28d65985f174f9b4b4332f3f2cc13935d6defdc31bf9286d062e0.zip new file mode 100644 index 0000000..6cf86d6 Binary files /dev/null and b/.yarn/cache/@jest-source-map-npm-24.3.0-ca6f1e63dbf28d65985f174f9b4b4332f3f2cc13935d6defdc31bf9286d062e0.zip differ diff --git a/.yarn/cache/@jest-test-result-npm-24.7.1-e7083dc38f9f7f37b4efaad9f55e7a9d0f4bc7ba04554d87e110396e6999d1be.zip b/.yarn/cache/@jest-test-result-npm-24.7.1-e7083dc38f9f7f37b4efaad9f55e7a9d0f4bc7ba04554d87e110396e6999d1be.zip new file mode 100644 index 0000000..fbba73c Binary files /dev/null and b/.yarn/cache/@jest-test-result-npm-24.7.1-e7083dc38f9f7f37b4efaad9f55e7a9d0f4bc7ba04554d87e110396e6999d1be.zip differ diff --git a/.yarn/cache/@jest-test-sequencer-npm-24.7.1-793bb18252149dabb7fae44454da193e1e708940ec8cb3a27f175e2800a971f0.zip b/.yarn/cache/@jest-test-sequencer-npm-24.7.1-793bb18252149dabb7fae44454da193e1e708940ec8cb3a27f175e2800a971f0.zip new file mode 100644 index 0000000..8f58f7a Binary files /dev/null and b/.yarn/cache/@jest-test-sequencer-npm-24.7.1-793bb18252149dabb7fae44454da193e1e708940ec8cb3a27f175e2800a971f0.zip differ diff --git a/.yarn/cache/@jest-transform-npm-24.7.1-876a2b84529af45fae3c3139fce4dbfe81d1d7d8f1a2a8a98f60f4e1f1785ab4.zip b/.yarn/cache/@jest-transform-npm-24.7.1-876a2b84529af45fae3c3139fce4dbfe81d1d7d8f1a2a8a98f60f4e1f1785ab4.zip new file mode 100644 index 0000000..8b22f06 Binary files /dev/null and b/.yarn/cache/@jest-transform-npm-24.7.1-876a2b84529af45fae3c3139fce4dbfe81d1d7d8f1a2a8a98f60f4e1f1785ab4.zip differ diff --git a/.yarn/cache/@jest-types-npm-24.7.0-7a520b188e97f1d512f411eb083a3e596e82e30351bbe5f8ace2ffca0f72d17f.zip b/.yarn/cache/@jest-types-npm-24.7.0-7a520b188e97f1d512f411eb083a3e596e82e30351bbe5f8ace2ffca0f72d17f.zip new file mode 100644 index 0000000..c49e1d0 Binary files /dev/null and b/.yarn/cache/@jest-types-npm-24.7.0-7a520b188e97f1d512f411eb083a3e596e82e30351bbe5f8ace2ffca0f72d17f.zip differ diff --git a/.yarn/cache/@types-babel__core-npm-7.1.1-98e78e526196d31baf30a4952740f02fbea68fff7b06f7db64d710cb3bd321e7.zip b/.yarn/cache/@types-babel__core-npm-7.1.1-98e78e526196d31baf30a4952740f02fbea68fff7b06f7db64d710cb3bd321e7.zip new file mode 100644 index 0000000..78ed2bb Binary files /dev/null and b/.yarn/cache/@types-babel__core-npm-7.1.1-98e78e526196d31baf30a4952740f02fbea68fff7b06f7db64d710cb3bd321e7.zip differ diff --git a/.yarn/cache/@types-babel__generator-npm-7.0.2-33b28ce2595d627ada67c7fc6cf24d43690cc4fa3ffdcb16b36d7554be77aeca.zip b/.yarn/cache/@types-babel__generator-npm-7.0.2-33b28ce2595d627ada67c7fc6cf24d43690cc4fa3ffdcb16b36d7554be77aeca.zip new file mode 100644 index 0000000..ea5960d Binary files /dev/null and b/.yarn/cache/@types-babel__generator-npm-7.0.2-33b28ce2595d627ada67c7fc6cf24d43690cc4fa3ffdcb16b36d7554be77aeca.zip differ diff --git a/.yarn/cache/@types-babel__template-npm-7.0.2-da3c2ab8c18ed32fcd895e4a103d7a6351f2c2e621ee84383c00d733a2c4dba1.zip b/.yarn/cache/@types-babel__template-npm-7.0.2-da3c2ab8c18ed32fcd895e4a103d7a6351f2c2e621ee84383c00d733a2c4dba1.zip new file mode 100644 index 0000000..2be01cd Binary files /dev/null and b/.yarn/cache/@types-babel__template-npm-7.0.2-da3c2ab8c18ed32fcd895e4a103d7a6351f2c2e621ee84383c00d733a2c4dba1.zip differ diff --git a/.yarn/cache/@types-babel__traverse-npm-7.0.6-17e4edd0c4ef6c74aaa288c0e4de9d896441e086c2b7d2e26328a315c0691dfe.zip b/.yarn/cache/@types-babel__traverse-npm-7.0.6-17e4edd0c4ef6c74aaa288c0e4de9d896441e086c2b7d2e26328a315c0691dfe.zip new file mode 100644 index 0000000..5439a6c Binary files /dev/null and b/.yarn/cache/@types-babel__traverse-npm-7.0.6-17e4edd0c4ef6c74aaa288c0e4de9d896441e086c2b7d2e26328a315c0691dfe.zip differ diff --git a/.yarn/cache/@types-estree-npm-0.0.39-1605ecc1de84849260de27398ff9931939399558278a2de88c090b68f42ce38e.zip b/.yarn/cache/@types-estree-npm-0.0.39-1605ecc1de84849260de27398ff9931939399558278a2de88c090b68f42ce38e.zip new file mode 100644 index 0000000..0c827f8 Binary files /dev/null and b/.yarn/cache/@types-estree-npm-0.0.39-1605ecc1de84849260de27398ff9931939399558278a2de88c090b68f42ce38e.zip differ diff --git a/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.1-dc781b292b0c77485d2aa1d651fddc3d0d35d30ec212b61680d5fbd14233498a.zip b/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.1-dc781b292b0c77485d2aa1d651fddc3d0d35d30ec212b61680d5fbd14233498a.zip new file mode 100644 index 0000000..623c3b8 Binary files /dev/null and b/.yarn/cache/@types-istanbul-lib-coverage-npm-2.0.1-dc781b292b0c77485d2aa1d651fddc3d0d35d30ec212b61680d5fbd14233498a.zip differ diff --git a/.yarn/cache/@types-node-npm-11.13.8-9329faae1101b7108cdf0638e23e1a1ede1dd20f04cc807ced47b05b23ca6082.zip b/.yarn/cache/@types-node-npm-11.13.8-9329faae1101b7108cdf0638e23e1a1ede1dd20f04cc807ced47b05b23ca6082.zip new file mode 100644 index 0000000..12f8266 Binary files /dev/null and b/.yarn/cache/@types-node-npm-11.13.8-9329faae1101b7108cdf0638e23e1a1ede1dd20f04cc807ced47b05b23ca6082.zip differ diff --git a/.yarn/cache/@types-stack-utils-npm-1.0.1-f39d3a6dac747bd9b20d9f8f4efa25a43c080345e2762ded45aa810d80c31062.zip b/.yarn/cache/@types-stack-utils-npm-1.0.1-f39d3a6dac747bd9b20d9f8f4efa25a43c080345e2762ded45aa810d80c31062.zip new file mode 100644 index 0000000..3aac21e Binary files /dev/null and b/.yarn/cache/@types-stack-utils-npm-1.0.1-f39d3a6dac747bd9b20d9f8f4efa25a43c080345e2762ded45aa810d80c31062.zip differ diff --git a/.yarn/cache/@types-yargs-npm-12.0.12-2cf6772098b90082f3117c1654f531d219fb4a406ac7cdc20416fa9b04fb5cc5.zip b/.yarn/cache/@types-yargs-npm-12.0.12-2cf6772098b90082f3117c1654f531d219fb4a406ac7cdc20416fa9b04fb5cc5.zip new file mode 100644 index 0000000..0fce8f8 Binary files /dev/null and b/.yarn/cache/@types-yargs-npm-12.0.12-2cf6772098b90082f3117c1654f531d219fb4a406ac7cdc20416fa9b04fb5cc5.zip differ diff --git a/.yarn/cache/@webassemblyjs-ast-npm-1.8.5-1a867b9c0cbbb46715673135550e52f1688787b573a57b0f4e696e6fed112eb8.zip b/.yarn/cache/@webassemblyjs-ast-npm-1.8.5-1a867b9c0cbbb46715673135550e52f1688787b573a57b0f4e696e6fed112eb8.zip new file mode 100644 index 0000000..d3e5c5e Binary files /dev/null and b/.yarn/cache/@webassemblyjs-ast-npm-1.8.5-1a867b9c0cbbb46715673135550e52f1688787b573a57b0f4e696e6fed112eb8.zip differ diff --git a/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.8.5-e5252cbf442ac741011f74cd84cb0462f6187fcf42912d72f159f080636d6b83.zip b/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.8.5-e5252cbf442ac741011f74cd84cb0462f6187fcf42912d72f159f080636d6b83.zip new file mode 100644 index 0000000..3d55a30 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-floating-point-hex-parser-npm-1.8.5-e5252cbf442ac741011f74cd84cb0462f6187fcf42912d72f159f080636d6b83.zip differ diff --git a/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.8.5-ecfe36ea411ff17339f4d1018589a3be2f850f19569d3bb0231319bb0078bf91.zip b/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.8.5-ecfe36ea411ff17339f4d1018589a3be2f850f19569d3bb0231319bb0078bf91.zip new file mode 100644 index 0000000..38efe98 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-api-error-npm-1.8.5-ecfe36ea411ff17339f4d1018589a3be2f850f19569d3bb0231319bb0078bf91.zip differ diff --git a/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.8.5-45f02c00186b7e1b823d07e99474fd2b72ce48ff4f12f346afd4d2c06adb04ff.zip b/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.8.5-45f02c00186b7e1b823d07e99474fd2b72ce48ff4f12f346afd4d2c06adb04ff.zip new file mode 100644 index 0000000..13754c9 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-buffer-npm-1.8.5-45f02c00186b7e1b823d07e99474fd2b72ce48ff4f12f346afd4d2c06adb04ff.zip differ diff --git a/.yarn/cache/@webassemblyjs-helper-code-frame-npm-1.8.5-6601338b16b82dfb576d8c7dbcae53bdf34a64ddf7ea6e77a16ea6b9f0c607f5.zip b/.yarn/cache/@webassemblyjs-helper-code-frame-npm-1.8.5-6601338b16b82dfb576d8c7dbcae53bdf34a64ddf7ea6e77a16ea6b9f0c607f5.zip new file mode 100644 index 0000000..da40f36 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-code-frame-npm-1.8.5-6601338b16b82dfb576d8c7dbcae53bdf34a64ddf7ea6e77a16ea6b9f0c607f5.zip differ diff --git a/.yarn/cache/@webassemblyjs-helper-fsm-npm-1.8.5-32a44310eb23c7bc43d05189f938050adccec02270b0c08bd479a13759f5104d.zip b/.yarn/cache/@webassemblyjs-helper-fsm-npm-1.8.5-32a44310eb23c7bc43d05189f938050adccec02270b0c08bd479a13759f5104d.zip new file mode 100644 index 0000000..b6e6ac9 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-fsm-npm-1.8.5-32a44310eb23c7bc43d05189f938050adccec02270b0c08bd479a13759f5104d.zip differ diff --git a/.yarn/cache/@webassemblyjs-helper-module-context-npm-1.8.5-02b39d074b28831561784556a4ad14f17265147bd396287f06066726729e6c65.zip b/.yarn/cache/@webassemblyjs-helper-module-context-npm-1.8.5-02b39d074b28831561784556a4ad14f17265147bd396287f06066726729e6c65.zip new file mode 100644 index 0000000..0ccd190 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-module-context-npm-1.8.5-02b39d074b28831561784556a4ad14f17265147bd396287f06066726729e6c65.zip differ diff --git a/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.8.5-0d1378b4e6746d7d91c5acfd55b9724e3dcb5a837bed2ffae3a39314fbbefcc0.zip b/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.8.5-0d1378b4e6746d7d91c5acfd55b9724e3dcb5a837bed2ffae3a39314fbbefcc0.zip new file mode 100644 index 0000000..9504227 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-wasm-bytecode-npm-1.8.5-0d1378b4e6746d7d91c5acfd55b9724e3dcb5a837bed2ffae3a39314fbbefcc0.zip differ diff --git a/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.8.5-86053e037fcd3fa48d7d3575aa094eff1d2ed9304b99f950bfca17b756f5163d.zip b/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.8.5-86053e037fcd3fa48d7d3575aa094eff1d2ed9304b99f950bfca17b756f5163d.zip new file mode 100644 index 0000000..8c0574a Binary files /dev/null and b/.yarn/cache/@webassemblyjs-helper-wasm-section-npm-1.8.5-86053e037fcd3fa48d7d3575aa094eff1d2ed9304b99f950bfca17b756f5163d.zip differ diff --git a/.yarn/cache/@webassemblyjs-ieee754-npm-1.8.5-7c1e2c73b282871e5fec195fbb07e3be617f8d1cbc891021068e497199916283.zip b/.yarn/cache/@webassemblyjs-ieee754-npm-1.8.5-7c1e2c73b282871e5fec195fbb07e3be617f8d1cbc891021068e497199916283.zip new file mode 100644 index 0000000..48f9957 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-ieee754-npm-1.8.5-7c1e2c73b282871e5fec195fbb07e3be617f8d1cbc891021068e497199916283.zip differ diff --git a/.yarn/cache/@webassemblyjs-leb128-npm-1.8.5-cdcc195b4670a4449960657845ad79bf6f887c1a333fda7f1da7f9dbaef4cab6.zip b/.yarn/cache/@webassemblyjs-leb128-npm-1.8.5-cdcc195b4670a4449960657845ad79bf6f887c1a333fda7f1da7f9dbaef4cab6.zip new file mode 100644 index 0000000..c18c636 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-leb128-npm-1.8.5-cdcc195b4670a4449960657845ad79bf6f887c1a333fda7f1da7f9dbaef4cab6.zip differ diff --git a/.yarn/cache/@webassemblyjs-utf8-npm-1.8.5-a1f09dc99389ee30695c27c4d609f84d61db07385d81c9e47d810c6d0fd0b50a.zip b/.yarn/cache/@webassemblyjs-utf8-npm-1.8.5-a1f09dc99389ee30695c27c4d609f84d61db07385d81c9e47d810c6d0fd0b50a.zip new file mode 100644 index 0000000..ff696f9 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-utf8-npm-1.8.5-a1f09dc99389ee30695c27c4d609f84d61db07385d81c9e47d810c6d0fd0b50a.zip differ diff --git a/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.8.5-fa0b571ef484bfbdeb3b22b2de64084307ba7b2682da668bc84692c7d5b12a28.zip b/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.8.5-fa0b571ef484bfbdeb3b22b2de64084307ba7b2682da668bc84692c7d5b12a28.zip new file mode 100644 index 0000000..4010ccd Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-edit-npm-1.8.5-fa0b571ef484bfbdeb3b22b2de64084307ba7b2682da668bc84692c7d5b12a28.zip differ diff --git a/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.8.5-c1a5edb287bcb771ab7d40cd2d851c9a9b07af400a4b986297ade1122ca0c6ea.zip b/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.8.5-c1a5edb287bcb771ab7d40cd2d851c9a9b07af400a4b986297ade1122ca0c6ea.zip new file mode 100644 index 0000000..71ad4c3 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-gen-npm-1.8.5-c1a5edb287bcb771ab7d40cd2d851c9a9b07af400a4b986297ade1122ca0c6ea.zip differ diff --git a/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.8.5-5c9876f04b27485d6fdb87cc7890fdd32bd2f26ee94422acd8b1553683ef565e.zip b/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.8.5-5c9876f04b27485d6fdb87cc7890fdd32bd2f26ee94422acd8b1553683ef565e.zip new file mode 100644 index 0000000..fa9a0b1 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-opt-npm-1.8.5-5c9876f04b27485d6fdb87cc7890fdd32bd2f26ee94422acd8b1553683ef565e.zip differ diff --git a/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.8.5-40755bb57190c97a6d80e3409e44202eab2e8a7d19474dc172a65282693e3783.zip b/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.8.5-40755bb57190c97a6d80e3409e44202eab2e8a7d19474dc172a65282693e3783.zip new file mode 100644 index 0000000..e22f92b Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wasm-parser-npm-1.8.5-40755bb57190c97a6d80e3409e44202eab2e8a7d19474dc172a65282693e3783.zip differ diff --git a/.yarn/cache/@webassemblyjs-wast-parser-npm-1.8.5-05d8982993833addd23be7b67dbf1e76dc5d4051ef1462cdd7764ea95a233cd5.zip b/.yarn/cache/@webassemblyjs-wast-parser-npm-1.8.5-05d8982993833addd23be7b67dbf1e76dc5d4051ef1462cdd7764ea95a233cd5.zip new file mode 100644 index 0000000..08b2aaf Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wast-parser-npm-1.8.5-05d8982993833addd23be7b67dbf1e76dc5d4051ef1462cdd7764ea95a233cd5.zip differ diff --git a/.yarn/cache/@webassemblyjs-wast-printer-npm-1.8.5-c571c8b9fc3338dc44482cc4226d563c21eee36f27f3c408a6851d35b74f235c.zip b/.yarn/cache/@webassemblyjs-wast-printer-npm-1.8.5-c571c8b9fc3338dc44482cc4226d563c21eee36f27f3c408a6851d35b74f235c.zip new file mode 100644 index 0000000..87090d7 Binary files /dev/null and b/.yarn/cache/@webassemblyjs-wast-printer-npm-1.8.5-c571c8b9fc3338dc44482cc4226d563c21eee36f27f3c408a6851d35b74f235c.zip differ diff --git a/.yarn/cache/@xtuc-ieee754-npm-1.2.0-d1f4e3a670f8fd99770f42ed02c47eff18c1a1a9c0709dd83d39d4e48487c677.zip b/.yarn/cache/@xtuc-ieee754-npm-1.2.0-d1f4e3a670f8fd99770f42ed02c47eff18c1a1a9c0709dd83d39d4e48487c677.zip new file mode 100644 index 0000000..9ff4dfe Binary files /dev/null and b/.yarn/cache/@xtuc-ieee754-npm-1.2.0-d1f4e3a670f8fd99770f42ed02c47eff18c1a1a9c0709dd83d39d4e48487c677.zip differ diff --git a/.yarn/cache/@xtuc-long-npm-4.2.2-8733f3026ef3398d8f127ad8e942fe86405b99975f4a1412a14efd0a54add16a.zip b/.yarn/cache/@xtuc-long-npm-4.2.2-8733f3026ef3398d8f127ad8e942fe86405b99975f4a1412a14efd0a54add16a.zip new file mode 100644 index 0000000..692d588 Binary files /dev/null and b/.yarn/cache/@xtuc-long-npm-4.2.2-8733f3026ef3398d8f127ad8e942fe86405b99975f4a1412a14efd0a54add16a.zip differ diff --git a/.yarn/cache/abab-npm-2.0.0-fd5a4016bddc79ac9fd94a8acd0c6167e4febb3a50997eafacdda57323613cc2.zip b/.yarn/cache/abab-npm-2.0.0-fd5a4016bddc79ac9fd94a8acd0c6167e4febb3a50997eafacdda57323613cc2.zip new file mode 100644 index 0000000..b21388f Binary files /dev/null and b/.yarn/cache/abab-npm-2.0.0-fd5a4016bddc79ac9fd94a8acd0c6167e4febb3a50997eafacdda57323613cc2.zip differ diff --git a/.yarn/cache/abbrev-npm-1.1.1-ca27310a9de6306b25d04f213fa1e5c17cfcb12da5ac7cfb025223d300e434fd.zip b/.yarn/cache/abbrev-npm-1.1.1-ca27310a9de6306b25d04f213fa1e5c17cfcb12da5ac7cfb025223d300e434fd.zip new file mode 100644 index 0000000..67187f8 Binary files /dev/null and b/.yarn/cache/abbrev-npm-1.1.1-ca27310a9de6306b25d04f213fa1e5c17cfcb12da5ac7cfb025223d300e434fd.zip differ diff --git a/.yarn/cache/accepts-npm-1.3.5-67596f819cd80d21d1f9a9b07dca86d8bdd4bdef5a60caa1d486a21ecf33e442.zip b/.yarn/cache/accepts-npm-1.3.5-67596f819cd80d21d1f9a9b07dca86d8bdd4bdef5a60caa1d486a21ecf33e442.zip new file mode 100644 index 0000000..69052c0 Binary files /dev/null and b/.yarn/cache/accepts-npm-1.3.5-67596f819cd80d21d1f9a9b07dca86d8bdd4bdef5a60caa1d486a21ecf33e442.zip differ diff --git a/.yarn/cache/acorn-dynamic-import-npm-4.0.0-cc7a315c0c0f7981594c381afca8e103261293d1e0c02cfc2e18cbe9466205a0.zip b/.yarn/cache/acorn-dynamic-import-npm-4.0.0-cc7a315c0c0f7981594c381afca8e103261293d1e0c02cfc2e18cbe9466205a0.zip new file mode 100644 index 0000000..26d48b5 Binary files /dev/null and b/.yarn/cache/acorn-dynamic-import-npm-4.0.0-cc7a315c0c0f7981594c381afca8e103261293d1e0c02cfc2e18cbe9466205a0.zip differ diff --git a/.yarn/cache/acorn-globals-npm-4.3.2-2a04581d10a092e018a604a259cca617a86750e35ce2744be494db93beb5c05e.zip b/.yarn/cache/acorn-globals-npm-4.3.2-2a04581d10a092e018a604a259cca617a86750e35ce2744be494db93beb5c05e.zip new file mode 100644 index 0000000..8c88f0c Binary files /dev/null and b/.yarn/cache/acorn-globals-npm-4.3.2-2a04581d10a092e018a604a259cca617a86750e35ce2744be494db93beb5c05e.zip differ diff --git a/.yarn/cache/acorn-jsx-npm-5.0.1-e00dde29d42c53ac34dca2e0ab289b1f6d4e639628962bbe63befc5ae5ef1a9a.zip b/.yarn/cache/acorn-jsx-npm-5.0.1-e00dde29d42c53ac34dca2e0ab289b1f6d4e639628962bbe63befc5ae5ef1a9a.zip new file mode 100644 index 0000000..51929a8 Binary files /dev/null and b/.yarn/cache/acorn-jsx-npm-5.0.1-e00dde29d42c53ac34dca2e0ab289b1f6d4e639628962bbe63befc5ae5ef1a9a.zip differ diff --git a/.yarn/cache/acorn-npm-5.7.3-6c92d51f189cd5fc26fa3b6da68b71d4756a81699209cff8c77bcf76ca298e89.zip b/.yarn/cache/acorn-npm-5.7.3-6c92d51f189cd5fc26fa3b6da68b71d4756a81699209cff8c77bcf76ca298e89.zip new file mode 100644 index 0000000..7258177 Binary files /dev/null and b/.yarn/cache/acorn-npm-5.7.3-6c92d51f189cd5fc26fa3b6da68b71d4756a81699209cff8c77bcf76ca298e89.zip differ diff --git a/.yarn/cache/acorn-npm-6.1.1-05caf63b02eb4db8e1c70496184443dfcef1ea11f342bf104b1296d8b7dd184a.zip b/.yarn/cache/acorn-npm-6.1.1-05caf63b02eb4db8e1c70496184443dfcef1ea11f342bf104b1296d8b7dd184a.zip new file mode 100644 index 0000000..af6dc67 Binary files /dev/null and b/.yarn/cache/acorn-npm-6.1.1-05caf63b02eb4db8e1c70496184443dfcef1ea11f342bf104b1296d8b7dd184a.zip differ diff --git a/.yarn/cache/acorn-walk-npm-6.1.1-a6fc4430b72ab0fe470ef87c44dbdb5814288f1034480fd8be81f4a7b5b65b66.zip b/.yarn/cache/acorn-walk-npm-6.1.1-a6fc4430b72ab0fe470ef87c44dbdb5814288f1034480fd8be81f4a7b5b65b66.zip new file mode 100644 index 0000000..dedb69b Binary files /dev/null and b/.yarn/cache/acorn-walk-npm-6.1.1-a6fc4430b72ab0fe470ef87c44dbdb5814288f1034480fd8be81f4a7b5b65b66.zip differ diff --git a/.yarn/cache/ajv-errors-npm-1.0.1-dca22a24b3f71f40136d7cae54b8c7b72469639fd023f51cdb805498235c62a6.zip b/.yarn/cache/ajv-errors-npm-1.0.1-dca22a24b3f71f40136d7cae54b8c7b72469639fd023f51cdb805498235c62a6.zip new file mode 100644 index 0000000..c7cc9e9 Binary files /dev/null and b/.yarn/cache/ajv-errors-npm-1.0.1-dca22a24b3f71f40136d7cae54b8c7b72469639fd023f51cdb805498235c62a6.zip differ diff --git a/.yarn/cache/ajv-keywords-npm-3.4.0-97e9c69cbd37f4ee518bdda2e0dcb37042d8755c36c17a2bbde41805f9094291.zip b/.yarn/cache/ajv-keywords-npm-3.4.0-97e9c69cbd37f4ee518bdda2e0dcb37042d8755c36c17a2bbde41805f9094291.zip new file mode 100644 index 0000000..1c92241 Binary files /dev/null and b/.yarn/cache/ajv-keywords-npm-3.4.0-97e9c69cbd37f4ee518bdda2e0dcb37042d8755c36c17a2bbde41805f9094291.zip differ diff --git a/.yarn/cache/ajv-npm-6.10.0-f1b7a2e2497a199ec30151d304a36728508895cbad5b334bd5bc692df7d22dae.zip b/.yarn/cache/ajv-npm-6.10.0-f1b7a2e2497a199ec30151d304a36728508895cbad5b334bd5bc692df7d22dae.zip new file mode 100644 index 0000000..e1d2078 Binary files /dev/null and b/.yarn/cache/ajv-npm-6.10.0-f1b7a2e2497a199ec30151d304a36728508895cbad5b334bd5bc692df7d22dae.zip differ diff --git a/.yarn/cache/ansi-colors-npm-1.1.0-1bfae530722af6c6b72295e46ed45ec63187023d0623ce74a8dfc8c4a3b172b3.zip b/.yarn/cache/ansi-colors-npm-1.1.0-1bfae530722af6c6b72295e46ed45ec63187023d0623ce74a8dfc8c4a3b172b3.zip new file mode 100644 index 0000000..d838ee7 Binary files /dev/null and b/.yarn/cache/ansi-colors-npm-1.1.0-1bfae530722af6c6b72295e46ed45ec63187023d0623ce74a8dfc8c4a3b172b3.zip differ diff --git a/.yarn/cache/ansi-escapes-npm-3.2.0-7d31c81fb1cdd84a3213e0efb46d4bce5cde715f083eca9b7c60b889750c6175.zip b/.yarn/cache/ansi-escapes-npm-3.2.0-7d31c81fb1cdd84a3213e0efb46d4bce5cde715f083eca9b7c60b889750c6175.zip new file mode 100644 index 0000000..140bbe0 Binary files /dev/null and b/.yarn/cache/ansi-escapes-npm-3.2.0-7d31c81fb1cdd84a3213e0efb46d4bce5cde715f083eca9b7c60b889750c6175.zip differ diff --git a/.yarn/cache/ansi-gray-npm-0.1.1-77946bcd83ed81d40d1bb1a969d4079ea1283c889ec7a79b9d887e3a706892df.zip b/.yarn/cache/ansi-gray-npm-0.1.1-77946bcd83ed81d40d1bb1a969d4079ea1283c889ec7a79b9d887e3a706892df.zip new file mode 100644 index 0000000..1245c84 Binary files /dev/null and b/.yarn/cache/ansi-gray-npm-0.1.1-77946bcd83ed81d40d1bb1a969d4079ea1283c889ec7a79b9d887e3a706892df.zip differ diff --git a/.yarn/cache/ansi-regex-npm-2.1.1-c990e0620c5cda7df265d920e03a2b8c11d0ba8f80705ac53b4482b3f5b6ef58.zip b/.yarn/cache/ansi-regex-npm-2.1.1-c990e0620c5cda7df265d920e03a2b8c11d0ba8f80705ac53b4482b3f5b6ef58.zip new file mode 100644 index 0000000..894ad03 Binary files /dev/null and b/.yarn/cache/ansi-regex-npm-2.1.1-c990e0620c5cda7df265d920e03a2b8c11d0ba8f80705ac53b4482b3f5b6ef58.zip differ diff --git a/.yarn/cache/ansi-regex-npm-3.0.0-a1d1e426aba935e927c3d5af333e37a4cb20263a22f5500512d64c7a7989ca3f.zip b/.yarn/cache/ansi-regex-npm-3.0.0-a1d1e426aba935e927c3d5af333e37a4cb20263a22f5500512d64c7a7989ca3f.zip new file mode 100644 index 0000000..e81333d Binary files /dev/null and b/.yarn/cache/ansi-regex-npm-3.0.0-a1d1e426aba935e927c3d5af333e37a4cb20263a22f5500512d64c7a7989ca3f.zip differ diff --git a/.yarn/cache/ansi-regex-npm-4.1.0-cbde39a155aafbab33d1bf8d3ecca231867778436da1fd5860d7745eb13b4b78.zip b/.yarn/cache/ansi-regex-npm-4.1.0-cbde39a155aafbab33d1bf8d3ecca231867778436da1fd5860d7745eb13b4b78.zip new file mode 100644 index 0000000..6f93cff Binary files /dev/null and b/.yarn/cache/ansi-regex-npm-4.1.0-cbde39a155aafbab33d1bf8d3ecca231867778436da1fd5860d7745eb13b4b78.zip differ diff --git a/.yarn/cache/ansi-styles-npm-3.2.1-e6469fe29c329e854da664b739022def2b699137e9b09f323e0a2d3e66b86ecd.zip b/.yarn/cache/ansi-styles-npm-3.2.1-e6469fe29c329e854da664b739022def2b699137e9b09f323e0a2d3e66b86ecd.zip new file mode 100644 index 0000000..417d32d Binary files /dev/null and b/.yarn/cache/ansi-styles-npm-3.2.1-e6469fe29c329e854da664b739022def2b699137e9b09f323e0a2d3e66b86ecd.zip differ diff --git a/.yarn/cache/ansi-wrap-npm-0.1.0-d49c89f160c31a3624627b2f09f209b0ce3b5b6854fc4e4ccb3419448b255c8d.zip b/.yarn/cache/ansi-wrap-npm-0.1.0-d49c89f160c31a3624627b2f09f209b0ce3b5b6854fc4e4ccb3419448b255c8d.zip new file mode 100644 index 0000000..1d1a329 Binary files /dev/null and b/.yarn/cache/ansi-wrap-npm-0.1.0-d49c89f160c31a3624627b2f09f209b0ce3b5b6854fc4e4ccb3419448b255c8d.zip differ diff --git a/.yarn/cache/anymatch-npm-2.0.0-bb5f5d84a33ae0dc0b4c2893a427c11636f73372601b8a46b1823d12b01355a5.zip b/.yarn/cache/anymatch-npm-2.0.0-bb5f5d84a33ae0dc0b4c2893a427c11636f73372601b8a46b1823d12b01355a5.zip new file mode 100644 index 0000000..30088b1 Binary files /dev/null and b/.yarn/cache/anymatch-npm-2.0.0-bb5f5d84a33ae0dc0b4c2893a427c11636f73372601b8a46b1823d12b01355a5.zip differ diff --git a/.yarn/cache/append-buffer-npm-1.0.2-deeb11da02777cbfe0aacd451f526f06b68201437e7d6b037fcbd8022900643d.zip b/.yarn/cache/append-buffer-npm-1.0.2-deeb11da02777cbfe0aacd451f526f06b68201437e7d6b037fcbd8022900643d.zip new file mode 100644 index 0000000..b0bb8ce Binary files /dev/null and b/.yarn/cache/append-buffer-npm-1.0.2-deeb11da02777cbfe0aacd451f526f06b68201437e7d6b037fcbd8022900643d.zip differ diff --git a/.yarn/cache/append-transform-npm-1.0.0-b495019b4297ef03b5616c8064520c3303b53bb5ed1bb15ec24270104a5baf93.zip b/.yarn/cache/append-transform-npm-1.0.0-b495019b4297ef03b5616c8064520c3303b53bb5ed1bb15ec24270104a5baf93.zip new file mode 100644 index 0000000..280cf9e Binary files /dev/null and b/.yarn/cache/append-transform-npm-1.0.0-b495019b4297ef03b5616c8064520c3303b53bb5ed1bb15ec24270104a5baf93.zip differ diff --git a/.yarn/cache/aproba-npm-1.2.0-33d762d55dc3eb6fa3f7ae50a3c7007e9d4bee85f0ac35de62faeabb6db7ebc6.zip b/.yarn/cache/aproba-npm-1.2.0-33d762d55dc3eb6fa3f7ae50a3c7007e9d4bee85f0ac35de62faeabb6db7ebc6.zip new file mode 100644 index 0000000..ced292b Binary files /dev/null and b/.yarn/cache/aproba-npm-1.2.0-33d762d55dc3eb6fa3f7ae50a3c7007e9d4bee85f0ac35de62faeabb6db7ebc6.zip differ diff --git a/.yarn/cache/archy-npm-1.0.0-3fdf576813858753799212cb958eff00c3da1ad39e9a1c937c8d911fa005146e.zip b/.yarn/cache/archy-npm-1.0.0-3fdf576813858753799212cb958eff00c3da1ad39e9a1c937c8d911fa005146e.zip new file mode 100644 index 0000000..aa7a54d Binary files /dev/null and b/.yarn/cache/archy-npm-1.0.0-3fdf576813858753799212cb958eff00c3da1ad39e9a1c937c8d911fa005146e.zip differ diff --git a/.yarn/cache/are-we-there-yet-npm-1.1.5-2cdbb01c78f9e77aa8b9d240471079d4a2e929c58e334687f5bf0a8131318178.zip b/.yarn/cache/are-we-there-yet-npm-1.1.5-2cdbb01c78f9e77aa8b9d240471079d4a2e929c58e334687f5bf0a8131318178.zip new file mode 100644 index 0000000..21ab2bb Binary files /dev/null and b/.yarn/cache/are-we-there-yet-npm-1.1.5-2cdbb01c78f9e77aa8b9d240471079d4a2e929c58e334687f5bf0a8131318178.zip differ diff --git a/.yarn/cache/argparse-npm-1.0.10-2388e14969c4320c2c6271922da3ffeda8005b372e48e8dc2067e9994c0c53df.zip b/.yarn/cache/argparse-npm-1.0.10-2388e14969c4320c2c6271922da3ffeda8005b372e48e8dc2067e9994c0c53df.zip new file mode 100644 index 0000000..a44da11 Binary files /dev/null and b/.yarn/cache/argparse-npm-1.0.10-2388e14969c4320c2c6271922da3ffeda8005b372e48e8dc2067e9994c0c53df.zip differ diff --git a/.yarn/cache/arr-diff-npm-4.0.0-e9bfd2d10d6939e728ab2a58739984812450262f03c9f74b7ce1b9976305a541.zip b/.yarn/cache/arr-diff-npm-4.0.0-e9bfd2d10d6939e728ab2a58739984812450262f03c9f74b7ce1b9976305a541.zip new file mode 100644 index 0000000..d42044e Binary files /dev/null and b/.yarn/cache/arr-diff-npm-4.0.0-e9bfd2d10d6939e728ab2a58739984812450262f03c9f74b7ce1b9976305a541.zip differ diff --git a/.yarn/cache/arr-filter-npm-1.1.2-46a74d23b26de52ff89106434ed20814b500b4b3366cc6f33414463a1c3433cb.zip b/.yarn/cache/arr-filter-npm-1.1.2-46a74d23b26de52ff89106434ed20814b500b4b3366cc6f33414463a1c3433cb.zip new file mode 100644 index 0000000..5dded3c Binary files /dev/null and b/.yarn/cache/arr-filter-npm-1.1.2-46a74d23b26de52ff89106434ed20814b500b4b3366cc6f33414463a1c3433cb.zip differ diff --git a/.yarn/cache/arr-flatten-npm-1.1.0-66bd38160676e0132cbfd0b8cfae5a69509895d92201d1b1e88d54c5d297e636.zip b/.yarn/cache/arr-flatten-npm-1.1.0-66bd38160676e0132cbfd0b8cfae5a69509895d92201d1b1e88d54c5d297e636.zip new file mode 100644 index 0000000..f1dcd62 Binary files /dev/null and b/.yarn/cache/arr-flatten-npm-1.1.0-66bd38160676e0132cbfd0b8cfae5a69509895d92201d1b1e88d54c5d297e636.zip differ diff --git a/.yarn/cache/arr-map-npm-2.0.2-9a51d93d0f893c28bfb4030c385c828aa377a80ae7993b8ab8429829bafd81b0.zip b/.yarn/cache/arr-map-npm-2.0.2-9a51d93d0f893c28bfb4030c385c828aa377a80ae7993b8ab8429829bafd81b0.zip new file mode 100644 index 0000000..3c04ad6 Binary files /dev/null and b/.yarn/cache/arr-map-npm-2.0.2-9a51d93d0f893c28bfb4030c385c828aa377a80ae7993b8ab8429829bafd81b0.zip differ diff --git a/.yarn/cache/arr-union-npm-3.1.0-2ec4a99eb304bcd76244978a09a036e0144b0fe162a9cf6d0dd98d8a4337b1b9.zip b/.yarn/cache/arr-union-npm-3.1.0-2ec4a99eb304bcd76244978a09a036e0144b0fe162a9cf6d0dd98d8a4337b1b9.zip new file mode 100644 index 0000000..4b7a713 Binary files /dev/null and b/.yarn/cache/arr-union-npm-3.1.0-2ec4a99eb304bcd76244978a09a036e0144b0fe162a9cf6d0dd98d8a4337b1b9.zip differ diff --git a/.yarn/cache/array-each-npm-1.0.1-15e294e0bacae7b5cee80f2088eeb5d78135071a96666d4cd3be03c1544e2815.zip b/.yarn/cache/array-each-npm-1.0.1-15e294e0bacae7b5cee80f2088eeb5d78135071a96666d4cd3be03c1544e2815.zip new file mode 100644 index 0000000..766393b Binary files /dev/null and b/.yarn/cache/array-each-npm-1.0.1-15e294e0bacae7b5cee80f2088eeb5d78135071a96666d4cd3be03c1544e2815.zip differ diff --git a/.yarn/cache/array-equal-npm-1.0.0-57339f54e2c2b9330134ea221023cd923a10e05999425298d783c132d124bc31.zip b/.yarn/cache/array-equal-npm-1.0.0-57339f54e2c2b9330134ea221023cd923a10e05999425298d783c132d124bc31.zip new file mode 100644 index 0000000..af7ba6b Binary files /dev/null and b/.yarn/cache/array-equal-npm-1.0.0-57339f54e2c2b9330134ea221023cd923a10e05999425298d783c132d124bc31.zip differ diff --git a/.yarn/cache/array-flatten-npm-1.1.1-cc664cd4620e9231540f36c23412be034b8c0d33043ac5bc396425f42f269d6a.zip b/.yarn/cache/array-flatten-npm-1.1.1-cc664cd4620e9231540f36c23412be034b8c0d33043ac5bc396425f42f269d6a.zip new file mode 100644 index 0000000..68fd10b Binary files /dev/null and b/.yarn/cache/array-flatten-npm-1.1.1-cc664cd4620e9231540f36c23412be034b8c0d33043ac5bc396425f42f269d6a.zip differ diff --git a/.yarn/cache/array-includes-npm-3.0.3-95fcaa6f8be7e41904d04bda1adc2ccbbe408a2ae6a19dba83467d82ffaa0979.zip b/.yarn/cache/array-includes-npm-3.0.3-95fcaa6f8be7e41904d04bda1adc2ccbbe408a2ae6a19dba83467d82ffaa0979.zip new file mode 100644 index 0000000..db845b9 Binary files /dev/null and b/.yarn/cache/array-includes-npm-3.0.3-95fcaa6f8be7e41904d04bda1adc2ccbbe408a2ae6a19dba83467d82ffaa0979.zip differ diff --git a/.yarn/cache/array-initial-npm-1.1.0-6d1ee732824eac05b3fc0574b78b990c3eb619f9a5b84b5687723118129cc204.zip b/.yarn/cache/array-initial-npm-1.1.0-6d1ee732824eac05b3fc0574b78b990c3eb619f9a5b84b5687723118129cc204.zip new file mode 100644 index 0000000..9a8fd0f Binary files /dev/null and b/.yarn/cache/array-initial-npm-1.1.0-6d1ee732824eac05b3fc0574b78b990c3eb619f9a5b84b5687723118129cc204.zip differ diff --git a/.yarn/cache/array-last-npm-1.3.0-0525268f0b739b6c1f6ab8203f3e8ce82942c6456fe9b0bd2b6995cb88218b6b.zip b/.yarn/cache/array-last-npm-1.3.0-0525268f0b739b6c1f6ab8203f3e8ce82942c6456fe9b0bd2b6995cb88218b6b.zip new file mode 100644 index 0000000..b4ccd3b Binary files /dev/null and b/.yarn/cache/array-last-npm-1.3.0-0525268f0b739b6c1f6ab8203f3e8ce82942c6456fe9b0bd2b6995cb88218b6b.zip differ diff --git a/.yarn/cache/array-slice-npm-1.1.0-dc37b8eb162ee7d694b35ccf99440c6d95959475cc98fb7ca5f9e3e1c04f832d.zip b/.yarn/cache/array-slice-npm-1.1.0-dc37b8eb162ee7d694b35ccf99440c6d95959475cc98fb7ca5f9e3e1c04f832d.zip new file mode 100644 index 0000000..6ef123f Binary files /dev/null and b/.yarn/cache/array-slice-npm-1.1.0-dc37b8eb162ee7d694b35ccf99440c6d95959475cc98fb7ca5f9e3e1c04f832d.zip differ diff --git a/.yarn/cache/array-sort-npm-1.0.0-5455d8afbcfcdee7c5806c3bc3c362152b45946e8052e22887639933aafded7b.zip b/.yarn/cache/array-sort-npm-1.0.0-5455d8afbcfcdee7c5806c3bc3c362152b45946e8052e22887639933aafded7b.zip new file mode 100644 index 0000000..ef3f344 Binary files /dev/null and b/.yarn/cache/array-sort-npm-1.0.0-5455d8afbcfcdee7c5806c3bc3c362152b45946e8052e22887639933aafded7b.zip differ diff --git a/.yarn/cache/array-unique-npm-0.3.2-3e92b7786ddda9d607bd5fe9c3550867707fb45077fa72958fc1ec3b0cf47196.zip b/.yarn/cache/array-unique-npm-0.3.2-3e92b7786ddda9d607bd5fe9c3550867707fb45077fa72958fc1ec3b0cf47196.zip new file mode 100644 index 0000000..288e1cf Binary files /dev/null and b/.yarn/cache/array-unique-npm-0.3.2-3e92b7786ddda9d607bd5fe9c3550867707fb45077fa72958fc1ec3b0cf47196.zip differ diff --git a/.yarn/cache/asn1-npm-0.2.4-a25799b6734e342a2d3bd58416085102a699ed6381ac566e3272c8049b631786.zip b/.yarn/cache/asn1-npm-0.2.4-a25799b6734e342a2d3bd58416085102a699ed6381ac566e3272c8049b631786.zip new file mode 100644 index 0000000..fe30fcc Binary files /dev/null and b/.yarn/cache/asn1-npm-0.2.4-a25799b6734e342a2d3bd58416085102a699ed6381ac566e3272c8049b631786.zip differ diff --git a/.yarn/cache/asn1.js-npm-4.10.1-7ce860effd4e36b17ab8dfb6b6374be120af5c665463f2641b5b99653071a301.zip b/.yarn/cache/asn1.js-npm-4.10.1-7ce860effd4e36b17ab8dfb6b6374be120af5c665463f2641b5b99653071a301.zip new file mode 100644 index 0000000..1346153 Binary files /dev/null and b/.yarn/cache/asn1.js-npm-4.10.1-7ce860effd4e36b17ab8dfb6b6374be120af5c665463f2641b5b99653071a301.zip differ diff --git a/.yarn/cache/assert-npm-1.4.1-7f85ac853b2ad111424011d2c7a446c95b8871a7aa3ec4d0dede58553cf81255.zip b/.yarn/cache/assert-npm-1.4.1-7f85ac853b2ad111424011d2c7a446c95b8871a7aa3ec4d0dede58553cf81255.zip new file mode 100644 index 0000000..f4d42f6 Binary files /dev/null and b/.yarn/cache/assert-npm-1.4.1-7f85ac853b2ad111424011d2c7a446c95b8871a7aa3ec4d0dede58553cf81255.zip differ diff --git a/.yarn/cache/assert-plus-npm-1.0.0-5293310507cb19f698517283d3778d9a51f7a2400a8a3bbfae3790ab7ff1cb11.zip b/.yarn/cache/assert-plus-npm-1.0.0-5293310507cb19f698517283d3778d9a51f7a2400a8a3bbfae3790ab7ff1cb11.zip new file mode 100644 index 0000000..0e014fe Binary files /dev/null and b/.yarn/cache/assert-plus-npm-1.0.0-5293310507cb19f698517283d3778d9a51f7a2400a8a3bbfae3790ab7ff1cb11.zip differ diff --git a/.yarn/cache/assign-symbols-npm-1.0.0-c8c2b9f61bfe7a322ed92d696dde1705a6684153755ac6607fc8662b65176f78.zip b/.yarn/cache/assign-symbols-npm-1.0.0-c8c2b9f61bfe7a322ed92d696dde1705a6684153755ac6607fc8662b65176f78.zip new file mode 100644 index 0000000..4df3ec9 Binary files /dev/null and b/.yarn/cache/assign-symbols-npm-1.0.0-c8c2b9f61bfe7a322ed92d696dde1705a6684153755ac6607fc8662b65176f78.zip differ diff --git a/.yarn/cache/astral-regex-npm-1.0.0-42bbb9032e9b6f38b4e59e799013737279364d6ca0a10b9f2ed46855d96acacf.zip b/.yarn/cache/astral-regex-npm-1.0.0-42bbb9032e9b6f38b4e59e799013737279364d6ca0a10b9f2ed46855d96acacf.zip new file mode 100644 index 0000000..96570cd Binary files /dev/null and b/.yarn/cache/astral-regex-npm-1.0.0-42bbb9032e9b6f38b4e59e799013737279364d6ca0a10b9f2ed46855d96acacf.zip differ diff --git a/.yarn/cache/async-done-npm-1.3.1-c713c28f7ba3df7a4def551a6f8539a8f98f5c40e9c21c61715361e9afb8f88c.zip b/.yarn/cache/async-done-npm-1.3.1-c713c28f7ba3df7a4def551a6f8539a8f98f5c40e9c21c61715361e9afb8f88c.zip new file mode 100644 index 0000000..aded5d0 Binary files /dev/null and b/.yarn/cache/async-done-npm-1.3.1-c713c28f7ba3df7a4def551a6f8539a8f98f5c40e9c21c61715361e9afb8f88c.zip differ diff --git a/.yarn/cache/async-each-npm-1.0.3-681d6ee119dab51e8314ad0ae9c00a63d0b99da35269238eebd6132aec99bd65.zip b/.yarn/cache/async-each-npm-1.0.3-681d6ee119dab51e8314ad0ae9c00a63d0b99da35269238eebd6132aec99bd65.zip new file mode 100644 index 0000000..2c4e7d9 Binary files /dev/null and b/.yarn/cache/async-each-npm-1.0.3-681d6ee119dab51e8314ad0ae9c00a63d0b99da35269238eebd6132aec99bd65.zip differ diff --git a/.yarn/cache/async-limiter-npm-1.0.0-c486d1ac32d5915b065964e1e89126278111336b183ef2602af0532483091720.zip b/.yarn/cache/async-limiter-npm-1.0.0-c486d1ac32d5915b065964e1e89126278111336b183ef2602af0532483091720.zip new file mode 100644 index 0000000..8f831a1 Binary files /dev/null and b/.yarn/cache/async-limiter-npm-1.0.0-c486d1ac32d5915b065964e1e89126278111336b183ef2602af0532483091720.zip differ diff --git a/.yarn/cache/async-npm-1.5.2-7efc74da6387f171f4a6aeb3b2c9694273838af2b66ace233febef873ee7c56f.zip b/.yarn/cache/async-npm-1.5.2-7efc74da6387f171f4a6aeb3b2c9694273838af2b66ace233febef873ee7c56f.zip new file mode 100644 index 0000000..ec80937 Binary files /dev/null and b/.yarn/cache/async-npm-1.5.2-7efc74da6387f171f4a6aeb3b2c9694273838af2b66ace233febef873ee7c56f.zip differ diff --git a/.yarn/cache/async-npm-2.6.2-b42e08c5485768cfef0921eaf632e1987958b75976c92eca90f1e311359c8e98.zip b/.yarn/cache/async-npm-2.6.2-b42e08c5485768cfef0921eaf632e1987958b75976c92eca90f1e311359c8e98.zip new file mode 100644 index 0000000..9f677a4 Binary files /dev/null and b/.yarn/cache/async-npm-2.6.2-b42e08c5485768cfef0921eaf632e1987958b75976c92eca90f1e311359c8e98.zip differ diff --git a/.yarn/cache/async-settle-npm-1.0.0-123c56eda0ec2d70658c5851bb81bfaf765b30f0aebc5d2ad90e431f1eb5fde0.zip b/.yarn/cache/async-settle-npm-1.0.0-123c56eda0ec2d70658c5851bb81bfaf765b30f0aebc5d2ad90e431f1eb5fde0.zip new file mode 100644 index 0000000..1190091 Binary files /dev/null and b/.yarn/cache/async-settle-npm-1.0.0-123c56eda0ec2d70658c5851bb81bfaf765b30f0aebc5d2ad90e431f1eb5fde0.zip differ diff --git a/.yarn/cache/asynckit-npm-0.4.0-250271e780c8ff6482cffabdb622a0bd348bc96e6ebe8621f6b6778e053cce2c.zip b/.yarn/cache/asynckit-npm-0.4.0-250271e780c8ff6482cffabdb622a0bd348bc96e6ebe8621f6b6778e053cce2c.zip new file mode 100644 index 0000000..6801b01 Binary files /dev/null and b/.yarn/cache/asynckit-npm-0.4.0-250271e780c8ff6482cffabdb622a0bd348bc96e6ebe8621f6b6778e053cce2c.zip differ diff --git a/.yarn/cache/atob-npm-2.1.2-1abf0c2f5469555f0fb8084d71dcc2c6aeafe449f1d93b26802b42abc13b2b54.zip b/.yarn/cache/atob-npm-2.1.2-1abf0c2f5469555f0fb8084d71dcc2c6aeafe449f1d93b26802b42abc13b2b54.zip new file mode 100644 index 0000000..25747d4 Binary files /dev/null and b/.yarn/cache/atob-npm-2.1.2-1abf0c2f5469555f0fb8084d71dcc2c6aeafe449f1d93b26802b42abc13b2b54.zip differ diff --git a/.yarn/cache/aws-sign2-npm-0.7.0-77be7096caf4b7492c27f095d190e33f1ae8939cb18d13d1893ceef72f1c875b.zip b/.yarn/cache/aws-sign2-npm-0.7.0-77be7096caf4b7492c27f095d190e33f1ae8939cb18d13d1893ceef72f1c875b.zip new file mode 100644 index 0000000..b65a844 Binary files /dev/null and b/.yarn/cache/aws-sign2-npm-0.7.0-77be7096caf4b7492c27f095d190e33f1ae8939cb18d13d1893ceef72f1c875b.zip differ diff --git a/.yarn/cache/aws4-npm-1.8.0-ba0ff691b1113be3f57c38266b4c5185d7e8fe16443d5c9e58e9e31cbd68d459.zip b/.yarn/cache/aws4-npm-1.8.0-ba0ff691b1113be3f57c38266b4c5185d7e8fe16443d5c9e58e9e31cbd68d459.zip new file mode 100644 index 0000000..e22c8b9 Binary files /dev/null and b/.yarn/cache/aws4-npm-1.8.0-ba0ff691b1113be3f57c38266b4c5185d7e8fe16443d5c9e58e9e31cbd68d459.zip differ diff --git a/.yarn/cache/babel-eslint-npm-10.0.1-aca7dde7a6f95a97e24d6847445e751cf538d7078887aea8e29929d8ed281363.zip b/.yarn/cache/babel-eslint-npm-10.0.1-aca7dde7a6f95a97e24d6847445e751cf538d7078887aea8e29929d8ed281363.zip new file mode 100644 index 0000000..96855db Binary files /dev/null and b/.yarn/cache/babel-eslint-npm-10.0.1-aca7dde7a6f95a97e24d6847445e751cf538d7078887aea8e29929d8ed281363.zip differ diff --git a/.yarn/cache/babel-jest-npm-24.7.1-51193de911598828ac1200bf00e19b4d2f2dd65da9626ad9257a7fb353825253.zip b/.yarn/cache/babel-jest-npm-24.7.1-51193de911598828ac1200bf00e19b4d2f2dd65da9626ad9257a7fb353825253.zip new file mode 100644 index 0000000..c876256 Binary files /dev/null and b/.yarn/cache/babel-jest-npm-24.7.1-51193de911598828ac1200bf00e19b4d2f2dd65da9626ad9257a7fb353825253.zip differ diff --git a/.yarn/cache/babel-loader-npm-8.0.5-dbfdf28d355c6fde7f2600b4b50739dbb422e5c037abb868c1f800a001570102.zip b/.yarn/cache/babel-loader-npm-8.0.5-dbfdf28d355c6fde7f2600b4b50739dbb422e5c037abb868c1f800a001570102.zip new file mode 100644 index 0000000..5a752ba Binary files /dev/null and b/.yarn/cache/babel-loader-npm-8.0.5-dbfdf28d355c6fde7f2600b4b50739dbb422e5c037abb868c1f800a001570102.zip differ diff --git a/.yarn/cache/babel-plugin-istanbul-npm-5.1.4-0777c5c12d69fd72c39f71755913de7bf5dd08da4a9835b4eaeec36461e9afcd.zip b/.yarn/cache/babel-plugin-istanbul-npm-5.1.4-0777c5c12d69fd72c39f71755913de7bf5dd08da4a9835b4eaeec36461e9afcd.zip new file mode 100644 index 0000000..9fa8196 Binary files /dev/null and b/.yarn/cache/babel-plugin-istanbul-npm-5.1.4-0777c5c12d69fd72c39f71755913de7bf5dd08da4a9835b4eaeec36461e9afcd.zip differ diff --git a/.yarn/cache/babel-plugin-jest-hoist-npm-24.6.0-05c4e312524cd9715f1632ae71097365f373ab23870c6e2c0466d5a4f52d729d.zip b/.yarn/cache/babel-plugin-jest-hoist-npm-24.6.0-05c4e312524cd9715f1632ae71097365f373ab23870c6e2c0466d5a4f52d729d.zip new file mode 100644 index 0000000..910944b Binary files /dev/null and b/.yarn/cache/babel-plugin-jest-hoist-npm-24.6.0-05c4e312524cd9715f1632ae71097365f373ab23870c6e2c0466d5a4f52d729d.zip differ diff --git a/.yarn/cache/babel-preset-jest-npm-24.6.0-005e90c576cdf6ecf98c66400f2761405b283c7f72369fe49fdc657ebabe5722.zip b/.yarn/cache/babel-preset-jest-npm-24.6.0-005e90c576cdf6ecf98c66400f2761405b283c7f72369fe49fdc657ebabe5722.zip new file mode 100644 index 0000000..ed04cfe Binary files /dev/null and b/.yarn/cache/babel-preset-jest-npm-24.6.0-005e90c576cdf6ecf98c66400f2761405b283c7f72369fe49fdc657ebabe5722.zip differ diff --git a/.yarn/cache/bach-npm-1.2.0-6074eff05d4e6cc25dc3ea22b3e1f0dec37b594b8309b2c3b85c64708c52e3ac.zip b/.yarn/cache/bach-npm-1.2.0-6074eff05d4e6cc25dc3ea22b3e1f0dec37b594b8309b2c3b85c64708c52e3ac.zip new file mode 100644 index 0000000..ca6739b Binary files /dev/null and b/.yarn/cache/bach-npm-1.2.0-6074eff05d4e6cc25dc3ea22b3e1f0dec37b594b8309b2c3b85c64708c52e3ac.zip differ diff --git a/.yarn/cache/balanced-match-npm-1.0.0-e4b5044c23040fe4746ad55916b1aecc74a016bde1a1e46ce3ae0f6ce31e71f5.zip b/.yarn/cache/balanced-match-npm-1.0.0-e4b5044c23040fe4746ad55916b1aecc74a016bde1a1e46ce3ae0f6ce31e71f5.zip new file mode 100644 index 0000000..42d1f1b Binary files /dev/null and b/.yarn/cache/balanced-match-npm-1.0.0-e4b5044c23040fe4746ad55916b1aecc74a016bde1a1e46ce3ae0f6ce31e71f5.zip differ diff --git a/.yarn/cache/base-npm-0.11.2-653b45b5a339387bf33e9f8de639c28a89b18495d112f221e6b8ffbc4d6ce494.zip b/.yarn/cache/base-npm-0.11.2-653b45b5a339387bf33e9f8de639c28a89b18495d112f221e6b8ffbc4d6ce494.zip new file mode 100644 index 0000000..f596188 Binary files /dev/null and b/.yarn/cache/base-npm-0.11.2-653b45b5a339387bf33e9f8de639c28a89b18495d112f221e6b8ffbc4d6ce494.zip differ diff --git a/.yarn/cache/base64-js-npm-1.3.0-d308228f0a236920d6aeb22a5a158a39ed1169a510d88191f95d90e15013869b.zip b/.yarn/cache/base64-js-npm-1.3.0-d308228f0a236920d6aeb22a5a158a39ed1169a510d88191f95d90e15013869b.zip new file mode 100644 index 0000000..7a94bfa Binary files /dev/null and b/.yarn/cache/base64-js-npm-1.3.0-d308228f0a236920d6aeb22a5a158a39ed1169a510d88191f95d90e15013869b.zip differ diff --git a/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-19200f95748856836444efbcb5b620f600d54576f3a119dba77a7eb5c0e49f4b.zip b/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-19200f95748856836444efbcb5b620f600d54576f3a119dba77a7eb5c0e49f4b.zip new file mode 100644 index 0000000..907517e Binary files /dev/null and b/.yarn/cache/bcrypt-pbkdf-npm-1.0.2-19200f95748856836444efbcb5b620f600d54576f3a119dba77a7eb5c0e49f4b.zip differ diff --git a/.yarn/cache/bfj-npm-6.1.1-9a5e15d5373661a3563cddf577327ca1f2b8e1ccc68c7746a5ed43f63db37191.zip b/.yarn/cache/bfj-npm-6.1.1-9a5e15d5373661a3563cddf577327ca1f2b8e1ccc68c7746a5ed43f63db37191.zip new file mode 100644 index 0000000..39604d0 Binary files /dev/null and b/.yarn/cache/bfj-npm-6.1.1-9a5e15d5373661a3563cddf577327ca1f2b8e1ccc68c7746a5ed43f63db37191.zip differ diff --git a/.yarn/cache/big.js-npm-3.2.0-41a96e16bb84bc34f6d164c64016b83f07ff349e60fd7bd45fef3d5bba920400.zip b/.yarn/cache/big.js-npm-3.2.0-41a96e16bb84bc34f6d164c64016b83f07ff349e60fd7bd45fef3d5bba920400.zip new file mode 100644 index 0000000..1518f76 Binary files /dev/null and b/.yarn/cache/big.js-npm-3.2.0-41a96e16bb84bc34f6d164c64016b83f07ff349e60fd7bd45fef3d5bba920400.zip differ diff --git a/.yarn/cache/big.js-npm-5.2.2-97b3b0314f07b3668407ae8ee0ebfcfd8d22d9b4a53e32db320b433a3b12b307.zip b/.yarn/cache/big.js-npm-5.2.2-97b3b0314f07b3668407ae8ee0ebfcfd8d22d9b4a53e32db320b433a3b12b307.zip new file mode 100644 index 0000000..1f32bba Binary files /dev/null and b/.yarn/cache/big.js-npm-5.2.2-97b3b0314f07b3668407ae8ee0ebfcfd8d22d9b4a53e32db320b433a3b12b307.zip differ diff --git a/.yarn/cache/binary-extensions-npm-1.13.1-b23a0b0be5378cbb8a4bb4f2c45e03dba2de159b9c43119797187016310143ad.zip b/.yarn/cache/binary-extensions-npm-1.13.1-b23a0b0be5378cbb8a4bb4f2c45e03dba2de159b9c43119797187016310143ad.zip new file mode 100644 index 0000000..bdd7a19 Binary files /dev/null and b/.yarn/cache/binary-extensions-npm-1.13.1-b23a0b0be5378cbb8a4bb4f2c45e03dba2de159b9c43119797187016310143ad.zip differ diff --git a/.yarn/cache/bluebird-npm-3.5.4-59973cabe2210ea641541bc76ed6cb4328137c3b71f86bec66daf530feff9c35.zip b/.yarn/cache/bluebird-npm-3.5.4-59973cabe2210ea641541bc76ed6cb4328137c3b71f86bec66daf530feff9c35.zip new file mode 100644 index 0000000..c23f90d Binary files /dev/null and b/.yarn/cache/bluebird-npm-3.5.4-59973cabe2210ea641541bc76ed6cb4328137c3b71f86bec66daf530feff9c35.zip differ diff --git a/.yarn/cache/bn.js-npm-4.11.8-824e877bb39d0c8e9651861c86ac9e19a8f07f4e8af794cecfecd0f7c559569c.zip b/.yarn/cache/bn.js-npm-4.11.8-824e877bb39d0c8e9651861c86ac9e19a8f07f4e8af794cecfecd0f7c559569c.zip new file mode 100644 index 0000000..65861da Binary files /dev/null and b/.yarn/cache/bn.js-npm-4.11.8-824e877bb39d0c8e9651861c86ac9e19a8f07f4e8af794cecfecd0f7c559569c.zip differ diff --git a/.yarn/cache/body-parser-npm-1.18.3-4e8ec5ebcf1be0068267da7e19fa4107963151771bfa7d2cc16944c29a99af88.zip b/.yarn/cache/body-parser-npm-1.18.3-4e8ec5ebcf1be0068267da7e19fa4107963151771bfa7d2cc16944c29a99af88.zip new file mode 100644 index 0000000..58ac77c Binary files /dev/null and b/.yarn/cache/body-parser-npm-1.18.3-4e8ec5ebcf1be0068267da7e19fa4107963151771bfa7d2cc16944c29a99af88.zip differ diff --git a/.yarn/cache/boolbase-npm-1.0.0-fd060b42f9fce6bf47af2b5ea590c62c5cd3c7769cb82bf54c4e321694cf87e0.zip b/.yarn/cache/boolbase-npm-1.0.0-fd060b42f9fce6bf47af2b5ea590c62c5cd3c7769cb82bf54c4e321694cf87e0.zip new file mode 100644 index 0000000..21138b6 Binary files /dev/null and b/.yarn/cache/boolbase-npm-1.0.0-fd060b42f9fce6bf47af2b5ea590c62c5cd3c7769cb82bf54c4e321694cf87e0.zip differ diff --git a/.yarn/cache/brace-expansion-npm-1.1.11-87ddbaa2c1bdc845242d81e240009dcc2add679d1487f2db5e7afcddf55eb0cf.zip b/.yarn/cache/brace-expansion-npm-1.1.11-87ddbaa2c1bdc845242d81e240009dcc2add679d1487f2db5e7afcddf55eb0cf.zip new file mode 100644 index 0000000..5f5e2f0 Binary files /dev/null and b/.yarn/cache/brace-expansion-npm-1.1.11-87ddbaa2c1bdc845242d81e240009dcc2add679d1487f2db5e7afcddf55eb0cf.zip differ diff --git a/.yarn/cache/braces-npm-2.3.2-7a015785b221f29de863bd692f48a2fa8240f490539f39338e510a4d86a0bf16.zip b/.yarn/cache/braces-npm-2.3.2-7a015785b221f29de863bd692f48a2fa8240f490539f39338e510a4d86a0bf16.zip new file mode 100644 index 0000000..9d76ad6 Binary files /dev/null and b/.yarn/cache/braces-npm-2.3.2-7a015785b221f29de863bd692f48a2fa8240f490539f39338e510a4d86a0bf16.zip differ diff --git a/.yarn/cache/brorand-npm-1.1.0-dcb25f30fef9ff45f64d8f7fecc145b42454f90ca3aae3cfa8ffcc3f953128aa.zip b/.yarn/cache/brorand-npm-1.1.0-dcb25f30fef9ff45f64d8f7fecc145b42454f90ca3aae3cfa8ffcc3f953128aa.zip new file mode 100644 index 0000000..47b6e74 Binary files /dev/null and b/.yarn/cache/brorand-npm-1.1.0-dcb25f30fef9ff45f64d8f7fecc145b42454f90ca3aae3cfa8ffcc3f953128aa.zip differ diff --git a/.yarn/cache/browser-process-hrtime-npm-0.1.3-37498f7916138c387867a56bb5cfa0a604b098719a61d9c418165900dd1b8a32.zip b/.yarn/cache/browser-process-hrtime-npm-0.1.3-37498f7916138c387867a56bb5cfa0a604b098719a61d9c418165900dd1b8a32.zip new file mode 100644 index 0000000..bd1f491 Binary files /dev/null and b/.yarn/cache/browser-process-hrtime-npm-0.1.3-37498f7916138c387867a56bb5cfa0a604b098719a61d9c418165900dd1b8a32.zip differ diff --git a/.yarn/cache/browser-resolve-npm-1.11.3-68a4dc617bae4dd3d36e5b613e94dfe9d59dc19b2ec4b468c04c43d4ff5b8a78.zip b/.yarn/cache/browser-resolve-npm-1.11.3-68a4dc617bae4dd3d36e5b613e94dfe9d59dc19b2ec4b468c04c43d4ff5b8a78.zip new file mode 100644 index 0000000..3453e81 Binary files /dev/null and b/.yarn/cache/browser-resolve-npm-1.11.3-68a4dc617bae4dd3d36e5b613e94dfe9d59dc19b2ec4b468c04c43d4ff5b8a78.zip differ diff --git a/.yarn/cache/browserify-aes-npm-1.2.0-a641015d9164f9aa9dab9b09e1c8ae948cfce81742d1a706630ac83d6ed1fec5.zip b/.yarn/cache/browserify-aes-npm-1.2.0-a641015d9164f9aa9dab9b09e1c8ae948cfce81742d1a706630ac83d6ed1fec5.zip new file mode 100644 index 0000000..31f335b Binary files /dev/null and b/.yarn/cache/browserify-aes-npm-1.2.0-a641015d9164f9aa9dab9b09e1c8ae948cfce81742d1a706630ac83d6ed1fec5.zip differ diff --git a/.yarn/cache/browserify-cipher-npm-1.0.1-0057d73d926976e31ae2e988516b933e8fdbe7391dda8926e5dca22c60d51975.zip b/.yarn/cache/browserify-cipher-npm-1.0.1-0057d73d926976e31ae2e988516b933e8fdbe7391dda8926e5dca22c60d51975.zip new file mode 100644 index 0000000..d19611c Binary files /dev/null and b/.yarn/cache/browserify-cipher-npm-1.0.1-0057d73d926976e31ae2e988516b933e8fdbe7391dda8926e5dca22c60d51975.zip differ diff --git a/.yarn/cache/browserify-des-npm-1.0.2-e9071b21e747c57369d538f8b6ebf84eb7becab1c0ba5ff557e0cac4f2b9d1ab.zip b/.yarn/cache/browserify-des-npm-1.0.2-e9071b21e747c57369d538f8b6ebf84eb7becab1c0ba5ff557e0cac4f2b9d1ab.zip new file mode 100644 index 0000000..936d8cf Binary files /dev/null and b/.yarn/cache/browserify-des-npm-1.0.2-e9071b21e747c57369d538f8b6ebf84eb7becab1c0ba5ff557e0cac4f2b9d1ab.zip differ diff --git a/.yarn/cache/browserify-rsa-npm-4.0.1-9f1259219c5176b1c2fa8bc8e1e96634ec5aecdc5a82ac138b3b7e1dc17d6515.zip b/.yarn/cache/browserify-rsa-npm-4.0.1-9f1259219c5176b1c2fa8bc8e1e96634ec5aecdc5a82ac138b3b7e1dc17d6515.zip new file mode 100644 index 0000000..537c449 Binary files /dev/null and b/.yarn/cache/browserify-rsa-npm-4.0.1-9f1259219c5176b1c2fa8bc8e1e96634ec5aecdc5a82ac138b3b7e1dc17d6515.zip differ diff --git a/.yarn/cache/browserify-sign-npm-4.0.4-f2715518fdb88a108a96d9db357c4b2a2ecd9428c4524ca8d8deb43f38f5a09b.zip b/.yarn/cache/browserify-sign-npm-4.0.4-f2715518fdb88a108a96d9db357c4b2a2ecd9428c4524ca8d8deb43f38f5a09b.zip new file mode 100644 index 0000000..4659652 Binary files /dev/null and b/.yarn/cache/browserify-sign-npm-4.0.4-f2715518fdb88a108a96d9db357c4b2a2ecd9428c4524ca8d8deb43f38f5a09b.zip differ diff --git a/.yarn/cache/browserify-zlib-npm-0.2.0-49323bab33e6030e410e277b9a3d0465deb7d2dd00a37d5dfb05a8533f9307a0.zip b/.yarn/cache/browserify-zlib-npm-0.2.0-49323bab33e6030e410e277b9a3d0465deb7d2dd00a37d5dfb05a8533f9307a0.zip new file mode 100644 index 0000000..9ec6749 Binary files /dev/null and b/.yarn/cache/browserify-zlib-npm-0.2.0-49323bab33e6030e410e277b9a3d0465deb7d2dd00a37d5dfb05a8533f9307a0.zip differ diff --git a/.yarn/cache/browserslist-npm-4.5.5-b65d312b612a6c60c6f747f91c1f8626ee2a660980529b0de7fd89739da39dbb.zip b/.yarn/cache/browserslist-npm-4.5.5-b65d312b612a6c60c6f747f91c1f8626ee2a660980529b0de7fd89739da39dbb.zip new file mode 100644 index 0000000..e6dcb44 Binary files /dev/null and b/.yarn/cache/browserslist-npm-4.5.5-b65d312b612a6c60c6f747f91c1f8626ee2a660980529b0de7fd89739da39dbb.zip differ diff --git a/.yarn/cache/bser-npm-2.0.0-abeac0058e8caf49969c64a81fdc7917f33ce9fc14d6223b4e99c811d2a5c819.zip b/.yarn/cache/bser-npm-2.0.0-abeac0058e8caf49969c64a81fdc7917f33ce9fc14d6223b4e99c811d2a5c819.zip new file mode 100644 index 0000000..2783aac Binary files /dev/null and b/.yarn/cache/bser-npm-2.0.0-abeac0058e8caf49969c64a81fdc7917f33ce9fc14d6223b4e99c811d2a5c819.zip differ diff --git a/.yarn/cache/buffer-equal-npm-1.0.0-1656f34779c2f6385141ce2922625c65466a0ee162d8dc5d73645dd266cf98c7.zip b/.yarn/cache/buffer-equal-npm-1.0.0-1656f34779c2f6385141ce2922625c65466a0ee162d8dc5d73645dd266cf98c7.zip new file mode 100644 index 0000000..150c6fa Binary files /dev/null and b/.yarn/cache/buffer-equal-npm-1.0.0-1656f34779c2f6385141ce2922625c65466a0ee162d8dc5d73645dd266cf98c7.zip differ diff --git a/.yarn/cache/buffer-from-npm-1.1.1-db3b92d51a6574c5da35cc9c59c3200aba6f3827937ffd5a43b322135d4f27bf.zip b/.yarn/cache/buffer-from-npm-1.1.1-db3b92d51a6574c5da35cc9c59c3200aba6f3827937ffd5a43b322135d4f27bf.zip new file mode 100644 index 0000000..74c4326 Binary files /dev/null and b/.yarn/cache/buffer-from-npm-1.1.1-db3b92d51a6574c5da35cc9c59c3200aba6f3827937ffd5a43b322135d4f27bf.zip differ diff --git a/.yarn/cache/buffer-npm-4.9.1-c8b63ff426ff6761ae7fb402684f9f1f831ddd4a6f538219348df24cd5db1ef8.zip b/.yarn/cache/buffer-npm-4.9.1-c8b63ff426ff6761ae7fb402684f9f1f831ddd4a6f538219348df24cd5db1ef8.zip new file mode 100644 index 0000000..dcd4a24 Binary files /dev/null and b/.yarn/cache/buffer-npm-4.9.1-c8b63ff426ff6761ae7fb402684f9f1f831ddd4a6f538219348df24cd5db1ef8.zip differ diff --git a/.yarn/cache/buffer-xor-npm-1.0.3-096f1a449463a314b3b87b546a9ac8bacef103dc2ee2bdc32031baeaa07718d2.zip b/.yarn/cache/buffer-xor-npm-1.0.3-096f1a449463a314b3b87b546a9ac8bacef103dc2ee2bdc32031baeaa07718d2.zip new file mode 100644 index 0000000..503e3be Binary files /dev/null and b/.yarn/cache/buffer-xor-npm-1.0.3-096f1a449463a314b3b87b546a9ac8bacef103dc2ee2bdc32031baeaa07718d2.zip differ diff --git a/.yarn/cache/builtin-status-codes-npm-3.0.0-ca80ccc317b11836cd0efecfc9bc70b0950d38817235c243a5072730200e4878.zip b/.yarn/cache/builtin-status-codes-npm-3.0.0-ca80ccc317b11836cd0efecfc9bc70b0950d38817235c243a5072730200e4878.zip new file mode 100644 index 0000000..e6b1861 Binary files /dev/null and b/.yarn/cache/builtin-status-codes-npm-3.0.0-ca80ccc317b11836cd0efecfc9bc70b0950d38817235c243a5072730200e4878.zip differ diff --git a/.yarn/cache/bytes-npm-3.0.0-4e7dff8b813810a5a16e449cb8e5d2e6df5ba792416d1ba1d7a9d369e04e0f2c.zip b/.yarn/cache/bytes-npm-3.0.0-4e7dff8b813810a5a16e449cb8e5d2e6df5ba792416d1ba1d7a9d369e04e0f2c.zip new file mode 100644 index 0000000..884537f Binary files /dev/null and b/.yarn/cache/bytes-npm-3.0.0-4e7dff8b813810a5a16e449cb8e5d2e6df5ba792416d1ba1d7a9d369e04e0f2c.zip differ diff --git a/.yarn/cache/cacache-npm-11.3.2-84229dc4ba7e0959023972cd3c33eecd8c669abfd7658548bc90c9c89a2d756c.zip b/.yarn/cache/cacache-npm-11.3.2-84229dc4ba7e0959023972cd3c33eecd8c669abfd7658548bc90c9c89a2d756c.zip new file mode 100644 index 0000000..216126f Binary files /dev/null and b/.yarn/cache/cacache-npm-11.3.2-84229dc4ba7e0959023972cd3c33eecd8c669abfd7658548bc90c9c89a2d756c.zip differ diff --git a/.yarn/cache/cache-base-npm-1.0.1-0d71a5d00d340f9457ff444646aa6590967645789a4878ec02f29860dbd2ba35.zip b/.yarn/cache/cache-base-npm-1.0.1-0d71a5d00d340f9457ff444646aa6590967645789a4878ec02f29860dbd2ba35.zip new file mode 100644 index 0000000..7d227e4 Binary files /dev/null and b/.yarn/cache/cache-base-npm-1.0.1-0d71a5d00d340f9457ff444646aa6590967645789a4878ec02f29860dbd2ba35.zip differ diff --git a/.yarn/cache/callsites-npm-3.1.0-668000b4ce8e1654882fdc976e73566ccdc8e65a2f31c77778a0fb1f8b275ac1.zip b/.yarn/cache/callsites-npm-3.1.0-668000b4ce8e1654882fdc976e73566ccdc8e65a2f31c77778a0fb1f8b275ac1.zip new file mode 100644 index 0000000..93d9b76 Binary files /dev/null and b/.yarn/cache/callsites-npm-3.1.0-668000b4ce8e1654882fdc976e73566ccdc8e65a2f31c77778a0fb1f8b275ac1.zip differ diff --git a/.yarn/cache/camel-case-npm-3.0.0-301d68d148217fde86b11e7c3794dc1053ad45286f231715b809838d5c0b8e04.zip b/.yarn/cache/camel-case-npm-3.0.0-301d68d148217fde86b11e7c3794dc1053ad45286f231715b809838d5c0b8e04.zip new file mode 100644 index 0000000..5cce361 Binary files /dev/null and b/.yarn/cache/camel-case-npm-3.0.0-301d68d148217fde86b11e7c3794dc1053ad45286f231715b809838d5c0b8e04.zip differ diff --git a/.yarn/cache/camelcase-npm-3.0.0-75434f378ecbbdaedfddf57704354f115fff06bc6b66df03a8d372060cc25891.zip b/.yarn/cache/camelcase-npm-3.0.0-75434f378ecbbdaedfddf57704354f115fff06bc6b66df03a8d372060cc25891.zip new file mode 100644 index 0000000..d7e6201 Binary files /dev/null and b/.yarn/cache/camelcase-npm-3.0.0-75434f378ecbbdaedfddf57704354f115fff06bc6b66df03a8d372060cc25891.zip differ diff --git a/.yarn/cache/camelcase-npm-5.3.1-290063debfd59c275a9e2c0ff51faac5331b0a6c030316c531465e43e79dd3c4.zip b/.yarn/cache/camelcase-npm-5.3.1-290063debfd59c275a9e2c0ff51faac5331b0a6c030316c531465e43e79dd3c4.zip new file mode 100644 index 0000000..b1a0a36 Binary files /dev/null and b/.yarn/cache/camelcase-npm-5.3.1-290063debfd59c275a9e2c0ff51faac5331b0a6c030316c531465e43e79dd3c4.zip differ diff --git a/.yarn/cache/caniuse-lite-npm-1.0.30000963-ed41003695ebe04aefb798bff95d02c3a373fa8523c8f9e1de4f2ed016c69a50.zip b/.yarn/cache/caniuse-lite-npm-1.0.30000963-ed41003695ebe04aefb798bff95d02c3a373fa8523c8f9e1de4f2ed016c69a50.zip new file mode 100644 index 0000000..5e02bf8 Binary files /dev/null and b/.yarn/cache/caniuse-lite-npm-1.0.30000963-ed41003695ebe04aefb798bff95d02c3a373fa8523c8f9e1de4f2ed016c69a50.zip differ diff --git a/.yarn/cache/capture-exit-npm-2.0.0-bb397f5b1db5e86322f7076fcde80105a64b26c5abad1f43a76c3ac06004b9ac.zip b/.yarn/cache/capture-exit-npm-2.0.0-bb397f5b1db5e86322f7076fcde80105a64b26c5abad1f43a76c3ac06004b9ac.zip new file mode 100644 index 0000000..0168993 Binary files /dev/null and b/.yarn/cache/capture-exit-npm-2.0.0-bb397f5b1db5e86322f7076fcde80105a64b26c5abad1f43a76c3ac06004b9ac.zip differ diff --git a/.yarn/cache/caseless-npm-0.12.0-54179c38de53382aacf38db3f4e2c900bbb719f80d6c58b4f208facb3660eea6.zip b/.yarn/cache/caseless-npm-0.12.0-54179c38de53382aacf38db3f4e2c900bbb719f80d6c58b4f208facb3660eea6.zip new file mode 100644 index 0000000..798fbbf Binary files /dev/null and b/.yarn/cache/caseless-npm-0.12.0-54179c38de53382aacf38db3f4e2c900bbb719f80d6c58b4f208facb3660eea6.zip differ diff --git a/.yarn/cache/chalk-npm-2.4.2-cc93ef6b9fd2f80bcd2ab0bc64882d3d792cbf8bc0a54d91d7320421024bca1a.zip b/.yarn/cache/chalk-npm-2.4.2-cc93ef6b9fd2f80bcd2ab0bc64882d3d792cbf8bc0a54d91d7320421024bca1a.zip new file mode 100644 index 0000000..d4c28a5 Binary files /dev/null and b/.yarn/cache/chalk-npm-2.4.2-cc93ef6b9fd2f80bcd2ab0bc64882d3d792cbf8bc0a54d91d7320421024bca1a.zip differ diff --git a/.yarn/cache/chardet-npm-0.7.0-87be18e16d1dc4b67fa41bf1e1b3d07b3c2baf0687ef86232d8fcc7b3913174e.zip b/.yarn/cache/chardet-npm-0.7.0-87be18e16d1dc4b67fa41bf1e1b3d07b3c2baf0687ef86232d8fcc7b3913174e.zip new file mode 100644 index 0000000..146e086 Binary files /dev/null and b/.yarn/cache/chardet-npm-0.7.0-87be18e16d1dc4b67fa41bf1e1b3d07b3c2baf0687ef86232d8fcc7b3913174e.zip differ diff --git a/.yarn/cache/check-types-npm-7.4.0-d998cd2b06fa49d66284f75d373298420507caaad08a249b680f574cd8fb1c38.zip b/.yarn/cache/check-types-npm-7.4.0-d998cd2b06fa49d66284f75d373298420507caaad08a249b680f574cd8fb1c38.zip new file mode 100644 index 0000000..b0e3a8e Binary files /dev/null and b/.yarn/cache/check-types-npm-7.4.0-d998cd2b06fa49d66284f75d373298420507caaad08a249b680f574cd8fb1c38.zip differ diff --git a/.yarn/cache/chokidar-npm-2.1.5-9a8e44a03588d353e1de4331bfa203d72b61ba6ca681766833aa10bd336e3f8b.zip b/.yarn/cache/chokidar-npm-2.1.5-9a8e44a03588d353e1de4331bfa203d72b61ba6ca681766833aa10bd336e3f8b.zip new file mode 100644 index 0000000..74a72d0 Binary files /dev/null and b/.yarn/cache/chokidar-npm-2.1.5-9a8e44a03588d353e1de4331bfa203d72b61ba6ca681766833aa10bd336e3f8b.zip differ diff --git a/.yarn/cache/chownr-npm-1.1.1-70a74b1a8c9e293501e12c3fd6e8677f340ad3f4ee5191f4848a4e9a2ad6657e.zip b/.yarn/cache/chownr-npm-1.1.1-70a74b1a8c9e293501e12c3fd6e8677f340ad3f4ee5191f4848a4e9a2ad6657e.zip new file mode 100644 index 0000000..17bd9e1 Binary files /dev/null and b/.yarn/cache/chownr-npm-1.1.1-70a74b1a8c9e293501e12c3fd6e8677f340ad3f4ee5191f4848a4e9a2ad6657e.zip differ diff --git a/.yarn/cache/chrome-trace-event-npm-1.0.0-bd97de493dda2aef36cc8622bb8b60e500e49b7899fb1e117638dbcd52d8c859.zip b/.yarn/cache/chrome-trace-event-npm-1.0.0-bd97de493dda2aef36cc8622bb8b60e500e49b7899fb1e117638dbcd52d8c859.zip new file mode 100644 index 0000000..77edc02 Binary files /dev/null and b/.yarn/cache/chrome-trace-event-npm-1.0.0-bd97de493dda2aef36cc8622bb8b60e500e49b7899fb1e117638dbcd52d8c859.zip differ diff --git a/.yarn/cache/ci-info-npm-2.0.0-1ac3f3be225bec5a575908789b75c59d3e693923b6a13a6e18f1e3d46011ed57.zip b/.yarn/cache/ci-info-npm-2.0.0-1ac3f3be225bec5a575908789b75c59d3e693923b6a13a6e18f1e3d46011ed57.zip new file mode 100644 index 0000000..805d737 Binary files /dev/null and b/.yarn/cache/ci-info-npm-2.0.0-1ac3f3be225bec5a575908789b75c59d3e693923b6a13a6e18f1e3d46011ed57.zip differ diff --git a/.yarn/cache/cipher-base-npm-1.0.4-2c141fd604c2dc0211398bce0c62aca2feb9a000c4d1186fc349464a0c08a6e5.zip b/.yarn/cache/cipher-base-npm-1.0.4-2c141fd604c2dc0211398bce0c62aca2feb9a000c4d1186fc349464a0c08a6e5.zip new file mode 100644 index 0000000..2ff1d72 Binary files /dev/null and b/.yarn/cache/cipher-base-npm-1.0.4-2c141fd604c2dc0211398bce0c62aca2feb9a000c4d1186fc349464a0c08a6e5.zip differ diff --git a/.yarn/cache/class-utils-npm-0.3.6-a3b57bc38163c4e4a8ed16cca05ba68e9fe678c0db153a5ecf3993db47a0a29c.zip b/.yarn/cache/class-utils-npm-0.3.6-a3b57bc38163c4e4a8ed16cca05ba68e9fe678c0db153a5ecf3993db47a0a29c.zip new file mode 100644 index 0000000..38b5da7 Binary files /dev/null and b/.yarn/cache/class-utils-npm-0.3.6-a3b57bc38163c4e4a8ed16cca05ba68e9fe678c0db153a5ecf3993db47a0a29c.zip differ diff --git a/.yarn/cache/clean-css-npm-4.2.1-23c1cd449cb1c07af21a8bce13f332603ca1e14d3ba3e293424dfb4abede562c.zip b/.yarn/cache/clean-css-npm-4.2.1-23c1cd449cb1c07af21a8bce13f332603ca1e14d3ba3e293424dfb4abede562c.zip new file mode 100644 index 0000000..4190e10 Binary files /dev/null and b/.yarn/cache/clean-css-npm-4.2.1-23c1cd449cb1c07af21a8bce13f332603ca1e14d3ba3e293424dfb4abede562c.zip differ diff --git a/.yarn/cache/cli-cursor-npm-2.1.0-dfae322540420f12ab5b798e891922ccda248a83e12470f25e35efb605f4c5a6.zip b/.yarn/cache/cli-cursor-npm-2.1.0-dfae322540420f12ab5b798e891922ccda248a83e12470f25e35efb605f4c5a6.zip new file mode 100644 index 0000000..0062ea3 Binary files /dev/null and b/.yarn/cache/cli-cursor-npm-2.1.0-dfae322540420f12ab5b798e891922ccda248a83e12470f25e35efb605f4c5a6.zip differ diff --git a/.yarn/cache/cli-width-npm-2.2.0-1e5960c8f0d60a4116dfea1d9bd7ad2b9319afbce5378f6476fbbcab16056443.zip b/.yarn/cache/cli-width-npm-2.2.0-1e5960c8f0d60a4116dfea1d9bd7ad2b9319afbce5378f6476fbbcab16056443.zip new file mode 100644 index 0000000..2312595 Binary files /dev/null and b/.yarn/cache/cli-width-npm-2.2.0-1e5960c8f0d60a4116dfea1d9bd7ad2b9319afbce5378f6476fbbcab16056443.zip differ diff --git a/.yarn/cache/cliui-npm-3.2.0-eea5e8043048a49d5bc2fbd9180aa1b46987f039ec67dc980b8e347dba24a2db.zip b/.yarn/cache/cliui-npm-3.2.0-eea5e8043048a49d5bc2fbd9180aa1b46987f039ec67dc980b8e347dba24a2db.zip new file mode 100644 index 0000000..e038b4e Binary files /dev/null and b/.yarn/cache/cliui-npm-3.2.0-eea5e8043048a49d5bc2fbd9180aa1b46987f039ec67dc980b8e347dba24a2db.zip differ diff --git a/.yarn/cache/cliui-npm-4.1.0-d3e747a60a99d8ee0fb1d8c47a9ab2a4095217ed352ac8fdce59eca6be5edb12.zip b/.yarn/cache/cliui-npm-4.1.0-d3e747a60a99d8ee0fb1d8c47a9ab2a4095217ed352ac8fdce59eca6be5edb12.zip new file mode 100644 index 0000000..44df86e Binary files /dev/null and b/.yarn/cache/cliui-npm-4.1.0-d3e747a60a99d8ee0fb1d8c47a9ab2a4095217ed352ac8fdce59eca6be5edb12.zip differ diff --git a/.yarn/cache/clone-buffer-npm-1.0.0-bdcd312d06430c19524e461ddb3f05cd03ea01ecdf6b96aa41219644c3835c2f.zip b/.yarn/cache/clone-buffer-npm-1.0.0-bdcd312d06430c19524e461ddb3f05cd03ea01ecdf6b96aa41219644c3835c2f.zip new file mode 100644 index 0000000..0ca858a Binary files /dev/null and b/.yarn/cache/clone-buffer-npm-1.0.0-bdcd312d06430c19524e461ddb3f05cd03ea01ecdf6b96aa41219644c3835c2f.zip differ diff --git a/.yarn/cache/clone-npm-2.1.2-5f5f1a61f052552d4ad7863b8de3c66b4b5e33be58e87f675a44b951e48ce158.zip b/.yarn/cache/clone-npm-2.1.2-5f5f1a61f052552d4ad7863b8de3c66b4b5e33be58e87f675a44b951e48ce158.zip new file mode 100644 index 0000000..1e7d9ca Binary files /dev/null and b/.yarn/cache/clone-npm-2.1.2-5f5f1a61f052552d4ad7863b8de3c66b4b5e33be58e87f675a44b951e48ce158.zip differ diff --git a/.yarn/cache/clone-stats-npm-1.0.0-a5592cd2b542dfd45819533c9d7f12491e515918acdb93fe1d0b4235cec1cff5.zip b/.yarn/cache/clone-stats-npm-1.0.0-a5592cd2b542dfd45819533c9d7f12491e515918acdb93fe1d0b4235cec1cff5.zip new file mode 100644 index 0000000..9061cfe Binary files /dev/null and b/.yarn/cache/clone-stats-npm-1.0.0-a5592cd2b542dfd45819533c9d7f12491e515918acdb93fe1d0b4235cec1cff5.zip differ diff --git a/.yarn/cache/cloneable-readable-npm-1.1.2-ce3f113a4b590249adfccda3a5c7d68728d7f7ff24e04ffdaa6ac16e4e6f9167.zip b/.yarn/cache/cloneable-readable-npm-1.1.2-ce3f113a4b590249adfccda3a5c7d68728d7f7ff24e04ffdaa6ac16e4e6f9167.zip new file mode 100644 index 0000000..393d5e3 Binary files /dev/null and b/.yarn/cache/cloneable-readable-npm-1.1.2-ce3f113a4b590249adfccda3a5c7d68728d7f7ff24e04ffdaa6ac16e4e6f9167.zip differ diff --git a/.yarn/cache/co-npm-4.6.0-6fae98c8ffc99e4e89e73e7204f507a1ecbe9b4fec57ac5d7f9a37b4334be33c.zip b/.yarn/cache/co-npm-4.6.0-6fae98c8ffc99e4e89e73e7204f507a1ecbe9b4fec57ac5d7f9a37b4334be33c.zip new file mode 100644 index 0000000..0016fd6 Binary files /dev/null and b/.yarn/cache/co-npm-4.6.0-6fae98c8ffc99e4e89e73e7204f507a1ecbe9b4fec57ac5d7f9a37b4334be33c.zip differ diff --git a/.yarn/cache/code-point-at-npm-1.1.0-b5cac3c1391cec08d6f39184266f9e0249a540ddae5dafd61ab44ff7c14d9994.zip b/.yarn/cache/code-point-at-npm-1.1.0-b5cac3c1391cec08d6f39184266f9e0249a540ddae5dafd61ab44ff7c14d9994.zip new file mode 100644 index 0000000..988b533 Binary files /dev/null and b/.yarn/cache/code-point-at-npm-1.1.0-b5cac3c1391cec08d6f39184266f9e0249a540ddae5dafd61ab44ff7c14d9994.zip differ diff --git a/.yarn/cache/collection-map-npm-1.0.0-250a30c5d6dce2173cfaba099f0ecbafa7d7b00ee7bf2dddfd843b07a10e3522.zip b/.yarn/cache/collection-map-npm-1.0.0-250a30c5d6dce2173cfaba099f0ecbafa7d7b00ee7bf2dddfd843b07a10e3522.zip new file mode 100644 index 0000000..77915ee Binary files /dev/null and b/.yarn/cache/collection-map-npm-1.0.0-250a30c5d6dce2173cfaba099f0ecbafa7d7b00ee7bf2dddfd843b07a10e3522.zip differ diff --git a/.yarn/cache/collection-visit-npm-1.0.0-8b3223222b35d5e33064715bc34d8be013a3f5d926a0dbcf3019ebd22c5cea3e.zip b/.yarn/cache/collection-visit-npm-1.0.0-8b3223222b35d5e33064715bc34d8be013a3f5d926a0dbcf3019ebd22c5cea3e.zip new file mode 100644 index 0000000..9cbc19e Binary files /dev/null and b/.yarn/cache/collection-visit-npm-1.0.0-8b3223222b35d5e33064715bc34d8be013a3f5d926a0dbcf3019ebd22c5cea3e.zip differ diff --git a/.yarn/cache/color-convert-npm-1.9.3-eb8a1370304c7e914067b2087e3b8092ee5c69eeb197683c5485328afbf94fa9.zip b/.yarn/cache/color-convert-npm-1.9.3-eb8a1370304c7e914067b2087e3b8092ee5c69eeb197683c5485328afbf94fa9.zip new file mode 100644 index 0000000..eb4375f Binary files /dev/null and b/.yarn/cache/color-convert-npm-1.9.3-eb8a1370304c7e914067b2087e3b8092ee5c69eeb197683c5485328afbf94fa9.zip differ diff --git a/.yarn/cache/color-name-npm-1.1.3-514f6d9e6649b1c9f8feaeada7d994e809f33d6d85b45039a710e22f9f5d0f6f.zip b/.yarn/cache/color-name-npm-1.1.3-514f6d9e6649b1c9f8feaeada7d994e809f33d6d85b45039a710e22f9f5d0f6f.zip new file mode 100644 index 0000000..fbef97f Binary files /dev/null and b/.yarn/cache/color-name-npm-1.1.3-514f6d9e6649b1c9f8feaeada7d994e809f33d6d85b45039a710e22f9f5d0f6f.zip differ diff --git a/.yarn/cache/color-support-npm-1.1.3-bf833b532e6afb7f9ee6d42e0b060ca586d740f998d646a3f70f7897ec214f8b.zip b/.yarn/cache/color-support-npm-1.1.3-bf833b532e6afb7f9ee6d42e0b060ca586d740f998d646a3f70f7897ec214f8b.zip new file mode 100644 index 0000000..9231f34 Binary files /dev/null and b/.yarn/cache/color-support-npm-1.1.3-bf833b532e6afb7f9ee6d42e0b060ca586d740f998d646a3f70f7897ec214f8b.zip differ diff --git a/.yarn/cache/colors-npm-1.0.3-6dd8180f50c65c856f71f69e0bcdc1a491e80f35e50b398f021d77484e2ca9a3.zip b/.yarn/cache/colors-npm-1.0.3-6dd8180f50c65c856f71f69e0bcdc1a491e80f35e50b398f021d77484e2ca9a3.zip new file mode 100644 index 0000000..fbe859c Binary files /dev/null and b/.yarn/cache/colors-npm-1.0.3-6dd8180f50c65c856f71f69e0bcdc1a491e80f35e50b398f021d77484e2ca9a3.zip differ diff --git a/.yarn/cache/combined-stream-npm-1.0.7-890fbb5896cf7559137231c6853c864d8f617fe7f87daa78fdd62db46f92ba9c.zip b/.yarn/cache/combined-stream-npm-1.0.7-890fbb5896cf7559137231c6853c864d8f617fe7f87daa78fdd62db46f92ba9c.zip new file mode 100644 index 0000000..ff2ca6d Binary files /dev/null and b/.yarn/cache/combined-stream-npm-1.0.7-890fbb5896cf7559137231c6853c864d8f617fe7f87daa78fdd62db46f92ba9c.zip differ diff --git a/.yarn/cache/commander-npm-2.17.1-61b7094a6a1618e570b320ca867aede63ae00136106afb1741a0fbc6c9556995.zip b/.yarn/cache/commander-npm-2.17.1-61b7094a6a1618e570b320ca867aede63ae00136106afb1741a0fbc6c9556995.zip new file mode 100644 index 0000000..684a3eb Binary files /dev/null and b/.yarn/cache/commander-npm-2.17.1-61b7094a6a1618e570b320ca867aede63ae00136106afb1741a0fbc6c9556995.zip differ diff --git a/.yarn/cache/commander-npm-2.19.0-400569f565b417dac86e3638d298f0489255aa76d7dd9c7331858a253f349ed1.zip b/.yarn/cache/commander-npm-2.19.0-400569f565b417dac86e3638d298f0489255aa76d7dd9c7331858a253f349ed1.zip new file mode 100644 index 0000000..f3851c4 Binary files /dev/null and b/.yarn/cache/commander-npm-2.19.0-400569f565b417dac86e3638d298f0489255aa76d7dd9c7331858a253f349ed1.zip differ diff --git a/.yarn/cache/commander-npm-2.20.0-60544dd3a7859f6e3da5d7ab7559561db9ffd2550c1326d24da3bcaa05ae07d0.zip b/.yarn/cache/commander-npm-2.20.0-60544dd3a7859f6e3da5d7ab7559561db9ffd2550c1326d24da3bcaa05ae07d0.zip new file mode 100644 index 0000000..db03fd4 Binary files /dev/null and b/.yarn/cache/commander-npm-2.20.0-60544dd3a7859f6e3da5d7ab7559561db9ffd2550c1326d24da3bcaa05ae07d0.zip differ diff --git a/.yarn/cache/commondir-npm-1.0.1-ad54ad5f15dfb98f1c9ba5365fa9fb385807b9e8291a23be4f473c04bf1e8e61.zip b/.yarn/cache/commondir-npm-1.0.1-ad54ad5f15dfb98f1c9ba5365fa9fb385807b9e8291a23be4f473c04bf1e8e61.zip new file mode 100644 index 0000000..2825762 Binary files /dev/null and b/.yarn/cache/commondir-npm-1.0.1-ad54ad5f15dfb98f1c9ba5365fa9fb385807b9e8291a23be4f473c04bf1e8e61.zip differ diff --git a/.yarn/cache/compare-versions-npm-3.4.0-628b97a4b520305588e79bb4465a543823fcd4b5e5360cc0bf9bdda2bb5c8471.zip b/.yarn/cache/compare-versions-npm-3.4.0-628b97a4b520305588e79bb4465a543823fcd4b5e5360cc0bf9bdda2bb5c8471.zip new file mode 100644 index 0000000..db89445 Binary files /dev/null and b/.yarn/cache/compare-versions-npm-3.4.0-628b97a4b520305588e79bb4465a543823fcd4b5e5360cc0bf9bdda2bb5c8471.zip differ diff --git a/.yarn/cache/component-emitter-npm-1.3.0-eee9b0300eda605ed3496868fa6e79f7327e4d9c30c631b9c016faa4ae8472c8.zip b/.yarn/cache/component-emitter-npm-1.3.0-eee9b0300eda605ed3496868fa6e79f7327e4d9c30c631b9c016faa4ae8472c8.zip new file mode 100644 index 0000000..6b4b360 Binary files /dev/null and b/.yarn/cache/component-emitter-npm-1.3.0-eee9b0300eda605ed3496868fa6e79f7327e4d9c30c631b9c016faa4ae8472c8.zip differ diff --git a/.yarn/cache/concat-map-npm-0.0.1-4d6d8c81f3df60f16459ba84a21602d68075bd0bcb31a3da5b1de2e94d1f42ae.zip b/.yarn/cache/concat-map-npm-0.0.1-4d6d8c81f3df60f16459ba84a21602d68075bd0bcb31a3da5b1de2e94d1f42ae.zip new file mode 100644 index 0000000..8d5ecb8 Binary files /dev/null and b/.yarn/cache/concat-map-npm-0.0.1-4d6d8c81f3df60f16459ba84a21602d68075bd0bcb31a3da5b1de2e94d1f42ae.zip differ diff --git a/.yarn/cache/concat-stream-npm-1.6.2-95a321e92e2da29f1fd8ae193a041ef12c326b06a026ec1a1904b10c356e8016.zip b/.yarn/cache/concat-stream-npm-1.6.2-95a321e92e2da29f1fd8ae193a041ef12c326b06a026ec1a1904b10c356e8016.zip new file mode 100644 index 0000000..6ace992 Binary files /dev/null and b/.yarn/cache/concat-stream-npm-1.6.2-95a321e92e2da29f1fd8ae193a041ef12c326b06a026ec1a1904b10c356e8016.zip differ diff --git a/.yarn/cache/console-browserify-npm-1.1.0-677cc3227eb88776b640a9b70afdebfec7f75f9aabb60575f2ae253487f0f51b.zip b/.yarn/cache/console-browserify-npm-1.1.0-677cc3227eb88776b640a9b70afdebfec7f75f9aabb60575f2ae253487f0f51b.zip new file mode 100644 index 0000000..39bc2bb Binary files /dev/null and b/.yarn/cache/console-browserify-npm-1.1.0-677cc3227eb88776b640a9b70afdebfec7f75f9aabb60575f2ae253487f0f51b.zip differ diff --git a/.yarn/cache/console-control-strings-npm-1.1.0-311afea55111b7939270e514add2f3cb8027296a994a041112acacc7a14bafc0.zip b/.yarn/cache/console-control-strings-npm-1.1.0-311afea55111b7939270e514add2f3cb8027296a994a041112acacc7a14bafc0.zip new file mode 100644 index 0000000..6ccdf15 Binary files /dev/null and b/.yarn/cache/console-control-strings-npm-1.1.0-311afea55111b7939270e514add2f3cb8027296a994a041112acacc7a14bafc0.zip differ diff --git a/.yarn/cache/constants-browserify-npm-1.0.0-115bfd8ab98c7bff66d40a527ec2d0ef7d3c7e4d64fbf5d692d7bbb772b9a88e.zip b/.yarn/cache/constants-browserify-npm-1.0.0-115bfd8ab98c7bff66d40a527ec2d0ef7d3c7e4d64fbf5d692d7bbb772b9a88e.zip new file mode 100644 index 0000000..d2bf7f3 Binary files /dev/null and b/.yarn/cache/constants-browserify-npm-1.0.0-115bfd8ab98c7bff66d40a527ec2d0ef7d3c7e4d64fbf5d692d7bbb772b9a88e.zip differ diff --git a/.yarn/cache/contains-path-npm-0.1.0-4c6398b98ad3f6f08cdb109661f7100ba62fd43252040cd9c5cfe6aabff4a912.zip b/.yarn/cache/contains-path-npm-0.1.0-4c6398b98ad3f6f08cdb109661f7100ba62fd43252040cd9c5cfe6aabff4a912.zip new file mode 100644 index 0000000..6a1d0d6 Binary files /dev/null and b/.yarn/cache/contains-path-npm-0.1.0-4c6398b98ad3f6f08cdb109661f7100ba62fd43252040cd9c5cfe6aabff4a912.zip differ diff --git a/.yarn/cache/content-disposition-npm-0.5.2-c74f8a3eb292d6011220a518c51b73a0586d564e8e818afe2d61207f59461a12.zip b/.yarn/cache/content-disposition-npm-0.5.2-c74f8a3eb292d6011220a518c51b73a0586d564e8e818afe2d61207f59461a12.zip new file mode 100644 index 0000000..cad7ea2 Binary files /dev/null and b/.yarn/cache/content-disposition-npm-0.5.2-c74f8a3eb292d6011220a518c51b73a0586d564e8e818afe2d61207f59461a12.zip differ diff --git a/.yarn/cache/content-type-npm-1.0.4-1d90270e24db9b9ceeffa669d284a72388516f46f28e1be3fa0c8479188d44b3.zip b/.yarn/cache/content-type-npm-1.0.4-1d90270e24db9b9ceeffa669d284a72388516f46f28e1be3fa0c8479188d44b3.zip new file mode 100644 index 0000000..09da762 Binary files /dev/null and b/.yarn/cache/content-type-npm-1.0.4-1d90270e24db9b9ceeffa669d284a72388516f46f28e1be3fa0c8479188d44b3.zip differ diff --git a/.yarn/cache/convert-source-map-npm-1.6.0-c01729263389f8302375a8b3a0f218f4edf236951a0481179b1d1c577ab67c80.zip b/.yarn/cache/convert-source-map-npm-1.6.0-c01729263389f8302375a8b3a0f218f4edf236951a0481179b1d1c577ab67c80.zip new file mode 100644 index 0000000..00b6d84 Binary files /dev/null and b/.yarn/cache/convert-source-map-npm-1.6.0-c01729263389f8302375a8b3a0f218f4edf236951a0481179b1d1c577ab67c80.zip differ diff --git a/.yarn/cache/cookie-npm-0.3.1-7321b49f30e7d0c89ba3f33a241ec74130cef5a3ba94f6b5a997ff7dae0aa81b.zip b/.yarn/cache/cookie-npm-0.3.1-7321b49f30e7d0c89ba3f33a241ec74130cef5a3ba94f6b5a997ff7dae0aa81b.zip new file mode 100644 index 0000000..cdbc821 Binary files /dev/null and b/.yarn/cache/cookie-npm-0.3.1-7321b49f30e7d0c89ba3f33a241ec74130cef5a3ba94f6b5a997ff7dae0aa81b.zip differ diff --git a/.yarn/cache/cookie-signature-npm-1.0.6-5d02b49ff3831935075c38a94ab6603169bdcbefc27ab55c79e7dc0f22bb35af.zip b/.yarn/cache/cookie-signature-npm-1.0.6-5d02b49ff3831935075c38a94ab6603169bdcbefc27ab55c79e7dc0f22bb35af.zip new file mode 100644 index 0000000..9b4a009 Binary files /dev/null and b/.yarn/cache/cookie-signature-npm-1.0.6-5d02b49ff3831935075c38a94ab6603169bdcbefc27ab55c79e7dc0f22bb35af.zip differ diff --git a/.yarn/cache/copy-concurrently-npm-1.0.5-4a8ccf81b8d6f66742af5d38b0f54d70278db22fd34bd130e68f5eef13929a30.zip b/.yarn/cache/copy-concurrently-npm-1.0.5-4a8ccf81b8d6f66742af5d38b0f54d70278db22fd34bd130e68f5eef13929a30.zip new file mode 100644 index 0000000..71c844f Binary files /dev/null and b/.yarn/cache/copy-concurrently-npm-1.0.5-4a8ccf81b8d6f66742af5d38b0f54d70278db22fd34bd130e68f5eef13929a30.zip differ diff --git a/.yarn/cache/copy-descriptor-npm-0.1.1-2b545bd6d5ce658ba318acbf149acfe090fc41c9ced2f4c295516898211da4ab.zip b/.yarn/cache/copy-descriptor-npm-0.1.1-2b545bd6d5ce658ba318acbf149acfe090fc41c9ced2f4c295516898211da4ab.zip new file mode 100644 index 0000000..d92f5fb Binary files /dev/null and b/.yarn/cache/copy-descriptor-npm-0.1.1-2b545bd6d5ce658ba318acbf149acfe090fc41c9ced2f4c295516898211da4ab.zip differ diff --git a/.yarn/cache/copy-props-npm-2.0.4-c00c87119e5daa34242ba7f4b3eca70878efaf0b3a1caf88dd04ddeb6440efb4.zip b/.yarn/cache/copy-props-npm-2.0.4-c00c87119e5daa34242ba7f4b3eca70878efaf0b3a1caf88dd04ddeb6440efb4.zip new file mode 100644 index 0000000..89c9cb8 Binary files /dev/null and b/.yarn/cache/copy-props-npm-2.0.4-c00c87119e5daa34242ba7f4b3eca70878efaf0b3a1caf88dd04ddeb6440efb4.zip differ diff --git a/.yarn/cache/core-decorators-npm-0.20.0-741767c50820d38fdaa1559c8f3e580583a2cd944d15b8493091adac3738af97.zip b/.yarn/cache/core-decorators-npm-0.20.0-741767c50820d38fdaa1559c8f3e580583a2cd944d15b8493091adac3738af97.zip new file mode 100644 index 0000000..cc4f901 Binary files /dev/null and b/.yarn/cache/core-decorators-npm-0.20.0-741767c50820d38fdaa1559c8f3e580583a2cd944d15b8493091adac3738af97.zip differ diff --git a/.yarn/cache/core-js-compat-npm-3.0.1-39095d50f163733f0bb1727d3ed7f56c348213e91f6e13eb8e8b3d4d41c77e90.zip b/.yarn/cache/core-js-compat-npm-3.0.1-39095d50f163733f0bb1727d3ed7f56c348213e91f6e13eb8e8b3d4d41c77e90.zip new file mode 100644 index 0000000..10c83b7 Binary files /dev/null and b/.yarn/cache/core-js-compat-npm-3.0.1-39095d50f163733f0bb1727d3ed7f56c348213e91f6e13eb8e8b3d4d41c77e90.zip differ diff --git a/.yarn/cache/core-js-npm-3.0.1-aa3c3acdc924f16550e78cd1505c549e13c838e292d5b844ff791c155a847926.zip b/.yarn/cache/core-js-npm-3.0.1-aa3c3acdc924f16550e78cd1505c549e13c838e292d5b844ff791c155a847926.zip new file mode 100644 index 0000000..9146dfc Binary files /dev/null and b/.yarn/cache/core-js-npm-3.0.1-aa3c3acdc924f16550e78cd1505c549e13c838e292d5b844ff791c155a847926.zip differ diff --git a/.yarn/cache/core-js-pure-npm-3.0.1-b52195ba2466504d3e841cf8f872775a2657069ce985d77e8b808fe357d22f8b.zip b/.yarn/cache/core-js-pure-npm-3.0.1-b52195ba2466504d3e841cf8f872775a2657069ce985d77e8b808fe357d22f8b.zip new file mode 100644 index 0000000..28c9783 Binary files /dev/null and b/.yarn/cache/core-js-pure-npm-3.0.1-b52195ba2466504d3e841cf8f872775a2657069ce985d77e8b808fe357d22f8b.zip differ diff --git a/.yarn/cache/core-util-is-npm-1.0.2-0092c88e334464f960c5d376edaafbaf1713fb6fd97b081fa4219a69645517df.zip b/.yarn/cache/core-util-is-npm-1.0.2-0092c88e334464f960c5d376edaafbaf1713fb6fd97b081fa4219a69645517df.zip new file mode 100644 index 0000000..29cbe63 Binary files /dev/null and b/.yarn/cache/core-util-is-npm-1.0.2-0092c88e334464f960c5d376edaafbaf1713fb6fd97b081fa4219a69645517df.zip differ diff --git a/.yarn/cache/corser-npm-2.0.1-846664cc1a4ee29bd621159ddc289541ff5fcf08945fc866152918ab143316d1.zip b/.yarn/cache/corser-npm-2.0.1-846664cc1a4ee29bd621159ddc289541ff5fcf08945fc866152918ab143316d1.zip new file mode 100644 index 0000000..59876e8 Binary files /dev/null and b/.yarn/cache/corser-npm-2.0.1-846664cc1a4ee29bd621159ddc289541ff5fcf08945fc866152918ab143316d1.zip differ diff --git a/.yarn/cache/create-ecdh-npm-4.0.3-e0e65f8c9038bdc2d88cbd51dbf6ea6e62dab30d3261cf74d9635d5e430d0fe4.zip b/.yarn/cache/create-ecdh-npm-4.0.3-e0e65f8c9038bdc2d88cbd51dbf6ea6e62dab30d3261cf74d9635d5e430d0fe4.zip new file mode 100644 index 0000000..9d9fd6c Binary files /dev/null and b/.yarn/cache/create-ecdh-npm-4.0.3-e0e65f8c9038bdc2d88cbd51dbf6ea6e62dab30d3261cf74d9635d5e430d0fe4.zip differ diff --git a/.yarn/cache/create-hash-npm-1.2.0-c5a714bd235cd121ccdaf5d81798c6bd491b5bac78f28fd160a0d0ec12d5a5a2.zip b/.yarn/cache/create-hash-npm-1.2.0-c5a714bd235cd121ccdaf5d81798c6bd491b5bac78f28fd160a0d0ec12d5a5a2.zip new file mode 100644 index 0000000..1393bec Binary files /dev/null and b/.yarn/cache/create-hash-npm-1.2.0-c5a714bd235cd121ccdaf5d81798c6bd491b5bac78f28fd160a0d0ec12d5a5a2.zip differ diff --git a/.yarn/cache/create-hmac-npm-1.1.7-8191397e69176723916185a3c462fb0889e846ca60af1362ce601186bf8c611b.zip b/.yarn/cache/create-hmac-npm-1.1.7-8191397e69176723916185a3c462fb0889e846ca60af1362ce601186bf8c611b.zip new file mode 100644 index 0000000..87ca4fc Binary files /dev/null and b/.yarn/cache/create-hmac-npm-1.1.7-8191397e69176723916185a3c462fb0889e846ca60af1362ce601186bf8c611b.zip differ diff --git a/.yarn/cache/cross-spawn-npm-6.0.5-0ba5f883cf582a4248c1c8575ef31c368634c587aa0b9731c596cf866746bf5e.zip b/.yarn/cache/cross-spawn-npm-6.0.5-0ba5f883cf582a4248c1c8575ef31c368634c587aa0b9731c596cf866746bf5e.zip new file mode 100644 index 0000000..6babb53 Binary files /dev/null and b/.yarn/cache/cross-spawn-npm-6.0.5-0ba5f883cf582a4248c1c8575ef31c368634c587aa0b9731c596cf866746bf5e.zip differ diff --git a/.yarn/cache/crypto-browserify-npm-3.12.0-b6321b5e1e2190b3e106cefa8dfa310ddb53d196b50965e1b0fc29f72b74bdda.zip b/.yarn/cache/crypto-browserify-npm-3.12.0-b6321b5e1e2190b3e106cefa8dfa310ddb53d196b50965e1b0fc29f72b74bdda.zip new file mode 100644 index 0000000..324bdc6 Binary files /dev/null and b/.yarn/cache/crypto-browserify-npm-3.12.0-b6321b5e1e2190b3e106cefa8dfa310ddb53d196b50965e1b0fc29f72b74bdda.zip differ diff --git a/.yarn/cache/css-select-npm-1.2.0-52f3f158c853972a00518536e896718864e2669b3322a798d8d516c83dfab921.zip b/.yarn/cache/css-select-npm-1.2.0-52f3f158c853972a00518536e896718864e2669b3322a798d8d516c83dfab921.zip new file mode 100644 index 0000000..49b34e4 Binary files /dev/null and b/.yarn/cache/css-select-npm-1.2.0-52f3f158c853972a00518536e896718864e2669b3322a798d8d516c83dfab921.zip differ diff --git a/.yarn/cache/css-what-npm-2.1.3-ee7349330ce6998ed60db06920e461b8793c8769abf6224f75ccd783e11f0ecf.zip b/.yarn/cache/css-what-npm-2.1.3-ee7349330ce6998ed60db06920e461b8793c8769abf6224f75ccd783e11f0ecf.zip new file mode 100644 index 0000000..f9c77ad Binary files /dev/null and b/.yarn/cache/css-what-npm-2.1.3-ee7349330ce6998ed60db06920e461b8793c8769abf6224f75ccd783e11f0ecf.zip differ diff --git a/.yarn/cache/cssom-npm-0.3.6-41a74e282cbcc1e9a0cca51f3f5c61a8a743b80a02d0737d80e458c835a94c16.zip b/.yarn/cache/cssom-npm-0.3.6-41a74e282cbcc1e9a0cca51f3f5c61a8a743b80a02d0737d80e458c835a94c16.zip new file mode 100644 index 0000000..1754a36 Binary files /dev/null and b/.yarn/cache/cssom-npm-0.3.6-41a74e282cbcc1e9a0cca51f3f5c61a8a743b80a02d0737d80e458c835a94c16.zip differ diff --git a/.yarn/cache/cssstyle-npm-1.2.2-da0aec5cbe59514fa338298b4173b8f26ab00e9698c4bc24c8a19475935f133d.zip b/.yarn/cache/cssstyle-npm-1.2.2-da0aec5cbe59514fa338298b4173b8f26ab00e9698c4bc24c8a19475935f133d.zip new file mode 100644 index 0000000..05d700d Binary files /dev/null and b/.yarn/cache/cssstyle-npm-1.2.2-da0aec5cbe59514fa338298b4173b8f26ab00e9698c4bc24c8a19475935f133d.zip differ diff --git a/.yarn/cache/cyclist-npm-0.2.2-0a3a24f80207c8a7ea54dfa9e1c7dc28f356a0fd567a5ce96c1c7ac7ef9cfcf4.zip b/.yarn/cache/cyclist-npm-0.2.2-0a3a24f80207c8a7ea54dfa9e1c7dc28f356a0fd567a5ce96c1c7ac7ef9cfcf4.zip new file mode 100644 index 0000000..b9e4d7a Binary files /dev/null and b/.yarn/cache/cyclist-npm-0.2.2-0a3a24f80207c8a7ea54dfa9e1c7dc28f356a0fd567a5ce96c1c7ac7ef9cfcf4.zip differ diff --git a/.yarn/cache/d-npm-1.0.0-9ba8a25a99ce07f69cfa730d3af0eb8631489f6f0c2d005480987a2b259768b9.zip b/.yarn/cache/d-npm-1.0.0-9ba8a25a99ce07f69cfa730d3af0eb8631489f6f0c2d005480987a2b259768b9.zip new file mode 100644 index 0000000..e3c31bd Binary files /dev/null and b/.yarn/cache/d-npm-1.0.0-9ba8a25a99ce07f69cfa730d3af0eb8631489f6f0c2d005480987a2b259768b9.zip differ diff --git a/.yarn/cache/dashdash-npm-1.14.1-65bc2ad3cd596bf83dd2240bd5c772c23a2bb21d1d70fae275ce957944dcc6d7.zip b/.yarn/cache/dashdash-npm-1.14.1-65bc2ad3cd596bf83dd2240bd5c772c23a2bb21d1d70fae275ce957944dcc6d7.zip new file mode 100644 index 0000000..e60f760 Binary files /dev/null and b/.yarn/cache/dashdash-npm-1.14.1-65bc2ad3cd596bf83dd2240bd5c772c23a2bb21d1d70fae275ce957944dcc6d7.zip differ diff --git a/.yarn/cache/data-urls-npm-1.1.0-917f9bc887bc6a96f04887f65939a3eb0f72a630378950f57c33aa6df82c2a30.zip b/.yarn/cache/data-urls-npm-1.1.0-917f9bc887bc6a96f04887f65939a3eb0f72a630378950f57c33aa6df82c2a30.zip new file mode 100644 index 0000000..ef7fa04 Binary files /dev/null and b/.yarn/cache/data-urls-npm-1.1.0-917f9bc887bc6a96f04887f65939a3eb0f72a630378950f57c33aa6df82c2a30.zip differ diff --git a/.yarn/cache/date-now-npm-0.1.4-579f365f64d243c03b56410447381981e49baf56b07c7626aaeab240fe028750.zip b/.yarn/cache/date-now-npm-0.1.4-579f365f64d243c03b56410447381981e49baf56b07c7626aaeab240fe028750.zip new file mode 100644 index 0000000..7a69800 Binary files /dev/null and b/.yarn/cache/date-now-npm-0.1.4-579f365f64d243c03b56410447381981e49baf56b07c7626aaeab240fe028750.zip differ diff --git a/.yarn/cache/debug-npm-2.6.9-a22b8093089df29ca19a7c10d81885890baaeaafa2ee64904636bf2e064dd0be.zip b/.yarn/cache/debug-npm-2.6.9-a22b8093089df29ca19a7c10d81885890baaeaafa2ee64904636bf2e064dd0be.zip new file mode 100644 index 0000000..c0bab49 Binary files /dev/null and b/.yarn/cache/debug-npm-2.6.9-a22b8093089df29ca19a7c10d81885890baaeaafa2ee64904636bf2e064dd0be.zip differ diff --git a/.yarn/cache/debug-npm-3.2.6-61f201c4d3a7ad0a2ad7963b17e1dee332ae51395f2a3e9bab38d1a92b71c705.zip b/.yarn/cache/debug-npm-3.2.6-61f201c4d3a7ad0a2ad7963b17e1dee332ae51395f2a3e9bab38d1a92b71c705.zip new file mode 100644 index 0000000..3b64a65 Binary files /dev/null and b/.yarn/cache/debug-npm-3.2.6-61f201c4d3a7ad0a2ad7963b17e1dee332ae51395f2a3e9bab38d1a92b71c705.zip differ diff --git a/.yarn/cache/debug-npm-4.1.1-a1f870a4a95fff67eeac2388e06345982ebf1149c710f8efe18fe5d1967fec40.zip b/.yarn/cache/debug-npm-4.1.1-a1f870a4a95fff67eeac2388e06345982ebf1149c710f8efe18fe5d1967fec40.zip new file mode 100644 index 0000000..0e0a144 Binary files /dev/null and b/.yarn/cache/debug-npm-4.1.1-a1f870a4a95fff67eeac2388e06345982ebf1149c710f8efe18fe5d1967fec40.zip differ diff --git a/.yarn/cache/decamelize-npm-1.2.0-f40012de90d2d4dd1a0f843517a0508c78a38a49d64e949cbdc852b957e58136.zip b/.yarn/cache/decamelize-npm-1.2.0-f40012de90d2d4dd1a0f843517a0508c78a38a49d64e949cbdc852b957e58136.zip new file mode 100644 index 0000000..d37adcf Binary files /dev/null and b/.yarn/cache/decamelize-npm-1.2.0-f40012de90d2d4dd1a0f843517a0508c78a38a49d64e949cbdc852b957e58136.zip differ diff --git a/.yarn/cache/decode-uri-component-npm-0.2.0-7b50e9d5402df29f0ba16bace109379d6fd1aacd405da3eb9c4b9a91f21303d4.zip b/.yarn/cache/decode-uri-component-npm-0.2.0-7b50e9d5402df29f0ba16bace109379d6fd1aacd405da3eb9c4b9a91f21303d4.zip new file mode 100644 index 0000000..5bc392e Binary files /dev/null and b/.yarn/cache/decode-uri-component-npm-0.2.0-7b50e9d5402df29f0ba16bace109379d6fd1aacd405da3eb9c4b9a91f21303d4.zip differ diff --git a/.yarn/cache/deep-extend-npm-0.6.0-331841c8d0930f97fac713c937d91d53be953dc03fa7503a768f604e4daaff91.zip b/.yarn/cache/deep-extend-npm-0.6.0-331841c8d0930f97fac713c937d91d53be953dc03fa7503a768f604e4daaff91.zip new file mode 100644 index 0000000..0c2bc03 Binary files /dev/null and b/.yarn/cache/deep-extend-npm-0.6.0-331841c8d0930f97fac713c937d91d53be953dc03fa7503a768f604e4daaff91.zip differ diff --git a/.yarn/cache/deep-is-npm-0.1.3-4035efaaee51f3e7c181b2bae5896fab4be56d3960d6510781ed2b1dd8c0f9b5.zip b/.yarn/cache/deep-is-npm-0.1.3-4035efaaee51f3e7c181b2bae5896fab4be56d3960d6510781ed2b1dd8c0f9b5.zip new file mode 100644 index 0000000..f7393af Binary files /dev/null and b/.yarn/cache/deep-is-npm-0.1.3-4035efaaee51f3e7c181b2bae5896fab4be56d3960d6510781ed2b1dd8c0f9b5.zip differ diff --git a/.yarn/cache/default-compare-npm-1.0.0-b953e010f22ca684e9b6d84d7f46b86ccc55334c9040485be66e944d4e86a4e4.zip b/.yarn/cache/default-compare-npm-1.0.0-b953e010f22ca684e9b6d84d7f46b86ccc55334c9040485be66e944d4e86a4e4.zip new file mode 100644 index 0000000..9e7585c Binary files /dev/null and b/.yarn/cache/default-compare-npm-1.0.0-b953e010f22ca684e9b6d84d7f46b86ccc55334c9040485be66e944d4e86a4e4.zip differ diff --git a/.yarn/cache/default-require-extensions-npm-2.0.0-77d0cb4b308200adb8b8fba04f496713aaaab853ce91abee5f358c63becf0f6b.zip b/.yarn/cache/default-require-extensions-npm-2.0.0-77d0cb4b308200adb8b8fba04f496713aaaab853ce91abee5f358c63becf0f6b.zip new file mode 100644 index 0000000..087da59 Binary files /dev/null and b/.yarn/cache/default-require-extensions-npm-2.0.0-77d0cb4b308200adb8b8fba04f496713aaaab853ce91abee5f358c63becf0f6b.zip differ diff --git a/.yarn/cache/default-resolution-npm-2.0.0-c1cdc02353e56fc539c1f480ad00bd195d0246a5c5aec5aeed1b8a7a7248151b.zip b/.yarn/cache/default-resolution-npm-2.0.0-c1cdc02353e56fc539c1f480ad00bd195d0246a5c5aec5aeed1b8a7a7248151b.zip new file mode 100644 index 0000000..75cf6c1 Binary files /dev/null and b/.yarn/cache/default-resolution-npm-2.0.0-c1cdc02353e56fc539c1f480ad00bd195d0246a5c5aec5aeed1b8a7a7248151b.zip differ diff --git a/.yarn/cache/define-properties-npm-1.1.3-26bcf4a5da466a2c7422dabcff7b0d6d542f245563cd767ba3f01267f5e2a21d.zip b/.yarn/cache/define-properties-npm-1.1.3-26bcf4a5da466a2c7422dabcff7b0d6d542f245563cd767ba3f01267f5e2a21d.zip new file mode 100644 index 0000000..341b6fb Binary files /dev/null and b/.yarn/cache/define-properties-npm-1.1.3-26bcf4a5da466a2c7422dabcff7b0d6d542f245563cd767ba3f01267f5e2a21d.zip differ diff --git a/.yarn/cache/define-property-npm-0.2.5-13f4c75ec5484c6f1042e45176efc2795ebc9d0e89c72c929b7efca9b9f7fab7.zip b/.yarn/cache/define-property-npm-0.2.5-13f4c75ec5484c6f1042e45176efc2795ebc9d0e89c72c929b7efca9b9f7fab7.zip new file mode 100644 index 0000000..e864287 Binary files /dev/null and b/.yarn/cache/define-property-npm-0.2.5-13f4c75ec5484c6f1042e45176efc2795ebc9d0e89c72c929b7efca9b9f7fab7.zip differ diff --git a/.yarn/cache/define-property-npm-1.0.0-6c33b5ced49218373c7cde37d7aeed60f96363a1370bcca62d5155634c8ce9f8.zip b/.yarn/cache/define-property-npm-1.0.0-6c33b5ced49218373c7cde37d7aeed60f96363a1370bcca62d5155634c8ce9f8.zip new file mode 100644 index 0000000..9cd237d Binary files /dev/null and b/.yarn/cache/define-property-npm-1.0.0-6c33b5ced49218373c7cde37d7aeed60f96363a1370bcca62d5155634c8ce9f8.zip differ diff --git a/.yarn/cache/define-property-npm-2.0.2-3a5504ac8f51d648088a04cf667ac8e32e0e1ab2e16663a5803b85ae3672939c.zip b/.yarn/cache/define-property-npm-2.0.2-3a5504ac8f51d648088a04cf667ac8e32e0e1ab2e16663a5803b85ae3672939c.zip new file mode 100644 index 0000000..2e35db4 Binary files /dev/null and b/.yarn/cache/define-property-npm-2.0.2-3a5504ac8f51d648088a04cf667ac8e32e0e1ab2e16663a5803b85ae3672939c.zip differ diff --git a/.yarn/cache/delayed-stream-npm-1.0.0-3bb9d285d06419ccbb24c8f7a99afb033ed6b1c0ec91763a8f3cb63173a63ff1.zip b/.yarn/cache/delayed-stream-npm-1.0.0-3bb9d285d06419ccbb24c8f7a99afb033ed6b1c0ec91763a8f3cb63173a63ff1.zip new file mode 100644 index 0000000..4d42189 Binary files /dev/null and b/.yarn/cache/delayed-stream-npm-1.0.0-3bb9d285d06419ccbb24c8f7a99afb033ed6b1c0ec91763a8f3cb63173a63ff1.zip differ diff --git a/.yarn/cache/delegates-npm-1.0.0-c07eda1c87a034a782fd9c942c91d4ff7e0da4f4cfc7677bd4516b1f1961538d.zip b/.yarn/cache/delegates-npm-1.0.0-c07eda1c87a034a782fd9c942c91d4ff7e0da4f4cfc7677bd4516b1f1961538d.zip new file mode 100644 index 0000000..1755c2c Binary files /dev/null and b/.yarn/cache/delegates-npm-1.0.0-c07eda1c87a034a782fd9c942c91d4ff7e0da4f4cfc7677bd4516b1f1961538d.zip differ diff --git a/.yarn/cache/depd-npm-1.1.2-cde3afa5006dfacd3e376b4f366db7f652f5f867f0b6a5095e30e51550f83c6e.zip b/.yarn/cache/depd-npm-1.1.2-cde3afa5006dfacd3e376b4f366db7f652f5f867f0b6a5095e30e51550f83c6e.zip new file mode 100644 index 0000000..e580d75 Binary files /dev/null and b/.yarn/cache/depd-npm-1.1.2-cde3afa5006dfacd3e376b4f366db7f652f5f867f0b6a5095e30e51550f83c6e.zip differ diff --git a/.yarn/cache/des.js-npm-1.0.0-2b116ed20d75fa7c2dc1891a3f6ce6166f8f557c4160b9df3f13ffb5dd99a105.zip b/.yarn/cache/des.js-npm-1.0.0-2b116ed20d75fa7c2dc1891a3f6ce6166f8f557c4160b9df3f13ffb5dd99a105.zip new file mode 100644 index 0000000..704a5df Binary files /dev/null and b/.yarn/cache/des.js-npm-1.0.0-2b116ed20d75fa7c2dc1891a3f6ce6166f8f557c4160b9df3f13ffb5dd99a105.zip differ diff --git a/.yarn/cache/destroy-npm-1.0.4-398af984afd73b70dad5ec2a66e15b7878cb9baa0a875e9b8a09b2d4af653449.zip b/.yarn/cache/destroy-npm-1.0.4-398af984afd73b70dad5ec2a66e15b7878cb9baa0a875e9b8a09b2d4af653449.zip new file mode 100644 index 0000000..4d57d5b Binary files /dev/null and b/.yarn/cache/destroy-npm-1.0.4-398af984afd73b70dad5ec2a66e15b7878cb9baa0a875e9b8a09b2d4af653449.zip differ diff --git a/.yarn/cache/detect-file-npm-1.0.0-ec573d96b4c8f34a927b1587f4e7be6dffe3f7a483b0eb9678b67f01ae040af0.zip b/.yarn/cache/detect-file-npm-1.0.0-ec573d96b4c8f34a927b1587f4e7be6dffe3f7a483b0eb9678b67f01ae040af0.zip new file mode 100644 index 0000000..f8e5a51 Binary files /dev/null and b/.yarn/cache/detect-file-npm-1.0.0-ec573d96b4c8f34a927b1587f4e7be6dffe3f7a483b0eb9678b67f01ae040af0.zip differ diff --git a/.yarn/cache/detect-libc-npm-1.0.3-20dbd83b18f9eab539862a9f7d3a0e2389ebcad6488ad59160cd0ec61ad7a337.zip b/.yarn/cache/detect-libc-npm-1.0.3-20dbd83b18f9eab539862a9f7d3a0e2389ebcad6488ad59160cd0ec61ad7a337.zip new file mode 100644 index 0000000..4071c81 Binary files /dev/null and b/.yarn/cache/detect-libc-npm-1.0.3-20dbd83b18f9eab539862a9f7d3a0e2389ebcad6488ad59160cd0ec61ad7a337.zip differ diff --git a/.yarn/cache/detect-newline-npm-2.1.0-2335d44cfa680a0992a073fbdb74cc4763f319d804664e90e39053562f500ae1.zip b/.yarn/cache/detect-newline-npm-2.1.0-2335d44cfa680a0992a073fbdb74cc4763f319d804664e90e39053562f500ae1.zip new file mode 100644 index 0000000..a9a0439 Binary files /dev/null and b/.yarn/cache/detect-newline-npm-2.1.0-2335d44cfa680a0992a073fbdb74cc4763f319d804664e90e39053562f500ae1.zip differ diff --git a/.yarn/cache/diff-sequences-npm-24.3.0-986dfde6fb9086796a51e43efe5a6f972d65b9a6c246c2222b0fd4220341a1db.zip b/.yarn/cache/diff-sequences-npm-24.3.0-986dfde6fb9086796a51e43efe5a6f972d65b9a6c246c2222b0fd4220341a1db.zip new file mode 100644 index 0000000..c366123 Binary files /dev/null and b/.yarn/cache/diff-sequences-npm-24.3.0-986dfde6fb9086796a51e43efe5a6f972d65b9a6c246c2222b0fd4220341a1db.zip differ diff --git a/.yarn/cache/diffie-hellman-npm-5.0.3-0699f75044d3d6640ef79ef601315e8a2649266fe1a86f07b26aa273732330fd.zip b/.yarn/cache/diffie-hellman-npm-5.0.3-0699f75044d3d6640ef79ef601315e8a2649266fe1a86f07b26aa273732330fd.zip new file mode 100644 index 0000000..e3ebee9 Binary files /dev/null and b/.yarn/cache/diffie-hellman-npm-5.0.3-0699f75044d3d6640ef79ef601315e8a2649266fe1a86f07b26aa273732330fd.zip differ diff --git a/.yarn/cache/doctrine-npm-1.5.0-1d3cdc415c8092f8623313f4ac47ce4a6282d261c8f7881586f75ce2b6d162fe.zip b/.yarn/cache/doctrine-npm-1.5.0-1d3cdc415c8092f8623313f4ac47ce4a6282d261c8f7881586f75ce2b6d162fe.zip new file mode 100644 index 0000000..78b19f0 Binary files /dev/null and b/.yarn/cache/doctrine-npm-1.5.0-1d3cdc415c8092f8623313f4ac47ce4a6282d261c8f7881586f75ce2b6d162fe.zip differ diff --git a/.yarn/cache/doctrine-npm-2.1.0-33e3a4be091f7e8e7ba41548a52e333564782df11998693c460016e71e849b68.zip b/.yarn/cache/doctrine-npm-2.1.0-33e3a4be091f7e8e7ba41548a52e333564782df11998693c460016e71e849b68.zip new file mode 100644 index 0000000..b42aca2 Binary files /dev/null and b/.yarn/cache/doctrine-npm-2.1.0-33e3a4be091f7e8e7ba41548a52e333564782df11998693c460016e71e849b68.zip differ diff --git a/.yarn/cache/doctrine-npm-3.0.0-c4caf26004de97541739b93a10b18cc44549873168cdb602d4f6265fdacdd4e2.zip b/.yarn/cache/doctrine-npm-3.0.0-c4caf26004de97541739b93a10b18cc44549873168cdb602d4f6265fdacdd4e2.zip new file mode 100644 index 0000000..ae57a81 Binary files /dev/null and b/.yarn/cache/doctrine-npm-3.0.0-c4caf26004de97541739b93a10b18cc44549873168cdb602d4f6265fdacdd4e2.zip differ diff --git a/.yarn/cache/dom-converter-npm-0.2.0-4d43dcbd3d3e4ebd0022e4da896fe856227f153b39a2b33a6ae8f4ec718f3fa7.zip b/.yarn/cache/dom-converter-npm-0.2.0-4d43dcbd3d3e4ebd0022e4da896fe856227f153b39a2b33a6ae8f4ec718f3fa7.zip new file mode 100644 index 0000000..57906cc Binary files /dev/null and b/.yarn/cache/dom-converter-npm-0.2.0-4d43dcbd3d3e4ebd0022e4da896fe856227f153b39a2b33a6ae8f4ec718f3fa7.zip differ diff --git a/.yarn/cache/dom-serializer-npm-0.1.1-8e6c093fafc9d01a5d00c92f7bdc8474c47e3a7b1fd8dacd05d8eb9b5836d2f4.zip b/.yarn/cache/dom-serializer-npm-0.1.1-8e6c093fafc9d01a5d00c92f7bdc8474c47e3a7b1fd8dacd05d8eb9b5836d2f4.zip new file mode 100644 index 0000000..0c048ff Binary files /dev/null and b/.yarn/cache/dom-serializer-npm-0.1.1-8e6c093fafc9d01a5d00c92f7bdc8474c47e3a7b1fd8dacd05d8eb9b5836d2f4.zip differ diff --git a/.yarn/cache/domain-browser-npm-1.2.0-2e19501a9b0cd964cb69e106dcf32e633598e44b636c04f3645482af2ce7bfe9.zip b/.yarn/cache/domain-browser-npm-1.2.0-2e19501a9b0cd964cb69e106dcf32e633598e44b636c04f3645482af2ce7bfe9.zip new file mode 100644 index 0000000..22169bd Binary files /dev/null and b/.yarn/cache/domain-browser-npm-1.2.0-2e19501a9b0cd964cb69e106dcf32e633598e44b636c04f3645482af2ce7bfe9.zip differ diff --git a/.yarn/cache/domelementtype-npm-1.3.1-dad23f53be7408b9f67337cf6f7c4913df6293c301535a063290da9095292f75.zip b/.yarn/cache/domelementtype-npm-1.3.1-dad23f53be7408b9f67337cf6f7c4913df6293c301535a063290da9095292f75.zip new file mode 100644 index 0000000..388337e Binary files /dev/null and b/.yarn/cache/domelementtype-npm-1.3.1-dad23f53be7408b9f67337cf6f7c4913df6293c301535a063290da9095292f75.zip differ diff --git a/.yarn/cache/domexception-npm-1.0.1-2879ac4cb824ed203b5423ac31764f6280de2f7665fd7b9a5e92df0c126a6b76.zip b/.yarn/cache/domexception-npm-1.0.1-2879ac4cb824ed203b5423ac31764f6280de2f7665fd7b9a5e92df0c126a6b76.zip new file mode 100644 index 0000000..33deca4 Binary files /dev/null and b/.yarn/cache/domexception-npm-1.0.1-2879ac4cb824ed203b5423ac31764f6280de2f7665fd7b9a5e92df0c126a6b76.zip differ diff --git a/.yarn/cache/domhandler-npm-2.4.2-fb2dee89e02dc42c473006bf057334bffd781a7efd4801b17e404c75987cd5fb.zip b/.yarn/cache/domhandler-npm-2.4.2-fb2dee89e02dc42c473006bf057334bffd781a7efd4801b17e404c75987cd5fb.zip new file mode 100644 index 0000000..a66e980 Binary files /dev/null and b/.yarn/cache/domhandler-npm-2.4.2-fb2dee89e02dc42c473006bf057334bffd781a7efd4801b17e404c75987cd5fb.zip differ diff --git a/.yarn/cache/domutils-npm-1.5.1-2ee90abf718c703ddd1cf7d6343b888d686c7cc42bb77cd5024e5215f8167a11.zip b/.yarn/cache/domutils-npm-1.5.1-2ee90abf718c703ddd1cf7d6343b888d686c7cc42bb77cd5024e5215f8167a11.zip new file mode 100644 index 0000000..ca1e4a5 Binary files /dev/null and b/.yarn/cache/domutils-npm-1.5.1-2ee90abf718c703ddd1cf7d6343b888d686c7cc42bb77cd5024e5215f8167a11.zip differ diff --git a/.yarn/cache/domutils-npm-1.7.0-c1d23917ae7c24af72b8caf527089da495d408d16043cdeca785cb792f788fd8.zip b/.yarn/cache/domutils-npm-1.7.0-c1d23917ae7c24af72b8caf527089da495d408d16043cdeca785cb792f788fd8.zip new file mode 100644 index 0000000..0b4fe65 Binary files /dev/null and b/.yarn/cache/domutils-npm-1.7.0-c1d23917ae7c24af72b8caf527089da495d408d16043cdeca785cb792f788fd8.zip differ diff --git a/.yarn/cache/duplexer-npm-0.1.1-cb6be22010c30f07077d06ccfdfb5a30d21d44ac44233c918cfb0c97f1201a0f.zip b/.yarn/cache/duplexer-npm-0.1.1-cb6be22010c30f07077d06ccfdfb5a30d21d44ac44233c918cfb0c97f1201a0f.zip new file mode 100644 index 0000000..ff95873 Binary files /dev/null and b/.yarn/cache/duplexer-npm-0.1.1-cb6be22010c30f07077d06ccfdfb5a30d21d44ac44233c918cfb0c97f1201a0f.zip differ diff --git a/.yarn/cache/duplexify-npm-3.7.1-c371dda93d22d7c3ce422b7eee4f831a62bed0834fed672d2c8512c784cb70f6.zip b/.yarn/cache/duplexify-npm-3.7.1-c371dda93d22d7c3ce422b7eee4f831a62bed0834fed672d2c8512c784cb70f6.zip new file mode 100644 index 0000000..9d22d9a Binary files /dev/null and b/.yarn/cache/duplexify-npm-3.7.1-c371dda93d22d7c3ce422b7eee4f831a62bed0834fed672d2c8512c784cb70f6.zip differ diff --git a/.yarn/cache/each-props-npm-1.3.2-cf23248ef4b505914c8a7fb5281544c4c56800059208d0289ee6eca9e93936d4.zip b/.yarn/cache/each-props-npm-1.3.2-cf23248ef4b505914c8a7fb5281544c4c56800059208d0289ee6eca9e93936d4.zip new file mode 100644 index 0000000..0e2f173 Binary files /dev/null and b/.yarn/cache/each-props-npm-1.3.2-cf23248ef4b505914c8a7fb5281544c4c56800059208d0289ee6eca9e93936d4.zip differ diff --git a/.yarn/cache/ecc-jsbn-npm-0.1.2-35c39df251971d39398a4b91ec43744345f7202254f64f5e324ad721d5a5b64c.zip b/.yarn/cache/ecc-jsbn-npm-0.1.2-35c39df251971d39398a4b91ec43744345f7202254f64f5e324ad721d5a5b64c.zip new file mode 100644 index 0000000..23492fb Binary files /dev/null and b/.yarn/cache/ecc-jsbn-npm-0.1.2-35c39df251971d39398a4b91ec43744345f7202254f64f5e324ad721d5a5b64c.zip differ diff --git a/.yarn/cache/ecstatic-npm-3.3.1-a39bf05daa49f1d590eef37cd1d204835d459361332f3b08c8d57b21d188ae8f.zip b/.yarn/cache/ecstatic-npm-3.3.1-a39bf05daa49f1d590eef37cd1d204835d459361332f3b08c8d57b21d188ae8f.zip new file mode 100644 index 0000000..c128e22 Binary files /dev/null and b/.yarn/cache/ecstatic-npm-3.3.1-a39bf05daa49f1d590eef37cd1d204835d459361332f3b08c8d57b21d188ae8f.zip differ diff --git a/.yarn/cache/ee-first-npm-1.1.1-20d46c63608824c353d99abd8ec6e8d64bdefc24eec5118518fe9baf0ee35e1d.zip b/.yarn/cache/ee-first-npm-1.1.1-20d46c63608824c353d99abd8ec6e8d64bdefc24eec5118518fe9baf0ee35e1d.zip new file mode 100644 index 0000000..4154cbf Binary files /dev/null and b/.yarn/cache/ee-first-npm-1.1.1-20d46c63608824c353d99abd8ec6e8d64bdefc24eec5118518fe9baf0ee35e1d.zip differ diff --git a/.yarn/cache/ejs-npm-2.6.1-d8432e419da21377a3b6263e3e43e913de2f65cb2d5613d7ff08b97528ab98d4.zip b/.yarn/cache/ejs-npm-2.6.1-d8432e419da21377a3b6263e3e43e913de2f65cb2d5613d7ff08b97528ab98d4.zip new file mode 100644 index 0000000..be1a2fd Binary files /dev/null and b/.yarn/cache/ejs-npm-2.6.1-d8432e419da21377a3b6263e3e43e913de2f65cb2d5613d7ff08b97528ab98d4.zip differ diff --git a/.yarn/cache/electron-to-chromium-npm-1.3.127-2b81ab11b8081b3ab73de89238cac7f3a376b3bafc27369e0954d37735f72698.zip b/.yarn/cache/electron-to-chromium-npm-1.3.127-2b81ab11b8081b3ab73de89238cac7f3a376b3bafc27369e0954d37735f72698.zip new file mode 100644 index 0000000..a035377 Binary files /dev/null and b/.yarn/cache/electron-to-chromium-npm-1.3.127-2b81ab11b8081b3ab73de89238cac7f3a376b3bafc27369e0954d37735f72698.zip differ diff --git a/.yarn/cache/elliptic-npm-6.4.1-5a416ddf045215fecb6926fd1fbd6752b1a422629fee89b98efe73bc3ef2b318.zip b/.yarn/cache/elliptic-npm-6.4.1-5a416ddf045215fecb6926fd1fbd6752b1a422629fee89b98efe73bc3ef2b318.zip new file mode 100644 index 0000000..0db093c Binary files /dev/null and b/.yarn/cache/elliptic-npm-6.4.1-5a416ddf045215fecb6926fd1fbd6752b1a422629fee89b98efe73bc3ef2b318.zip differ diff --git a/.yarn/cache/emoji-regex-npm-7.0.3-a4e76de4cae0221437934254ff9ffd7afeafe6a375bf17bedbbd7bcb807eb8ae.zip b/.yarn/cache/emoji-regex-npm-7.0.3-a4e76de4cae0221437934254ff9ffd7afeafe6a375bf17bedbbd7bcb807eb8ae.zip new file mode 100644 index 0000000..a9329c4 Binary files /dev/null and b/.yarn/cache/emoji-regex-npm-7.0.3-a4e76de4cae0221437934254ff9ffd7afeafe6a375bf17bedbbd7bcb807eb8ae.zip differ diff --git a/.yarn/cache/emojis-list-npm-2.1.0-e850d428733214c13e410332be408f881a46bf08904643ed9ca3b870d0d32973.zip b/.yarn/cache/emojis-list-npm-2.1.0-e850d428733214c13e410332be408f881a46bf08904643ed9ca3b870d0d32973.zip new file mode 100644 index 0000000..ccf43f8 Binary files /dev/null and b/.yarn/cache/emojis-list-npm-2.1.0-e850d428733214c13e410332be408f881a46bf08904643ed9ca3b870d0d32973.zip differ diff --git a/.yarn/cache/encodeurl-npm-1.0.2-21d18622fcb7c32858052ac468c641473b84ea71f735fcb3a1b92e4982f03ded.zip b/.yarn/cache/encodeurl-npm-1.0.2-21d18622fcb7c32858052ac468c641473b84ea71f735fcb3a1b92e4982f03ded.zip new file mode 100644 index 0000000..4d32ab5 Binary files /dev/null and b/.yarn/cache/encodeurl-npm-1.0.2-21d18622fcb7c32858052ac468c641473b84ea71f735fcb3a1b92e4982f03ded.zip differ diff --git a/.yarn/cache/end-of-stream-npm-1.4.1-63c41e5276864ed9c7860551b12c296d81e69ccc2f196b92073c373d714b013d.zip b/.yarn/cache/end-of-stream-npm-1.4.1-63c41e5276864ed9c7860551b12c296d81e69ccc2f196b92073c373d714b013d.zip new file mode 100644 index 0000000..299d621 Binary files /dev/null and b/.yarn/cache/end-of-stream-npm-1.4.1-63c41e5276864ed9c7860551b12c296d81e69ccc2f196b92073c373d714b013d.zip differ diff --git a/.yarn/cache/enhanced-resolve-npm-4.1.0-c350598b881663dac59a011b733b632e0e3e2a812e35efe3e92490e15a7af5e3.zip b/.yarn/cache/enhanced-resolve-npm-4.1.0-c350598b881663dac59a011b733b632e0e3e2a812e35efe3e92490e15a7af5e3.zip new file mode 100644 index 0000000..4521cab Binary files /dev/null and b/.yarn/cache/enhanced-resolve-npm-4.1.0-c350598b881663dac59a011b733b632e0e3e2a812e35efe3e92490e15a7af5e3.zip differ diff --git a/.yarn/cache/entities-npm-1.1.2-4d2abba21587e9796f1dfce02d5a2b138144516066a790dc3558cc7c9632c93d.zip b/.yarn/cache/entities-npm-1.1.2-4d2abba21587e9796f1dfce02d5a2b138144516066a790dc3558cc7c9632c93d.zip new file mode 100644 index 0000000..62c24be Binary files /dev/null and b/.yarn/cache/entities-npm-1.1.2-4d2abba21587e9796f1dfce02d5a2b138144516066a790dc3558cc7c9632c93d.zip differ diff --git a/.yarn/cache/errno-npm-0.1.7-77e907d69af605b2b55bb1aa0ce9626b644818625892dcf56dc3e26e6378b41e.zip b/.yarn/cache/errno-npm-0.1.7-77e907d69af605b2b55bb1aa0ce9626b644818625892dcf56dc3e26e6378b41e.zip new file mode 100644 index 0000000..c8f3dd4 Binary files /dev/null and b/.yarn/cache/errno-npm-0.1.7-77e907d69af605b2b55bb1aa0ce9626b644818625892dcf56dc3e26e6378b41e.zip differ diff --git a/.yarn/cache/error-ex-npm-1.3.2-e8e23505c39d3e942ea5d0d9e97afdc7bfb10a45a988cc4eabeee26fc6e683a0.zip b/.yarn/cache/error-ex-npm-1.3.2-e8e23505c39d3e942ea5d0d9e97afdc7bfb10a45a988cc4eabeee26fc6e683a0.zip new file mode 100644 index 0000000..08ebdf4 Binary files /dev/null and b/.yarn/cache/error-ex-npm-1.3.2-e8e23505c39d3e942ea5d0d9e97afdc7bfb10a45a988cc4eabeee26fc6e683a0.zip differ diff --git a/.yarn/cache/es-abstract-npm-1.13.0-c9485525e0c3db3a130dfc5c3c1a43a40dea55cf7eec63254d0000b702ed88df.zip b/.yarn/cache/es-abstract-npm-1.13.0-c9485525e0c3db3a130dfc5c3c1a43a40dea55cf7eec63254d0000b702ed88df.zip new file mode 100644 index 0000000..2e8dfcf Binary files /dev/null and b/.yarn/cache/es-abstract-npm-1.13.0-c9485525e0c3db3a130dfc5c3c1a43a40dea55cf7eec63254d0000b702ed88df.zip differ diff --git a/.yarn/cache/es-to-primitive-npm-1.2.0-dd1512698b7f223488288664e23d54bca59eec794611379db5bd519968a04096.zip b/.yarn/cache/es-to-primitive-npm-1.2.0-dd1512698b7f223488288664e23d54bca59eec794611379db5bd519968a04096.zip new file mode 100644 index 0000000..42fc564 Binary files /dev/null and b/.yarn/cache/es-to-primitive-npm-1.2.0-dd1512698b7f223488288664e23d54bca59eec794611379db5bd519968a04096.zip differ diff --git a/.yarn/cache/es5-ext-npm-0.10.49-853b1ca31337d4b4303f871b683700e221d5dc8762783f4e89cc18875b60742b.zip b/.yarn/cache/es5-ext-npm-0.10.49-853b1ca31337d4b4303f871b683700e221d5dc8762783f4e89cc18875b60742b.zip new file mode 100644 index 0000000..7b4ae1d Binary files /dev/null and b/.yarn/cache/es5-ext-npm-0.10.49-853b1ca31337d4b4303f871b683700e221d5dc8762783f4e89cc18875b60742b.zip differ diff --git a/.yarn/cache/es6-iterator-npm-2.0.3-0583f14fe42a23f9ab83c74019c8c43166dedc98707f7446423b725b3c732baa.zip b/.yarn/cache/es6-iterator-npm-2.0.3-0583f14fe42a23f9ab83c74019c8c43166dedc98707f7446423b725b3c732baa.zip new file mode 100644 index 0000000..f3673da Binary files /dev/null and b/.yarn/cache/es6-iterator-npm-2.0.3-0583f14fe42a23f9ab83c74019c8c43166dedc98707f7446423b725b3c732baa.zip differ diff --git a/.yarn/cache/es6-symbol-npm-3.1.1-1c278c87cc83236b9ec8b25484b797198e836213dc7f7e093f0ecb4847700cdc.zip b/.yarn/cache/es6-symbol-npm-3.1.1-1c278c87cc83236b9ec8b25484b797198e836213dc7f7e093f0ecb4847700cdc.zip new file mode 100644 index 0000000..69f3d60 Binary files /dev/null and b/.yarn/cache/es6-symbol-npm-3.1.1-1c278c87cc83236b9ec8b25484b797198e836213dc7f7e093f0ecb4847700cdc.zip differ diff --git a/.yarn/cache/es6-weak-map-npm-2.0.2-436d9bbdc022422b4807c056c31e830e440da1fd40bcf69fa754cf2600430154.zip b/.yarn/cache/es6-weak-map-npm-2.0.2-436d9bbdc022422b4807c056c31e830e440da1fd40bcf69fa754cf2600430154.zip new file mode 100644 index 0000000..004729c Binary files /dev/null and b/.yarn/cache/es6-weak-map-npm-2.0.2-436d9bbdc022422b4807c056c31e830e440da1fd40bcf69fa754cf2600430154.zip differ diff --git a/.yarn/cache/escape-html-npm-1.0.3-63595a8d94ec379143436acd47601b8dae6d4c4c4f87204528c7f4772e4b1d3c.zip b/.yarn/cache/escape-html-npm-1.0.3-63595a8d94ec379143436acd47601b8dae6d4c4c4f87204528c7f4772e4b1d3c.zip new file mode 100644 index 0000000..b06d751 Binary files /dev/null and b/.yarn/cache/escape-html-npm-1.0.3-63595a8d94ec379143436acd47601b8dae6d4c4c4f87204528c7f4772e4b1d3c.zip differ diff --git a/.yarn/cache/escape-string-regexp-npm-1.0.5-342dab99b6e40d31e0db2a39d65959bb490143bcc1269ee019a44c52a3107b37.zip b/.yarn/cache/escape-string-regexp-npm-1.0.5-342dab99b6e40d31e0db2a39d65959bb490143bcc1269ee019a44c52a3107b37.zip new file mode 100644 index 0000000..e7829ed Binary files /dev/null and b/.yarn/cache/escape-string-regexp-npm-1.0.5-342dab99b6e40d31e0db2a39d65959bb490143bcc1269ee019a44c52a3107b37.zip differ diff --git a/.yarn/cache/escodegen-npm-1.11.1-9b526fb68514bcfe101810c19bb782a6871f4b447c6574016e92d48a0d579119.zip b/.yarn/cache/escodegen-npm-1.11.1-9b526fb68514bcfe101810c19bb782a6871f4b447c6574016e92d48a0d579119.zip new file mode 100644 index 0000000..b379871 Binary files /dev/null and b/.yarn/cache/escodegen-npm-1.11.1-9b526fb68514bcfe101810c19bb782a6871f4b447c6574016e92d48a0d579119.zip differ diff --git a/.yarn/cache/eslint-config-prettier-npm-4.2.0-ba1f00cb2df582d990406cf3cdfcb8228e3fcc84ac0ae5f30224b23cff7d23c6.zip b/.yarn/cache/eslint-config-prettier-npm-4.2.0-ba1f00cb2df582d990406cf3cdfcb8228e3fcc84ac0ae5f30224b23cff7d23c6.zip new file mode 100644 index 0000000..a8c77ba Binary files /dev/null and b/.yarn/cache/eslint-config-prettier-npm-4.2.0-ba1f00cb2df582d990406cf3cdfcb8228e3fcc84ac0ae5f30224b23cff7d23c6.zip differ diff --git a/.yarn/cache/eslint-import-resolver-node-npm-0.3.2-45cb46e483a3aaa48ea223693aed7d42d77673b0d0d86e3cf669605528ee7236.zip b/.yarn/cache/eslint-import-resolver-node-npm-0.3.2-45cb46e483a3aaa48ea223693aed7d42d77673b0d0d86e3cf669605528ee7236.zip new file mode 100644 index 0000000..71f24f1 Binary files /dev/null and b/.yarn/cache/eslint-import-resolver-node-npm-0.3.2-45cb46e483a3aaa48ea223693aed7d42d77673b0d0d86e3cf669605528ee7236.zip differ diff --git a/.yarn/cache/eslint-module-utils-npm-2.4.0-f4361e16741e3fde917ca80f32953b12c33801e37fd64fe837149cd72f97e440.zip b/.yarn/cache/eslint-module-utils-npm-2.4.0-f4361e16741e3fde917ca80f32953b12c33801e37fd64fe837149cd72f97e440.zip new file mode 100644 index 0000000..7bce776 Binary files /dev/null and b/.yarn/cache/eslint-module-utils-npm-2.4.0-f4361e16741e3fde917ca80f32953b12c33801e37fd64fe837149cd72f97e440.zip differ diff --git a/.yarn/cache/eslint-npm-5.16.0-9cc47644fe4e3c1b0efdd763cf77e30f777853520c1b0b7e3bcad2b27992bc18.zip b/.yarn/cache/eslint-npm-5.16.0-9cc47644fe4e3c1b0efdd763cf77e30f777853520c1b0b7e3bcad2b27992bc18.zip new file mode 100644 index 0000000..bf69760 Binary files /dev/null and b/.yarn/cache/eslint-npm-5.16.0-9cc47644fe4e3c1b0efdd763cf77e30f777853520c1b0b7e3bcad2b27992bc18.zip differ diff --git a/.yarn/cache/eslint-plugin-import-npm-2.17.2-6f0e21ad2f0f081970188e8a99d55b36745b1581a19daa51336d3e0fc0042c65.zip b/.yarn/cache/eslint-plugin-import-npm-2.17.2-6f0e21ad2f0f081970188e8a99d55b36745b1581a19daa51336d3e0fc0042c65.zip new file mode 100644 index 0000000..671bbb8 Binary files /dev/null and b/.yarn/cache/eslint-plugin-import-npm-2.17.2-6f0e21ad2f0f081970188e8a99d55b36745b1581a19daa51336d3e0fc0042c65.zip differ diff --git a/.yarn/cache/eslint-plugin-jest-npm-22.5.1-d4ee2de138829c2c64febd6e324240130bdb8b07962d5120d7cda4567b8bdb0e.zip b/.yarn/cache/eslint-plugin-jest-npm-22.5.1-d4ee2de138829c2c64febd6e324240130bdb8b07962d5120d7cda4567b8bdb0e.zip new file mode 100644 index 0000000..acc6647 Binary files /dev/null and b/.yarn/cache/eslint-plugin-jest-npm-22.5.1-d4ee2de138829c2c64febd6e324240130bdb8b07962d5120d7cda4567b8bdb0e.zip differ diff --git a/.yarn/cache/eslint-plugin-prettier-npm-3.0.1-0c4ecb0e4e0c7160552cd87393252a2a2e58acd0a376a700f9e4080cf32cd320.zip b/.yarn/cache/eslint-plugin-prettier-npm-3.0.1-0c4ecb0e4e0c7160552cd87393252a2a2e58acd0a376a700f9e4080cf32cd320.zip new file mode 100644 index 0000000..ac7f7ba Binary files /dev/null and b/.yarn/cache/eslint-plugin-prettier-npm-3.0.1-0c4ecb0e4e0c7160552cd87393252a2a2e58acd0a376a700f9e4080cf32cd320.zip differ diff --git a/.yarn/cache/eslint-plugin-react-npm-7.12.4-c85283740558918c8fb3631bc72a819c853da036734370bd7dd87e6233e3bcc9.zip b/.yarn/cache/eslint-plugin-react-npm-7.12.4-c85283740558918c8fb3631bc72a819c853da036734370bd7dd87e6233e3bcc9.zip new file mode 100644 index 0000000..22e7a21 Binary files /dev/null and b/.yarn/cache/eslint-plugin-react-npm-7.12.4-c85283740558918c8fb3631bc72a819c853da036734370bd7dd87e6233e3bcc9.zip differ diff --git a/.yarn/cache/eslint-scope-npm-3.7.1-0cb9efc95c605da4ca36d0afebc5db5c8a6c0216cb4e55c4db0ffe2c172cea6e.zip b/.yarn/cache/eslint-scope-npm-3.7.1-0cb9efc95c605da4ca36d0afebc5db5c8a6c0216cb4e55c4db0ffe2c172cea6e.zip new file mode 100644 index 0000000..15b2341 Binary files /dev/null and b/.yarn/cache/eslint-scope-npm-3.7.1-0cb9efc95c605da4ca36d0afebc5db5c8a6c0216cb4e55c4db0ffe2c172cea6e.zip differ diff --git a/.yarn/cache/eslint-scope-npm-4.0.3-c4e24d3415a8c7aee6f1d8be044bed76d424c8cf997eabdb700ec75ed2be84c5.zip b/.yarn/cache/eslint-scope-npm-4.0.3-c4e24d3415a8c7aee6f1d8be044bed76d424c8cf997eabdb700ec75ed2be84c5.zip new file mode 100644 index 0000000..0a139c7 Binary files /dev/null and b/.yarn/cache/eslint-scope-npm-4.0.3-c4e24d3415a8c7aee6f1d8be044bed76d424c8cf997eabdb700ec75ed2be84c5.zip differ diff --git a/.yarn/cache/eslint-utils-npm-1.3.1-01bf5b4c60175880c53872f4e3ea03b75c36baff290bd73d9a73f4af4119a0b0.zip b/.yarn/cache/eslint-utils-npm-1.3.1-01bf5b4c60175880c53872f4e3ea03b75c36baff290bd73d9a73f4af4119a0b0.zip new file mode 100644 index 0000000..007a585 Binary files /dev/null and b/.yarn/cache/eslint-utils-npm-1.3.1-01bf5b4c60175880c53872f4e3ea03b75c36baff290bd73d9a73f4af4119a0b0.zip differ diff --git a/.yarn/cache/eslint-visitor-keys-npm-1.0.0-8960956e10e170e4215382826682abf8f5f786d680e0f342d24bbbdfae341350.zip b/.yarn/cache/eslint-visitor-keys-npm-1.0.0-8960956e10e170e4215382826682abf8f5f786d680e0f342d24bbbdfae341350.zip new file mode 100644 index 0000000..0178b0d Binary files /dev/null and b/.yarn/cache/eslint-visitor-keys-npm-1.0.0-8960956e10e170e4215382826682abf8f5f786d680e0f342d24bbbdfae341350.zip differ diff --git a/.yarn/cache/espree-npm-5.0.1-c97804973d9e1b4e1f7887a8b552cc6be02aea681eb8c5030f793c4b86a4966b.zip b/.yarn/cache/espree-npm-5.0.1-c97804973d9e1b4e1f7887a8b552cc6be02aea681eb8c5030f793c4b86a4966b.zip new file mode 100644 index 0000000..d678ca9 Binary files /dev/null and b/.yarn/cache/espree-npm-5.0.1-c97804973d9e1b4e1f7887a8b552cc6be02aea681eb8c5030f793c4b86a4966b.zip differ diff --git a/.yarn/cache/esprima-npm-3.1.3-658b54c74d32f848a5328f59e9ffc66e1a95e811c57e041efea0caf404d4206c.zip b/.yarn/cache/esprima-npm-3.1.3-658b54c74d32f848a5328f59e9ffc66e1a95e811c57e041efea0caf404d4206c.zip new file mode 100644 index 0000000..d524ac9 Binary files /dev/null and b/.yarn/cache/esprima-npm-3.1.3-658b54c74d32f848a5328f59e9ffc66e1a95e811c57e041efea0caf404d4206c.zip differ diff --git a/.yarn/cache/esprima-npm-4.0.1-6a74ca36fc65cb8f7de5cb890d83b10e7c3f62064670d9480281c3ca72ca8209.zip b/.yarn/cache/esprima-npm-4.0.1-6a74ca36fc65cb8f7de5cb890d83b10e7c3f62064670d9480281c3ca72ca8209.zip new file mode 100644 index 0000000..d69e451 Binary files /dev/null and b/.yarn/cache/esprima-npm-4.0.1-6a74ca36fc65cb8f7de5cb890d83b10e7c3f62064670d9480281c3ca72ca8209.zip differ diff --git a/.yarn/cache/esquery-npm-1.0.1-71eeadc3988204a7beea239d3226f1eea57898941c0301b64792ab92e3a0dbef.zip b/.yarn/cache/esquery-npm-1.0.1-71eeadc3988204a7beea239d3226f1eea57898941c0301b64792ab92e3a0dbef.zip new file mode 100644 index 0000000..e465e35 Binary files /dev/null and b/.yarn/cache/esquery-npm-1.0.1-71eeadc3988204a7beea239d3226f1eea57898941c0301b64792ab92e3a0dbef.zip differ diff --git a/.yarn/cache/esrecurse-npm-4.2.1-708056b5929b532c50f6e2e218da16ab0a778a5bf0cf19ecb83cd1d7db15c6aa.zip b/.yarn/cache/esrecurse-npm-4.2.1-708056b5929b532c50f6e2e218da16ab0a778a5bf0cf19ecb83cd1d7db15c6aa.zip new file mode 100644 index 0000000..467c8db Binary files /dev/null and b/.yarn/cache/esrecurse-npm-4.2.1-708056b5929b532c50f6e2e218da16ab0a778a5bf0cf19ecb83cd1d7db15c6aa.zip differ diff --git a/.yarn/cache/estraverse-npm-4.2.0-de76782769795208550a2071653209247fce11745f2fc9ced7a1ddb5a361346d.zip b/.yarn/cache/estraverse-npm-4.2.0-de76782769795208550a2071653209247fce11745f2fc9ced7a1ddb5a361346d.zip new file mode 100644 index 0000000..2145a87 Binary files /dev/null and b/.yarn/cache/estraverse-npm-4.2.0-de76782769795208550a2071653209247fce11745f2fc9ced7a1ddb5a361346d.zip differ diff --git a/.yarn/cache/estree-walker-npm-0.6.0-d312d6cae6cf425da40bf9dc0a608b545915c9ddc7832cbf32b1e33b0849f35d.zip b/.yarn/cache/estree-walker-npm-0.6.0-d312d6cae6cf425da40bf9dc0a608b545915c9ddc7832cbf32b1e33b0849f35d.zip new file mode 100644 index 0000000..3576e50 Binary files /dev/null and b/.yarn/cache/estree-walker-npm-0.6.0-d312d6cae6cf425da40bf9dc0a608b545915c9ddc7832cbf32b1e33b0849f35d.zip differ diff --git a/.yarn/cache/esutils-npm-2.0.2-c55ae952835e75843da6314f06cda80be4fd759a67b678d82049785617c5a08a.zip b/.yarn/cache/esutils-npm-2.0.2-c55ae952835e75843da6314f06cda80be4fd759a67b678d82049785617c5a08a.zip new file mode 100644 index 0000000..bb2401a Binary files /dev/null and b/.yarn/cache/esutils-npm-2.0.2-c55ae952835e75843da6314f06cda80be4fd759a67b678d82049785617c5a08a.zip differ diff --git a/.yarn/cache/etag-npm-1.8.1-301a72eaecf952e99e4c9615feff598fd7998c8756769a9c36aa46d180ff6eb6.zip b/.yarn/cache/etag-npm-1.8.1-301a72eaecf952e99e4c9615feff598fd7998c8756769a9c36aa46d180ff6eb6.zip new file mode 100644 index 0000000..cc17a53 Binary files /dev/null and b/.yarn/cache/etag-npm-1.8.1-301a72eaecf952e99e4c9615feff598fd7998c8756769a9c36aa46d180ff6eb6.zip differ diff --git a/.yarn/cache/eventemitter3-npm-3.1.0-09426813fcf758f9217dea7b031cea9d8d8c79878e5587f7434101370ff2ccd6.zip b/.yarn/cache/eventemitter3-npm-3.1.0-09426813fcf758f9217dea7b031cea9d8d8c79878e5587f7434101370ff2ccd6.zip new file mode 100644 index 0000000..4ab4591 Binary files /dev/null and b/.yarn/cache/eventemitter3-npm-3.1.0-09426813fcf758f9217dea7b031cea9d8d8c79878e5587f7434101370ff2ccd6.zip differ diff --git a/.yarn/cache/events-npm-3.0.0-135a8c2cb1843fb54eae064d258f1dfabfd9fada696ad4b851e2232b3e3b10ed.zip b/.yarn/cache/events-npm-3.0.0-135a8c2cb1843fb54eae064d258f1dfabfd9fada696ad4b851e2232b3e3b10ed.zip new file mode 100644 index 0000000..50eb3db Binary files /dev/null and b/.yarn/cache/events-npm-3.0.0-135a8c2cb1843fb54eae064d258f1dfabfd9fada696ad4b851e2232b3e3b10ed.zip differ diff --git a/.yarn/cache/evp_bytestokey-npm-1.0.3-130771f8e1e7aa31adf1b2575dca6c2741f8821074f37746d0d67b89ee28f50c.zip b/.yarn/cache/evp_bytestokey-npm-1.0.3-130771f8e1e7aa31adf1b2575dca6c2741f8821074f37746d0d67b89ee28f50c.zip new file mode 100644 index 0000000..9adff4f Binary files /dev/null and b/.yarn/cache/evp_bytestokey-npm-1.0.3-130771f8e1e7aa31adf1b2575dca6c2741f8821074f37746d0d67b89ee28f50c.zip differ diff --git a/.yarn/cache/exec-sh-npm-0.3.2-3f69726cc8931de3a3383e0ec020411f0f1c30596631b9785373ac75ea7d9be6.zip b/.yarn/cache/exec-sh-npm-0.3.2-3f69726cc8931de3a3383e0ec020411f0f1c30596631b9785373ac75ea7d9be6.zip new file mode 100644 index 0000000..9009456 Binary files /dev/null and b/.yarn/cache/exec-sh-npm-0.3.2-3f69726cc8931de3a3383e0ec020411f0f1c30596631b9785373ac75ea7d9be6.zip differ diff --git a/.yarn/cache/execa-npm-1.0.0-f52bb72a3117acd02ddb466e47c27c62df47a9611ae4cb83e4199b2ab3db8988.zip b/.yarn/cache/execa-npm-1.0.0-f52bb72a3117acd02ddb466e47c27c62df47a9611ae4cb83e4199b2ab3db8988.zip new file mode 100644 index 0000000..ec46c73 Binary files /dev/null and b/.yarn/cache/execa-npm-1.0.0-f52bb72a3117acd02ddb466e47c27c62df47a9611ae4cb83e4199b2ab3db8988.zip differ diff --git a/.yarn/cache/exit-npm-0.1.2-9e5211b658065273b06ebddd2a0331e92aa494544dcd22d631ae3f5d3d7f9225.zip b/.yarn/cache/exit-npm-0.1.2-9e5211b658065273b06ebddd2a0331e92aa494544dcd22d631ae3f5d3d7f9225.zip new file mode 100644 index 0000000..ba16876 Binary files /dev/null and b/.yarn/cache/exit-npm-0.1.2-9e5211b658065273b06ebddd2a0331e92aa494544dcd22d631ae3f5d3d7f9225.zip differ diff --git a/.yarn/cache/expand-brackets-npm-2.1.4-4ab7e7ca73ecb8ecdce6fca363ce70dd1cdb4b35133fccfda3414948366e4402.zip b/.yarn/cache/expand-brackets-npm-2.1.4-4ab7e7ca73ecb8ecdce6fca363ce70dd1cdb4b35133fccfda3414948366e4402.zip new file mode 100644 index 0000000..859e597 Binary files /dev/null and b/.yarn/cache/expand-brackets-npm-2.1.4-4ab7e7ca73ecb8ecdce6fca363ce70dd1cdb4b35133fccfda3414948366e4402.zip differ diff --git a/.yarn/cache/expand-tilde-npm-2.0.2-ba4286a014720ea32222fc0928a3b26fd8c3b4b1720e7eb675331fb5ebc0cd68.zip b/.yarn/cache/expand-tilde-npm-2.0.2-ba4286a014720ea32222fc0928a3b26fd8c3b4b1720e7eb675331fb5ebc0cd68.zip new file mode 100644 index 0000000..2114091 Binary files /dev/null and b/.yarn/cache/expand-tilde-npm-2.0.2-ba4286a014720ea32222fc0928a3b26fd8c3b4b1720e7eb675331fb5ebc0cd68.zip differ diff --git a/.yarn/cache/expect-npm-24.7.1-540bad4b5206c2080f72de86f447d26e66b8009cd5883b4fd6050d22ea0ca4a2.zip b/.yarn/cache/expect-npm-24.7.1-540bad4b5206c2080f72de86f447d26e66b8009cd5883b4fd6050d22ea0ca4a2.zip new file mode 100644 index 0000000..8c41664 Binary files /dev/null and b/.yarn/cache/expect-npm-24.7.1-540bad4b5206c2080f72de86f447d26e66b8009cd5883b4fd6050d22ea0ca4a2.zip differ diff --git a/.yarn/cache/express-npm-4.16.4-3cae172c981a8f2a8f619ffddc86b31a465904d0d42ee3634b2a8320bd6d5b6c.zip b/.yarn/cache/express-npm-4.16.4-3cae172c981a8f2a8f619ffddc86b31a465904d0d42ee3634b2a8320bd6d5b6c.zip new file mode 100644 index 0000000..b79db76 Binary files /dev/null and b/.yarn/cache/express-npm-4.16.4-3cae172c981a8f2a8f619ffddc86b31a465904d0d42ee3634b2a8320bd6d5b6c.zip differ diff --git a/.yarn/cache/extend-npm-3.0.2-a86f975f6911f8421ad16c7637efbb8e39c9415810dc9a02bd8074c84974e5b3.zip b/.yarn/cache/extend-npm-3.0.2-a86f975f6911f8421ad16c7637efbb8e39c9415810dc9a02bd8074c84974e5b3.zip new file mode 100644 index 0000000..0e81603 Binary files /dev/null and b/.yarn/cache/extend-npm-3.0.2-a86f975f6911f8421ad16c7637efbb8e39c9415810dc9a02bd8074c84974e5b3.zip differ diff --git a/.yarn/cache/extend-shallow-npm-2.0.1-37bdb2feb40bca6bb576dbc359d9e4816c13d6e52b387d46a4b0c387ad729c2a.zip b/.yarn/cache/extend-shallow-npm-2.0.1-37bdb2feb40bca6bb576dbc359d9e4816c13d6e52b387d46a4b0c387ad729c2a.zip new file mode 100644 index 0000000..f6b5ceb Binary files /dev/null and b/.yarn/cache/extend-shallow-npm-2.0.1-37bdb2feb40bca6bb576dbc359d9e4816c13d6e52b387d46a4b0c387ad729c2a.zip differ diff --git a/.yarn/cache/extend-shallow-npm-3.0.2-95e60ed75f9acab09e50727f492c6c84db313900356dd223fa2c5c3b2ade6939.zip b/.yarn/cache/extend-shallow-npm-3.0.2-95e60ed75f9acab09e50727f492c6c84db313900356dd223fa2c5c3b2ade6939.zip new file mode 100644 index 0000000..448376b Binary files /dev/null and b/.yarn/cache/extend-shallow-npm-3.0.2-95e60ed75f9acab09e50727f492c6c84db313900356dd223fa2c5c3b2ade6939.zip differ diff --git a/.yarn/cache/external-editor-npm-3.0.3-4f96ddaea93809c12b279bac529c82f79a700bcbb11424fdac168aa1f04ff506.zip b/.yarn/cache/external-editor-npm-3.0.3-4f96ddaea93809c12b279bac529c82f79a700bcbb11424fdac168aa1f04ff506.zip new file mode 100644 index 0000000..58246ed Binary files /dev/null and b/.yarn/cache/external-editor-npm-3.0.3-4f96ddaea93809c12b279bac529c82f79a700bcbb11424fdac168aa1f04ff506.zip differ diff --git a/.yarn/cache/extglob-npm-2.0.4-68acdc69707d9d504a5e049b9af13fa1f67d045a13b29e7d9c8c148a4855f84b.zip b/.yarn/cache/extglob-npm-2.0.4-68acdc69707d9d504a5e049b9af13fa1f67d045a13b29e7d9c8c148a4855f84b.zip new file mode 100644 index 0000000..59c2fb8 Binary files /dev/null and b/.yarn/cache/extglob-npm-2.0.4-68acdc69707d9d504a5e049b9af13fa1f67d045a13b29e7d9c8c148a4855f84b.zip differ diff --git a/.yarn/cache/extsprintf-npm-1.3.0-6a71b57e83dae1d21719804e1631aa01e1172a366e07031e7caec5e420e396f2.zip b/.yarn/cache/extsprintf-npm-1.3.0-6a71b57e83dae1d21719804e1631aa01e1172a366e07031e7caec5e420e396f2.zip new file mode 100644 index 0000000..796b866 Binary files /dev/null and b/.yarn/cache/extsprintf-npm-1.3.0-6a71b57e83dae1d21719804e1631aa01e1172a366e07031e7caec5e420e396f2.zip differ diff --git a/.yarn/cache/fancy-log-npm-1.3.3-59f9c7bc497e556658a923ca085377eed600eb667d1b55c76a3aa8a025787292.zip b/.yarn/cache/fancy-log-npm-1.3.3-59f9c7bc497e556658a923ca085377eed600eb667d1b55c76a3aa8a025787292.zip new file mode 100644 index 0000000..1c2a8ff Binary files /dev/null and b/.yarn/cache/fancy-log-npm-1.3.3-59f9c7bc497e556658a923ca085377eed600eb667d1b55c76a3aa8a025787292.zip differ diff --git a/.yarn/cache/fast-deep-equal-npm-2.0.1-2236ea696f1e6c124c033c1182b9934f51c98e1e4e9a62997ea8794fd635d622.zip b/.yarn/cache/fast-deep-equal-npm-2.0.1-2236ea696f1e6c124c033c1182b9934f51c98e1e4e9a62997ea8794fd635d622.zip new file mode 100644 index 0000000..26c3c77 Binary files /dev/null and b/.yarn/cache/fast-deep-equal-npm-2.0.1-2236ea696f1e6c124c033c1182b9934f51c98e1e4e9a62997ea8794fd635d622.zip differ diff --git a/.yarn/cache/fast-diff-npm-1.2.0-3d3f6fd4575f841294b79d72fc3effa685da1adfff2e120d6701ba8ac8fc8cb7.zip b/.yarn/cache/fast-diff-npm-1.2.0-3d3f6fd4575f841294b79d72fc3effa685da1adfff2e120d6701ba8ac8fc8cb7.zip new file mode 100644 index 0000000..7acb438 Binary files /dev/null and b/.yarn/cache/fast-diff-npm-1.2.0-3d3f6fd4575f841294b79d72fc3effa685da1adfff2e120d6701ba8ac8fc8cb7.zip differ diff --git a/.yarn/cache/fast-json-stable-stringify-npm-2.0.0-d465eda072f4c60becf380d43f6806db9fa8f90a45d20d7ef6a804bf4cdffe05.zip b/.yarn/cache/fast-json-stable-stringify-npm-2.0.0-d465eda072f4c60becf380d43f6806db9fa8f90a45d20d7ef6a804bf4cdffe05.zip new file mode 100644 index 0000000..e0b7bf9 Binary files /dev/null and b/.yarn/cache/fast-json-stable-stringify-npm-2.0.0-d465eda072f4c60becf380d43f6806db9fa8f90a45d20d7ef6a804bf4cdffe05.zip differ diff --git a/.yarn/cache/fast-levenshtein-npm-2.0.6-0d432cf29794206a74437a380bc65f959d9d711c57ad6d5a0cef5e959243a959.zip b/.yarn/cache/fast-levenshtein-npm-2.0.6-0d432cf29794206a74437a380bc65f959d9d711c57ad6d5a0cef5e959243a959.zip new file mode 100644 index 0000000..8553b25 Binary files /dev/null and b/.yarn/cache/fast-levenshtein-npm-2.0.6-0d432cf29794206a74437a380bc65f959d9d711c57ad6d5a0cef5e959243a959.zip differ diff --git a/.yarn/cache/fb-watchman-npm-2.0.0-bdb00c7ad8012047e4163c0a303e13c9dd14154997095e92725824df957aef65.zip b/.yarn/cache/fb-watchman-npm-2.0.0-bdb00c7ad8012047e4163c0a303e13c9dd14154997095e92725824df957aef65.zip new file mode 100644 index 0000000..f5e23ec Binary files /dev/null and b/.yarn/cache/fb-watchman-npm-2.0.0-bdb00c7ad8012047e4163c0a303e13c9dd14154997095e92725824df957aef65.zip differ diff --git a/.yarn/cache/figgy-pudding-npm-3.5.1-38c47236f8af8d06abe9b8bbc92f7c14e08d78ef0b0192c3ffa2a5f39aa80646.zip b/.yarn/cache/figgy-pudding-npm-3.5.1-38c47236f8af8d06abe9b8bbc92f7c14e08d78ef0b0192c3ffa2a5f39aa80646.zip new file mode 100644 index 0000000..329dfa2 Binary files /dev/null and b/.yarn/cache/figgy-pudding-npm-3.5.1-38c47236f8af8d06abe9b8bbc92f7c14e08d78ef0b0192c3ffa2a5f39aa80646.zip differ diff --git a/.yarn/cache/figures-npm-2.0.0-3635d0e852d84f7da3926ce0fbc88bc43ba79bff9707896061a2f20013d56736.zip b/.yarn/cache/figures-npm-2.0.0-3635d0e852d84f7da3926ce0fbc88bc43ba79bff9707896061a2f20013d56736.zip new file mode 100644 index 0000000..a4153fe Binary files /dev/null and b/.yarn/cache/figures-npm-2.0.0-3635d0e852d84f7da3926ce0fbc88bc43ba79bff9707896061a2f20013d56736.zip differ diff --git a/.yarn/cache/file-entry-cache-npm-5.0.1-b55cd1823a260b3bf00e71e5d01c2de66c83b0049851eb8815ca68567cc7b3e7.zip b/.yarn/cache/file-entry-cache-npm-5.0.1-b55cd1823a260b3bf00e71e5d01c2de66c83b0049851eb8815ca68567cc7b3e7.zip new file mode 100644 index 0000000..ea67690 Binary files /dev/null and b/.yarn/cache/file-entry-cache-npm-5.0.1-b55cd1823a260b3bf00e71e5d01c2de66c83b0049851eb8815ca68567cc7b3e7.zip differ diff --git a/.yarn/cache/fileset-npm-2.0.3-d2421e99f409f0afe80231787b1a88fba682796e50aa0ce2eace61ab11dc9406.zip b/.yarn/cache/fileset-npm-2.0.3-d2421e99f409f0afe80231787b1a88fba682796e50aa0ce2eace61ab11dc9406.zip new file mode 100644 index 0000000..4aba5d3 Binary files /dev/null and b/.yarn/cache/fileset-npm-2.0.3-d2421e99f409f0afe80231787b1a88fba682796e50aa0ce2eace61ab11dc9406.zip differ diff --git a/.yarn/cache/filesize-npm-3.6.1-0ba25722e32fb000240c2679e304f64b8c85614e35edbffb7f06d1d5555aca96.zip b/.yarn/cache/filesize-npm-3.6.1-0ba25722e32fb000240c2679e304f64b8c85614e35edbffb7f06d1d5555aca96.zip new file mode 100644 index 0000000..162b281 Binary files /dev/null and b/.yarn/cache/filesize-npm-3.6.1-0ba25722e32fb000240c2679e304f64b8c85614e35edbffb7f06d1d5555aca96.zip differ diff --git a/.yarn/cache/fill-range-npm-4.0.0-a9de1089cec01b30429d30db335b13c0f4b692be24b12bb08cf06a51c46fbd41.zip b/.yarn/cache/fill-range-npm-4.0.0-a9de1089cec01b30429d30db335b13c0f4b692be24b12bb08cf06a51c46fbd41.zip new file mode 100644 index 0000000..760d8fe Binary files /dev/null and b/.yarn/cache/fill-range-npm-4.0.0-a9de1089cec01b30429d30db335b13c0f4b692be24b12bb08cf06a51c46fbd41.zip differ diff --git a/.yarn/cache/finalhandler-npm-1.1.1-d8ef2f9b0da94f6fb2cc67120beb2607ce55cfbdd2918cc30d0cb71a4bcafa9d.zip b/.yarn/cache/finalhandler-npm-1.1.1-d8ef2f9b0da94f6fb2cc67120beb2607ce55cfbdd2918cc30d0cb71a4bcafa9d.zip new file mode 100644 index 0000000..d14f2a9 Binary files /dev/null and b/.yarn/cache/finalhandler-npm-1.1.1-d8ef2f9b0da94f6fb2cc67120beb2607ce55cfbdd2918cc30d0cb71a4bcafa9d.zip differ diff --git a/.yarn/cache/find-cache-dir-npm-2.1.0-a6910e99c7a4206b3c942cc8c4c135fde073b0eac27d8166e7531f6c3f95b442.zip b/.yarn/cache/find-cache-dir-npm-2.1.0-a6910e99c7a4206b3c942cc8c4c135fde073b0eac27d8166e7531f6c3f95b442.zip new file mode 100644 index 0000000..b82ba1f Binary files /dev/null and b/.yarn/cache/find-cache-dir-npm-2.1.0-a6910e99c7a4206b3c942cc8c4c135fde073b0eac27d8166e7531f6c3f95b442.zip differ diff --git a/.yarn/cache/find-up-npm-1.1.2-378d95a808befa9b21e508a5950c49b1784fc1dd8c3b299f1b5420b0c5614925.zip b/.yarn/cache/find-up-npm-1.1.2-378d95a808befa9b21e508a5950c49b1784fc1dd8c3b299f1b5420b0c5614925.zip new file mode 100644 index 0000000..903163c Binary files /dev/null and b/.yarn/cache/find-up-npm-1.1.2-378d95a808befa9b21e508a5950c49b1784fc1dd8c3b299f1b5420b0c5614925.zip differ diff --git a/.yarn/cache/find-up-npm-2.1.0-82532530c4c20a4d7c7eee34d017112b96ec3da331cb483248e21c73e73900b2.zip b/.yarn/cache/find-up-npm-2.1.0-82532530c4c20a4d7c7eee34d017112b96ec3da331cb483248e21c73e73900b2.zip new file mode 100644 index 0000000..2007368 Binary files /dev/null and b/.yarn/cache/find-up-npm-2.1.0-82532530c4c20a4d7c7eee34d017112b96ec3da331cb483248e21c73e73900b2.zip differ diff --git a/.yarn/cache/find-up-npm-3.0.0-b72ffc62708f9d33ff108e5d5e82e2de615873a01fcccf7fc307d1e107d99e4b.zip b/.yarn/cache/find-up-npm-3.0.0-b72ffc62708f9d33ff108e5d5e82e2de615873a01fcccf7fc307d1e107d99e4b.zip new file mode 100644 index 0000000..f4786df Binary files /dev/null and b/.yarn/cache/find-up-npm-3.0.0-b72ffc62708f9d33ff108e5d5e82e2de615873a01fcccf7fc307d1e107d99e4b.zip differ diff --git a/.yarn/cache/findup-sync-npm-2.0.0-5a4ddeb93ae3a1ace2b5ef594f780db74bc9bd571239b7bafe90765cb282b6d7.zip b/.yarn/cache/findup-sync-npm-2.0.0-5a4ddeb93ae3a1ace2b5ef594f780db74bc9bd571239b7bafe90765cb282b6d7.zip new file mode 100644 index 0000000..58590a3 Binary files /dev/null and b/.yarn/cache/findup-sync-npm-2.0.0-5a4ddeb93ae3a1ace2b5ef594f780db74bc9bd571239b7bafe90765cb282b6d7.zip differ diff --git a/.yarn/cache/findup-sync-npm-3.0.0-9512e62e08276188db84db9c9565844cc07805ff89702e3d3caef39888e55945.zip b/.yarn/cache/findup-sync-npm-3.0.0-9512e62e08276188db84db9c9565844cc07805ff89702e3d3caef39888e55945.zip new file mode 100644 index 0000000..b5ffe98 Binary files /dev/null and b/.yarn/cache/findup-sync-npm-3.0.0-9512e62e08276188db84db9c9565844cc07805ff89702e3d3caef39888e55945.zip differ diff --git a/.yarn/cache/fined-npm-1.2.0-ba538f710110812fd7e29ec19f8c62ae2d24b83cd96626e6a22baa4210bd09ab.zip b/.yarn/cache/fined-npm-1.2.0-ba538f710110812fd7e29ec19f8c62ae2d24b83cd96626e6a22baa4210bd09ab.zip new file mode 100644 index 0000000..b1b5f20 Binary files /dev/null and b/.yarn/cache/fined-npm-1.2.0-ba538f710110812fd7e29ec19f8c62ae2d24b83cd96626e6a22baa4210bd09ab.zip differ diff --git a/.yarn/cache/flagged-respawn-npm-1.0.1-aaee812f544d40443c07b262fbe7ce4a61c5a21ca8c5af4fc0792334b35c3810.zip b/.yarn/cache/flagged-respawn-npm-1.0.1-aaee812f544d40443c07b262fbe7ce4a61c5a21ca8c5af4fc0792334b35c3810.zip new file mode 100644 index 0000000..6accfa5 Binary files /dev/null and b/.yarn/cache/flagged-respawn-npm-1.0.1-aaee812f544d40443c07b262fbe7ce4a61c5a21ca8c5af4fc0792334b35c3810.zip differ diff --git a/.yarn/cache/flat-cache-npm-2.0.1-03e211df3a6c6e70815837d8745893e1e08d218d1a7c4b4b4723091475be6a0e.zip b/.yarn/cache/flat-cache-npm-2.0.1-03e211df3a6c6e70815837d8745893e1e08d218d1a7c4b4b4723091475be6a0e.zip new file mode 100644 index 0000000..cdcc09f Binary files /dev/null and b/.yarn/cache/flat-cache-npm-2.0.1-03e211df3a6c6e70815837d8745893e1e08d218d1a7c4b4b4723091475be6a0e.zip differ diff --git a/.yarn/cache/flatted-npm-2.0.0-64131378810757692544d2931eaeaebf92e6d5e4545082bf494c23af3664ea04.zip b/.yarn/cache/flatted-npm-2.0.0-64131378810757692544d2931eaeaebf92e6d5e4545082bf494c23af3664ea04.zip new file mode 100644 index 0000000..250ab90 Binary files /dev/null and b/.yarn/cache/flatted-npm-2.0.0-64131378810757692544d2931eaeaebf92e6d5e4545082bf494c23af3664ea04.zip differ diff --git a/.yarn/cache/flush-write-stream-npm-1.1.1-fd836ba4f4ad96f64d6ff63e7c3c01ae5c2748b17a1add8f3ade927c15ce35ec.zip b/.yarn/cache/flush-write-stream-npm-1.1.1-fd836ba4f4ad96f64d6ff63e7c3c01ae5c2748b17a1add8f3ade927c15ce35ec.zip new file mode 100644 index 0000000..d3d02c0 Binary files /dev/null and b/.yarn/cache/flush-write-stream-npm-1.1.1-fd836ba4f4ad96f64d6ff63e7c3c01ae5c2748b17a1add8f3ade927c15ce35ec.zip differ diff --git a/.yarn/cache/follow-redirects-npm-1.7.0-da339789bc1486b3179304e15380d3bf39ea2d110e5ea82e9781e638b0c7508c.zip b/.yarn/cache/follow-redirects-npm-1.7.0-da339789bc1486b3179304e15380d3bf39ea2d110e5ea82e9781e638b0c7508c.zip new file mode 100644 index 0000000..aa9ec49 Binary files /dev/null and b/.yarn/cache/follow-redirects-npm-1.7.0-da339789bc1486b3179304e15380d3bf39ea2d110e5ea82e9781e638b0c7508c.zip differ diff --git a/.yarn/cache/for-in-npm-1.0.2-80674b369492c5f1cd48156394b778dd412420208eb40e6b95e2b996cfb24f9f.zip b/.yarn/cache/for-in-npm-1.0.2-80674b369492c5f1cd48156394b778dd412420208eb40e6b95e2b996cfb24f9f.zip new file mode 100644 index 0000000..ce9a312 Binary files /dev/null and b/.yarn/cache/for-in-npm-1.0.2-80674b369492c5f1cd48156394b778dd412420208eb40e6b95e2b996cfb24f9f.zip differ diff --git a/.yarn/cache/for-own-npm-1.0.0-5bf4429cd1173e1950e230f9675109db9435e68621bee9b1b0fc8cf006550047.zip b/.yarn/cache/for-own-npm-1.0.0-5bf4429cd1173e1950e230f9675109db9435e68621bee9b1b0fc8cf006550047.zip new file mode 100644 index 0000000..7a031db Binary files /dev/null and b/.yarn/cache/for-own-npm-1.0.0-5bf4429cd1173e1950e230f9675109db9435e68621bee9b1b0fc8cf006550047.zip differ diff --git a/.yarn/cache/forever-agent-npm-0.6.1-de97addcb499e855a74a677355aed744cbbf9f651c5b67dabf919310e059b561.zip b/.yarn/cache/forever-agent-npm-0.6.1-de97addcb499e855a74a677355aed744cbbf9f651c5b67dabf919310e059b561.zip new file mode 100644 index 0000000..3b51ffe Binary files /dev/null and b/.yarn/cache/forever-agent-npm-0.6.1-de97addcb499e855a74a677355aed744cbbf9f651c5b67dabf919310e059b561.zip differ diff --git a/.yarn/cache/fork-stream-npm-0.0.4-bd5367e44f0597089f087704d0040dd0f31737130611a7a5545d5ea831632683.zip b/.yarn/cache/fork-stream-npm-0.0.4-bd5367e44f0597089f087704d0040dd0f31737130611a7a5545d5ea831632683.zip new file mode 100644 index 0000000..9b506e1 Binary files /dev/null and b/.yarn/cache/fork-stream-npm-0.0.4-bd5367e44f0597089f087704d0040dd0f31737130611a7a5545d5ea831632683.zip differ diff --git a/.yarn/cache/form-data-npm-2.3.3-b450694158ee0e793bb2697af7656ea0ea459c145ae0edc4aa78b3d726201a8f.zip b/.yarn/cache/form-data-npm-2.3.3-b450694158ee0e793bb2697af7656ea0ea459c145ae0edc4aa78b3d726201a8f.zip new file mode 100644 index 0000000..88edb66 Binary files /dev/null and b/.yarn/cache/form-data-npm-2.3.3-b450694158ee0e793bb2697af7656ea0ea459c145ae0edc4aa78b3d726201a8f.zip differ diff --git a/.yarn/cache/forwarded-npm-0.1.2-65ede840a04f58df8eac7c2ef3402ca99c7973e7592365907062c520f81348f7.zip b/.yarn/cache/forwarded-npm-0.1.2-65ede840a04f58df8eac7c2ef3402ca99c7973e7592365907062c520f81348f7.zip new file mode 100644 index 0000000..e47db31 Binary files /dev/null and b/.yarn/cache/forwarded-npm-0.1.2-65ede840a04f58df8eac7c2ef3402ca99c7973e7592365907062c520f81348f7.zip differ diff --git a/.yarn/cache/fragment-cache-npm-0.2.1-1bd9e3928c25e1bf703a70e4d372c84248489cd64d3ffc0708a165db18e8b958.zip b/.yarn/cache/fragment-cache-npm-0.2.1-1bd9e3928c25e1bf703a70e4d372c84248489cd64d3ffc0708a165db18e8b958.zip new file mode 100644 index 0000000..c95e665 Binary files /dev/null and b/.yarn/cache/fragment-cache-npm-0.2.1-1bd9e3928c25e1bf703a70e4d372c84248489cd64d3ffc0708a165db18e8b958.zip differ diff --git a/.yarn/cache/fresh-npm-0.5.2-31548e78c6ae9260c4b396f5772afdc7112d202e2791e42ce976a2ec7f899186.zip b/.yarn/cache/fresh-npm-0.5.2-31548e78c6ae9260c4b396f5772afdc7112d202e2791e42ce976a2ec7f899186.zip new file mode 100644 index 0000000..e2bcf1a Binary files /dev/null and b/.yarn/cache/fresh-npm-0.5.2-31548e78c6ae9260c4b396f5772afdc7112d202e2791e42ce976a2ec7f899186.zip differ diff --git a/.yarn/cache/from2-npm-2.3.0-36e9a8c13bfedf8c6ffcdce300bd9f0195c93ccc2576f8d747d1ad2fc2d5e9f5.zip b/.yarn/cache/from2-npm-2.3.0-36e9a8c13bfedf8c6ffcdce300bd9f0195c93ccc2576f8d747d1ad2fc2d5e9f5.zip new file mode 100644 index 0000000..9719243 Binary files /dev/null and b/.yarn/cache/from2-npm-2.3.0-36e9a8c13bfedf8c6ffcdce300bd9f0195c93ccc2576f8d747d1ad2fc2d5e9f5.zip differ diff --git a/.yarn/cache/fs-minipass-npm-1.2.5-f92a35c6aaefa3b57adc98310027a98574ebca87c29dce031458634789d3d88d.zip b/.yarn/cache/fs-minipass-npm-1.2.5-f92a35c6aaefa3b57adc98310027a98574ebca87c29dce031458634789d3d88d.zip new file mode 100644 index 0000000..635644f Binary files /dev/null and b/.yarn/cache/fs-minipass-npm-1.2.5-f92a35c6aaefa3b57adc98310027a98574ebca87c29dce031458634789d3d88d.zip differ diff --git a/.yarn/cache/fs-mkdirp-stream-npm-1.0.0-3f64a79474d7f5652e12c83bd04dfb110863e35a4b7d4d896b6f7581b9fbca9b.zip b/.yarn/cache/fs-mkdirp-stream-npm-1.0.0-3f64a79474d7f5652e12c83bd04dfb110863e35a4b7d4d896b6f7581b9fbca9b.zip new file mode 100644 index 0000000..f87c219 Binary files /dev/null and b/.yarn/cache/fs-mkdirp-stream-npm-1.0.0-3f64a79474d7f5652e12c83bd04dfb110863e35a4b7d4d896b6f7581b9fbca9b.zip differ diff --git a/.yarn/cache/fs-write-stream-atomic-npm-1.0.10-11a6b126bf6de1e7e33b02e532d7cfdb17efeb60fa23adcdec0ee6a6093693a0.zip b/.yarn/cache/fs-write-stream-atomic-npm-1.0.10-11a6b126bf6de1e7e33b02e532d7cfdb17efeb60fa23adcdec0ee6a6093693a0.zip new file mode 100644 index 0000000..f103664 Binary files /dev/null and b/.yarn/cache/fs-write-stream-atomic-npm-1.0.10-11a6b126bf6de1e7e33b02e532d7cfdb17efeb60fa23adcdec0ee6a6093693a0.zip differ diff --git a/.yarn/cache/fs.realpath-npm-1.0.0-7db695eaa32929846a6b9c32a918d29bede6c8a58831ae3cb3ea82c221508d29.zip b/.yarn/cache/fs.realpath-npm-1.0.0-7db695eaa32929846a6b9c32a918d29bede6c8a58831ae3cb3ea82c221508d29.zip new file mode 100644 index 0000000..3d6be9e Binary files /dev/null and b/.yarn/cache/fs.realpath-npm-1.0.0-7db695eaa32929846a6b9c32a918d29bede6c8a58831ae3cb3ea82c221508d29.zip differ diff --git a/.yarn/cache/fsevents-npm-1.2.8-c731014c103ef1b150f52ce6edd0d214eca4bddaa20015f61aaf22ec6f7afe12.zip b/.yarn/cache/fsevents-npm-1.2.8-c731014c103ef1b150f52ce6edd0d214eca4bddaa20015f61aaf22ec6f7afe12.zip new file mode 100644 index 0000000..effb1df Binary files /dev/null and b/.yarn/cache/fsevents-npm-1.2.8-c731014c103ef1b150f52ce6edd0d214eca4bddaa20015f61aaf22ec6f7afe12.zip differ diff --git a/.yarn/cache/function-bind-npm-1.1.1-4ddbd7791f0a227f96a1aeb55e2382d363bc90c5eb8e01e160a3266a567168d6.zip b/.yarn/cache/function-bind-npm-1.1.1-4ddbd7791f0a227f96a1aeb55e2382d363bc90c5eb8e01e160a3266a567168d6.zip new file mode 100644 index 0000000..2bb9b9e Binary files /dev/null and b/.yarn/cache/function-bind-npm-1.1.1-4ddbd7791f0a227f96a1aeb55e2382d363bc90c5eb8e01e160a3266a567168d6.zip differ diff --git a/.yarn/cache/functional-red-black-tree-npm-1.0.1-8fc18118ea58331ba6466c6047515abf742f13af0ab1db7ddc8c737fee933e51.zip b/.yarn/cache/functional-red-black-tree-npm-1.0.1-8fc18118ea58331ba6466c6047515abf742f13af0ab1db7ddc8c737fee933e51.zip new file mode 100644 index 0000000..ee9e6cb Binary files /dev/null and b/.yarn/cache/functional-red-black-tree-npm-1.0.1-8fc18118ea58331ba6466c6047515abf742f13af0ab1db7ddc8c737fee933e51.zip differ diff --git a/.yarn/cache/gauge-npm-2.7.4-c8e330d985dc3f00bc95538efc471b1af785e0de2f840ccb16b761a4dbb38dda.zip b/.yarn/cache/gauge-npm-2.7.4-c8e330d985dc3f00bc95538efc471b1af785e0de2f840ccb16b761a4dbb38dda.zip new file mode 100644 index 0000000..2f505aa Binary files /dev/null and b/.yarn/cache/gauge-npm-2.7.4-c8e330d985dc3f00bc95538efc471b1af785e0de2f840ccb16b761a4dbb38dda.zip differ diff --git a/.yarn/cache/get-caller-file-npm-1.0.3-b61870dd3a7903b328519bc5ed9410e5353dad3d45bb6e7c02435f8218ac8929.zip b/.yarn/cache/get-caller-file-npm-1.0.3-b61870dd3a7903b328519bc5ed9410e5353dad3d45bb6e7c02435f8218ac8929.zip new file mode 100644 index 0000000..fa4af55 Binary files /dev/null and b/.yarn/cache/get-caller-file-npm-1.0.3-b61870dd3a7903b328519bc5ed9410e5353dad3d45bb6e7c02435f8218ac8929.zip differ diff --git a/.yarn/cache/get-stdin-npm-6.0.0-80bd9588ae2b9c47f948318d8db625467aa4bd1f1f0b0324ee375d0f3995d761.zip b/.yarn/cache/get-stdin-npm-6.0.0-80bd9588ae2b9c47f948318d8db625467aa4bd1f1f0b0324ee375d0f3995d761.zip new file mode 100644 index 0000000..a1ae652 Binary files /dev/null and b/.yarn/cache/get-stdin-npm-6.0.0-80bd9588ae2b9c47f948318d8db625467aa4bd1f1f0b0324ee375d0f3995d761.zip differ diff --git a/.yarn/cache/get-stream-npm-4.1.0-81a3ec758bfa2fc11aca66841e1a83030994079877f6193a70f73685979b267f.zip b/.yarn/cache/get-stream-npm-4.1.0-81a3ec758bfa2fc11aca66841e1a83030994079877f6193a70f73685979b267f.zip new file mode 100644 index 0000000..a74f2f9 Binary files /dev/null and b/.yarn/cache/get-stream-npm-4.1.0-81a3ec758bfa2fc11aca66841e1a83030994079877f6193a70f73685979b267f.zip differ diff --git a/.yarn/cache/get-value-npm-2.0.6-16c84a511c8d28dacd1d31e2e1072281ab87aad07318a87a02545e0e9d42cc9b.zip b/.yarn/cache/get-value-npm-2.0.6-16c84a511c8d28dacd1d31e2e1072281ab87aad07318a87a02545e0e9d42cc9b.zip new file mode 100644 index 0000000..7defa96 Binary files /dev/null and b/.yarn/cache/get-value-npm-2.0.6-16c84a511c8d28dacd1d31e2e1072281ab87aad07318a87a02545e0e9d42cc9b.zip differ diff --git a/.yarn/cache/getpass-npm-0.1.7-134cf8bf954e0fcd295d231d1d8ac70deaabb3dd8c24a99e04da6bd5809f944d.zip b/.yarn/cache/getpass-npm-0.1.7-134cf8bf954e0fcd295d231d1d8ac70deaabb3dd8c24a99e04da6bd5809f944d.zip new file mode 100644 index 0000000..edf0f16 Binary files /dev/null and b/.yarn/cache/getpass-npm-0.1.7-134cf8bf954e0fcd295d231d1d8ac70deaabb3dd8c24a99e04da6bd5809f944d.zip differ diff --git a/.yarn/cache/glob-npm-7.1.3-ec729739fb851527d864ff1088e0f44f9019698371bb279ae87aa7eb9bf7fabd.zip b/.yarn/cache/glob-npm-7.1.3-ec729739fb851527d864ff1088e0f44f9019698371bb279ae87aa7eb9bf7fabd.zip new file mode 100644 index 0000000..2771d3e Binary files /dev/null and b/.yarn/cache/glob-npm-7.1.3-ec729739fb851527d864ff1088e0f44f9019698371bb279ae87aa7eb9bf7fabd.zip differ diff --git a/.yarn/cache/glob-parent-npm-3.1.0-62b4539536f38f14a9c22f72d4ddb2e8470ed3e920ed2faeee5ecfd4a41229ce.zip b/.yarn/cache/glob-parent-npm-3.1.0-62b4539536f38f14a9c22f72d4ddb2e8470ed3e920ed2faeee5ecfd4a41229ce.zip new file mode 100644 index 0000000..3cc4b75 Binary files /dev/null and b/.yarn/cache/glob-parent-npm-3.1.0-62b4539536f38f14a9c22f72d4ddb2e8470ed3e920ed2faeee5ecfd4a41229ce.zip differ diff --git a/.yarn/cache/glob-stream-npm-6.1.0-99cdcac2160ae019db8c39a62a829212fd814105771c0eefe783f2da35a72d71.zip b/.yarn/cache/glob-stream-npm-6.1.0-99cdcac2160ae019db8c39a62a829212fd814105771c0eefe783f2da35a72d71.zip new file mode 100644 index 0000000..42ac8ac Binary files /dev/null and b/.yarn/cache/glob-stream-npm-6.1.0-99cdcac2160ae019db8c39a62a829212fd814105771c0eefe783f2da35a72d71.zip differ diff --git a/.yarn/cache/glob-watcher-npm-5.0.3-cc4f79cafc709d45a8ead34d81752345bcca030501f3123c3bb325733fcb672b.zip b/.yarn/cache/glob-watcher-npm-5.0.3-cc4f79cafc709d45a8ead34d81752345bcca030501f3123c3bb325733fcb672b.zip new file mode 100644 index 0000000..2315ee0 Binary files /dev/null and b/.yarn/cache/glob-watcher-npm-5.0.3-cc4f79cafc709d45a8ead34d81752345bcca030501f3123c3bb325733fcb672b.zip differ diff --git a/.yarn/cache/global-modules-npm-1.0.0-cf2a884616f6ed55b5844a418bbf7b484f0e0767d0deef7f4322e63d54004ae4.zip b/.yarn/cache/global-modules-npm-1.0.0-cf2a884616f6ed55b5844a418bbf7b484f0e0767d0deef7f4322e63d54004ae4.zip new file mode 100644 index 0000000..7077bc5 Binary files /dev/null and b/.yarn/cache/global-modules-npm-1.0.0-cf2a884616f6ed55b5844a418bbf7b484f0e0767d0deef7f4322e63d54004ae4.zip differ diff --git a/.yarn/cache/global-prefix-npm-1.0.2-c3a8af15ee7d7098275be4304cc79abd74f4bd43d3a2048d70b759d0429d2d55.zip b/.yarn/cache/global-prefix-npm-1.0.2-c3a8af15ee7d7098275be4304cc79abd74f4bd43d3a2048d70b759d0429d2d55.zip new file mode 100644 index 0000000..a37deb1 Binary files /dev/null and b/.yarn/cache/global-prefix-npm-1.0.2-c3a8af15ee7d7098275be4304cc79abd74f4bd43d3a2048d70b759d0429d2d55.zip differ diff --git a/.yarn/cache/globals-npm-11.11.0-dc5622de1c04165f4d697129d09cf22e10e4a9260d00d8617a9c88eeddad4c6b.zip b/.yarn/cache/globals-npm-11.11.0-dc5622de1c04165f4d697129d09cf22e10e4a9260d00d8617a9c88eeddad4c6b.zip new file mode 100644 index 0000000..88fd085 Binary files /dev/null and b/.yarn/cache/globals-npm-11.11.0-dc5622de1c04165f4d697129d09cf22e10e4a9260d00d8617a9c88eeddad4c6b.zip differ diff --git a/.yarn/cache/glogg-npm-1.0.2-19138e070c4bd541934b9dab11ddd846886d1c46c8248bf741ca66339fcc9bdd.zip b/.yarn/cache/glogg-npm-1.0.2-19138e070c4bd541934b9dab11ddd846886d1c46c8248bf741ca66339fcc9bdd.zip new file mode 100644 index 0000000..de4854f Binary files /dev/null and b/.yarn/cache/glogg-npm-1.0.2-19138e070c4bd541934b9dab11ddd846886d1c46c8248bf741ca66339fcc9bdd.zip differ diff --git a/.yarn/cache/graceful-fs-npm-4.1.15-e2b29e95dfbf48f44c6700f2c5a64decc07897141ab3fdd1e2ca5a39494bd4d0.zip b/.yarn/cache/graceful-fs-npm-4.1.15-e2b29e95dfbf48f44c6700f2c5a64decc07897141ab3fdd1e2ca5a39494bd4d0.zip new file mode 100644 index 0000000..3f25b6d Binary files /dev/null and b/.yarn/cache/graceful-fs-npm-4.1.15-e2b29e95dfbf48f44c6700f2c5a64decc07897141ab3fdd1e2ca5a39494bd4d0.zip differ diff --git a/.yarn/cache/growly-npm-1.3.0-ab183aae4aece5725a7468cb63a6fafc5af7de8676081b240cc1c21bb63130ba.zip b/.yarn/cache/growly-npm-1.3.0-ab183aae4aece5725a7468cb63a6fafc5af7de8676081b240cc1c21bb63130ba.zip new file mode 100644 index 0000000..5025da6 Binary files /dev/null and b/.yarn/cache/growly-npm-1.3.0-ab183aae4aece5725a7468cb63a6fafc5af7de8676081b240cc1c21bb63130ba.zip differ diff --git a/.yarn/cache/gulp-cli-npm-2.2.0-26046ef436e5f28fbbb6250ddbff1ecdd2996f56843edce5e414afe65512c9b1.zip b/.yarn/cache/gulp-cli-npm-2.2.0-26046ef436e5f28fbbb6250ddbff1ecdd2996f56843edce5e414afe65512c9b1.zip new file mode 100644 index 0000000..06979ba Binary files /dev/null and b/.yarn/cache/gulp-cli-npm-2.2.0-26046ef436e5f28fbbb6250ddbff1ecdd2996f56843edce5e414afe65512c9b1.zip differ diff --git a/.yarn/cache/gulp-if-npm-2.0.2-a4d000908e472fd3fb4d369646c037ff0b6fbce6393d4b2932b88083989e7b50.zip b/.yarn/cache/gulp-if-npm-2.0.2-a4d000908e472fd3fb4d369646c037ff0b6fbce6393d4b2932b88083989e7b50.zip new file mode 100644 index 0000000..ab4dc37 Binary files /dev/null and b/.yarn/cache/gulp-if-npm-2.0.2-a4d000908e472fd3fb4d369646c037ff0b6fbce6393d4b2932b88083989e7b50.zip differ diff --git a/.yarn/cache/gulp-match-npm-1.0.3-02cc46e4efc0b52e24826767f29ba9f7eadea145635b972bd76ab0bc0777f620.zip b/.yarn/cache/gulp-match-npm-1.0.3-02cc46e4efc0b52e24826767f29ba9f7eadea145635b972bd76ab0bc0777f620.zip new file mode 100644 index 0000000..c0698d5 Binary files /dev/null and b/.yarn/cache/gulp-match-npm-1.0.3-02cc46e4efc0b52e24826767f29ba9f7eadea145635b972bd76ab0bc0777f620.zip differ diff --git a/.yarn/cache/gulp-npm-4.0.1-18de2d70e9b481024bb148bc7f0b3b08d06d01e78afc4ecb70d9b319478752cf.zip b/.yarn/cache/gulp-npm-4.0.1-18de2d70e9b481024bb148bc7f0b3b08d06d01e78afc4ecb70d9b319478752cf.zip new file mode 100644 index 0000000..7d9321d Binary files /dev/null and b/.yarn/cache/gulp-npm-4.0.1-18de2d70e9b481024bb148bc7f0b3b08d06d01e78afc4ecb70d9b319478752cf.zip differ diff --git a/.yarn/cache/gulp-uglify-npm-3.0.2-dbe13ba0388c444f60105fa1dae6808ef6d1bcd37c455c4c2a0737e48b673e9a.zip b/.yarn/cache/gulp-uglify-npm-3.0.2-dbe13ba0388c444f60105fa1dae6808ef6d1bcd37c455c4c2a0737e48b673e9a.zip new file mode 100644 index 0000000..83e2b2b Binary files /dev/null and b/.yarn/cache/gulp-uglify-npm-3.0.2-dbe13ba0388c444f60105fa1dae6808ef6d1bcd37c455c4c2a0737e48b673e9a.zip differ diff --git a/.yarn/cache/gulplog-npm-1.0.0-917f45c4b60ad7c637aeb63a883151664e5595c81413ed2f82226a6ecced2a3b.zip b/.yarn/cache/gulplog-npm-1.0.0-917f45c4b60ad7c637aeb63a883151664e5595c81413ed2f82226a6ecced2a3b.zip new file mode 100644 index 0000000..41d8eba Binary files /dev/null and b/.yarn/cache/gulplog-npm-1.0.0-917f45c4b60ad7c637aeb63a883151664e5595c81413ed2f82226a6ecced2a3b.zip differ diff --git a/.yarn/cache/gzip-size-npm-5.1.0-72161354de3ea72ae3b6445e91623704135bbe18ed88884d7e38f0c01abda53f.zip b/.yarn/cache/gzip-size-npm-5.1.0-72161354de3ea72ae3b6445e91623704135bbe18ed88884d7e38f0c01abda53f.zip new file mode 100644 index 0000000..a5e2edb Binary files /dev/null and b/.yarn/cache/gzip-size-npm-5.1.0-72161354de3ea72ae3b6445e91623704135bbe18ed88884d7e38f0c01abda53f.zip differ diff --git a/.yarn/cache/handlebars-npm-4.1.2-32cd49bef84655344aa077b4a3a1b0fa1c5d117437273970172be28e085d82b1.zip b/.yarn/cache/handlebars-npm-4.1.2-32cd49bef84655344aa077b4a3a1b0fa1c5d117437273970172be28e085d82b1.zip new file mode 100644 index 0000000..e745a35 Binary files /dev/null and b/.yarn/cache/handlebars-npm-4.1.2-32cd49bef84655344aa077b4a3a1b0fa1c5d117437273970172be28e085d82b1.zip differ diff --git a/.yarn/cache/har-schema-npm-2.0.0-d792202545d44d4e720c8b751215cad397ff712cec7e8898b1c1d52086b4bcf9.zip b/.yarn/cache/har-schema-npm-2.0.0-d792202545d44d4e720c8b751215cad397ff712cec7e8898b1c1d52086b4bcf9.zip new file mode 100644 index 0000000..5b3f830 Binary files /dev/null and b/.yarn/cache/har-schema-npm-2.0.0-d792202545d44d4e720c8b751215cad397ff712cec7e8898b1c1d52086b4bcf9.zip differ diff --git a/.yarn/cache/har-validator-npm-5.1.3-662084cd234c1775c071a25a4d652b092b50a05c33332696efa0e64dc98bfe42.zip b/.yarn/cache/har-validator-npm-5.1.3-662084cd234c1775c071a25a4d652b092b50a05c33332696efa0e64dc98bfe42.zip new file mode 100644 index 0000000..50c0c0f Binary files /dev/null and b/.yarn/cache/har-validator-npm-5.1.3-662084cd234c1775c071a25a4d652b092b50a05c33332696efa0e64dc98bfe42.zip differ diff --git a/.yarn/cache/has-flag-npm-3.0.0-10521961b1091b4d524012f76e184b884e618ace2ed90a3902428b670c8de74a.zip b/.yarn/cache/has-flag-npm-3.0.0-10521961b1091b4d524012f76e184b884e618ace2ed90a3902428b670c8de74a.zip new file mode 100644 index 0000000..23d814f Binary files /dev/null and b/.yarn/cache/has-flag-npm-3.0.0-10521961b1091b4d524012f76e184b884e618ace2ed90a3902428b670c8de74a.zip differ diff --git a/.yarn/cache/has-gulplog-npm-0.1.0-bfe97f3a0733c1b8bb13ceb00bfd96e5e706bdbf9b9dab9d831ba862a086957b.zip b/.yarn/cache/has-gulplog-npm-0.1.0-bfe97f3a0733c1b8bb13ceb00bfd96e5e706bdbf9b9dab9d831ba862a086957b.zip new file mode 100644 index 0000000..657ac5e Binary files /dev/null and b/.yarn/cache/has-gulplog-npm-0.1.0-bfe97f3a0733c1b8bb13ceb00bfd96e5e706bdbf9b9dab9d831ba862a086957b.zip differ diff --git a/.yarn/cache/has-npm-1.0.3-d46bb3c638525b04e490699e4ede2e8302c4257b4b1f2ebd22602478ace9dc59.zip b/.yarn/cache/has-npm-1.0.3-d46bb3c638525b04e490699e4ede2e8302c4257b4b1f2ebd22602478ace9dc59.zip new file mode 100644 index 0000000..46cacc7 Binary files /dev/null and b/.yarn/cache/has-npm-1.0.3-d46bb3c638525b04e490699e4ede2e8302c4257b4b1f2ebd22602478ace9dc59.zip differ diff --git a/.yarn/cache/has-symbols-npm-1.0.0-2aae1b0e792fa17bd3e6c596fd4ae0addc361b128cc4f33b490dbbebd0595f28.zip b/.yarn/cache/has-symbols-npm-1.0.0-2aae1b0e792fa17bd3e6c596fd4ae0addc361b128cc4f33b490dbbebd0595f28.zip new file mode 100644 index 0000000..cfe0437 Binary files /dev/null and b/.yarn/cache/has-symbols-npm-1.0.0-2aae1b0e792fa17bd3e6c596fd4ae0addc361b128cc4f33b490dbbebd0595f28.zip differ diff --git a/.yarn/cache/has-unicode-npm-2.0.1-7a402898e1a906389dda7c4e0b925979b9fbc6405fd33bc6eab6e66b123edf09.zip b/.yarn/cache/has-unicode-npm-2.0.1-7a402898e1a906389dda7c4e0b925979b9fbc6405fd33bc6eab6e66b123edf09.zip new file mode 100644 index 0000000..0c63375 Binary files /dev/null and b/.yarn/cache/has-unicode-npm-2.0.1-7a402898e1a906389dda7c4e0b925979b9fbc6405fd33bc6eab6e66b123edf09.zip differ diff --git a/.yarn/cache/has-value-npm-0.3.1-be97112edf506bc8eab1a221b656dea0d76a732cc9e37b426b095b36ef876aff.zip b/.yarn/cache/has-value-npm-0.3.1-be97112edf506bc8eab1a221b656dea0d76a732cc9e37b426b095b36ef876aff.zip new file mode 100644 index 0000000..e7780d1 Binary files /dev/null and b/.yarn/cache/has-value-npm-0.3.1-be97112edf506bc8eab1a221b656dea0d76a732cc9e37b426b095b36ef876aff.zip differ diff --git a/.yarn/cache/has-value-npm-1.0.0-18f144a71688b3e671aee7582347897ad1e75bb6b6aa76cad1fecde47b2cc0ca.zip b/.yarn/cache/has-value-npm-1.0.0-18f144a71688b3e671aee7582347897ad1e75bb6b6aa76cad1fecde47b2cc0ca.zip new file mode 100644 index 0000000..88e80aa Binary files /dev/null and b/.yarn/cache/has-value-npm-1.0.0-18f144a71688b3e671aee7582347897ad1e75bb6b6aa76cad1fecde47b2cc0ca.zip differ diff --git a/.yarn/cache/has-values-npm-0.1.4-9b7429bc89defaaf26683be17472d36c6600d9a567e9c6d2b8825e416f857769.zip b/.yarn/cache/has-values-npm-0.1.4-9b7429bc89defaaf26683be17472d36c6600d9a567e9c6d2b8825e416f857769.zip new file mode 100644 index 0000000..fdf02c1 Binary files /dev/null and b/.yarn/cache/has-values-npm-0.1.4-9b7429bc89defaaf26683be17472d36c6600d9a567e9c6d2b8825e416f857769.zip differ diff --git a/.yarn/cache/has-values-npm-1.0.0-e8a910046a182bad6460ea2915d5ed6e454a78dddb64a29e53d6d5ff7f70187e.zip b/.yarn/cache/has-values-npm-1.0.0-e8a910046a182bad6460ea2915d5ed6e454a78dddb64a29e53d6d5ff7f70187e.zip new file mode 100644 index 0000000..a022ffa Binary files /dev/null and b/.yarn/cache/has-values-npm-1.0.0-e8a910046a182bad6460ea2915d5ed6e454a78dddb64a29e53d6d5ff7f70187e.zip differ diff --git a/.yarn/cache/hash-base-npm-3.0.4-6875e362efa0236e047bcb9ffe05b7d8fca583c06305fc0fe47e24ef90a32b95.zip b/.yarn/cache/hash-base-npm-3.0.4-6875e362efa0236e047bcb9ffe05b7d8fca583c06305fc0fe47e24ef90a32b95.zip new file mode 100644 index 0000000..b6e5826 Binary files /dev/null and b/.yarn/cache/hash-base-npm-3.0.4-6875e362efa0236e047bcb9ffe05b7d8fca583c06305fc0fe47e24ef90a32b95.zip differ diff --git a/.yarn/cache/hash.js-npm-1.1.7-190daeb7c6588ec6f1f8371d67be77f9cfdd265947407f5f624ac173f8b55ecb.zip b/.yarn/cache/hash.js-npm-1.1.7-190daeb7c6588ec6f1f8371d67be77f9cfdd265947407f5f624ac173f8b55ecb.zip new file mode 100644 index 0000000..386f487 Binary files /dev/null and b/.yarn/cache/hash.js-npm-1.1.7-190daeb7c6588ec6f1f8371d67be77f9cfdd265947407f5f624ac173f8b55ecb.zip differ diff --git a/.yarn/cache/he-npm-1.2.0-f4b5d2240129bf42271fb98d8207b57c8f918e34f86b57ec841915d00483676d.zip b/.yarn/cache/he-npm-1.2.0-f4b5d2240129bf42271fb98d8207b57c8f918e34f86b57ec841915d00483676d.zip new file mode 100644 index 0000000..031cba8 Binary files /dev/null and b/.yarn/cache/he-npm-1.2.0-f4b5d2240129bf42271fb98d8207b57c8f918e34f86b57ec841915d00483676d.zip differ diff --git a/.yarn/cache/hmac-drbg-npm-1.0.1-c26cb36f5d6323d1707de7249948b5799bc0af9023f99bf287163accb5623828.zip b/.yarn/cache/hmac-drbg-npm-1.0.1-c26cb36f5d6323d1707de7249948b5799bc0af9023f99bf287163accb5623828.zip new file mode 100644 index 0000000..6ee28a1 Binary files /dev/null and b/.yarn/cache/hmac-drbg-npm-1.0.1-c26cb36f5d6323d1707de7249948b5799bc0af9023f99bf287163accb5623828.zip differ diff --git a/.yarn/cache/homedir-polyfill-npm-1.0.3-8e5502b9277c34ae08bc333686eabac69e54b232794a11b31a92b8c3b50de481.zip b/.yarn/cache/homedir-polyfill-npm-1.0.3-8e5502b9277c34ae08bc333686eabac69e54b232794a11b31a92b8c3b50de481.zip new file mode 100644 index 0000000..5ac3b4c Binary files /dev/null and b/.yarn/cache/homedir-polyfill-npm-1.0.3-8e5502b9277c34ae08bc333686eabac69e54b232794a11b31a92b8c3b50de481.zip differ diff --git a/.yarn/cache/hoopy-npm-0.1.4-7305cd7217a1b923bc502b3bd1baa34f61174a2bc3b8e50a3cdfc73ffca7b066.zip b/.yarn/cache/hoopy-npm-0.1.4-7305cd7217a1b923bc502b3bd1baa34f61174a2bc3b8e50a3cdfc73ffca7b066.zip new file mode 100644 index 0000000..b35a39e Binary files /dev/null and b/.yarn/cache/hoopy-npm-0.1.4-7305cd7217a1b923bc502b3bd1baa34f61174a2bc3b8e50a3cdfc73ffca7b066.zip differ diff --git a/.yarn/cache/hosted-git-info-npm-2.7.1-05a68590a226dd81d51c257cc6acbedc34d185e5f6726b8cfb0511030fdfbba2.zip b/.yarn/cache/hosted-git-info-npm-2.7.1-05a68590a226dd81d51c257cc6acbedc34d185e5f6726b8cfb0511030fdfbba2.zip new file mode 100644 index 0000000..ee778a2 Binary files /dev/null and b/.yarn/cache/hosted-git-info-npm-2.7.1-05a68590a226dd81d51c257cc6acbedc34d185e5f6726b8cfb0511030fdfbba2.zip differ diff --git a/.yarn/cache/html-encoding-sniffer-npm-1.0.2-1eaf38025556ce1dabecb95a7b82989da9440124d903d777af37d06394b047d8.zip b/.yarn/cache/html-encoding-sniffer-npm-1.0.2-1eaf38025556ce1dabecb95a7b82989da9440124d903d777af37d06394b047d8.zip new file mode 100644 index 0000000..7c9b515 Binary files /dev/null and b/.yarn/cache/html-encoding-sniffer-npm-1.0.2-1eaf38025556ce1dabecb95a7b82989da9440124d903d777af37d06394b047d8.zip differ diff --git a/.yarn/cache/html-minifier-npm-3.5.21-43e9f1d704410cc45ba5fbebcf84d8abd9127ec51c958d7419efc95c54e16f5f.zip b/.yarn/cache/html-minifier-npm-3.5.21-43e9f1d704410cc45ba5fbebcf84d8abd9127ec51c958d7419efc95c54e16f5f.zip new file mode 100644 index 0000000..866cea8 Binary files /dev/null and b/.yarn/cache/html-minifier-npm-3.5.21-43e9f1d704410cc45ba5fbebcf84d8abd9127ec51c958d7419efc95c54e16f5f.zip differ diff --git a/.yarn/cache/html-webpack-plugin-npm-3.2.0-c38756d7ffd42a10430c6316687549343d340280de06f46c1476c83b1e5f2310.zip b/.yarn/cache/html-webpack-plugin-npm-3.2.0-c38756d7ffd42a10430c6316687549343d340280de06f46c1476c83b1e5f2310.zip new file mode 100644 index 0000000..3f06f29 Binary files /dev/null and b/.yarn/cache/html-webpack-plugin-npm-3.2.0-c38756d7ffd42a10430c6316687549343d340280de06f46c1476c83b1e5f2310.zip differ diff --git a/.yarn/cache/htmlparser2-npm-3.10.1-c85d666bd151a7dd61e522a347fcf2bd27c53ef81ee4697e6807b2ed20991dd9.zip b/.yarn/cache/htmlparser2-npm-3.10.1-c85d666bd151a7dd61e522a347fcf2bd27c53ef81ee4697e6807b2ed20991dd9.zip new file mode 100644 index 0000000..e40e1f7 Binary files /dev/null and b/.yarn/cache/htmlparser2-npm-3.10.1-c85d666bd151a7dd61e522a347fcf2bd27c53ef81ee4697e6807b2ed20991dd9.zip differ diff --git a/.yarn/cache/http-errors-npm-1.6.3-8f0ec7bc7975fc0fded7c2b468163f1ce1bed1155f13f193d797a955e5962ae4.zip b/.yarn/cache/http-errors-npm-1.6.3-8f0ec7bc7975fc0fded7c2b468163f1ce1bed1155f13f193d797a955e5962ae4.zip new file mode 100644 index 0000000..cfe341d Binary files /dev/null and b/.yarn/cache/http-errors-npm-1.6.3-8f0ec7bc7975fc0fded7c2b468163f1ce1bed1155f13f193d797a955e5962ae4.zip differ diff --git a/.yarn/cache/http-proxy-npm-1.17.0-592e7382602591b2e8463dce970b41469e03dcaa91c45f0108638bbf58db6017.zip b/.yarn/cache/http-proxy-npm-1.17.0-592e7382602591b2e8463dce970b41469e03dcaa91c45f0108638bbf58db6017.zip new file mode 100644 index 0000000..a47c854 Binary files /dev/null and b/.yarn/cache/http-proxy-npm-1.17.0-592e7382602591b2e8463dce970b41469e03dcaa91c45f0108638bbf58db6017.zip differ diff --git a/.yarn/cache/http-server-npm-0.11.1-fa702abdb5cc48c30c10de7c622ed1c4d9e3ae743aae9d8468fe32383c3509aa.zip b/.yarn/cache/http-server-npm-0.11.1-fa702abdb5cc48c30c10de7c622ed1c4d9e3ae743aae9d8468fe32383c3509aa.zip new file mode 100644 index 0000000..321744a Binary files /dev/null and b/.yarn/cache/http-server-npm-0.11.1-fa702abdb5cc48c30c10de7c622ed1c4d9e3ae743aae9d8468fe32383c3509aa.zip differ diff --git a/.yarn/cache/http-signature-npm-1.2.0-7e120046e581f9c3ae1cace19cde714fa3e9963536b859ab41d02da2e33f781f.zip b/.yarn/cache/http-signature-npm-1.2.0-7e120046e581f9c3ae1cace19cde714fa3e9963536b859ab41d02da2e33f781f.zip new file mode 100644 index 0000000..60acb45 Binary files /dev/null and b/.yarn/cache/http-signature-npm-1.2.0-7e120046e581f9c3ae1cace19cde714fa3e9963536b859ab41d02da2e33f781f.zip differ diff --git a/.yarn/cache/https-browserify-npm-1.0.0-a2c8762f53e02826e856ee1e8e2c069e473aa4802acdccbdf1f7960d5f863a76.zip b/.yarn/cache/https-browserify-npm-1.0.0-a2c8762f53e02826e856ee1e8e2c069e473aa4802acdccbdf1f7960d5f863a76.zip new file mode 100644 index 0000000..c5cc84e Binary files /dev/null and b/.yarn/cache/https-browserify-npm-1.0.0-a2c8762f53e02826e856ee1e8e2c069e473aa4802acdccbdf1f7960d5f863a76.zip differ diff --git a/.yarn/cache/iconv-lite-npm-0.4.23-9f2d9b65c83acaaf18f5b74d3b4904ec3a293b3692b41a7dd4e286b4b6d46f8c.zip b/.yarn/cache/iconv-lite-npm-0.4.23-9f2d9b65c83acaaf18f5b74d3b4904ec3a293b3692b41a7dd4e286b4b6d46f8c.zip new file mode 100644 index 0000000..6583505 Binary files /dev/null and b/.yarn/cache/iconv-lite-npm-0.4.23-9f2d9b65c83acaaf18f5b74d3b4904ec3a293b3692b41a7dd4e286b4b6d46f8c.zip differ diff --git a/.yarn/cache/iconv-lite-npm-0.4.24-2aca78ffe674ea8948d05359fbf3693fa330c42bed3e85e90cc3027ebf3bfd5c.zip b/.yarn/cache/iconv-lite-npm-0.4.24-2aca78ffe674ea8948d05359fbf3693fa330c42bed3e85e90cc3027ebf3bfd5c.zip new file mode 100644 index 0000000..940390e Binary files /dev/null and b/.yarn/cache/iconv-lite-npm-0.4.24-2aca78ffe674ea8948d05359fbf3693fa330c42bed3e85e90cc3027ebf3bfd5c.zip differ diff --git a/.yarn/cache/ieee754-npm-1.1.13-df05dccb78b032be54db884f0dcf5550b1faf2a8aeaf0521a802b74eeeca62d3.zip b/.yarn/cache/ieee754-npm-1.1.13-df05dccb78b032be54db884f0dcf5550b1faf2a8aeaf0521a802b74eeeca62d3.zip new file mode 100644 index 0000000..e03df2c Binary files /dev/null and b/.yarn/cache/ieee754-npm-1.1.13-df05dccb78b032be54db884f0dcf5550b1faf2a8aeaf0521a802b74eeeca62d3.zip differ diff --git a/.yarn/cache/iferr-npm-0.1.5-9fdc3d859e9eeae5c700e5d4db79fb864e97c0091b559c31d2357a64e0538802.zip b/.yarn/cache/iferr-npm-0.1.5-9fdc3d859e9eeae5c700e5d4db79fb864e97c0091b559c31d2357a64e0538802.zip new file mode 100644 index 0000000..d94c740 Binary files /dev/null and b/.yarn/cache/iferr-npm-0.1.5-9fdc3d859e9eeae5c700e5d4db79fb864e97c0091b559c31d2357a64e0538802.zip differ diff --git a/.yarn/cache/ignore-npm-4.0.6-02d97c6cce85305518641bba9cc845df040f2997c6ba5c2a154c90c8c8a44e5d.zip b/.yarn/cache/ignore-npm-4.0.6-02d97c6cce85305518641bba9cc845df040f2997c6ba5c2a154c90c8c8a44e5d.zip new file mode 100644 index 0000000..5cbdcbc Binary files /dev/null and b/.yarn/cache/ignore-npm-4.0.6-02d97c6cce85305518641bba9cc845df040f2997c6ba5c2a154c90c8c8a44e5d.zip differ diff --git a/.yarn/cache/ignore-walk-npm-3.0.1-effc119aff28c334ee656e92aafa876d5a5e330066f8a32812d071d7044bfdf2.zip b/.yarn/cache/ignore-walk-npm-3.0.1-effc119aff28c334ee656e92aafa876d5a5e330066f8a32812d071d7044bfdf2.zip new file mode 100644 index 0000000..43ea3b4 Binary files /dev/null and b/.yarn/cache/ignore-walk-npm-3.0.1-effc119aff28c334ee656e92aafa876d5a5e330066f8a32812d071d7044bfdf2.zip differ diff --git a/.yarn/cache/import-fresh-npm-3.0.0-502402a43c333cfe14963176d92f82902e7665a3dbe2171ef4501ed233147d87.zip b/.yarn/cache/import-fresh-npm-3.0.0-502402a43c333cfe14963176d92f82902e7665a3dbe2171ef4501ed233147d87.zip new file mode 100644 index 0000000..6a1532d Binary files /dev/null and b/.yarn/cache/import-fresh-npm-3.0.0-502402a43c333cfe14963176d92f82902e7665a3dbe2171ef4501ed233147d87.zip differ diff --git a/.yarn/cache/import-local-npm-2.0.0-1f0355f8234c7ddae065422b901b1ca27671329641c045bd0c954d8289d79a4c.zip b/.yarn/cache/import-local-npm-2.0.0-1f0355f8234c7ddae065422b901b1ca27671329641c045bd0c954d8289d79a4c.zip new file mode 100644 index 0000000..f5b98a1 Binary files /dev/null and b/.yarn/cache/import-local-npm-2.0.0-1f0355f8234c7ddae065422b901b1ca27671329641c045bd0c954d8289d79a4c.zip differ diff --git a/.yarn/cache/imurmurhash-npm-0.1.4-4d36ddbb41f48af0eaaf73ff45c6f0165c9820553860c0e04e6a5da0ec6cefe4.zip b/.yarn/cache/imurmurhash-npm-0.1.4-4d36ddbb41f48af0eaaf73ff45c6f0165c9820553860c0e04e6a5da0ec6cefe4.zip new file mode 100644 index 0000000..93b1b11 Binary files /dev/null and b/.yarn/cache/imurmurhash-npm-0.1.4-4d36ddbb41f48af0eaaf73ff45c6f0165c9820553860c0e04e6a5da0ec6cefe4.zip differ diff --git a/.yarn/cache/indexof-npm-0.0.1-16c276273d73578f3a8978eb9bb3b98a3141afdfd19f1513a03a4be6a5a20935.zip b/.yarn/cache/indexof-npm-0.0.1-16c276273d73578f3a8978eb9bb3b98a3141afdfd19f1513a03a4be6a5a20935.zip new file mode 100644 index 0000000..1e0c0eb Binary files /dev/null and b/.yarn/cache/indexof-npm-0.0.1-16c276273d73578f3a8978eb9bb3b98a3141afdfd19f1513a03a4be6a5a20935.zip differ diff --git a/.yarn/cache/inflight-npm-1.0.6-6b64590cca3d7181b95b8b68df1bc2730708cd42ddb4714836fbc15f2b5c3a67.zip b/.yarn/cache/inflight-npm-1.0.6-6b64590cca3d7181b95b8b68df1bc2730708cd42ddb4714836fbc15f2b5c3a67.zip new file mode 100644 index 0000000..d643ee4 Binary files /dev/null and b/.yarn/cache/inflight-npm-1.0.6-6b64590cca3d7181b95b8b68df1bc2730708cd42ddb4714836fbc15f2b5c3a67.zip differ diff --git a/.yarn/cache/inherits-npm-2.0.1-043dbfa06e30f4ef9c7cffc0ca18893b893de3e061bef38c6d5181b2eb209f4d.zip b/.yarn/cache/inherits-npm-2.0.1-043dbfa06e30f4ef9c7cffc0ca18893b893de3e061bef38c6d5181b2eb209f4d.zip new file mode 100644 index 0000000..316ba20 Binary files /dev/null and b/.yarn/cache/inherits-npm-2.0.1-043dbfa06e30f4ef9c7cffc0ca18893b893de3e061bef38c6d5181b2eb209f4d.zip differ diff --git a/.yarn/cache/inherits-npm-2.0.3-e19eb77b24e64bb2d4d7788ff76c8110603a81f439d57159d83a54a866be38ea.zip b/.yarn/cache/inherits-npm-2.0.3-e19eb77b24e64bb2d4d7788ff76c8110603a81f439d57159d83a54a866be38ea.zip new file mode 100644 index 0000000..f8b20b0 Binary files /dev/null and b/.yarn/cache/inherits-npm-2.0.3-e19eb77b24e64bb2d4d7788ff76c8110603a81f439d57159d83a54a866be38ea.zip differ diff --git a/.yarn/cache/ini-npm-1.3.5-7a773e942b0e9c82dddeda0f11fc5730139a1973f0f1640a6dabb1bfc5177640.zip b/.yarn/cache/ini-npm-1.3.5-7a773e942b0e9c82dddeda0f11fc5730139a1973f0f1640a6dabb1bfc5177640.zip new file mode 100644 index 0000000..cfc6cb6 Binary files /dev/null and b/.yarn/cache/ini-npm-1.3.5-7a773e942b0e9c82dddeda0f11fc5730139a1973f0f1640a6dabb1bfc5177640.zip differ diff --git a/.yarn/cache/inquirer-npm-6.3.1-258ec7ab4b0d5254bbd3ed67667bf2e8d636cb6d7ba23b19a7e86e5d08cd5e7a.zip b/.yarn/cache/inquirer-npm-6.3.1-258ec7ab4b0d5254bbd3ed67667bf2e8d636cb6d7ba23b19a7e86e5d08cd5e7a.zip new file mode 100644 index 0000000..8cbb01c Binary files /dev/null and b/.yarn/cache/inquirer-npm-6.3.1-258ec7ab4b0d5254bbd3ed67667bf2e8d636cb6d7ba23b19a7e86e5d08cd5e7a.zip differ diff --git a/.yarn/cache/interpret-npm-1.2.0-67a376a079dd6a0adda39e7cdbd2c9c4f24845392e139f32a25aad614b2ff173.zip b/.yarn/cache/interpret-npm-1.2.0-67a376a079dd6a0adda39e7cdbd2c9c4f24845392e139f32a25aad614b2ff173.zip new file mode 100644 index 0000000..1b23d85 Binary files /dev/null and b/.yarn/cache/interpret-npm-1.2.0-67a376a079dd6a0adda39e7cdbd2c9c4f24845392e139f32a25aad614b2ff173.zip differ diff --git a/.yarn/cache/invariant-npm-2.2.4-d4fe9fef7d27475f6dbf4eaaaf677bf09e785924a8f7248d410906039bb44337.zip b/.yarn/cache/invariant-npm-2.2.4-d4fe9fef7d27475f6dbf4eaaaf677bf09e785924a8f7248d410906039bb44337.zip new file mode 100644 index 0000000..b331cdf Binary files /dev/null and b/.yarn/cache/invariant-npm-2.2.4-d4fe9fef7d27475f6dbf4eaaaf677bf09e785924a8f7248d410906039bb44337.zip differ diff --git a/.yarn/cache/invert-kv-npm-1.0.0-97cafaec8a4bfa03bfc6ba6787a7c9d119d44d4d8110ec3e967697f9aff9996e.zip b/.yarn/cache/invert-kv-npm-1.0.0-97cafaec8a4bfa03bfc6ba6787a7c9d119d44d4d8110ec3e967697f9aff9996e.zip new file mode 100644 index 0000000..5649ac8 Binary files /dev/null and b/.yarn/cache/invert-kv-npm-1.0.0-97cafaec8a4bfa03bfc6ba6787a7c9d119d44d4d8110ec3e967697f9aff9996e.zip differ diff --git a/.yarn/cache/invert-kv-npm-2.0.0-a13c12ae68215e2dd4607c309c9754ad5945168e00c2fe60f42d20535533e523.zip b/.yarn/cache/invert-kv-npm-2.0.0-a13c12ae68215e2dd4607c309c9754ad5945168e00c2fe60f42d20535533e523.zip new file mode 100644 index 0000000..ca5796b Binary files /dev/null and b/.yarn/cache/invert-kv-npm-2.0.0-a13c12ae68215e2dd4607c309c9754ad5945168e00c2fe60f42d20535533e523.zip differ diff --git a/.yarn/cache/ipaddr.js-npm-1.9.0-daf83ab8980982d7ecf2944df4bec1727cd790cf833f9537f83f3f648ca97b98.zip b/.yarn/cache/ipaddr.js-npm-1.9.0-daf83ab8980982d7ecf2944df4bec1727cd790cf833f9537f83f3f648ca97b98.zip new file mode 100644 index 0000000..804b027 Binary files /dev/null and b/.yarn/cache/ipaddr.js-npm-1.9.0-daf83ab8980982d7ecf2944df4bec1727cd790cf833f9537f83f3f648ca97b98.zip differ diff --git a/.yarn/cache/is-absolute-npm-1.0.0-ef06908634fdb07179fdcd33959d421d7bf485956789e3ae8b638e7cb390267d.zip b/.yarn/cache/is-absolute-npm-1.0.0-ef06908634fdb07179fdcd33959d421d7bf485956789e3ae8b638e7cb390267d.zip new file mode 100644 index 0000000..3963bd3 Binary files /dev/null and b/.yarn/cache/is-absolute-npm-1.0.0-ef06908634fdb07179fdcd33959d421d7bf485956789e3ae8b638e7cb390267d.zip differ diff --git a/.yarn/cache/is-accessor-descriptor-npm-0.1.6-fd94230b50de73a71ad4c5ddb14658ff09e04b5a73fadd3acb5aec8d22270206.zip b/.yarn/cache/is-accessor-descriptor-npm-0.1.6-fd94230b50de73a71ad4c5ddb14658ff09e04b5a73fadd3acb5aec8d22270206.zip new file mode 100644 index 0000000..51f6a15 Binary files /dev/null and b/.yarn/cache/is-accessor-descriptor-npm-0.1.6-fd94230b50de73a71ad4c5ddb14658ff09e04b5a73fadd3acb5aec8d22270206.zip differ diff --git a/.yarn/cache/is-accessor-descriptor-npm-1.0.0-38dfa664ffcb9bad107b0a1e13f2d78a1e93ca5ec82aac5e57762457ee4dd7c7.zip b/.yarn/cache/is-accessor-descriptor-npm-1.0.0-38dfa664ffcb9bad107b0a1e13f2d78a1e93ca5ec82aac5e57762457ee4dd7c7.zip new file mode 100644 index 0000000..38d999b Binary files /dev/null and b/.yarn/cache/is-accessor-descriptor-npm-1.0.0-38dfa664ffcb9bad107b0a1e13f2d78a1e93ca5ec82aac5e57762457ee4dd7c7.zip differ diff --git a/.yarn/cache/is-arrayish-npm-0.2.1-18e3d76c6a30bed4b2573788172a1ed87ce894439143403dea9578969b5cf1f1.zip b/.yarn/cache/is-arrayish-npm-0.2.1-18e3d76c6a30bed4b2573788172a1ed87ce894439143403dea9578969b5cf1f1.zip new file mode 100644 index 0000000..054e527 Binary files /dev/null and b/.yarn/cache/is-arrayish-npm-0.2.1-18e3d76c6a30bed4b2573788172a1ed87ce894439143403dea9578969b5cf1f1.zip differ diff --git a/.yarn/cache/is-binary-path-npm-1.0.1-88083bb5a53c0561afcbe8c01a2da5aab9048f2128451dd9d0135418654ba936.zip b/.yarn/cache/is-binary-path-npm-1.0.1-88083bb5a53c0561afcbe8c01a2da5aab9048f2128451dd9d0135418654ba936.zip new file mode 100644 index 0000000..1cb425d Binary files /dev/null and b/.yarn/cache/is-binary-path-npm-1.0.1-88083bb5a53c0561afcbe8c01a2da5aab9048f2128451dd9d0135418654ba936.zip differ diff --git a/.yarn/cache/is-buffer-npm-1.1.6-355c30f3153a6e90db03e130074ec9db893083a3894d63d75cc048415e5c4f9c.zip b/.yarn/cache/is-buffer-npm-1.1.6-355c30f3153a6e90db03e130074ec9db893083a3894d63d75cc048415e5c4f9c.zip new file mode 100644 index 0000000..65b501e Binary files /dev/null and b/.yarn/cache/is-buffer-npm-1.1.6-355c30f3153a6e90db03e130074ec9db893083a3894d63d75cc048415e5c4f9c.zip differ diff --git a/.yarn/cache/is-callable-npm-1.1.4-8780dcaa768f614b2a1868790280529224f319e70a8bc9434331682e02d2b23a.zip b/.yarn/cache/is-callable-npm-1.1.4-8780dcaa768f614b2a1868790280529224f319e70a8bc9434331682e02d2b23a.zip new file mode 100644 index 0000000..182c829 Binary files /dev/null and b/.yarn/cache/is-callable-npm-1.1.4-8780dcaa768f614b2a1868790280529224f319e70a8bc9434331682e02d2b23a.zip differ diff --git a/.yarn/cache/is-ci-npm-2.0.0-4faa81335ce22f95ae01605d6baac03cc6822ceed284019230a406345c25c67a.zip b/.yarn/cache/is-ci-npm-2.0.0-4faa81335ce22f95ae01605d6baac03cc6822ceed284019230a406345c25c67a.zip new file mode 100644 index 0000000..9b2b9a9 Binary files /dev/null and b/.yarn/cache/is-ci-npm-2.0.0-4faa81335ce22f95ae01605d6baac03cc6822ceed284019230a406345c25c67a.zip differ diff --git a/.yarn/cache/is-data-descriptor-npm-0.1.4-8ad896bdf03b06e1455783cf96f8a7fad5e44bcbdbea84c21043fde55022c274.zip b/.yarn/cache/is-data-descriptor-npm-0.1.4-8ad896bdf03b06e1455783cf96f8a7fad5e44bcbdbea84c21043fde55022c274.zip new file mode 100644 index 0000000..4d6cb5d Binary files /dev/null and b/.yarn/cache/is-data-descriptor-npm-0.1.4-8ad896bdf03b06e1455783cf96f8a7fad5e44bcbdbea84c21043fde55022c274.zip differ diff --git a/.yarn/cache/is-data-descriptor-npm-1.0.0-cfdeb86c7b8e70b33013908d6e3c81506410ac8d98c5abaacbf8f234577588b5.zip b/.yarn/cache/is-data-descriptor-npm-1.0.0-cfdeb86c7b8e70b33013908d6e3c81506410ac8d98c5abaacbf8f234577588b5.zip new file mode 100644 index 0000000..7b61930 Binary files /dev/null and b/.yarn/cache/is-data-descriptor-npm-1.0.0-cfdeb86c7b8e70b33013908d6e3c81506410ac8d98c5abaacbf8f234577588b5.zip differ diff --git a/.yarn/cache/is-date-object-npm-1.0.1-04b54515d0613950761c2d3ab32bf88df4eb76252f19355455171b82b2ed3795.zip b/.yarn/cache/is-date-object-npm-1.0.1-04b54515d0613950761c2d3ab32bf88df4eb76252f19355455171b82b2ed3795.zip new file mode 100644 index 0000000..3ae7264 Binary files /dev/null and b/.yarn/cache/is-date-object-npm-1.0.1-04b54515d0613950761c2d3ab32bf88df4eb76252f19355455171b82b2ed3795.zip differ diff --git a/.yarn/cache/is-descriptor-npm-0.1.6-83d2a642df6e15ae2a1ef183af71b233e69d7a42b65dd3f54872a601175c2833.zip b/.yarn/cache/is-descriptor-npm-0.1.6-83d2a642df6e15ae2a1ef183af71b233e69d7a42b65dd3f54872a601175c2833.zip new file mode 100644 index 0000000..561f41e Binary files /dev/null and b/.yarn/cache/is-descriptor-npm-0.1.6-83d2a642df6e15ae2a1ef183af71b233e69d7a42b65dd3f54872a601175c2833.zip differ diff --git a/.yarn/cache/is-descriptor-npm-1.0.2-558ef5d61035e59acd27b6ddebde832d2bdd34435b277deeddb4e2d71950178e.zip b/.yarn/cache/is-descriptor-npm-1.0.2-558ef5d61035e59acd27b6ddebde832d2bdd34435b277deeddb4e2d71950178e.zip new file mode 100644 index 0000000..a103092 Binary files /dev/null and b/.yarn/cache/is-descriptor-npm-1.0.2-558ef5d61035e59acd27b6ddebde832d2bdd34435b277deeddb4e2d71950178e.zip differ diff --git a/.yarn/cache/is-extendable-npm-0.1.1-c589ebb36b356667404c448d806831e3f1a71daebb7a3dd4c140488dbfffebc8.zip b/.yarn/cache/is-extendable-npm-0.1.1-c589ebb36b356667404c448d806831e3f1a71daebb7a3dd4c140488dbfffebc8.zip new file mode 100644 index 0000000..b0eb693 Binary files /dev/null and b/.yarn/cache/is-extendable-npm-0.1.1-c589ebb36b356667404c448d806831e3f1a71daebb7a3dd4c140488dbfffebc8.zip differ diff --git a/.yarn/cache/is-extendable-npm-1.0.1-634f828b756fc5344e12de35263ffb002a19d529524e350163ff1a3b805fe9b9.zip b/.yarn/cache/is-extendable-npm-1.0.1-634f828b756fc5344e12de35263ffb002a19d529524e350163ff1a3b805fe9b9.zip new file mode 100644 index 0000000..551595a Binary files /dev/null and b/.yarn/cache/is-extendable-npm-1.0.1-634f828b756fc5344e12de35263ffb002a19d529524e350163ff1a3b805fe9b9.zip differ diff --git a/.yarn/cache/is-extglob-npm-2.1.1-48b0556ff4a6a4b7e4607b17cc8015274a99c3ba0a3895f84a9c002dfa3e7c8e.zip b/.yarn/cache/is-extglob-npm-2.1.1-48b0556ff4a6a4b7e4607b17cc8015274a99c3ba0a3895f84a9c002dfa3e7c8e.zip new file mode 100644 index 0000000..6a607c5 Binary files /dev/null and b/.yarn/cache/is-extglob-npm-2.1.1-48b0556ff4a6a4b7e4607b17cc8015274a99c3ba0a3895f84a9c002dfa3e7c8e.zip differ diff --git a/.yarn/cache/is-fullwidth-code-point-npm-1.0.0-3c1fc40a67f0b90846d48cc9d6dbeaa54a3c4b0068eb45a0c37a28dbd2a815ca.zip b/.yarn/cache/is-fullwidth-code-point-npm-1.0.0-3c1fc40a67f0b90846d48cc9d6dbeaa54a3c4b0068eb45a0c37a28dbd2a815ca.zip new file mode 100644 index 0000000..643c487 Binary files /dev/null and b/.yarn/cache/is-fullwidth-code-point-npm-1.0.0-3c1fc40a67f0b90846d48cc9d6dbeaa54a3c4b0068eb45a0c37a28dbd2a815ca.zip differ diff --git a/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-42ce0742b97e9cc7cb3456c7ef50b001d1074464219e50dfd349e86720cba4ca.zip b/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-42ce0742b97e9cc7cb3456c7ef50b001d1074464219e50dfd349e86720cba4ca.zip new file mode 100644 index 0000000..d23ad2e Binary files /dev/null and b/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-42ce0742b97e9cc7cb3456c7ef50b001d1074464219e50dfd349e86720cba4ca.zip differ diff --git a/.yarn/cache/is-generator-fn-npm-2.1.0-02923433845478842f9494bb74d28dafc0c6a8cf4049ff22fb0127e35e8889f8.zip b/.yarn/cache/is-generator-fn-npm-2.1.0-02923433845478842f9494bb74d28dafc0c6a8cf4049ff22fb0127e35e8889f8.zip new file mode 100644 index 0000000..2655c91 Binary files /dev/null and b/.yarn/cache/is-generator-fn-npm-2.1.0-02923433845478842f9494bb74d28dafc0c6a8cf4049ff22fb0127e35e8889f8.zip differ diff --git a/.yarn/cache/is-glob-npm-3.1.0-2838598fc2ff9a45fce1ee74c12b992d377da856c7851d841ce3f76984e1580c.zip b/.yarn/cache/is-glob-npm-3.1.0-2838598fc2ff9a45fce1ee74c12b992d377da856c7851d841ce3f76984e1580c.zip new file mode 100644 index 0000000..37dd8ed Binary files /dev/null and b/.yarn/cache/is-glob-npm-3.1.0-2838598fc2ff9a45fce1ee74c12b992d377da856c7851d841ce3f76984e1580c.zip differ diff --git a/.yarn/cache/is-glob-npm-4.0.1-c94555561016d8e59f512c1cd804f5c6b9bbd335daf1acbd3fecd9ba5e531720.zip b/.yarn/cache/is-glob-npm-4.0.1-c94555561016d8e59f512c1cd804f5c6b9bbd335daf1acbd3fecd9ba5e531720.zip new file mode 100644 index 0000000..6d408d3 Binary files /dev/null and b/.yarn/cache/is-glob-npm-4.0.1-c94555561016d8e59f512c1cd804f5c6b9bbd335daf1acbd3fecd9ba5e531720.zip differ diff --git a/.yarn/cache/is-negated-glob-npm-1.0.0-39c3d4e1c7d0b79f2da9c223ce3b5ebf6f3dbea1c21984fad123e7c472a67e57.zip b/.yarn/cache/is-negated-glob-npm-1.0.0-39c3d4e1c7d0b79f2da9c223ce3b5ebf6f3dbea1c21984fad123e7c472a67e57.zip new file mode 100644 index 0000000..76846c8 Binary files /dev/null and b/.yarn/cache/is-negated-glob-npm-1.0.0-39c3d4e1c7d0b79f2da9c223ce3b5ebf6f3dbea1c21984fad123e7c472a67e57.zip differ diff --git a/.yarn/cache/is-number-npm-3.0.0-3f85565c83c4c31ff395ea4b946f876911a296f1e65925b7eb68e0667cd2ec88.zip b/.yarn/cache/is-number-npm-3.0.0-3f85565c83c4c31ff395ea4b946f876911a296f1e65925b7eb68e0667cd2ec88.zip new file mode 100644 index 0000000..d5581c6 Binary files /dev/null and b/.yarn/cache/is-number-npm-3.0.0-3f85565c83c4c31ff395ea4b946f876911a296f1e65925b7eb68e0667cd2ec88.zip differ diff --git a/.yarn/cache/is-number-npm-4.0.0-1653a874dd251d4d49e703586c26a36bddd0c25e3e6dafbc9f553f5c07e3bb0d.zip b/.yarn/cache/is-number-npm-4.0.0-1653a874dd251d4d49e703586c26a36bddd0c25e3e6dafbc9f553f5c07e3bb0d.zip new file mode 100644 index 0000000..78fe61d Binary files /dev/null and b/.yarn/cache/is-number-npm-4.0.0-1653a874dd251d4d49e703586c26a36bddd0c25e3e6dafbc9f553f5c07e3bb0d.zip differ diff --git a/.yarn/cache/is-plain-object-npm-2.0.4-f0eb024d132da64ec7515e011103e261a5492fe7cb01dcac9cec734e0f02b1fe.zip b/.yarn/cache/is-plain-object-npm-2.0.4-f0eb024d132da64ec7515e011103e261a5492fe7cb01dcac9cec734e0f02b1fe.zip new file mode 100644 index 0000000..31ffae8 Binary files /dev/null and b/.yarn/cache/is-plain-object-npm-2.0.4-f0eb024d132da64ec7515e011103e261a5492fe7cb01dcac9cec734e0f02b1fe.zip differ diff --git a/.yarn/cache/is-promise-npm-2.1.0-af4337d0551b7d93f2ecc3076115e8dd196c94ee1dc0d4bccba8577a7390cc09.zip b/.yarn/cache/is-promise-npm-2.1.0-af4337d0551b7d93f2ecc3076115e8dd196c94ee1dc0d4bccba8577a7390cc09.zip new file mode 100644 index 0000000..5aaa2d9 Binary files /dev/null and b/.yarn/cache/is-promise-npm-2.1.0-af4337d0551b7d93f2ecc3076115e8dd196c94ee1dc0d4bccba8577a7390cc09.zip differ diff --git a/.yarn/cache/is-regex-npm-1.0.4-43f618a9c0e2755b797af5d31f0dd3f717e44cdf59adcaab695639c3c8fa0750.zip b/.yarn/cache/is-regex-npm-1.0.4-43f618a9c0e2755b797af5d31f0dd3f717e44cdf59adcaab695639c3c8fa0750.zip new file mode 100644 index 0000000..45636c3 Binary files /dev/null and b/.yarn/cache/is-regex-npm-1.0.4-43f618a9c0e2755b797af5d31f0dd3f717e44cdf59adcaab695639c3c8fa0750.zip differ diff --git a/.yarn/cache/is-relative-npm-1.0.0-b5a3c1fcbc2ee5c06e87de600b108e767b7246dfde74a0a566487ff1fa1cedc5.zip b/.yarn/cache/is-relative-npm-1.0.0-b5a3c1fcbc2ee5c06e87de600b108e767b7246dfde74a0a566487ff1fa1cedc5.zip new file mode 100644 index 0000000..338bd16 Binary files /dev/null and b/.yarn/cache/is-relative-npm-1.0.0-b5a3c1fcbc2ee5c06e87de600b108e767b7246dfde74a0a566487ff1fa1cedc5.zip differ diff --git a/.yarn/cache/is-stream-npm-1.1.0-e2b78b161dc6bb3bda51737b41766e8b3f73b3ccc7570f0caca546703277a77e.zip b/.yarn/cache/is-stream-npm-1.1.0-e2b78b161dc6bb3bda51737b41766e8b3f73b3ccc7570f0caca546703277a77e.zip new file mode 100644 index 0000000..5e5c7a5 Binary files /dev/null and b/.yarn/cache/is-stream-npm-1.1.0-e2b78b161dc6bb3bda51737b41766e8b3f73b3ccc7570f0caca546703277a77e.zip differ diff --git a/.yarn/cache/is-symbol-npm-1.0.2-c67fc664ce9d2a10df92b0c0f660bb58777495fe36572e88bdfc67496742f87c.zip b/.yarn/cache/is-symbol-npm-1.0.2-c67fc664ce9d2a10df92b0c0f660bb58777495fe36572e88bdfc67496742f87c.zip new file mode 100644 index 0000000..426a7b7 Binary files /dev/null and b/.yarn/cache/is-symbol-npm-1.0.2-c67fc664ce9d2a10df92b0c0f660bb58777495fe36572e88bdfc67496742f87c.zip differ diff --git a/.yarn/cache/is-typedarray-npm-1.0.0-b0c967e2971d36bc8bddea27c7a2ae70244bc02c9020aca2d4c15a00727d5da8.zip b/.yarn/cache/is-typedarray-npm-1.0.0-b0c967e2971d36bc8bddea27c7a2ae70244bc02c9020aca2d4c15a00727d5da8.zip new file mode 100644 index 0000000..7bc4ce4 Binary files /dev/null and b/.yarn/cache/is-typedarray-npm-1.0.0-b0c967e2971d36bc8bddea27c7a2ae70244bc02c9020aca2d4c15a00727d5da8.zip differ diff --git a/.yarn/cache/is-unc-path-npm-1.0.0-7b86e3e03c124331c0fcd614c0f90ab02f5a56fff5767cedafc16e558200bef2.zip b/.yarn/cache/is-unc-path-npm-1.0.0-7b86e3e03c124331c0fcd614c0f90ab02f5a56fff5767cedafc16e558200bef2.zip new file mode 100644 index 0000000..f5e992b Binary files /dev/null and b/.yarn/cache/is-unc-path-npm-1.0.0-7b86e3e03c124331c0fcd614c0f90ab02f5a56fff5767cedafc16e558200bef2.zip differ diff --git a/.yarn/cache/is-utf8-npm-0.2.1-6f628f5880bca552777d759bdc12a55eea3e7e20f94657e9ef0e11918724d6fa.zip b/.yarn/cache/is-utf8-npm-0.2.1-6f628f5880bca552777d759bdc12a55eea3e7e20f94657e9ef0e11918724d6fa.zip new file mode 100644 index 0000000..ce9cc6c Binary files /dev/null and b/.yarn/cache/is-utf8-npm-0.2.1-6f628f5880bca552777d759bdc12a55eea3e7e20f94657e9ef0e11918724d6fa.zip differ diff --git a/.yarn/cache/is-valid-glob-npm-1.0.0-cdb4b1c28b682ac05bba341ceb009ca67277296d63ccc5dd8c5bd3fad04ddc4b.zip b/.yarn/cache/is-valid-glob-npm-1.0.0-cdb4b1c28b682ac05bba341ceb009ca67277296d63ccc5dd8c5bd3fad04ddc4b.zip new file mode 100644 index 0000000..a1ff678 Binary files /dev/null and b/.yarn/cache/is-valid-glob-npm-1.0.0-cdb4b1c28b682ac05bba341ceb009ca67277296d63ccc5dd8c5bd3fad04ddc4b.zip differ diff --git a/.yarn/cache/is-windows-npm-1.0.2-09376b312797016493dda242044128076d4d425f93c1249854be01af99b7a456.zip b/.yarn/cache/is-windows-npm-1.0.2-09376b312797016493dda242044128076d4d425f93c1249854be01af99b7a456.zip new file mode 100644 index 0000000..b5cccc2 Binary files /dev/null and b/.yarn/cache/is-windows-npm-1.0.2-09376b312797016493dda242044128076d4d425f93c1249854be01af99b7a456.zip differ diff --git a/.yarn/cache/is-wsl-npm-1.1.0-f60e1c2486623812e439ab6b10958bee89bc43f665e12ca46de83accca261515.zip b/.yarn/cache/is-wsl-npm-1.1.0-f60e1c2486623812e439ab6b10958bee89bc43f665e12ca46de83accca261515.zip new file mode 100644 index 0000000..9672ab8 Binary files /dev/null and b/.yarn/cache/is-wsl-npm-1.1.0-f60e1c2486623812e439ab6b10958bee89bc43f665e12ca46de83accca261515.zip differ diff --git a/.yarn/cache/isarray-npm-1.0.0-b8a24133c4d46d92e60308b99f57e1a5266168f07ced472f9c413e2261b2c570.zip b/.yarn/cache/isarray-npm-1.0.0-b8a24133c4d46d92e60308b99f57e1a5266168f07ced472f9c413e2261b2c570.zip new file mode 100644 index 0000000..e6112de Binary files /dev/null and b/.yarn/cache/isarray-npm-1.0.0-b8a24133c4d46d92e60308b99f57e1a5266168f07ced472f9c413e2261b2c570.zip differ diff --git a/.yarn/cache/isexe-npm-2.0.0-d1b4c3f90d8b946bd1331ddedbb8aa042c73bb22df76332850605d40b67d4855.zip b/.yarn/cache/isexe-npm-2.0.0-d1b4c3f90d8b946bd1331ddedbb8aa042c73bb22df76332850605d40b67d4855.zip new file mode 100644 index 0000000..f8d1ec2 Binary files /dev/null and b/.yarn/cache/isexe-npm-2.0.0-d1b4c3f90d8b946bd1331ddedbb8aa042c73bb22df76332850605d40b67d4855.zip differ diff --git a/.yarn/cache/isobject-npm-2.1.0-b24093be39f45976accacbf4fe8c707f59d3ec2fb8be2d16c2ac3457f5121b4a.zip b/.yarn/cache/isobject-npm-2.1.0-b24093be39f45976accacbf4fe8c707f59d3ec2fb8be2d16c2ac3457f5121b4a.zip new file mode 100644 index 0000000..9f9c149 Binary files /dev/null and b/.yarn/cache/isobject-npm-2.1.0-b24093be39f45976accacbf4fe8c707f59d3ec2fb8be2d16c2ac3457f5121b4a.zip differ diff --git a/.yarn/cache/isobject-npm-3.0.1-6bda0ef6cd2c77f9799c26e928d58fb00d77684c62fd8503d9ccfc3fd110ec97.zip b/.yarn/cache/isobject-npm-3.0.1-6bda0ef6cd2c77f9799c26e928d58fb00d77684c62fd8503d9ccfc3fd110ec97.zip new file mode 100644 index 0000000..0f91594 Binary files /dev/null and b/.yarn/cache/isobject-npm-3.0.1-6bda0ef6cd2c77f9799c26e928d58fb00d77684c62fd8503d9ccfc3fd110ec97.zip differ diff --git a/.yarn/cache/isstream-npm-0.1.2-4ea66d07cfb0dd1ac8f3e882d2f0db94cc135ae8faee424fcc07dc9a27abccdb.zip b/.yarn/cache/isstream-npm-0.1.2-4ea66d07cfb0dd1ac8f3e882d2f0db94cc135ae8faee424fcc07dc9a27abccdb.zip new file mode 100644 index 0000000..fc9139a Binary files /dev/null and b/.yarn/cache/isstream-npm-0.1.2-4ea66d07cfb0dd1ac8f3e882d2f0db94cc135ae8faee424fcc07dc9a27abccdb.zip differ diff --git a/.yarn/cache/istanbul-api-npm-2.1.6-69b5bd71a7c3d2d118c9cb81320e3fa31858e6210aa344c5ff5020b28ebdc71c.zip b/.yarn/cache/istanbul-api-npm-2.1.6-69b5bd71a7c3d2d118c9cb81320e3fa31858e6210aa344c5ff5020b28ebdc71c.zip new file mode 100644 index 0000000..c135756 Binary files /dev/null and b/.yarn/cache/istanbul-api-npm-2.1.6-69b5bd71a7c3d2d118c9cb81320e3fa31858e6210aa344c5ff5020b28ebdc71c.zip differ diff --git a/.yarn/cache/istanbul-lib-coverage-npm-2.0.5-ddd68b8b84f73b80e28646174db3603daf0b1913227df67074ecc3e2c9520553.zip b/.yarn/cache/istanbul-lib-coverage-npm-2.0.5-ddd68b8b84f73b80e28646174db3603daf0b1913227df67074ecc3e2c9520553.zip new file mode 100644 index 0000000..de55a79 Binary files /dev/null and b/.yarn/cache/istanbul-lib-coverage-npm-2.0.5-ddd68b8b84f73b80e28646174db3603daf0b1913227df67074ecc3e2c9520553.zip differ diff --git a/.yarn/cache/istanbul-lib-hook-npm-2.0.7-e29402c1c3af50bb85d6be60469c7faa5f7b216216c876ee22d35692fb644ea3.zip b/.yarn/cache/istanbul-lib-hook-npm-2.0.7-e29402c1c3af50bb85d6be60469c7faa5f7b216216c876ee22d35692fb644ea3.zip new file mode 100644 index 0000000..2762042 Binary files /dev/null and b/.yarn/cache/istanbul-lib-hook-npm-2.0.7-e29402c1c3af50bb85d6be60469c7faa5f7b216216c876ee22d35692fb644ea3.zip differ diff --git a/.yarn/cache/istanbul-lib-instrument-npm-3.3.0-88dc9d75181708736177225ebd4be2a4d62e82f4c0197291fefea5112ab517c2.zip b/.yarn/cache/istanbul-lib-instrument-npm-3.3.0-88dc9d75181708736177225ebd4be2a4d62e82f4c0197291fefea5112ab517c2.zip new file mode 100644 index 0000000..f5cbec4 Binary files /dev/null and b/.yarn/cache/istanbul-lib-instrument-npm-3.3.0-88dc9d75181708736177225ebd4be2a4d62e82f4c0197291fefea5112ab517c2.zip differ diff --git a/.yarn/cache/istanbul-lib-report-npm-2.0.8-6ea805809b7f31d5175f3cea9a78a4228ac8d791852851882c769f994dffd6ac.zip b/.yarn/cache/istanbul-lib-report-npm-2.0.8-6ea805809b7f31d5175f3cea9a78a4228ac8d791852851882c769f994dffd6ac.zip new file mode 100644 index 0000000..d32316b Binary files /dev/null and b/.yarn/cache/istanbul-lib-report-npm-2.0.8-6ea805809b7f31d5175f3cea9a78a4228ac8d791852851882c769f994dffd6ac.zip differ diff --git a/.yarn/cache/istanbul-lib-source-maps-npm-3.0.6-2041e6672f877fe731e02933c501511f1a569f381d8c1c9d288781f12313d34d.zip b/.yarn/cache/istanbul-lib-source-maps-npm-3.0.6-2041e6672f877fe731e02933c501511f1a569f381d8c1c9d288781f12313d34d.zip new file mode 100644 index 0000000..e713a16 Binary files /dev/null and b/.yarn/cache/istanbul-lib-source-maps-npm-3.0.6-2041e6672f877fe731e02933c501511f1a569f381d8c1c9d288781f12313d34d.zip differ diff --git a/.yarn/cache/istanbul-reports-npm-2.2.4-e7b7b4420538b87a96d38784b5942929e3b3053e1d86f44765703bb119082a6a.zip b/.yarn/cache/istanbul-reports-npm-2.2.4-e7b7b4420538b87a96d38784b5942929e3b3053e1d86f44765703bb119082a6a.zip new file mode 100644 index 0000000..438e68e Binary files /dev/null and b/.yarn/cache/istanbul-reports-npm-2.2.4-e7b7b4420538b87a96d38784b5942929e3b3053e1d86f44765703bb119082a6a.zip differ diff --git a/.yarn/cache/jest-changed-files-npm-24.7.0-b3f47478a21ad09cb6748ff10b275fa4700f780fb7baa78b707fd2a7091ac5b5.zip b/.yarn/cache/jest-changed-files-npm-24.7.0-b3f47478a21ad09cb6748ff10b275fa4700f780fb7baa78b707fd2a7091ac5b5.zip new file mode 100644 index 0000000..f698562 Binary files /dev/null and b/.yarn/cache/jest-changed-files-npm-24.7.0-b3f47478a21ad09cb6748ff10b275fa4700f780fb7baa78b707fd2a7091ac5b5.zip differ diff --git a/.yarn/cache/jest-cli-npm-24.7.1-f4630c9a5f753a2309c38b23cb3cc70936935110796fd01409a936c364f0ad66.zip b/.yarn/cache/jest-cli-npm-24.7.1-f4630c9a5f753a2309c38b23cb3cc70936935110796fd01409a936c364f0ad66.zip new file mode 100644 index 0000000..72e53a9 Binary files /dev/null and b/.yarn/cache/jest-cli-npm-24.7.1-f4630c9a5f753a2309c38b23cb3cc70936935110796fd01409a936c364f0ad66.zip differ diff --git a/.yarn/cache/jest-config-npm-24.7.1-c41e679cae48f22307d52b15e74274d762458eac3ce6c5be6bbe613938e8b5c9.zip b/.yarn/cache/jest-config-npm-24.7.1-c41e679cae48f22307d52b15e74274d762458eac3ce6c5be6bbe613938e8b5c9.zip new file mode 100644 index 0000000..732b98b Binary files /dev/null and b/.yarn/cache/jest-config-npm-24.7.1-c41e679cae48f22307d52b15e74274d762458eac3ce6c5be6bbe613938e8b5c9.zip differ diff --git a/.yarn/cache/jest-diff-npm-24.7.0-4e4034fd22cda6c2dc404715d727907947d8e7eb2bcb684077949b0188f46b0d.zip b/.yarn/cache/jest-diff-npm-24.7.0-4e4034fd22cda6c2dc404715d727907947d8e7eb2bcb684077949b0188f46b0d.zip new file mode 100644 index 0000000..11782bd Binary files /dev/null and b/.yarn/cache/jest-diff-npm-24.7.0-4e4034fd22cda6c2dc404715d727907947d8e7eb2bcb684077949b0188f46b0d.zip differ diff --git a/.yarn/cache/jest-docblock-npm-24.3.0-7858976ac1724bb9898a252ee6616ee2310974a1f288ec91c3233e5becc27054.zip b/.yarn/cache/jest-docblock-npm-24.3.0-7858976ac1724bb9898a252ee6616ee2310974a1f288ec91c3233e5becc27054.zip new file mode 100644 index 0000000..718cba3 Binary files /dev/null and b/.yarn/cache/jest-docblock-npm-24.3.0-7858976ac1724bb9898a252ee6616ee2310974a1f288ec91c3233e5becc27054.zip differ diff --git a/.yarn/cache/jest-each-npm-24.7.1-8e1655eb2c2379ab1c9526f06ba7a8e755f010deb3781fa8a6f34961b3378ed1.zip b/.yarn/cache/jest-each-npm-24.7.1-8e1655eb2c2379ab1c9526f06ba7a8e755f010deb3781fa8a6f34961b3378ed1.zip new file mode 100644 index 0000000..dba1d05 Binary files /dev/null and b/.yarn/cache/jest-each-npm-24.7.1-8e1655eb2c2379ab1c9526f06ba7a8e755f010deb3781fa8a6f34961b3378ed1.zip differ diff --git a/.yarn/cache/jest-environment-jsdom-npm-24.7.1-294e2de43ccc363820dacd1e881bdabf7dc91b2db6fad3bc9ff9553c61cbd715.zip b/.yarn/cache/jest-environment-jsdom-npm-24.7.1-294e2de43ccc363820dacd1e881bdabf7dc91b2db6fad3bc9ff9553c61cbd715.zip new file mode 100644 index 0000000..fe967b1 Binary files /dev/null and b/.yarn/cache/jest-environment-jsdom-npm-24.7.1-294e2de43ccc363820dacd1e881bdabf7dc91b2db6fad3bc9ff9553c61cbd715.zip differ diff --git a/.yarn/cache/jest-environment-node-npm-24.7.1-c0ab7c4898e5f61274d4d8a680c3dc68784c6f0e2be758c3c6b0db5e24a4b866.zip b/.yarn/cache/jest-environment-node-npm-24.7.1-c0ab7c4898e5f61274d4d8a680c3dc68784c6f0e2be758c3c6b0db5e24a4b866.zip new file mode 100644 index 0000000..526c55a Binary files /dev/null and b/.yarn/cache/jest-environment-node-npm-24.7.1-c0ab7c4898e5f61274d4d8a680c3dc68784c6f0e2be758c3c6b0db5e24a4b866.zip differ diff --git a/.yarn/cache/jest-get-type-npm-24.3.0-5df8f71bddefe8c3cc8195d4285e3de85927ba75efd3083c54e6a09fcca53ff9.zip b/.yarn/cache/jest-get-type-npm-24.3.0-5df8f71bddefe8c3cc8195d4285e3de85927ba75efd3083c54e6a09fcca53ff9.zip new file mode 100644 index 0000000..7fa8a52 Binary files /dev/null and b/.yarn/cache/jest-get-type-npm-24.3.0-5df8f71bddefe8c3cc8195d4285e3de85927ba75efd3083c54e6a09fcca53ff9.zip differ diff --git a/.yarn/cache/jest-haste-map-npm-24.7.1-cfaf9c5bb4832ed01267881fbdd4aa5db5a599fa9108f01d9a7cae4444ea6d96.zip b/.yarn/cache/jest-haste-map-npm-24.7.1-cfaf9c5bb4832ed01267881fbdd4aa5db5a599fa9108f01d9a7cae4444ea6d96.zip new file mode 100644 index 0000000..a0fa7e7 Binary files /dev/null and b/.yarn/cache/jest-haste-map-npm-24.7.1-cfaf9c5bb4832ed01267881fbdd4aa5db5a599fa9108f01d9a7cae4444ea6d96.zip differ diff --git a/.yarn/cache/jest-jasmine2-npm-24.7.1-b10c8a09989471b9f0139ac9373e703261548baca4b42d2ca57f9e995e7c0476.zip b/.yarn/cache/jest-jasmine2-npm-24.7.1-b10c8a09989471b9f0139ac9373e703261548baca4b42d2ca57f9e995e7c0476.zip new file mode 100644 index 0000000..e11381f Binary files /dev/null and b/.yarn/cache/jest-jasmine2-npm-24.7.1-b10c8a09989471b9f0139ac9373e703261548baca4b42d2ca57f9e995e7c0476.zip differ diff --git a/.yarn/cache/jest-leak-detector-npm-24.7.0-e4e47e234a92689644b470acb6c6bb81bc0f97d6c8c599881feb18aba7d00827.zip b/.yarn/cache/jest-leak-detector-npm-24.7.0-e4e47e234a92689644b470acb6c6bb81bc0f97d6c8c599881feb18aba7d00827.zip new file mode 100644 index 0000000..b324adb Binary files /dev/null and b/.yarn/cache/jest-leak-detector-npm-24.7.0-e4e47e234a92689644b470acb6c6bb81bc0f97d6c8c599881feb18aba7d00827.zip differ diff --git a/.yarn/cache/jest-matcher-utils-npm-24.7.0-9c9497b0ae40c5669fc3bd6acc72cb314b908fa3911767621f10ec725313b1cd.zip b/.yarn/cache/jest-matcher-utils-npm-24.7.0-9c9497b0ae40c5669fc3bd6acc72cb314b908fa3911767621f10ec725313b1cd.zip new file mode 100644 index 0000000..e22c681 Binary files /dev/null and b/.yarn/cache/jest-matcher-utils-npm-24.7.0-9c9497b0ae40c5669fc3bd6acc72cb314b908fa3911767621f10ec725313b1cd.zip differ diff --git a/.yarn/cache/jest-message-util-npm-24.7.1-ce1a829ff950355ab985dc141b1c20ee67f4b89acbf2915a0be8b6261683cd88.zip b/.yarn/cache/jest-message-util-npm-24.7.1-ce1a829ff950355ab985dc141b1c20ee67f4b89acbf2915a0be8b6261683cd88.zip new file mode 100644 index 0000000..a4ba68a Binary files /dev/null and b/.yarn/cache/jest-message-util-npm-24.7.1-ce1a829ff950355ab985dc141b1c20ee67f4b89acbf2915a0be8b6261683cd88.zip differ diff --git a/.yarn/cache/jest-mock-npm-24.7.0-b5b5a3c952a7ef1453b3d548051778783a2831e79ddd369fcb2282f4c49413b2.zip b/.yarn/cache/jest-mock-npm-24.7.0-b5b5a3c952a7ef1453b3d548051778783a2831e79ddd369fcb2282f4c49413b2.zip new file mode 100644 index 0000000..384d65c Binary files /dev/null and b/.yarn/cache/jest-mock-npm-24.7.0-b5b5a3c952a7ef1453b3d548051778783a2831e79ddd369fcb2282f4c49413b2.zip differ diff --git a/.yarn/cache/jest-npm-24.7.1-154193b27e1959d7c6db4d5d4beffba043e08937a0af107523245894d9f7e5c6.zip b/.yarn/cache/jest-npm-24.7.1-154193b27e1959d7c6db4d5d4beffba043e08937a0af107523245894d9f7e5c6.zip new file mode 100644 index 0000000..ec89dcb Binary files /dev/null and b/.yarn/cache/jest-npm-24.7.1-154193b27e1959d7c6db4d5d4beffba043e08937a0af107523245894d9f7e5c6.zip differ diff --git a/.yarn/cache/jest-pnp-resolver-npm-1.2.1-2e7db759835f0ebbac8d35556b65efac94cb32ae9eb82a78e8057da0359c3e84.zip b/.yarn/cache/jest-pnp-resolver-npm-1.2.1-2e7db759835f0ebbac8d35556b65efac94cb32ae9eb82a78e8057da0359c3e84.zip new file mode 100644 index 0000000..eae83df Binary files /dev/null and b/.yarn/cache/jest-pnp-resolver-npm-1.2.1-2e7db759835f0ebbac8d35556b65efac94cb32ae9eb82a78e8057da0359c3e84.zip differ diff --git a/.yarn/cache/jest-regex-util-npm-24.3.0-069192e2308b97b95aeb7e434973f8e065b6397978a58fee46094da946881854.zip b/.yarn/cache/jest-regex-util-npm-24.3.0-069192e2308b97b95aeb7e434973f8e065b6397978a58fee46094da946881854.zip new file mode 100644 index 0000000..3ff748e Binary files /dev/null and b/.yarn/cache/jest-regex-util-npm-24.3.0-069192e2308b97b95aeb7e434973f8e065b6397978a58fee46094da946881854.zip differ diff --git a/.yarn/cache/jest-resolve-dependencies-npm-24.7.1-c8c26abcf39b69b67fe05121228f2840e8ee15099e8bccbca0f085be9d4dc7ec.zip b/.yarn/cache/jest-resolve-dependencies-npm-24.7.1-c8c26abcf39b69b67fe05121228f2840e8ee15099e8bccbca0f085be9d4dc7ec.zip new file mode 100644 index 0000000..cb30cad Binary files /dev/null and b/.yarn/cache/jest-resolve-dependencies-npm-24.7.1-c8c26abcf39b69b67fe05121228f2840e8ee15099e8bccbca0f085be9d4dc7ec.zip differ diff --git a/.yarn/cache/jest-resolve-npm-24.7.1-9b451fed4e8a3b7cb8f2b245be77f35d138e1849d38740702ec7634ea70e9e7e.zip b/.yarn/cache/jest-resolve-npm-24.7.1-9b451fed4e8a3b7cb8f2b245be77f35d138e1849d38740702ec7634ea70e9e7e.zip new file mode 100644 index 0000000..9dc5c91 Binary files /dev/null and b/.yarn/cache/jest-resolve-npm-24.7.1-9b451fed4e8a3b7cb8f2b245be77f35d138e1849d38740702ec7634ea70e9e7e.zip differ diff --git a/.yarn/cache/jest-runner-npm-24.7.1-425494a6b211a195b9ed9faf0457166fba00ea014214cfcc0dd3187fdd8a9403.zip b/.yarn/cache/jest-runner-npm-24.7.1-425494a6b211a195b9ed9faf0457166fba00ea014214cfcc0dd3187fdd8a9403.zip new file mode 100644 index 0000000..4e90a1f Binary files /dev/null and b/.yarn/cache/jest-runner-npm-24.7.1-425494a6b211a195b9ed9faf0457166fba00ea014214cfcc0dd3187fdd8a9403.zip differ diff --git a/.yarn/cache/jest-runtime-npm-24.7.1-c70dfab9b1c1c94ed5b7f7eaab8424bc650b791f53696bf22647eec5fd96c9fa.zip b/.yarn/cache/jest-runtime-npm-24.7.1-c70dfab9b1c1c94ed5b7f7eaab8424bc650b791f53696bf22647eec5fd96c9fa.zip new file mode 100644 index 0000000..a5fb8ab Binary files /dev/null and b/.yarn/cache/jest-runtime-npm-24.7.1-c70dfab9b1c1c94ed5b7f7eaab8424bc650b791f53696bf22647eec5fd96c9fa.zip differ diff --git a/.yarn/cache/jest-serializer-npm-24.4.0-ae10114e1bcf815ce37dafb3c0c87e57bc32a5172d252cb3071fd565f4341906.zip b/.yarn/cache/jest-serializer-npm-24.4.0-ae10114e1bcf815ce37dafb3c0c87e57bc32a5172d252cb3071fd565f4341906.zip new file mode 100644 index 0000000..443693c Binary files /dev/null and b/.yarn/cache/jest-serializer-npm-24.4.0-ae10114e1bcf815ce37dafb3c0c87e57bc32a5172d252cb3071fd565f4341906.zip differ diff --git a/.yarn/cache/jest-snapshot-npm-24.7.1-e46d9485ba93e8b250f27a63a045cccc06520d8b0d2c9e76e78fd3fd5f04a6da.zip b/.yarn/cache/jest-snapshot-npm-24.7.1-e46d9485ba93e8b250f27a63a045cccc06520d8b0d2c9e76e78fd3fd5f04a6da.zip new file mode 100644 index 0000000..c89acdb Binary files /dev/null and b/.yarn/cache/jest-snapshot-npm-24.7.1-e46d9485ba93e8b250f27a63a045cccc06520d8b0d2c9e76e78fd3fd5f04a6da.zip differ diff --git a/.yarn/cache/jest-util-npm-24.7.1-7a040f56c80c64cfefce87a204945f5963794051c49c44115109772d31436711.zip b/.yarn/cache/jest-util-npm-24.7.1-7a040f56c80c64cfefce87a204945f5963794051c49c44115109772d31436711.zip new file mode 100644 index 0000000..f15a59a Binary files /dev/null and b/.yarn/cache/jest-util-npm-24.7.1-7a040f56c80c64cfefce87a204945f5963794051c49c44115109772d31436711.zip differ diff --git a/.yarn/cache/jest-validate-npm-24.7.0-3c8a0502beea65e94b9d05885285f572f9c35749506d6cc3eda535aa3ecd552c.zip b/.yarn/cache/jest-validate-npm-24.7.0-3c8a0502beea65e94b9d05885285f572f9c35749506d6cc3eda535aa3ecd552c.zip new file mode 100644 index 0000000..3ef2692 Binary files /dev/null and b/.yarn/cache/jest-validate-npm-24.7.0-3c8a0502beea65e94b9d05885285f572f9c35749506d6cc3eda535aa3ecd552c.zip differ diff --git a/.yarn/cache/jest-watcher-npm-24.7.1-c5f2f7d9f149c6d0e9b12c0a9f54a184c905fad8b20344c1b708d89cbdbda8cb.zip b/.yarn/cache/jest-watcher-npm-24.7.1-c5f2f7d9f149c6d0e9b12c0a9f54a184c905fad8b20344c1b708d89cbdbda8cb.zip new file mode 100644 index 0000000..821700a Binary files /dev/null and b/.yarn/cache/jest-watcher-npm-24.7.1-c5f2f7d9f149c6d0e9b12c0a9f54a184c905fad8b20344c1b708d89cbdbda8cb.zip differ diff --git a/.yarn/cache/jest-worker-npm-24.6.0-983fcb37add096fdddec56908048db5271c13bcc3408316fbfa6fa570e02061d.zip b/.yarn/cache/jest-worker-npm-24.6.0-983fcb37add096fdddec56908048db5271c13bcc3408316fbfa6fa570e02061d.zip new file mode 100644 index 0000000..67f2b21 Binary files /dev/null and b/.yarn/cache/jest-worker-npm-24.6.0-983fcb37add096fdddec56908048db5271c13bcc3408316fbfa6fa570e02061d.zip differ diff --git a/.yarn/cache/js-levenshtein-npm-1.1.6-8b0eba00a92bf67e93ebfb3d973ca4f722435f363127d66bd7bb7e4cb77ec2fd.zip b/.yarn/cache/js-levenshtein-npm-1.1.6-8b0eba00a92bf67e93ebfb3d973ca4f722435f363127d66bd7bb7e4cb77ec2fd.zip new file mode 100644 index 0000000..aa5a963 Binary files /dev/null and b/.yarn/cache/js-levenshtein-npm-1.1.6-8b0eba00a92bf67e93ebfb3d973ca4f722435f363127d66bd7bb7e4cb77ec2fd.zip differ diff --git a/.yarn/cache/js-tokens-npm-4.0.0-22430affccdac0779eab6f89c6659552bc61e41084732a365082aa9eb5d99a2f.zip b/.yarn/cache/js-tokens-npm-4.0.0-22430affccdac0779eab6f89c6659552bc61e41084732a365082aa9eb5d99a2f.zip new file mode 100644 index 0000000..126af81 Binary files /dev/null and b/.yarn/cache/js-tokens-npm-4.0.0-22430affccdac0779eab6f89c6659552bc61e41084732a365082aa9eb5d99a2f.zip differ diff --git a/.yarn/cache/js-yaml-npm-3.13.1-f9085ba01c1dd9ce28042daf05dff0b9ad739afa8db0fdecef62ed0888feac34.zip b/.yarn/cache/js-yaml-npm-3.13.1-f9085ba01c1dd9ce28042daf05dff0b9ad739afa8db0fdecef62ed0888feac34.zip new file mode 100644 index 0000000..24fef94 Binary files /dev/null and b/.yarn/cache/js-yaml-npm-3.13.1-f9085ba01c1dd9ce28042daf05dff0b9ad739afa8db0fdecef62ed0888feac34.zip differ diff --git a/.yarn/cache/jsbn-npm-0.1.1-c2c1ffc34765678605fff3c6ba9d4ef6ef6e10a30ec67696d945e8e6279bc17c.zip b/.yarn/cache/jsbn-npm-0.1.1-c2c1ffc34765678605fff3c6ba9d4ef6ef6e10a30ec67696d945e8e6279bc17c.zip new file mode 100644 index 0000000..9b7b2c3 Binary files /dev/null and b/.yarn/cache/jsbn-npm-0.1.1-c2c1ffc34765678605fff3c6ba9d4ef6ef6e10a30ec67696d945e8e6279bc17c.zip differ diff --git a/.yarn/cache/jsdom-npm-11.12.0-ef808f145e0975eb780aaba7af97b5f684c538d98dc00e87fcb0a235e4fd6e70.zip b/.yarn/cache/jsdom-npm-11.12.0-ef808f145e0975eb780aaba7af97b5f684c538d98dc00e87fcb0a235e4fd6e70.zip new file mode 100644 index 0000000..7c21693 Binary files /dev/null and b/.yarn/cache/jsdom-npm-11.12.0-ef808f145e0975eb780aaba7af97b5f684c538d98dc00e87fcb0a235e4fd6e70.zip differ diff --git a/.yarn/cache/jsesc-npm-0.5.0-5e00ac044bc3b21a4207bcd5f4a55969dec74ab71bf77c95728e4223bf47919a.zip b/.yarn/cache/jsesc-npm-0.5.0-5e00ac044bc3b21a4207bcd5f4a55969dec74ab71bf77c95728e4223bf47919a.zip new file mode 100644 index 0000000..12f48b7 Binary files /dev/null and b/.yarn/cache/jsesc-npm-0.5.0-5e00ac044bc3b21a4207bcd5f4a55969dec74ab71bf77c95728e4223bf47919a.zip differ diff --git a/.yarn/cache/jsesc-npm-2.5.2-774f570180aa1d2d7d98c850493e075199f769582a9f916bed6aa6db47e9fe09.zip b/.yarn/cache/jsesc-npm-2.5.2-774f570180aa1d2d7d98c850493e075199f769582a9f916bed6aa6db47e9fe09.zip new file mode 100644 index 0000000..8938dc7 Binary files /dev/null and b/.yarn/cache/jsesc-npm-2.5.2-774f570180aa1d2d7d98c850493e075199f769582a9f916bed6aa6db47e9fe09.zip differ diff --git a/.yarn/cache/json-parse-better-errors-npm-1.0.2-326045f859cfdf52640001471989e929915e45be226f3969824a2a8fcc21681c.zip b/.yarn/cache/json-parse-better-errors-npm-1.0.2-326045f859cfdf52640001471989e929915e45be226f3969824a2a8fcc21681c.zip new file mode 100644 index 0000000..41117e8 Binary files /dev/null and b/.yarn/cache/json-parse-better-errors-npm-1.0.2-326045f859cfdf52640001471989e929915e45be226f3969824a2a8fcc21681c.zip differ diff --git a/.yarn/cache/json-schema-npm-0.2.3-b1dcd99cf9777557097537f8e0e4a92f9a3d30f8108aa49a14ac688735e5f02f.zip b/.yarn/cache/json-schema-npm-0.2.3-b1dcd99cf9777557097537f8e0e4a92f9a3d30f8108aa49a14ac688735e5f02f.zip new file mode 100644 index 0000000..ada90ca Binary files /dev/null and b/.yarn/cache/json-schema-npm-0.2.3-b1dcd99cf9777557097537f8e0e4a92f9a3d30f8108aa49a14ac688735e5f02f.zip differ diff --git a/.yarn/cache/json-schema-traverse-npm-0.4.1-3c700c71bfd7c69e9755452dd7b46fd090cb19c7006c552cd7c96542ab8f0799.zip b/.yarn/cache/json-schema-traverse-npm-0.4.1-3c700c71bfd7c69e9755452dd7b46fd090cb19c7006c552cd7c96542ab8f0799.zip new file mode 100644 index 0000000..46a4c38 Binary files /dev/null and b/.yarn/cache/json-schema-traverse-npm-0.4.1-3c700c71bfd7c69e9755452dd7b46fd090cb19c7006c552cd7c96542ab8f0799.zip differ diff --git a/.yarn/cache/json-stable-stringify-without-jsonify-npm-1.0.1-f7f034a62a4b4429bdea8e9372899b9c9b1c718a8e60f8e3cc136e592d8681e1.zip b/.yarn/cache/json-stable-stringify-without-jsonify-npm-1.0.1-f7f034a62a4b4429bdea8e9372899b9c9b1c718a8e60f8e3cc136e592d8681e1.zip new file mode 100644 index 0000000..84d7132 Binary files /dev/null and b/.yarn/cache/json-stable-stringify-without-jsonify-npm-1.0.1-f7f034a62a4b4429bdea8e9372899b9c9b1c718a8e60f8e3cc136e592d8681e1.zip differ diff --git a/.yarn/cache/json-stringify-safe-npm-5.0.1-57b3ebbbc21c7b1e272a745b67cc0068805073c8297fd9b7018f1d83d0638958.zip b/.yarn/cache/json-stringify-safe-npm-5.0.1-57b3ebbbc21c7b1e272a745b67cc0068805073c8297fd9b7018f1d83d0638958.zip new file mode 100644 index 0000000..11902dc Binary files /dev/null and b/.yarn/cache/json-stringify-safe-npm-5.0.1-57b3ebbbc21c7b1e272a745b67cc0068805073c8297fd9b7018f1d83d0638958.zip differ diff --git a/.yarn/cache/json5-npm-0.5.1-d88a050d07c5607172f418407ce7475009a2061f7136647aa119ff5447ed3c9b.zip b/.yarn/cache/json5-npm-0.5.1-d88a050d07c5607172f418407ce7475009a2061f7136647aa119ff5447ed3c9b.zip new file mode 100644 index 0000000..7898fd3 Binary files /dev/null and b/.yarn/cache/json5-npm-0.5.1-d88a050d07c5607172f418407ce7475009a2061f7136647aa119ff5447ed3c9b.zip differ diff --git a/.yarn/cache/json5-npm-1.0.1-d57a00d7ccb2990b09c2e3493a9560b40bb307a3ea25ce4b0767a28dcd15c30e.zip b/.yarn/cache/json5-npm-1.0.1-d57a00d7ccb2990b09c2e3493a9560b40bb307a3ea25ce4b0767a28dcd15c30e.zip new file mode 100644 index 0000000..f93b3b7 Binary files /dev/null and b/.yarn/cache/json5-npm-1.0.1-d57a00d7ccb2990b09c2e3493a9560b40bb307a3ea25ce4b0767a28dcd15c30e.zip differ diff --git a/.yarn/cache/json5-npm-2.1.0-8405172778a92187c6f572a3ff2b6c709024c5ba68a02a405df86ec0081e760b.zip b/.yarn/cache/json5-npm-2.1.0-8405172778a92187c6f572a3ff2b6c709024c5ba68a02a405df86ec0081e760b.zip new file mode 100644 index 0000000..90c85c5 Binary files /dev/null and b/.yarn/cache/json5-npm-2.1.0-8405172778a92187c6f572a3ff2b6c709024c5ba68a02a405df86ec0081e760b.zip differ diff --git a/.yarn/cache/jsprim-npm-1.4.1-d8b72187afa35c0560cf42bc712995ab29d354dea0e8b17720dc3d833d9f3667.zip b/.yarn/cache/jsprim-npm-1.4.1-d8b72187afa35c0560cf42bc712995ab29d354dea0e8b17720dc3d833d9f3667.zip new file mode 100644 index 0000000..41fef97 Binary files /dev/null and b/.yarn/cache/jsprim-npm-1.4.1-d8b72187afa35c0560cf42bc712995ab29d354dea0e8b17720dc3d833d9f3667.zip differ diff --git a/.yarn/cache/jsx-ast-utils-npm-2.1.0-b465b0af8ef482bdff48d7520a62ac8663a62f74b21fb5dbba1a985f2485cda9.zip b/.yarn/cache/jsx-ast-utils-npm-2.1.0-b465b0af8ef482bdff48d7520a62ac8663a62f74b21fb5dbba1a985f2485cda9.zip new file mode 100644 index 0000000..e8f383b Binary files /dev/null and b/.yarn/cache/jsx-ast-utils-npm-2.1.0-b465b0af8ef482bdff48d7520a62ac8663a62f74b21fb5dbba1a985f2485cda9.zip differ diff --git a/.yarn/cache/just-debounce-npm-1.0.0-97f548c6283aec371755a495e50a4c2cb2448c4c26992d6de01df5b028ff341e.zip b/.yarn/cache/just-debounce-npm-1.0.0-97f548c6283aec371755a495e50a4c2cb2448c4c26992d6de01df5b028ff341e.zip new file mode 100644 index 0000000..f189f59 Binary files /dev/null and b/.yarn/cache/just-debounce-npm-1.0.0-97f548c6283aec371755a495e50a4c2cb2448c4c26992d6de01df5b028ff341e.zip differ diff --git a/.yarn/cache/kind-of-npm-3.2.2-22fb42122257843047ad137069b13ae41b109ca38bf0d7ef135e36c0cca64f86.zip b/.yarn/cache/kind-of-npm-3.2.2-22fb42122257843047ad137069b13ae41b109ca38bf0d7ef135e36c0cca64f86.zip new file mode 100644 index 0000000..4b23ec1 Binary files /dev/null and b/.yarn/cache/kind-of-npm-3.2.2-22fb42122257843047ad137069b13ae41b109ca38bf0d7ef135e36c0cca64f86.zip differ diff --git a/.yarn/cache/kind-of-npm-4.0.0-928afdf4b9dde8e4a4105bbed4569eff6d37a9558eb76014f33553e1782d7bec.zip b/.yarn/cache/kind-of-npm-4.0.0-928afdf4b9dde8e4a4105bbed4569eff6d37a9558eb76014f33553e1782d7bec.zip new file mode 100644 index 0000000..5ab8cfe Binary files /dev/null and b/.yarn/cache/kind-of-npm-4.0.0-928afdf4b9dde8e4a4105bbed4569eff6d37a9558eb76014f33553e1782d7bec.zip differ diff --git a/.yarn/cache/kind-of-npm-5.1.0-cf86d311ee468d9dedafa63b7c298529479affc710c790c930595ab4762f4377.zip b/.yarn/cache/kind-of-npm-5.1.0-cf86d311ee468d9dedafa63b7c298529479affc710c790c930595ab4762f4377.zip new file mode 100644 index 0000000..a25ed69 Binary files /dev/null and b/.yarn/cache/kind-of-npm-5.1.0-cf86d311ee468d9dedafa63b7c298529479affc710c790c930595ab4762f4377.zip differ diff --git a/.yarn/cache/kind-of-npm-6.0.2-acf8556ff96f8431b728a72736f3f4a28dae6b10159bb7b61dbd175bd129b3e0.zip b/.yarn/cache/kind-of-npm-6.0.2-acf8556ff96f8431b728a72736f3f4a28dae6b10159bb7b61dbd175bd129b3e0.zip new file mode 100644 index 0000000..b33fdcf Binary files /dev/null and b/.yarn/cache/kind-of-npm-6.0.2-acf8556ff96f8431b728a72736f3f4a28dae6b10159bb7b61dbd175bd129b3e0.zip differ diff --git a/.yarn/cache/kleur-npm-3.0.3-f8d763226d64bc201367274f161fb995ef33ad1bb783e9e3b8d78188835854bb.zip b/.yarn/cache/kleur-npm-3.0.3-f8d763226d64bc201367274f161fb995ef33ad1bb783e9e3b8d78188835854bb.zip new file mode 100644 index 0000000..25d9787 Binary files /dev/null and b/.yarn/cache/kleur-npm-3.0.3-f8d763226d64bc201367274f161fb995ef33ad1bb783e9e3b8d78188835854bb.zip differ diff --git a/.yarn/cache/last-run-npm-1.1.1-615786d2ba6beed0a443fb09aa8f1891a63eda5ca965fc0621b2f58be417e3f4.zip b/.yarn/cache/last-run-npm-1.1.1-615786d2ba6beed0a443fb09aa8f1891a63eda5ca965fc0621b2f58be417e3f4.zip new file mode 100644 index 0000000..38d9653 Binary files /dev/null and b/.yarn/cache/last-run-npm-1.1.1-615786d2ba6beed0a443fb09aa8f1891a63eda5ca965fc0621b2f58be417e3f4.zip differ diff --git a/.yarn/cache/lazystream-npm-1.0.0-4682fa0896397f3f6ace97a858d21f8408bbe220c7cf49379b378f987e62b570.zip b/.yarn/cache/lazystream-npm-1.0.0-4682fa0896397f3f6ace97a858d21f8408bbe220c7cf49379b378f987e62b570.zip new file mode 100644 index 0000000..7814ddc Binary files /dev/null and b/.yarn/cache/lazystream-npm-1.0.0-4682fa0896397f3f6ace97a858d21f8408bbe220c7cf49379b378f987e62b570.zip differ diff --git a/.yarn/cache/lcid-npm-1.0.0-d1bfda761b2041efc595c694697a6e88b6d5d0b51ca84e92678bc52c12201c70.zip b/.yarn/cache/lcid-npm-1.0.0-d1bfda761b2041efc595c694697a6e88b6d5d0b51ca84e92678bc52c12201c70.zip new file mode 100644 index 0000000..60b4e3d Binary files /dev/null and b/.yarn/cache/lcid-npm-1.0.0-d1bfda761b2041efc595c694697a6e88b6d5d0b51ca84e92678bc52c12201c70.zip differ diff --git a/.yarn/cache/lcid-npm-2.0.0-a47f02f58a34fdce6b0f71a8448c0fbe4cf93e136a45686682d838c11311175d.zip b/.yarn/cache/lcid-npm-2.0.0-a47f02f58a34fdce6b0f71a8448c0fbe4cf93e136a45686682d838c11311175d.zip new file mode 100644 index 0000000..3bde45a Binary files /dev/null and b/.yarn/cache/lcid-npm-2.0.0-a47f02f58a34fdce6b0f71a8448c0fbe4cf93e136a45686682d838c11311175d.zip differ diff --git a/.yarn/cache/lead-npm-1.0.0-18bb3073df99c1d1c25621b26d5907c5ca1fcbea78736bba7bb78a161e7fe224.zip b/.yarn/cache/lead-npm-1.0.0-18bb3073df99c1d1c25621b26d5907c5ca1fcbea78736bba7bb78a161e7fe224.zip new file mode 100644 index 0000000..697910d Binary files /dev/null and b/.yarn/cache/lead-npm-1.0.0-18bb3073df99c1d1c25621b26d5907c5ca1fcbea78736bba7bb78a161e7fe224.zip differ diff --git a/.yarn/cache/left-pad-npm-1.3.0-cc3b058030dbb2561dc32a68d5082288c8459927c47d4e265ae3fd215e582dee.zip b/.yarn/cache/left-pad-npm-1.3.0-cc3b058030dbb2561dc32a68d5082288c8459927c47d4e265ae3fd215e582dee.zip new file mode 100644 index 0000000..228d8fc Binary files /dev/null and b/.yarn/cache/left-pad-npm-1.3.0-cc3b058030dbb2561dc32a68d5082288c8459927c47d4e265ae3fd215e582dee.zip differ diff --git a/.yarn/cache/leven-npm-2.1.0-4804983a4ff17f8541c349e75cbeba6d913113412b2f3f5d4ec35261c274dda1.zip b/.yarn/cache/leven-npm-2.1.0-4804983a4ff17f8541c349e75cbeba6d913113412b2f3f5d4ec35261c274dda1.zip new file mode 100644 index 0000000..ed9a684 Binary files /dev/null and b/.yarn/cache/leven-npm-2.1.0-4804983a4ff17f8541c349e75cbeba6d913113412b2f3f5d4ec35261c274dda1.zip differ diff --git a/.yarn/cache/levn-npm-0.3.0-d38f495c050cea600f2146d6e1b6994de1a59977dc5c480de451ef3ea9713b49.zip b/.yarn/cache/levn-npm-0.3.0-d38f495c050cea600f2146d6e1b6994de1a59977dc5c480de451ef3ea9713b49.zip new file mode 100644 index 0000000..e30c104 Binary files /dev/null and b/.yarn/cache/levn-npm-0.3.0-d38f495c050cea600f2146d6e1b6994de1a59977dc5c480de451ef3ea9713b49.zip differ diff --git a/.yarn/cache/liftoff-npm-3.1.0-3b545dec5ddbaeb40742df154cb0f1d528dba30153aa9a7653dfe5822506070c.zip b/.yarn/cache/liftoff-npm-3.1.0-3b545dec5ddbaeb40742df154cb0f1d528dba30153aa9a7653dfe5822506070c.zip new file mode 100644 index 0000000..21ae294 Binary files /dev/null and b/.yarn/cache/liftoff-npm-3.1.0-3b545dec5ddbaeb40742df154cb0f1d528dba30153aa9a7653dfe5822506070c.zip differ diff --git a/.yarn/cache/load-json-file-npm-1.1.0-030861be0e1a32702ea997f6fd0910faab314c19931ca8486305151407e1f1e1.zip b/.yarn/cache/load-json-file-npm-1.1.0-030861be0e1a32702ea997f6fd0910faab314c19931ca8486305151407e1f1e1.zip new file mode 100644 index 0000000..271d486 Binary files /dev/null and b/.yarn/cache/load-json-file-npm-1.1.0-030861be0e1a32702ea997f6fd0910faab314c19931ca8486305151407e1f1e1.zip differ diff --git a/.yarn/cache/load-json-file-npm-2.0.0-bc6304942148094f0700bb59f29b190f3fa78aaa27fc7de950b288d46f1e7630.zip b/.yarn/cache/load-json-file-npm-2.0.0-bc6304942148094f0700bb59f29b190f3fa78aaa27fc7de950b288d46f1e7630.zip new file mode 100644 index 0000000..4b506ea Binary files /dev/null and b/.yarn/cache/load-json-file-npm-2.0.0-bc6304942148094f0700bb59f29b190f3fa78aaa27fc7de950b288d46f1e7630.zip differ diff --git a/.yarn/cache/load-json-file-npm-4.0.0-ad222dd1067353ade903497c77eab4a1ab58304177104c27bf7d5bd59f2029aa.zip b/.yarn/cache/load-json-file-npm-4.0.0-ad222dd1067353ade903497c77eab4a1ab58304177104c27bf7d5bd59f2029aa.zip new file mode 100644 index 0000000..196c5d9 Binary files /dev/null and b/.yarn/cache/load-json-file-npm-4.0.0-ad222dd1067353ade903497c77eab4a1ab58304177104c27bf7d5bd59f2029aa.zip differ diff --git a/.yarn/cache/loader-runner-npm-2.4.0-1dda35a78dacedd2f677581b691cbd662fb3f9472e160890736a919ab567e643.zip b/.yarn/cache/loader-runner-npm-2.4.0-1dda35a78dacedd2f677581b691cbd662fb3f9472e160890736a919ab567e643.zip new file mode 100644 index 0000000..d30164c Binary files /dev/null and b/.yarn/cache/loader-runner-npm-2.4.0-1dda35a78dacedd2f677581b691cbd662fb3f9472e160890736a919ab567e643.zip differ diff --git a/.yarn/cache/loader-utils-npm-0.2.17-33c23aa9e7cbedea267c3bac079971a09a761b5953706d73449bc5470e759094.zip b/.yarn/cache/loader-utils-npm-0.2.17-33c23aa9e7cbedea267c3bac079971a09a761b5953706d73449bc5470e759094.zip new file mode 100644 index 0000000..cc2bbf3 Binary files /dev/null and b/.yarn/cache/loader-utils-npm-0.2.17-33c23aa9e7cbedea267c3bac079971a09a761b5953706d73449bc5470e759094.zip differ diff --git a/.yarn/cache/loader-utils-npm-1.2.3-ee39783194b0f049c97d855afc589ec929a051d4c7c566c3af7a352074b610b1.zip b/.yarn/cache/loader-utils-npm-1.2.3-ee39783194b0f049c97d855afc589ec929a051d4c7c566c3af7a352074b610b1.zip new file mode 100644 index 0000000..77ec614 Binary files /dev/null and b/.yarn/cache/loader-utils-npm-1.2.3-ee39783194b0f049c97d855afc589ec929a051d4c7c566c3af7a352074b610b1.zip differ diff --git a/.yarn/cache/locate-path-npm-2.0.0-3ab3d0d3d7f65a803aff384daab92ba7a720b93b0c13f7112c168f1e03ce28ef.zip b/.yarn/cache/locate-path-npm-2.0.0-3ab3d0d3d7f65a803aff384daab92ba7a720b93b0c13f7112c168f1e03ce28ef.zip new file mode 100644 index 0000000..4bf4b27 Binary files /dev/null and b/.yarn/cache/locate-path-npm-2.0.0-3ab3d0d3d7f65a803aff384daab92ba7a720b93b0c13f7112c168f1e03ce28ef.zip differ diff --git a/.yarn/cache/locate-path-npm-3.0.0-3420d8095ab01ed70e9f399424b94df3d5fabcf42a2ed2a6f71de7e76bff214a.zip b/.yarn/cache/locate-path-npm-3.0.0-3420d8095ab01ed70e9f399424b94df3d5fabcf42a2ed2a6f71de7e76bff214a.zip new file mode 100644 index 0000000..917d596 Binary files /dev/null and b/.yarn/cache/locate-path-npm-3.0.0-3420d8095ab01ed70e9f399424b94df3d5fabcf42a2ed2a6f71de7e76bff214a.zip differ diff --git a/.yarn/cache/lodash-npm-4.17.11-56f80968133c63167b57de7e890588a809339b58447de90d99c430d2bc81e12b.zip b/.yarn/cache/lodash-npm-4.17.11-56f80968133c63167b57de7e890588a809339b58447de90d99c430d2bc81e12b.zip new file mode 100644 index 0000000..067e2d4 Binary files /dev/null and b/.yarn/cache/lodash-npm-4.17.11-56f80968133c63167b57de7e890588a809339b58447de90d99c430d2bc81e12b.zip differ diff --git a/.yarn/cache/lodash.clone-npm-4.5.0-837335719aa5bc51a4c15b6c7313e86a6777f211a21d54a6d88e7a3de5ec729c.zip b/.yarn/cache/lodash.clone-npm-4.5.0-837335719aa5bc51a4c15b6c7313e86a6777f211a21d54a6d88e7a3de5ec729c.zip new file mode 100644 index 0000000..63b02bb Binary files /dev/null and b/.yarn/cache/lodash.clone-npm-4.5.0-837335719aa5bc51a4c15b6c7313e86a6777f211a21d54a6d88e7a3de5ec729c.zip differ diff --git a/.yarn/cache/lodash.some-npm-4.6.0-038c19e3473720aca5b32f8ff1e08b2a7cc09fb2f82b8aab50f81cc4648c6ce5.zip b/.yarn/cache/lodash.some-npm-4.6.0-038c19e3473720aca5b32f8ff1e08b2a7cc09fb2f82b8aab50f81cc4648c6ce5.zip new file mode 100644 index 0000000..664b27f Binary files /dev/null and b/.yarn/cache/lodash.some-npm-4.6.0-038c19e3473720aca5b32f8ff1e08b2a7cc09fb2f82b8aab50f81cc4648c6ce5.zip differ diff --git a/.yarn/cache/lodash.sortby-npm-4.7.0-b95c834a7fad341c634e8355073b4ced2d7292dff12b60304f6cc5aa7fc0fbce.zip b/.yarn/cache/lodash.sortby-npm-4.7.0-b95c834a7fad341c634e8355073b4ced2d7292dff12b60304f6cc5aa7fc0fbce.zip new file mode 100644 index 0000000..ada515a Binary files /dev/null and b/.yarn/cache/lodash.sortby-npm-4.7.0-b95c834a7fad341c634e8355073b4ced2d7292dff12b60304f6cc5aa7fc0fbce.zip differ diff --git a/.yarn/cache/loose-envify-npm-1.4.0-7551e84e27febec6109af287fa9cde53909219b6babc844a5cb6b04e627db1c1.zip b/.yarn/cache/loose-envify-npm-1.4.0-7551e84e27febec6109af287fa9cde53909219b6babc844a5cb6b04e627db1c1.zip new file mode 100644 index 0000000..cc9cba0 Binary files /dev/null and b/.yarn/cache/loose-envify-npm-1.4.0-7551e84e27febec6109af287fa9cde53909219b6babc844a5cb6b04e627db1c1.zip differ diff --git a/.yarn/cache/lower-case-npm-1.1.4-5c9c9f617f1d7f229fbbe9357cec25b3fbd7f20f56c24d75110181d3cb63788e.zip b/.yarn/cache/lower-case-npm-1.1.4-5c9c9f617f1d7f229fbbe9357cec25b3fbd7f20f56c24d75110181d3cb63788e.zip new file mode 100644 index 0000000..e132894 Binary files /dev/null and b/.yarn/cache/lower-case-npm-1.1.4-5c9c9f617f1d7f229fbbe9357cec25b3fbd7f20f56c24d75110181d3cb63788e.zip differ diff --git a/.yarn/cache/lru-cache-npm-5.1.1-278604a20697973374db713cb8de8598e3ae758fb7238d65e2cc1e98e33aa277.zip b/.yarn/cache/lru-cache-npm-5.1.1-278604a20697973374db713cb8de8598e3ae758fb7238d65e2cc1e98e33aa277.zip new file mode 100644 index 0000000..e62342c Binary files /dev/null and b/.yarn/cache/lru-cache-npm-5.1.1-278604a20697973374db713cb8de8598e3ae758fb7238d65e2cc1e98e33aa277.zip differ diff --git a/.yarn/cache/magic-string-npm-0.25.2-dd169a4d3e8540c3971f1d57837f85b501b59fdf1346c3a69c369c8530a31c82.zip b/.yarn/cache/magic-string-npm-0.25.2-dd169a4d3e8540c3971f1d57837f85b501b59fdf1346c3a69c369c8530a31c82.zip new file mode 100644 index 0000000..7540bad Binary files /dev/null and b/.yarn/cache/magic-string-npm-0.25.2-dd169a4d3e8540c3971f1d57837f85b501b59fdf1346c3a69c369c8530a31c82.zip differ diff --git a/.yarn/cache/make-dir-npm-2.1.0-d3abdeb006d0aa8f502615d972e4c17251ebfafb7020f2958eecf17d311463a2.zip b/.yarn/cache/make-dir-npm-2.1.0-d3abdeb006d0aa8f502615d972e4c17251ebfafb7020f2958eecf17d311463a2.zip new file mode 100644 index 0000000..56d02db Binary files /dev/null and b/.yarn/cache/make-dir-npm-2.1.0-d3abdeb006d0aa8f502615d972e4c17251ebfafb7020f2958eecf17d311463a2.zip differ diff --git a/.yarn/cache/make-error-cause-npm-1.2.2-9b3748429d0cdec6e455b8a3f1c6174e5acb9f42f04f7d6ec1b44a068e190ac0.zip b/.yarn/cache/make-error-cause-npm-1.2.2-9b3748429d0cdec6e455b8a3f1c6174e5acb9f42f04f7d6ec1b44a068e190ac0.zip new file mode 100644 index 0000000..fd81a5f Binary files /dev/null and b/.yarn/cache/make-error-cause-npm-1.2.2-9b3748429d0cdec6e455b8a3f1c6174e5acb9f42f04f7d6ec1b44a068e190ac0.zip differ diff --git a/.yarn/cache/make-error-npm-1.3.5-2bb2b14be8273807a6a5708e500be9958852631ba48929287f99244c12948bd4.zip b/.yarn/cache/make-error-npm-1.3.5-2bb2b14be8273807a6a5708e500be9958852631ba48929287f99244c12948bd4.zip new file mode 100644 index 0000000..b4c5164 Binary files /dev/null and b/.yarn/cache/make-error-npm-1.3.5-2bb2b14be8273807a6a5708e500be9958852631ba48929287f99244c12948bd4.zip differ diff --git a/.yarn/cache/make-iterator-npm-1.0.1-5b0fd188ff510e2a9eacc6629a15838e52e9ef096a92ef67d9f34481ee2af1d0.zip b/.yarn/cache/make-iterator-npm-1.0.1-5b0fd188ff510e2a9eacc6629a15838e52e9ef096a92ef67d9f34481ee2af1d0.zip new file mode 100644 index 0000000..d5d7e93 Binary files /dev/null and b/.yarn/cache/make-iterator-npm-1.0.1-5b0fd188ff510e2a9eacc6629a15838e52e9ef096a92ef67d9f34481ee2af1d0.zip differ diff --git a/.yarn/cache/makeerror-npm-1.0.11-66603c97419ef6b7a75b557a89267ff07bab86de6d97eb3a49bfb9695e55f162.zip b/.yarn/cache/makeerror-npm-1.0.11-66603c97419ef6b7a75b557a89267ff07bab86de6d97eb3a49bfb9695e55f162.zip new file mode 100644 index 0000000..5f4ec94 Binary files /dev/null and b/.yarn/cache/makeerror-npm-1.0.11-66603c97419ef6b7a75b557a89267ff07bab86de6d97eb3a49bfb9695e55f162.zip differ diff --git a/.yarn/cache/mamacro-npm-0.0.3-64fb1d943610c9ea4c03137c39b562338f91e921f882b1510334e0f12c9e6c02.zip b/.yarn/cache/mamacro-npm-0.0.3-64fb1d943610c9ea4c03137c39b562338f91e921f882b1510334e0f12c9e6c02.zip new file mode 100644 index 0000000..ce4723f Binary files /dev/null and b/.yarn/cache/mamacro-npm-0.0.3-64fb1d943610c9ea4c03137c39b562338f91e921f882b1510334e0f12c9e6c02.zip differ diff --git a/.yarn/cache/map-age-cleaner-npm-0.1.3-d3c56c3e3b4a24ce87ab946d00c03d55a8fc105b0d8bf27849dd568a87d4365f.zip b/.yarn/cache/map-age-cleaner-npm-0.1.3-d3c56c3e3b4a24ce87ab946d00c03d55a8fc105b0d8bf27849dd568a87d4365f.zip new file mode 100644 index 0000000..798182c Binary files /dev/null and b/.yarn/cache/map-age-cleaner-npm-0.1.3-d3c56c3e3b4a24ce87ab946d00c03d55a8fc105b0d8bf27849dd568a87d4365f.zip differ diff --git a/.yarn/cache/map-cache-npm-0.2.2-6b1becb759477b5185c4d507a15549d861b180f826783566011b5b7344a9e109.zip b/.yarn/cache/map-cache-npm-0.2.2-6b1becb759477b5185c4d507a15549d861b180f826783566011b5b7344a9e109.zip new file mode 100644 index 0000000..e7e142c Binary files /dev/null and b/.yarn/cache/map-cache-npm-0.2.2-6b1becb759477b5185c4d507a15549d861b180f826783566011b5b7344a9e109.zip differ diff --git a/.yarn/cache/map-visit-npm-1.0.0-a2a36d0f6c435c571c79456a0e004472f9e49478adb7ea7df4fb07a851ecdc58.zip b/.yarn/cache/map-visit-npm-1.0.0-a2a36d0f6c435c571c79456a0e004472f9e49478adb7ea7df4fb07a851ecdc58.zip new file mode 100644 index 0000000..d7aea46 Binary files /dev/null and b/.yarn/cache/map-visit-npm-1.0.0-a2a36d0f6c435c571c79456a0e004472f9e49478adb7ea7df4fb07a851ecdc58.zip differ diff --git a/.yarn/cache/matchdep-npm-2.0.0-983681b03430408c68ddbbbb8d0671df94539d2829a5da03d4ebc2d3178f0b21.zip b/.yarn/cache/matchdep-npm-2.0.0-983681b03430408c68ddbbbb8d0671df94539d2829a5da03d4ebc2d3178f0b21.zip new file mode 100644 index 0000000..c6a1c6d Binary files /dev/null and b/.yarn/cache/matchdep-npm-2.0.0-983681b03430408c68ddbbbb8d0671df94539d2829a5da03d4ebc2d3178f0b21.zip differ diff --git a/.yarn/cache/md5.js-npm-1.3.5-a5cc1cec980a4250052334f6c1cf651f77cb8d8cd6be5e0137c5ee3bcd17778f.zip b/.yarn/cache/md5.js-npm-1.3.5-a5cc1cec980a4250052334f6c1cf651f77cb8d8cd6be5e0137c5ee3bcd17778f.zip new file mode 100644 index 0000000..3641c67 Binary files /dev/null and b/.yarn/cache/md5.js-npm-1.3.5-a5cc1cec980a4250052334f6c1cf651f77cb8d8cd6be5e0137c5ee3bcd17778f.zip differ diff --git a/.yarn/cache/media-typer-npm-0.3.0-fad2bd50cea7edd0b384a9e26591f8469be864862b75131f5c6de6b088912e0a.zip b/.yarn/cache/media-typer-npm-0.3.0-fad2bd50cea7edd0b384a9e26591f8469be864862b75131f5c6de6b088912e0a.zip new file mode 100644 index 0000000..f9f4055 Binary files /dev/null and b/.yarn/cache/media-typer-npm-0.3.0-fad2bd50cea7edd0b384a9e26591f8469be864862b75131f5c6de6b088912e0a.zip differ diff --git a/.yarn/cache/mem-npm-4.3.0-6b90bd643af018ea9ae8b0f5802ac1bf8828207035afbc5c025e7829d66effb3.zip b/.yarn/cache/mem-npm-4.3.0-6b90bd643af018ea9ae8b0f5802ac1bf8828207035afbc5c025e7829d66effb3.zip new file mode 100644 index 0000000..e1f8b32 Binary files /dev/null and b/.yarn/cache/mem-npm-4.3.0-6b90bd643af018ea9ae8b0f5802ac1bf8828207035afbc5c025e7829d66effb3.zip differ diff --git a/.yarn/cache/memory-fs-npm-0.4.1-5c0e60c828e908bd6a91106d766ffdaa0138402d7848c3e8fee5f215f525f908.zip b/.yarn/cache/memory-fs-npm-0.4.1-5c0e60c828e908bd6a91106d766ffdaa0138402d7848c3e8fee5f215f525f908.zip new file mode 100644 index 0000000..54d31ca Binary files /dev/null and b/.yarn/cache/memory-fs-npm-0.4.1-5c0e60c828e908bd6a91106d766ffdaa0138402d7848c3e8fee5f215f525f908.zip differ diff --git a/.yarn/cache/merge-descriptors-npm-1.0.1-bdd5c332867c2989ec35cb9c7361c31f8191fb398bdecbb831016220ee7bf131.zip b/.yarn/cache/merge-descriptors-npm-1.0.1-bdd5c332867c2989ec35cb9c7361c31f8191fb398bdecbb831016220ee7bf131.zip new file mode 100644 index 0000000..85f6acd Binary files /dev/null and b/.yarn/cache/merge-descriptors-npm-1.0.1-bdd5c332867c2989ec35cb9c7361c31f8191fb398bdecbb831016220ee7bf131.zip differ diff --git a/.yarn/cache/merge-stream-npm-1.0.1-2867c619a734acc261f21735dacc288fbeca621503f6ec35b96323222b6aa6ea.zip b/.yarn/cache/merge-stream-npm-1.0.1-2867c619a734acc261f21735dacc288fbeca621503f6ec35b96323222b6aa6ea.zip new file mode 100644 index 0000000..e5f0de1 Binary files /dev/null and b/.yarn/cache/merge-stream-npm-1.0.1-2867c619a734acc261f21735dacc288fbeca621503f6ec35b96323222b6aa6ea.zip differ diff --git a/.yarn/cache/methods-npm-1.1.2-3ebe027fe2e5de7996d63cbdc225184d54e87461dc1bc6644f2cb2281bbde40e.zip b/.yarn/cache/methods-npm-1.1.2-3ebe027fe2e5de7996d63cbdc225184d54e87461dc1bc6644f2cb2281bbde40e.zip new file mode 100644 index 0000000..6ff7ede Binary files /dev/null and b/.yarn/cache/methods-npm-1.1.2-3ebe027fe2e5de7996d63cbdc225184d54e87461dc1bc6644f2cb2281bbde40e.zip differ diff --git a/.yarn/cache/micromatch-npm-3.1.10-b1b5a2a6029e262ad5c528562a6a8d78c37fa11962bd172684bc55601b1ec11f.zip b/.yarn/cache/micromatch-npm-3.1.10-b1b5a2a6029e262ad5c528562a6a8d78c37fa11962bd172684bc55601b1ec11f.zip new file mode 100644 index 0000000..ad3a9b3 Binary files /dev/null and b/.yarn/cache/micromatch-npm-3.1.10-b1b5a2a6029e262ad5c528562a6a8d78c37fa11962bd172684bc55601b1ec11f.zip differ diff --git a/.yarn/cache/miller-rabin-npm-4.0.1-e906e79c994a02897b2793a103f6c986921a589ee37becc5e26c5fc36203e0e3.zip b/.yarn/cache/miller-rabin-npm-4.0.1-e906e79c994a02897b2793a103f6c986921a589ee37becc5e26c5fc36203e0e3.zip new file mode 100644 index 0000000..690ab95 Binary files /dev/null and b/.yarn/cache/miller-rabin-npm-4.0.1-e906e79c994a02897b2793a103f6c986921a589ee37becc5e26c5fc36203e0e3.zip differ diff --git a/.yarn/cache/mime-db-npm-1.40.0-df3f72152ec779970169fea8c943f7042197be880d475c1a463e000e2a7646a8.zip b/.yarn/cache/mime-db-npm-1.40.0-df3f72152ec779970169fea8c943f7042197be880d475c1a463e000e2a7646a8.zip new file mode 100644 index 0000000..a0b6538 Binary files /dev/null and b/.yarn/cache/mime-db-npm-1.40.0-df3f72152ec779970169fea8c943f7042197be880d475c1a463e000e2a7646a8.zip differ diff --git a/.yarn/cache/mime-npm-1.4.1-120e9d038e69d401d8cbceffbd356590e0ad22ad1a8c00709137076765726cac.zip b/.yarn/cache/mime-npm-1.4.1-120e9d038e69d401d8cbceffbd356590e0ad22ad1a8c00709137076765726cac.zip new file mode 100644 index 0000000..b308b76 Binary files /dev/null and b/.yarn/cache/mime-npm-1.4.1-120e9d038e69d401d8cbceffbd356590e0ad22ad1a8c00709137076765726cac.zip differ diff --git a/.yarn/cache/mime-npm-1.6.0-4642f0ca6e4be911b109adfa5519371277d97892e80cf6de9d556cd8aa9ed269.zip b/.yarn/cache/mime-npm-1.6.0-4642f0ca6e4be911b109adfa5519371277d97892e80cf6de9d556cd8aa9ed269.zip new file mode 100644 index 0000000..0651a3c Binary files /dev/null and b/.yarn/cache/mime-npm-1.6.0-4642f0ca6e4be911b109adfa5519371277d97892e80cf6de9d556cd8aa9ed269.zip differ diff --git a/.yarn/cache/mime-types-npm-2.1.24-a96f23b634c6eff97606ccc7ed6285c6d93ad13cc7f45d1e405e2f3bf0a88e3f.zip b/.yarn/cache/mime-types-npm-2.1.24-a96f23b634c6eff97606ccc7ed6285c6d93ad13cc7f45d1e405e2f3bf0a88e3f.zip new file mode 100644 index 0000000..ec34838 Binary files /dev/null and b/.yarn/cache/mime-types-npm-2.1.24-a96f23b634c6eff97606ccc7ed6285c6d93ad13cc7f45d1e405e2f3bf0a88e3f.zip differ diff --git a/.yarn/cache/mimic-fn-npm-1.2.0-990c95f793edd370a65ced1a4dc9cf946a530b5c5d6671bd8416d1ca0a1e04e2.zip b/.yarn/cache/mimic-fn-npm-1.2.0-990c95f793edd370a65ced1a4dc9cf946a530b5c5d6671bd8416d1ca0a1e04e2.zip new file mode 100644 index 0000000..ea11017 Binary files /dev/null and b/.yarn/cache/mimic-fn-npm-1.2.0-990c95f793edd370a65ced1a4dc9cf946a530b5c5d6671bd8416d1ca0a1e04e2.zip differ diff --git a/.yarn/cache/mimic-fn-npm-2.1.0-6c307a971b5bcef2c7eb32846046071a5e555624875b266d0ec03fe9c47e2554.zip b/.yarn/cache/mimic-fn-npm-2.1.0-6c307a971b5bcef2c7eb32846046071a5e555624875b266d0ec03fe9c47e2554.zip new file mode 100644 index 0000000..faeb66b Binary files /dev/null and b/.yarn/cache/mimic-fn-npm-2.1.0-6c307a971b5bcef2c7eb32846046071a5e555624875b266d0ec03fe9c47e2554.zip differ diff --git a/.yarn/cache/minimalistic-assert-npm-1.0.1-355df4553c6cc553206a2a6faece423e8a39686d4c8b8ddc323c99e2934a55c4.zip b/.yarn/cache/minimalistic-assert-npm-1.0.1-355df4553c6cc553206a2a6faece423e8a39686d4c8b8ddc323c99e2934a55c4.zip new file mode 100644 index 0000000..cc74187 Binary files /dev/null and b/.yarn/cache/minimalistic-assert-npm-1.0.1-355df4553c6cc553206a2a6faece423e8a39686d4c8b8ddc323c99e2934a55c4.zip differ diff --git a/.yarn/cache/minimalistic-crypto-utils-npm-1.0.1-bf8a35a9263e3d76a49dfb3c687aa9b9afdd40f73d87ccd13606763ff3952c8c.zip b/.yarn/cache/minimalistic-crypto-utils-npm-1.0.1-bf8a35a9263e3d76a49dfb3c687aa9b9afdd40f73d87ccd13606763ff3952c8c.zip new file mode 100644 index 0000000..594f10c Binary files /dev/null and b/.yarn/cache/minimalistic-crypto-utils-npm-1.0.1-bf8a35a9263e3d76a49dfb3c687aa9b9afdd40f73d87ccd13606763ff3952c8c.zip differ diff --git a/.yarn/cache/minimatch-npm-3.0.4-23f16b13edbf4675b537979939af31d49e9f4456e43703beef8acfee7c91d83e.zip b/.yarn/cache/minimatch-npm-3.0.4-23f16b13edbf4675b537979939af31d49e9f4456e43703beef8acfee7c91d83e.zip new file mode 100644 index 0000000..6132def Binary files /dev/null and b/.yarn/cache/minimatch-npm-3.0.4-23f16b13edbf4675b537979939af31d49e9f4456e43703beef8acfee7c91d83e.zip differ diff --git a/.yarn/cache/minimist-npm-0.0.10-228e94de568c6f31baa748b322cb1588769b1282d38c44eed95577a18b857cf3.zip b/.yarn/cache/minimist-npm-0.0.10-228e94de568c6f31baa748b322cb1588769b1282d38c44eed95577a18b857cf3.zip new file mode 100644 index 0000000..3dee9c5 Binary files /dev/null and b/.yarn/cache/minimist-npm-0.0.10-228e94de568c6f31baa748b322cb1588769b1282d38c44eed95577a18b857cf3.zip differ diff --git a/.yarn/cache/minimist-npm-0.0.8-7d1855734fe23af8f8b6697ac455571a54adc0ab2c0480f55f3892ff5b19db7c.zip b/.yarn/cache/minimist-npm-0.0.8-7d1855734fe23af8f8b6697ac455571a54adc0ab2c0480f55f3892ff5b19db7c.zip new file mode 100644 index 0000000..db7ea8a Binary files /dev/null and b/.yarn/cache/minimist-npm-0.0.8-7d1855734fe23af8f8b6697ac455571a54adc0ab2c0480f55f3892ff5b19db7c.zip differ diff --git a/.yarn/cache/minimist-npm-1.2.0-01a8fc02c334c5c89cd352117933fd4c7f9529d50476a44a178f470774b16ca0.zip b/.yarn/cache/minimist-npm-1.2.0-01a8fc02c334c5c89cd352117933fd4c7f9529d50476a44a178f470774b16ca0.zip new file mode 100644 index 0000000..7f4c556 Binary files /dev/null and b/.yarn/cache/minimist-npm-1.2.0-01a8fc02c334c5c89cd352117933fd4c7f9529d50476a44a178f470774b16ca0.zip differ diff --git a/.yarn/cache/minipass-npm-2.3.5-f8149bb5cf39cb636ea51e816e9d94b04c48e507d03c54dffe1f9897062f83a9.zip b/.yarn/cache/minipass-npm-2.3.5-f8149bb5cf39cb636ea51e816e9d94b04c48e507d03c54dffe1f9897062f83a9.zip new file mode 100644 index 0000000..03839cc Binary files /dev/null and b/.yarn/cache/minipass-npm-2.3.5-f8149bb5cf39cb636ea51e816e9d94b04c48e507d03c54dffe1f9897062f83a9.zip differ diff --git a/.yarn/cache/minizlib-npm-1.2.1-981673bc61f27ac2805899a69ff548dc03a78fcfcd8a46469474e1a84f704fb1.zip b/.yarn/cache/minizlib-npm-1.2.1-981673bc61f27ac2805899a69ff548dc03a78fcfcd8a46469474e1a84f704fb1.zip new file mode 100644 index 0000000..91464cd Binary files /dev/null and b/.yarn/cache/minizlib-npm-1.2.1-981673bc61f27ac2805899a69ff548dc03a78fcfcd8a46469474e1a84f704fb1.zip differ diff --git a/.yarn/cache/mississippi-npm-3.0.0-f80c20c7b5a0f899c1c793c144f7f18dbbc72b61d3d6b2a3da6501133da9fbe4.zip b/.yarn/cache/mississippi-npm-3.0.0-f80c20c7b5a0f899c1c793c144f7f18dbbc72b61d3d6b2a3da6501133da9fbe4.zip new file mode 100644 index 0000000..e129c6e Binary files /dev/null and b/.yarn/cache/mississippi-npm-3.0.0-f80c20c7b5a0f899c1c793c144f7f18dbbc72b61d3d6b2a3da6501133da9fbe4.zip differ diff --git a/.yarn/cache/mixin-deep-npm-1.3.1-2cf61023cd87200a563ade173e3eebad64f744b4a835a14b03e38327bfd4b33c.zip b/.yarn/cache/mixin-deep-npm-1.3.1-2cf61023cd87200a563ade173e3eebad64f744b4a835a14b03e38327bfd4b33c.zip new file mode 100644 index 0000000..17468c6 Binary files /dev/null and b/.yarn/cache/mixin-deep-npm-1.3.1-2cf61023cd87200a563ade173e3eebad64f744b4a835a14b03e38327bfd4b33c.zip differ diff --git a/.yarn/cache/mkdirp-npm-0.5.1-c591bfa9c3d7de2bf5ebec0a943be4575d831187507bfb43fc585de05f1206fc.zip b/.yarn/cache/mkdirp-npm-0.5.1-c591bfa9c3d7de2bf5ebec0a943be4575d831187507bfb43fc585de05f1206fc.zip new file mode 100644 index 0000000..2dd1a19 Binary files /dev/null and b/.yarn/cache/mkdirp-npm-0.5.1-c591bfa9c3d7de2bf5ebec0a943be4575d831187507bfb43fc585de05f1206fc.zip differ diff --git a/.yarn/cache/move-concurrently-npm-1.0.1-435d5301fe831ee5a84a1d49e8dacdf31ddd107dd9e663b401dd2257a7fc7a52.zip b/.yarn/cache/move-concurrently-npm-1.0.1-435d5301fe831ee5a84a1d49e8dacdf31ddd107dd9e663b401dd2257a7fc7a52.zip new file mode 100644 index 0000000..49c4240 Binary files /dev/null and b/.yarn/cache/move-concurrently-npm-1.0.1-435d5301fe831ee5a84a1d49e8dacdf31ddd107dd9e663b401dd2257a7fc7a52.zip differ diff --git a/.yarn/cache/ms-npm-2.0.0-4b4709283b6ed26827d21df3aabb0f248c3e0cc3293fceea70199db9e4e51d59.zip b/.yarn/cache/ms-npm-2.0.0-4b4709283b6ed26827d21df3aabb0f248c3e0cc3293fceea70199db9e4e51d59.zip new file mode 100644 index 0000000..956338d Binary files /dev/null and b/.yarn/cache/ms-npm-2.0.0-4b4709283b6ed26827d21df3aabb0f248c3e0cc3293fceea70199db9e4e51d59.zip differ diff --git a/.yarn/cache/ms-npm-2.1.1-2d22b5db02422b972bc190ba8a81a35c7d03e11f9627381cce5576efeb4c773d.zip b/.yarn/cache/ms-npm-2.1.1-2d22b5db02422b972bc190ba8a81a35c7d03e11f9627381cce5576efeb4c773d.zip new file mode 100644 index 0000000..8a6ad0d Binary files /dev/null and b/.yarn/cache/ms-npm-2.1.1-2d22b5db02422b972bc190ba8a81a35c7d03e11f9627381cce5576efeb4c773d.zip differ diff --git a/.yarn/cache/mute-stdout-npm-1.0.1-983733362edef07faad15a74281278e9bb48e65aea87cc3868469e25f2cbae93.zip b/.yarn/cache/mute-stdout-npm-1.0.1-983733362edef07faad15a74281278e9bb48e65aea87cc3868469e25f2cbae93.zip new file mode 100644 index 0000000..9cc1287 Binary files /dev/null and b/.yarn/cache/mute-stdout-npm-1.0.1-983733362edef07faad15a74281278e9bb48e65aea87cc3868469e25f2cbae93.zip differ diff --git a/.yarn/cache/mute-stream-npm-0.0.7-7d5d49d9c53683b2f5d7e22b1802c161ab05606f0897223ca3493b36493e5166.zip b/.yarn/cache/mute-stream-npm-0.0.7-7d5d49d9c53683b2f5d7e22b1802c161ab05606f0897223ca3493b36493e5166.zip new file mode 100644 index 0000000..8f761f2 Binary files /dev/null and b/.yarn/cache/mute-stream-npm-0.0.7-7d5d49d9c53683b2f5d7e22b1802c161ab05606f0897223ca3493b36493e5166.zip differ diff --git a/.yarn/cache/nan-npm-2.13.2-895024a11a4c3a7168ffa49d549c63f9738dd104a2eb39eba087e69b6cba0891.zip b/.yarn/cache/nan-npm-2.13.2-895024a11a4c3a7168ffa49d549c63f9738dd104a2eb39eba087e69b6cba0891.zip new file mode 100644 index 0000000..941670a Binary files /dev/null and b/.yarn/cache/nan-npm-2.13.2-895024a11a4c3a7168ffa49d549c63f9738dd104a2eb39eba087e69b6cba0891.zip differ diff --git a/.yarn/cache/nanomatch-npm-1.2.13-dc815c173d2e787d58fb32d672f13c56f67fdf941387c1e8ff0fd7da87dc95c0.zip b/.yarn/cache/nanomatch-npm-1.2.13-dc815c173d2e787d58fb32d672f13c56f67fdf941387c1e8ff0fd7da87dc95c0.zip new file mode 100644 index 0000000..f4cf7b7 Binary files /dev/null and b/.yarn/cache/nanomatch-npm-1.2.13-dc815c173d2e787d58fb32d672f13c56f67fdf941387c1e8ff0fd7da87dc95c0.zip differ diff --git a/.yarn/cache/natural-compare-npm-1.4.0-cc4d797a155f5e74fa0bc6b859352d507ace3f3e0bfac4f0d67a2d361bbac74d.zip b/.yarn/cache/natural-compare-npm-1.4.0-cc4d797a155f5e74fa0bc6b859352d507ace3f3e0bfac4f0d67a2d361bbac74d.zip new file mode 100644 index 0000000..a077c41 Binary files /dev/null and b/.yarn/cache/natural-compare-npm-1.4.0-cc4d797a155f5e74fa0bc6b859352d507ace3f3e0bfac4f0d67a2d361bbac74d.zip differ diff --git a/.yarn/cache/needle-npm-2.3.1-5bf19df8ace35df2889740bf608e2e34457edc2dd22f3f8a2337e7c4f5c2f164.zip b/.yarn/cache/needle-npm-2.3.1-5bf19df8ace35df2889740bf608e2e34457edc2dd22f3f8a2337e7c4f5c2f164.zip new file mode 100644 index 0000000..e6a3cb1 Binary files /dev/null and b/.yarn/cache/needle-npm-2.3.1-5bf19df8ace35df2889740bf608e2e34457edc2dd22f3f8a2337e7c4f5c2f164.zip differ diff --git a/.yarn/cache/negotiator-npm-0.6.1-5b9dff5b829202296ad38d7ebc9f7c143c57222a993f0ea1171a220a32c7c883.zip b/.yarn/cache/negotiator-npm-0.6.1-5b9dff5b829202296ad38d7ebc9f7c143c57222a993f0ea1171a220a32c7c883.zip new file mode 100644 index 0000000..bac408c Binary files /dev/null and b/.yarn/cache/negotiator-npm-0.6.1-5b9dff5b829202296ad38d7ebc9f7c143c57222a993f0ea1171a220a32c7c883.zip differ diff --git a/.yarn/cache/neo-async-npm-2.6.0-cef2597a0fa22e8421c9c6915b1256e4b0352ee8cca01e9343fc6b33c55973a7.zip b/.yarn/cache/neo-async-npm-2.6.0-cef2597a0fa22e8421c9c6915b1256e4b0352ee8cca01e9343fc6b33c55973a7.zip new file mode 100644 index 0000000..8b5d15b Binary files /dev/null and b/.yarn/cache/neo-async-npm-2.6.0-cef2597a0fa22e8421c9c6915b1256e4b0352ee8cca01e9343fc6b33c55973a7.zip differ diff --git a/.yarn/cache/next-tick-npm-1.0.0-28b958407099e69c85b5eeb9092afb34bed75109e3c6f1b6346b08143d9026eb.zip b/.yarn/cache/next-tick-npm-1.0.0-28b958407099e69c85b5eeb9092afb34bed75109e3c6f1b6346b08143d9026eb.zip new file mode 100644 index 0000000..f313001 Binary files /dev/null and b/.yarn/cache/next-tick-npm-1.0.0-28b958407099e69c85b5eeb9092afb34bed75109e3c6f1b6346b08143d9026eb.zip differ diff --git a/.yarn/cache/nice-try-npm-1.0.5-1b4389500d2e208f98169c362cd24e04ffecdad3f6eb5fd1951e0965d085956b.zip b/.yarn/cache/nice-try-npm-1.0.5-1b4389500d2e208f98169c362cd24e04ffecdad3f6eb5fd1951e0965d085956b.zip new file mode 100644 index 0000000..7c78d59 Binary files /dev/null and b/.yarn/cache/nice-try-npm-1.0.5-1b4389500d2e208f98169c362cd24e04ffecdad3f6eb5fd1951e0965d085956b.zip differ diff --git a/.yarn/cache/no-case-npm-2.3.2-145dc9ed481ac380feb442fd3a9dd5e94b49c45d66aaca1f19dcdf4520ea4ece.zip b/.yarn/cache/no-case-npm-2.3.2-145dc9ed481ac380feb442fd3a9dd5e94b49c45d66aaca1f19dcdf4520ea4ece.zip new file mode 100644 index 0000000..c3f131b Binary files /dev/null and b/.yarn/cache/no-case-npm-2.3.2-145dc9ed481ac380feb442fd3a9dd5e94b49c45d66aaca1f19dcdf4520ea4ece.zip differ diff --git a/.yarn/cache/node-gyp-npm-4.0.0-f860d3ead9fda9821ee800e884356e2f164bc34d5f8e1da231540eb3a98f7e70.zip b/.yarn/cache/node-gyp-npm-4.0.0-f860d3ead9fda9821ee800e884356e2f164bc34d5f8e1da231540eb3a98f7e70.zip new file mode 100644 index 0000000..dc54ced Binary files /dev/null and b/.yarn/cache/node-gyp-npm-4.0.0-f860d3ead9fda9821ee800e884356e2f164bc34d5f8e1da231540eb3a98f7e70.zip differ diff --git a/.yarn/cache/node-int64-npm-0.4.0-81b3a411ce87ada0d54a201073807837e4b8240a69298105057dc8834a8c37d0.zip b/.yarn/cache/node-int64-npm-0.4.0-81b3a411ce87ada0d54a201073807837e4b8240a69298105057dc8834a8c37d0.zip new file mode 100644 index 0000000..2b05e1d Binary files /dev/null and b/.yarn/cache/node-int64-npm-0.4.0-81b3a411ce87ada0d54a201073807837e4b8240a69298105057dc8834a8c37d0.zip differ diff --git a/.yarn/cache/node-libs-browser-npm-2.2.0-67eccb34759ca4750e9c8083b1f9360bdc7fcc942924ceff9b84e8d5f3a53849.zip b/.yarn/cache/node-libs-browser-npm-2.2.0-67eccb34759ca4750e9c8083b1f9360bdc7fcc942924ceff9b84e8d5f3a53849.zip new file mode 100644 index 0000000..3614fc9 Binary files /dev/null and b/.yarn/cache/node-libs-browser-npm-2.2.0-67eccb34759ca4750e9c8083b1f9360bdc7fcc942924ceff9b84e8d5f3a53849.zip differ diff --git a/.yarn/cache/node-modules-regexp-npm-1.0.0-0db2ec292bf8cae5336dbfb4c3476d3dcf5492a8e14cd1e57889eb91dbb7174a.zip b/.yarn/cache/node-modules-regexp-npm-1.0.0-0db2ec292bf8cae5336dbfb4c3476d3dcf5492a8e14cd1e57889eb91dbb7174a.zip new file mode 100644 index 0000000..22acea9 Binary files /dev/null and b/.yarn/cache/node-modules-regexp-npm-1.0.0-0db2ec292bf8cae5336dbfb4c3476d3dcf5492a8e14cd1e57889eb91dbb7174a.zip differ diff --git a/.yarn/cache/node-notifier-npm-5.4.0-cdd01a132c77e609eb952a72b38e07d95120a8e80b81fe501d33168485826ca6.zip b/.yarn/cache/node-notifier-npm-5.4.0-cdd01a132c77e609eb952a72b38e07d95120a8e80b81fe501d33168485826ca6.zip new file mode 100644 index 0000000..d8bbb1a Binary files /dev/null and b/.yarn/cache/node-notifier-npm-5.4.0-cdd01a132c77e609eb952a72b38e07d95120a8e80b81fe501d33168485826ca6.zip differ diff --git a/.yarn/cache/node-pre-gyp-npm-0.12.0-f97c4ce3c64a4b879fd5dd1ef13448967fb8051fe62344daecb73f48f765d8db.zip b/.yarn/cache/node-pre-gyp-npm-0.12.0-f97c4ce3c64a4b879fd5dd1ef13448967fb8051fe62344daecb73f48f765d8db.zip new file mode 100644 index 0000000..6c53f3f Binary files /dev/null and b/.yarn/cache/node-pre-gyp-npm-0.12.0-f97c4ce3c64a4b879fd5dd1ef13448967fb8051fe62344daecb73f48f765d8db.zip differ diff --git a/.yarn/cache/node-releases-npm-1.1.17-0bd4976a78d2929e77782f9958ec7a0eae08ad8231debcd27cdaed3f9beb081f.zip b/.yarn/cache/node-releases-npm-1.1.17-0bd4976a78d2929e77782f9958ec7a0eae08ad8231debcd27cdaed3f9beb081f.zip new file mode 100644 index 0000000..89c57de Binary files /dev/null and b/.yarn/cache/node-releases-npm-1.1.17-0bd4976a78d2929e77782f9958ec7a0eae08ad8231debcd27cdaed3f9beb081f.zip differ diff --git a/.yarn/cache/nopt-npm-3.0.6-eda1aad2ea6541991a4ccb9fee4909e930e71fed5595ae2bcf311423a5b72327.zip b/.yarn/cache/nopt-npm-3.0.6-eda1aad2ea6541991a4ccb9fee4909e930e71fed5595ae2bcf311423a5b72327.zip new file mode 100644 index 0000000..95a8e25 Binary files /dev/null and b/.yarn/cache/nopt-npm-3.0.6-eda1aad2ea6541991a4ccb9fee4909e930e71fed5595ae2bcf311423a5b72327.zip differ diff --git a/.yarn/cache/nopt-npm-4.0.1-f86f336a262fe64c91213cebb6b3d299c90c7814d2a73a8657823b94e9a8ef18.zip b/.yarn/cache/nopt-npm-4.0.1-f86f336a262fe64c91213cebb6b3d299c90c7814d2a73a8657823b94e9a8ef18.zip new file mode 100644 index 0000000..81ebf83 Binary files /dev/null and b/.yarn/cache/nopt-npm-4.0.1-f86f336a262fe64c91213cebb6b3d299c90c7814d2a73a8657823b94e9a8ef18.zip differ diff --git a/.yarn/cache/normalize-package-data-npm-2.5.0-551e03e9ab14b0c3fc952cd2fe10a80060c3b9949a06c9ada732a904d0a21761.zip b/.yarn/cache/normalize-package-data-npm-2.5.0-551e03e9ab14b0c3fc952cd2fe10a80060c3b9949a06c9ada732a904d0a21761.zip new file mode 100644 index 0000000..480b5ed Binary files /dev/null and b/.yarn/cache/normalize-package-data-npm-2.5.0-551e03e9ab14b0c3fc952cd2fe10a80060c3b9949a06c9ada732a904d0a21761.zip differ diff --git a/.yarn/cache/normalize-path-npm-2.1.1-e5464124fd3404d7276a7afd09397d980e202e677dd6c82bc324f77cf25fd493.zip b/.yarn/cache/normalize-path-npm-2.1.1-e5464124fd3404d7276a7afd09397d980e202e677dd6c82bc324f77cf25fd493.zip new file mode 100644 index 0000000..c92072b Binary files /dev/null and b/.yarn/cache/normalize-path-npm-2.1.1-e5464124fd3404d7276a7afd09397d980e202e677dd6c82bc324f77cf25fd493.zip differ diff --git a/.yarn/cache/normalize-path-npm-3.0.0-dabcecbeab98e8cb8d6c6eee6685db7f15d90926f6b1f11c94bc333069a8c563.zip b/.yarn/cache/normalize-path-npm-3.0.0-dabcecbeab98e8cb8d6c6eee6685db7f15d90926f6b1f11c94bc333069a8c563.zip new file mode 100644 index 0000000..b26df80 Binary files /dev/null and b/.yarn/cache/normalize-path-npm-3.0.0-dabcecbeab98e8cb8d6c6eee6685db7f15d90926f6b1f11c94bc333069a8c563.zip differ diff --git a/.yarn/cache/now-and-later-npm-2.0.1-e2219d74c772458c4fd21ee7f34b55f9e06d9188635b025d708aecdee8f76485.zip b/.yarn/cache/now-and-later-npm-2.0.1-e2219d74c772458c4fd21ee7f34b55f9e06d9188635b025d708aecdee8f76485.zip new file mode 100644 index 0000000..2730e17 Binary files /dev/null and b/.yarn/cache/now-and-later-npm-2.0.1-e2219d74c772458c4fd21ee7f34b55f9e06d9188635b025d708aecdee8f76485.zip differ diff --git a/.yarn/cache/npm-bundled-npm-1.0.6-e2f9f0ccf036bb84172beb0388a3a2b3f6bd02a903164f7b23fe7d7f4cbcff5b.zip b/.yarn/cache/npm-bundled-npm-1.0.6-e2f9f0ccf036bb84172beb0388a3a2b3f6bd02a903164f7b23fe7d7f4cbcff5b.zip new file mode 100644 index 0000000..742998d Binary files /dev/null and b/.yarn/cache/npm-bundled-npm-1.0.6-e2f9f0ccf036bb84172beb0388a3a2b3f6bd02a903164f7b23fe7d7f4cbcff5b.zip differ diff --git a/.yarn/cache/npm-packlist-npm-1.4.1-eee83f32969c7ea48fa051945757a79475357e34f9946ffcdd2c1d9caa11e8cc.zip b/.yarn/cache/npm-packlist-npm-1.4.1-eee83f32969c7ea48fa051945757a79475357e34f9946ffcdd2c1d9caa11e8cc.zip new file mode 100644 index 0000000..bc435ba Binary files /dev/null and b/.yarn/cache/npm-packlist-npm-1.4.1-eee83f32969c7ea48fa051945757a79475357e34f9946ffcdd2c1d9caa11e8cc.zip differ diff --git a/.yarn/cache/npm-run-path-npm-2.0.2-aeecb688557c406b9155593817640ec7b5de967a3510c06df5164a73e5281200.zip b/.yarn/cache/npm-run-path-npm-2.0.2-aeecb688557c406b9155593817640ec7b5de967a3510c06df5164a73e5281200.zip new file mode 100644 index 0000000..5eb67c3 Binary files /dev/null and b/.yarn/cache/npm-run-path-npm-2.0.2-aeecb688557c406b9155593817640ec7b5de967a3510c06df5164a73e5281200.zip differ diff --git a/.yarn/cache/npmlog-npm-4.1.2-28e9c3aad2b0d4e399faa4a9afbb4bec578e4cfb4e00c23f19bdec31d3601ec3.zip b/.yarn/cache/npmlog-npm-4.1.2-28e9c3aad2b0d4e399faa4a9afbb4bec578e4cfb4e00c23f19bdec31d3601ec3.zip new file mode 100644 index 0000000..47b78af Binary files /dev/null and b/.yarn/cache/npmlog-npm-4.1.2-28e9c3aad2b0d4e399faa4a9afbb4bec578e4cfb4e00c23f19bdec31d3601ec3.zip differ diff --git a/.yarn/cache/nth-check-npm-1.0.2-8a5550d64578c4a4c9a0f7136c7aa5ba50e8d96dde837e3c9514ebcaa07c1076.zip b/.yarn/cache/nth-check-npm-1.0.2-8a5550d64578c4a4c9a0f7136c7aa5ba50e8d96dde837e3c9514ebcaa07c1076.zip new file mode 100644 index 0000000..a789b39 Binary files /dev/null and b/.yarn/cache/nth-check-npm-1.0.2-8a5550d64578c4a4c9a0f7136c7aa5ba50e8d96dde837e3c9514ebcaa07c1076.zip differ diff --git a/.yarn/cache/number-is-nan-npm-1.0.1-3ba47a586ac83a748ba1e3b5de7a47375b72ced0758951af419e327456c368e3.zip b/.yarn/cache/number-is-nan-npm-1.0.1-3ba47a586ac83a748ba1e3b5de7a47375b72ced0758951af419e327456c368e3.zip new file mode 100644 index 0000000..02a2f1c Binary files /dev/null and b/.yarn/cache/number-is-nan-npm-1.0.1-3ba47a586ac83a748ba1e3b5de7a47375b72ced0758951af419e327456c368e3.zip differ diff --git a/.yarn/cache/nwsapi-npm-2.1.3-b1a20b4c265ac2083b86add626d6712e2f5289ab3e692325ebd67ec45c84c065.zip b/.yarn/cache/nwsapi-npm-2.1.3-b1a20b4c265ac2083b86add626d6712e2f5289ab3e692325ebd67ec45c84c065.zip new file mode 100644 index 0000000..68b6013 Binary files /dev/null and b/.yarn/cache/nwsapi-npm-2.1.3-b1a20b4c265ac2083b86add626d6712e2f5289ab3e692325ebd67ec45c84c065.zip differ diff --git a/.yarn/cache/oauth-sign-npm-0.9.0-db3f28cc182e96df10a4747042057e3c2be594d211bbc1bcaafc096567be5b95.zip b/.yarn/cache/oauth-sign-npm-0.9.0-db3f28cc182e96df10a4747042057e3c2be594d211bbc1bcaafc096567be5b95.zip new file mode 100644 index 0000000..e5aa6cf Binary files /dev/null and b/.yarn/cache/oauth-sign-npm-0.9.0-db3f28cc182e96df10a4747042057e3c2be594d211bbc1bcaafc096567be5b95.zip differ diff --git a/.yarn/cache/object-assign-npm-4.1.1-0066fa7e69fb285f50b7ab541c1d3e59727b4267255d2bc3726e9fbfbad9c588.zip b/.yarn/cache/object-assign-npm-4.1.1-0066fa7e69fb285f50b7ab541c1d3e59727b4267255d2bc3726e9fbfbad9c588.zip new file mode 100644 index 0000000..db8fde8 Binary files /dev/null and b/.yarn/cache/object-assign-npm-4.1.1-0066fa7e69fb285f50b7ab541c1d3e59727b4267255d2bc3726e9fbfbad9c588.zip differ diff --git a/.yarn/cache/object-copy-npm-0.1.0-074ff6b41b793474eb26d78041b072562711b7c8167453565739c707dce6500e.zip b/.yarn/cache/object-copy-npm-0.1.0-074ff6b41b793474eb26d78041b072562711b7c8167453565739c707dce6500e.zip new file mode 100644 index 0000000..b372aef Binary files /dev/null and b/.yarn/cache/object-copy-npm-0.1.0-074ff6b41b793474eb26d78041b072562711b7c8167453565739c707dce6500e.zip differ diff --git a/.yarn/cache/object-keys-npm-1.1.1-9ddca4865d7b41388938a4cb43bf58c73c0e48c2cc8920413b1c9e61eeb29489.zip b/.yarn/cache/object-keys-npm-1.1.1-9ddca4865d7b41388938a4cb43bf58c73c0e48c2cc8920413b1c9e61eeb29489.zip new file mode 100644 index 0000000..87c6e44 Binary files /dev/null and b/.yarn/cache/object-keys-npm-1.1.1-9ddca4865d7b41388938a4cb43bf58c73c0e48c2cc8920413b1c9e61eeb29489.zip differ diff --git a/.yarn/cache/object-visit-npm-1.0.1-656b97aa08aa29301eb869c7a04f0703a6821cd519bc3dba6a70e954a43887e1.zip b/.yarn/cache/object-visit-npm-1.0.1-656b97aa08aa29301eb869c7a04f0703a6821cd519bc3dba6a70e954a43887e1.zip new file mode 100644 index 0000000..f82a039 Binary files /dev/null and b/.yarn/cache/object-visit-npm-1.0.1-656b97aa08aa29301eb869c7a04f0703a6821cd519bc3dba6a70e954a43887e1.zip differ diff --git a/.yarn/cache/object.assign-npm-4.1.0-37fc64e3c21a60de4dbac94b4c7078fc83f89469ee7cf0658b5f2aa0d5be5304.zip b/.yarn/cache/object.assign-npm-4.1.0-37fc64e3c21a60de4dbac94b4c7078fc83f89469ee7cf0658b5f2aa0d5be5304.zip new file mode 100644 index 0000000..c4bc847 Binary files /dev/null and b/.yarn/cache/object.assign-npm-4.1.0-37fc64e3c21a60de4dbac94b4c7078fc83f89469ee7cf0658b5f2aa0d5be5304.zip differ diff --git a/.yarn/cache/object.defaults-npm-1.1.0-920d9f2782e4dc4584a262650284a7080d3e9961c814b89edc559adca5003abc.zip b/.yarn/cache/object.defaults-npm-1.1.0-920d9f2782e4dc4584a262650284a7080d3e9961c814b89edc559adca5003abc.zip new file mode 100644 index 0000000..ab3d5e8 Binary files /dev/null and b/.yarn/cache/object.defaults-npm-1.1.0-920d9f2782e4dc4584a262650284a7080d3e9961c814b89edc559adca5003abc.zip differ diff --git a/.yarn/cache/object.fromentries-npm-2.0.0-9e3926af927331cca138a1e94d6f0a035f591dbf612826d44c44db4f94c45934.zip b/.yarn/cache/object.fromentries-npm-2.0.0-9e3926af927331cca138a1e94d6f0a035f591dbf612826d44c44db4f94c45934.zip new file mode 100644 index 0000000..77f8119 Binary files /dev/null and b/.yarn/cache/object.fromentries-npm-2.0.0-9e3926af927331cca138a1e94d6f0a035f591dbf612826d44c44db4f94c45934.zip differ diff --git a/.yarn/cache/object.getownpropertydescriptors-npm-2.0.3-ead1513a5f1360fec7ec4e8e08c783ce7f4a0a665b22e9a452d1b80528480e8d.zip b/.yarn/cache/object.getownpropertydescriptors-npm-2.0.3-ead1513a5f1360fec7ec4e8e08c783ce7f4a0a665b22e9a452d1b80528480e8d.zip new file mode 100644 index 0000000..392169e Binary files /dev/null and b/.yarn/cache/object.getownpropertydescriptors-npm-2.0.3-ead1513a5f1360fec7ec4e8e08c783ce7f4a0a665b22e9a452d1b80528480e8d.zip differ diff --git a/.yarn/cache/object.map-npm-1.0.1-d47b116e1bcf5bfb0481927111592f66b305559e0d820df13a762aac8c2d8fd8.zip b/.yarn/cache/object.map-npm-1.0.1-d47b116e1bcf5bfb0481927111592f66b305559e0d820df13a762aac8c2d8fd8.zip new file mode 100644 index 0000000..afe1ca5 Binary files /dev/null and b/.yarn/cache/object.map-npm-1.0.1-d47b116e1bcf5bfb0481927111592f66b305559e0d820df13a762aac8c2d8fd8.zip differ diff --git a/.yarn/cache/object.pick-npm-1.3.0-4df4152692227130cf0b1146dc9933c8aebea1bab71c0827ecb0deff3b88f4e3.zip b/.yarn/cache/object.pick-npm-1.3.0-4df4152692227130cf0b1146dc9933c8aebea1bab71c0827ecb0deff3b88f4e3.zip new file mode 100644 index 0000000..ba94ca2 Binary files /dev/null and b/.yarn/cache/object.pick-npm-1.3.0-4df4152692227130cf0b1146dc9933c8aebea1bab71c0827ecb0deff3b88f4e3.zip differ diff --git a/.yarn/cache/object.reduce-npm-1.0.1-5ece08b12e029b7cf421929eb6e128e2b0affe2115703db6308cf7597316a4da.zip b/.yarn/cache/object.reduce-npm-1.0.1-5ece08b12e029b7cf421929eb6e128e2b0affe2115703db6308cf7597316a4da.zip new file mode 100644 index 0000000..2c8cbda Binary files /dev/null and b/.yarn/cache/object.reduce-npm-1.0.1-5ece08b12e029b7cf421929eb6e128e2b0affe2115703db6308cf7597316a4da.zip differ diff --git a/.yarn/cache/on-finished-npm-2.3.0-ec20b4f05a4dffecf446d9f40eb4ca652b3caf06c579e02cbffd9e75cec31a4a.zip b/.yarn/cache/on-finished-npm-2.3.0-ec20b4f05a4dffecf446d9f40eb4ca652b3caf06c579e02cbffd9e75cec31a4a.zip new file mode 100644 index 0000000..a49393e Binary files /dev/null and b/.yarn/cache/on-finished-npm-2.3.0-ec20b4f05a4dffecf446d9f40eb4ca652b3caf06c579e02cbffd9e75cec31a4a.zip differ diff --git a/.yarn/cache/once-npm-1.4.0-794c410b486c706adf6c937bf0a6db162870004d99476cf289937ad8daad7f00.zip b/.yarn/cache/once-npm-1.4.0-794c410b486c706adf6c937bf0a6db162870004d99476cf289937ad8daad7f00.zip new file mode 100644 index 0000000..f05c85d Binary files /dev/null and b/.yarn/cache/once-npm-1.4.0-794c410b486c706adf6c937bf0a6db162870004d99476cf289937ad8daad7f00.zip differ diff --git a/.yarn/cache/onetime-npm-2.0.1-5a9f8a36392ee2eb3016c1265eb9df7d0cb293bb11a330bc5e3944a025048a1d.zip b/.yarn/cache/onetime-npm-2.0.1-5a9f8a36392ee2eb3016c1265eb9df7d0cb293bb11a330bc5e3944a025048a1d.zip new file mode 100644 index 0000000..5ed7220 Binary files /dev/null and b/.yarn/cache/onetime-npm-2.0.1-5a9f8a36392ee2eb3016c1265eb9df7d0cb293bb11a330bc5e3944a025048a1d.zip differ diff --git a/.yarn/cache/opener-npm-1.4.3-ff2266ad1ebab64c8411f91c82e36256f19645e5fa810291dad9fe9b6d156338.zip b/.yarn/cache/opener-npm-1.4.3-ff2266ad1ebab64c8411f91c82e36256f19645e5fa810291dad9fe9b6d156338.zip new file mode 100644 index 0000000..f9173c5 Binary files /dev/null and b/.yarn/cache/opener-npm-1.4.3-ff2266ad1ebab64c8411f91c82e36256f19645e5fa810291dad9fe9b6d156338.zip differ diff --git a/.yarn/cache/opener-npm-1.5.1-37a003a311e45613ab23fba740b2975d064a54b5ba0fe47978df5f755263760b.zip b/.yarn/cache/opener-npm-1.5.1-37a003a311e45613ab23fba740b2975d064a54b5ba0fe47978df5f755263760b.zip new file mode 100644 index 0000000..19b728a Binary files /dev/null and b/.yarn/cache/opener-npm-1.5.1-37a003a311e45613ab23fba740b2975d064a54b5ba0fe47978df5f755263760b.zip differ diff --git a/.yarn/cache/optimist-npm-0.6.1-44e4ca2a072080e4c5e003e72e9f7b20a34150bed249643c02f36b52c526ab00.zip b/.yarn/cache/optimist-npm-0.6.1-44e4ca2a072080e4c5e003e72e9f7b20a34150bed249643c02f36b52c526ab00.zip new file mode 100644 index 0000000..4dbdb1b Binary files /dev/null and b/.yarn/cache/optimist-npm-0.6.1-44e4ca2a072080e4c5e003e72e9f7b20a34150bed249643c02f36b52c526ab00.zip differ diff --git a/.yarn/cache/optionator-npm-0.8.2-aa40b8914a89fd1c057db463b2cd6f683a1e9b6f675ae5672c9a10b846658d08.zip b/.yarn/cache/optionator-npm-0.8.2-aa40b8914a89fd1c057db463b2cd6f683a1e9b6f675ae5672c9a10b846658d08.zip new file mode 100644 index 0000000..5b9498d Binary files /dev/null and b/.yarn/cache/optionator-npm-0.8.2-aa40b8914a89fd1c057db463b2cd6f683a1e9b6f675ae5672c9a10b846658d08.zip differ diff --git a/.yarn/cache/ordered-read-streams-npm-1.0.1-293fbfb0d9759e8462e07a57caa129bccd75eebde4d071b9a1d2714e3ec4d96d.zip b/.yarn/cache/ordered-read-streams-npm-1.0.1-293fbfb0d9759e8462e07a57caa129bccd75eebde4d071b9a1d2714e3ec4d96d.zip new file mode 100644 index 0000000..31772d4 Binary files /dev/null and b/.yarn/cache/ordered-read-streams-npm-1.0.1-293fbfb0d9759e8462e07a57caa129bccd75eebde4d071b9a1d2714e3ec4d96d.zip differ diff --git a/.yarn/cache/os-browserify-npm-0.3.0-f8cf0021f4b03218e6bef9f880c5acbec1a8ebdb7344a94b164851c10ac30e2e.zip b/.yarn/cache/os-browserify-npm-0.3.0-f8cf0021f4b03218e6bef9f880c5acbec1a8ebdb7344a94b164851c10ac30e2e.zip new file mode 100644 index 0000000..7ba9feb Binary files /dev/null and b/.yarn/cache/os-browserify-npm-0.3.0-f8cf0021f4b03218e6bef9f880c5acbec1a8ebdb7344a94b164851c10ac30e2e.zip differ diff --git a/.yarn/cache/os-homedir-npm-1.0.2-8eb31c9b0ff2df21002291a5e4b19a15180491b4d17061d482c22fb103f13533.zip b/.yarn/cache/os-homedir-npm-1.0.2-8eb31c9b0ff2df21002291a5e4b19a15180491b4d17061d482c22fb103f13533.zip new file mode 100644 index 0000000..89e5f24 Binary files /dev/null and b/.yarn/cache/os-homedir-npm-1.0.2-8eb31c9b0ff2df21002291a5e4b19a15180491b4d17061d482c22fb103f13533.zip differ diff --git a/.yarn/cache/os-locale-npm-1.4.0-ea5bb9a8650d101d4ec6703fd61f6d9a92075e2fdfce0cb0ae562aaddb213806.zip b/.yarn/cache/os-locale-npm-1.4.0-ea5bb9a8650d101d4ec6703fd61f6d9a92075e2fdfce0cb0ae562aaddb213806.zip new file mode 100644 index 0000000..933a490 Binary files /dev/null and b/.yarn/cache/os-locale-npm-1.4.0-ea5bb9a8650d101d4ec6703fd61f6d9a92075e2fdfce0cb0ae562aaddb213806.zip differ diff --git a/.yarn/cache/os-locale-npm-3.1.0-cb10cb680ef75483b63d92c709757b309843788ed36ec5c24aaa3fbe8f271359.zip b/.yarn/cache/os-locale-npm-3.1.0-cb10cb680ef75483b63d92c709757b309843788ed36ec5c24aaa3fbe8f271359.zip new file mode 100644 index 0000000..b50f086 Binary files /dev/null and b/.yarn/cache/os-locale-npm-3.1.0-cb10cb680ef75483b63d92c709757b309843788ed36ec5c24aaa3fbe8f271359.zip differ diff --git a/.yarn/cache/os-tmpdir-npm-1.0.2-491d16f1b12617d1d1fa4ba13ebe44af4f281e5295d7e5addbe3a0bddefabe82.zip b/.yarn/cache/os-tmpdir-npm-1.0.2-491d16f1b12617d1d1fa4ba13ebe44af4f281e5295d7e5addbe3a0bddefabe82.zip new file mode 100644 index 0000000..92da186 Binary files /dev/null and b/.yarn/cache/os-tmpdir-npm-1.0.2-491d16f1b12617d1d1fa4ba13ebe44af4f281e5295d7e5addbe3a0bddefabe82.zip differ diff --git a/.yarn/cache/osenv-npm-0.1.5-49470eab425272a0eae2cdcfade2a3bd6e5fd9a56def52f6489564ba683682f5.zip b/.yarn/cache/osenv-npm-0.1.5-49470eab425272a0eae2cdcfade2a3bd6e5fd9a56def52f6489564ba683682f5.zip new file mode 100644 index 0000000..658948c Binary files /dev/null and b/.yarn/cache/osenv-npm-0.1.5-49470eab425272a0eae2cdcfade2a3bd6e5fd9a56def52f6489564ba683682f5.zip differ diff --git a/.yarn/cache/p-defer-npm-1.0.0-59afd96275a196d6b7290172256317bfb386fe1b8e8f0878e87bc9172bc1cc86.zip b/.yarn/cache/p-defer-npm-1.0.0-59afd96275a196d6b7290172256317bfb386fe1b8e8f0878e87bc9172bc1cc86.zip new file mode 100644 index 0000000..0a68bdc Binary files /dev/null and b/.yarn/cache/p-defer-npm-1.0.0-59afd96275a196d6b7290172256317bfb386fe1b8e8f0878e87bc9172bc1cc86.zip differ diff --git a/.yarn/cache/p-each-series-npm-1.0.0-d2625cad46988de1837a48a009de2da3ae6b7efcfd4fc01ba7ef0f587278a4f6.zip b/.yarn/cache/p-each-series-npm-1.0.0-d2625cad46988de1837a48a009de2da3ae6b7efcfd4fc01ba7ef0f587278a4f6.zip new file mode 100644 index 0000000..4ef633f Binary files /dev/null and b/.yarn/cache/p-each-series-npm-1.0.0-d2625cad46988de1837a48a009de2da3ae6b7efcfd4fc01ba7ef0f587278a4f6.zip differ diff --git a/.yarn/cache/p-finally-npm-1.0.0-52394022f0eea558d6a4af2b3f41691b2990249d51504eb6ec8f20a41794aacf.zip b/.yarn/cache/p-finally-npm-1.0.0-52394022f0eea558d6a4af2b3f41691b2990249d51504eb6ec8f20a41794aacf.zip new file mode 100644 index 0000000..1cd54c6 Binary files /dev/null and b/.yarn/cache/p-finally-npm-1.0.0-52394022f0eea558d6a4af2b3f41691b2990249d51504eb6ec8f20a41794aacf.zip differ diff --git a/.yarn/cache/p-is-promise-npm-2.1.0-1955ebfc8fae05d5b528f4dd15440cd400cb1bbd5c8d7cf1288b31fd5ee5582e.zip b/.yarn/cache/p-is-promise-npm-2.1.0-1955ebfc8fae05d5b528f4dd15440cd400cb1bbd5c8d7cf1288b31fd5ee5582e.zip new file mode 100644 index 0000000..9c01aee Binary files /dev/null and b/.yarn/cache/p-is-promise-npm-2.1.0-1955ebfc8fae05d5b528f4dd15440cd400cb1bbd5c8d7cf1288b31fd5ee5582e.zip differ diff --git a/.yarn/cache/p-limit-npm-1.3.0-550226d704e4a62028cc8e20b5a6c021a0be894ca34599f3fd9edf7079591c46.zip b/.yarn/cache/p-limit-npm-1.3.0-550226d704e4a62028cc8e20b5a6c021a0be894ca34599f3fd9edf7079591c46.zip new file mode 100644 index 0000000..66ec28d Binary files /dev/null and b/.yarn/cache/p-limit-npm-1.3.0-550226d704e4a62028cc8e20b5a6c021a0be894ca34599f3fd9edf7079591c46.zip differ diff --git a/.yarn/cache/p-limit-npm-2.2.0-4eb6e0565ae6803603ad40f299814555c12ffc13edd381d67ee926f1e7b1b38a.zip b/.yarn/cache/p-limit-npm-2.2.0-4eb6e0565ae6803603ad40f299814555c12ffc13edd381d67ee926f1e7b1b38a.zip new file mode 100644 index 0000000..ab6d304 Binary files /dev/null and b/.yarn/cache/p-limit-npm-2.2.0-4eb6e0565ae6803603ad40f299814555c12ffc13edd381d67ee926f1e7b1b38a.zip differ diff --git a/.yarn/cache/p-locate-npm-2.0.0-67510df6873a68a64f47009bed04f43ff71dbf711bb548e116fc82525ad6e4f7.zip b/.yarn/cache/p-locate-npm-2.0.0-67510df6873a68a64f47009bed04f43ff71dbf711bb548e116fc82525ad6e4f7.zip new file mode 100644 index 0000000..b7bcba2 Binary files /dev/null and b/.yarn/cache/p-locate-npm-2.0.0-67510df6873a68a64f47009bed04f43ff71dbf711bb548e116fc82525ad6e4f7.zip differ diff --git a/.yarn/cache/p-locate-npm-3.0.0-2e5734fb0e93b06d7fe8c3ac66214a8f7e92043c69cc86da332da4fa60a3a38f.zip b/.yarn/cache/p-locate-npm-3.0.0-2e5734fb0e93b06d7fe8c3ac66214a8f7e92043c69cc86da332da4fa60a3a38f.zip new file mode 100644 index 0000000..4a7fec2 Binary files /dev/null and b/.yarn/cache/p-locate-npm-3.0.0-2e5734fb0e93b06d7fe8c3ac66214a8f7e92043c69cc86da332da4fa60a3a38f.zip differ diff --git a/.yarn/cache/p-reduce-npm-1.0.0-bcb128c2d5fdc8c50986df48b7720860dc20c7da564d244fec37c7c9f484d47f.zip b/.yarn/cache/p-reduce-npm-1.0.0-bcb128c2d5fdc8c50986df48b7720860dc20c7da564d244fec37c7c9f484d47f.zip new file mode 100644 index 0000000..75d28c3 Binary files /dev/null and b/.yarn/cache/p-reduce-npm-1.0.0-bcb128c2d5fdc8c50986df48b7720860dc20c7da564d244fec37c7c9f484d47f.zip differ diff --git a/.yarn/cache/p-try-npm-1.0.0-39bcf75320966549d22f2efbe1f3f1f389e53ba57c30f7217e146e16269ed755.zip b/.yarn/cache/p-try-npm-1.0.0-39bcf75320966549d22f2efbe1f3f1f389e53ba57c30f7217e146e16269ed755.zip new file mode 100644 index 0000000..fd14326 Binary files /dev/null and b/.yarn/cache/p-try-npm-1.0.0-39bcf75320966549d22f2efbe1f3f1f389e53ba57c30f7217e146e16269ed755.zip differ diff --git a/.yarn/cache/p-try-npm-2.2.0-6616c024baff7b00d677617bce5ac0f5b264f08a3107884338b7e0e2291eab1d.zip b/.yarn/cache/p-try-npm-2.2.0-6616c024baff7b00d677617bce5ac0f5b264f08a3107884338b7e0e2291eab1d.zip new file mode 100644 index 0000000..87938ad Binary files /dev/null and b/.yarn/cache/p-try-npm-2.2.0-6616c024baff7b00d677617bce5ac0f5b264f08a3107884338b7e0e2291eab1d.zip differ diff --git a/.yarn/cache/pako-npm-1.0.10-e9b21c1ed1fb12fa63b98235034e507a491a2880c36ed54b6578426cd342bda9.zip b/.yarn/cache/pako-npm-1.0.10-e9b21c1ed1fb12fa63b98235034e507a491a2880c36ed54b6578426cd342bda9.zip new file mode 100644 index 0000000..bdfaf49 Binary files /dev/null and b/.yarn/cache/pako-npm-1.0.10-e9b21c1ed1fb12fa63b98235034e507a491a2880c36ed54b6578426cd342bda9.zip differ diff --git a/.yarn/cache/parallel-transform-npm-1.1.0-91716a3cffba093212ecedfc137a1665a950834e5f4c899956f632bd365f958f.zip b/.yarn/cache/parallel-transform-npm-1.1.0-91716a3cffba093212ecedfc137a1665a950834e5f4c899956f632bd365f958f.zip new file mode 100644 index 0000000..b5ab739 Binary files /dev/null and b/.yarn/cache/parallel-transform-npm-1.1.0-91716a3cffba093212ecedfc137a1665a950834e5f4c899956f632bd365f958f.zip differ diff --git a/.yarn/cache/param-case-npm-2.1.1-3773074ce0f4b6354c56402b14b522e4da79b1c92c47b4aaebb8cefdbe834810.zip b/.yarn/cache/param-case-npm-2.1.1-3773074ce0f4b6354c56402b14b522e4da79b1c92c47b4aaebb8cefdbe834810.zip new file mode 100644 index 0000000..1a9709a Binary files /dev/null and b/.yarn/cache/param-case-npm-2.1.1-3773074ce0f4b6354c56402b14b522e4da79b1c92c47b4aaebb8cefdbe834810.zip differ diff --git a/.yarn/cache/parent-module-npm-1.0.1-61f323e6df96d65e671c2cb5cb7354d21c5b9085e9fc51353856a6af8e314ada.zip b/.yarn/cache/parent-module-npm-1.0.1-61f323e6df96d65e671c2cb5cb7354d21c5b9085e9fc51353856a6af8e314ada.zip new file mode 100644 index 0000000..b0fe45d Binary files /dev/null and b/.yarn/cache/parent-module-npm-1.0.1-61f323e6df96d65e671c2cb5cb7354d21c5b9085e9fc51353856a6af8e314ada.zip differ diff --git a/.yarn/cache/parse-asn1-npm-5.1.4-17e2e42e5772391bfd285c325dda34b9c9f5f74c2a2c6c1b83bb19335b6b685e.zip b/.yarn/cache/parse-asn1-npm-5.1.4-17e2e42e5772391bfd285c325dda34b9c9f5f74c2a2c6c1b83bb19335b6b685e.zip new file mode 100644 index 0000000..29ce6c1 Binary files /dev/null and b/.yarn/cache/parse-asn1-npm-5.1.4-17e2e42e5772391bfd285c325dda34b9c9f5f74c2a2c6c1b83bb19335b6b685e.zip differ diff --git a/.yarn/cache/parse-filepath-npm-1.0.2-8e7467c806d6209cb0f46987276d3efb53f0a0b75118ff89cca5ebd07266f423.zip b/.yarn/cache/parse-filepath-npm-1.0.2-8e7467c806d6209cb0f46987276d3efb53f0a0b75118ff89cca5ebd07266f423.zip new file mode 100644 index 0000000..8f05295 Binary files /dev/null and b/.yarn/cache/parse-filepath-npm-1.0.2-8e7467c806d6209cb0f46987276d3efb53f0a0b75118ff89cca5ebd07266f423.zip differ diff --git a/.yarn/cache/parse-json-npm-2.2.0-d8b732b51dfffb8abfe5c3ab6d6a7654ce11e8d3cf4936ba9cf83fd59d45fe47.zip b/.yarn/cache/parse-json-npm-2.2.0-d8b732b51dfffb8abfe5c3ab6d6a7654ce11e8d3cf4936ba9cf83fd59d45fe47.zip new file mode 100644 index 0000000..7000dd0 Binary files /dev/null and b/.yarn/cache/parse-json-npm-2.2.0-d8b732b51dfffb8abfe5c3ab6d6a7654ce11e8d3cf4936ba9cf83fd59d45fe47.zip differ diff --git a/.yarn/cache/parse-json-npm-4.0.0-b9291ad1286f15bc165bec1af5f2550170bb5c4be0d5756a5314e874a40dc11e.zip b/.yarn/cache/parse-json-npm-4.0.0-b9291ad1286f15bc165bec1af5f2550170bb5c4be0d5756a5314e874a40dc11e.zip new file mode 100644 index 0000000..e4662b3 Binary files /dev/null and b/.yarn/cache/parse-json-npm-4.0.0-b9291ad1286f15bc165bec1af5f2550170bb5c4be0d5756a5314e874a40dc11e.zip differ diff --git a/.yarn/cache/parse-node-version-npm-1.0.1-e049ce43ec19d452366f81f1e25c8afc57dd8998da3e37bdcbe3fff68dd63416.zip b/.yarn/cache/parse-node-version-npm-1.0.1-e049ce43ec19d452366f81f1e25c8afc57dd8998da3e37bdcbe3fff68dd63416.zip new file mode 100644 index 0000000..595165d Binary files /dev/null and b/.yarn/cache/parse-node-version-npm-1.0.1-e049ce43ec19d452366f81f1e25c8afc57dd8998da3e37bdcbe3fff68dd63416.zip differ diff --git a/.yarn/cache/parse-passwd-npm-1.0.0-1c9321928ef57a90982dc0497c7c0e192ea0236fcbbbf80b2f2c2cf3d65499e1.zip b/.yarn/cache/parse-passwd-npm-1.0.0-1c9321928ef57a90982dc0497c7c0e192ea0236fcbbbf80b2f2c2cf3d65499e1.zip new file mode 100644 index 0000000..77912bd Binary files /dev/null and b/.yarn/cache/parse-passwd-npm-1.0.0-1c9321928ef57a90982dc0497c7c0e192ea0236fcbbbf80b2f2c2cf3d65499e1.zip differ diff --git a/.yarn/cache/parse5-npm-4.0.0-278d97711992b5299219e6c52cea46f530baa10cb09e17a13167c102ce6d3ab2.zip b/.yarn/cache/parse5-npm-4.0.0-278d97711992b5299219e6c52cea46f530baa10cb09e17a13167c102ce6d3ab2.zip new file mode 100644 index 0000000..0dcbf71 Binary files /dev/null and b/.yarn/cache/parse5-npm-4.0.0-278d97711992b5299219e6c52cea46f530baa10cb09e17a13167c102ce6d3ab2.zip differ diff --git a/.yarn/cache/parseurl-npm-1.3.3-14b33ab618d9c49aa11294c264e64096fa2f0aedec1cd46b55c566ef490376b5.zip b/.yarn/cache/parseurl-npm-1.3.3-14b33ab618d9c49aa11294c264e64096fa2f0aedec1cd46b55c566ef490376b5.zip new file mode 100644 index 0000000..dc42064 Binary files /dev/null and b/.yarn/cache/parseurl-npm-1.3.3-14b33ab618d9c49aa11294c264e64096fa2f0aedec1cd46b55c566ef490376b5.zip differ diff --git a/.yarn/cache/pascalcase-npm-0.1.1-d9a561227adaab9dc2927c72d6cf953a0bb4be33b769a9e7810651f4e22c8791.zip b/.yarn/cache/pascalcase-npm-0.1.1-d9a561227adaab9dc2927c72d6cf953a0bb4be33b769a9e7810651f4e22c8791.zip new file mode 100644 index 0000000..a68d29f Binary files /dev/null and b/.yarn/cache/pascalcase-npm-0.1.1-d9a561227adaab9dc2927c72d6cf953a0bb4be33b769a9e7810651f4e22c8791.zip differ diff --git a/.yarn/cache/path-browserify-npm-0.0.0-657662bf0a325d9341c8d97cc299299a29cd074453fed1f69d037edac4792de4.zip b/.yarn/cache/path-browserify-npm-0.0.0-657662bf0a325d9341c8d97cc299299a29cd074453fed1f69d037edac4792de4.zip new file mode 100644 index 0000000..08d0a8e Binary files /dev/null and b/.yarn/cache/path-browserify-npm-0.0.0-657662bf0a325d9341c8d97cc299299a29cd074453fed1f69d037edac4792de4.zip differ diff --git a/.yarn/cache/path-dirname-npm-1.0.2-f768e50c39b8dcca945f075ade118158fd46518cba392ae1a6c6338ea2cb0bc9.zip b/.yarn/cache/path-dirname-npm-1.0.2-f768e50c39b8dcca945f075ade118158fd46518cba392ae1a6c6338ea2cb0bc9.zip new file mode 100644 index 0000000..77a0667 Binary files /dev/null and b/.yarn/cache/path-dirname-npm-1.0.2-f768e50c39b8dcca945f075ade118158fd46518cba392ae1a6c6338ea2cb0bc9.zip differ diff --git a/.yarn/cache/path-exists-npm-2.1.0-4f4b3a17966a310c222f71f79bd4c21d775b0d77718b73dda90a8c25fe4f054c.zip b/.yarn/cache/path-exists-npm-2.1.0-4f4b3a17966a310c222f71f79bd4c21d775b0d77718b73dda90a8c25fe4f054c.zip new file mode 100644 index 0000000..a0b2ee5 Binary files /dev/null and b/.yarn/cache/path-exists-npm-2.1.0-4f4b3a17966a310c222f71f79bd4c21d775b0d77718b73dda90a8c25fe4f054c.zip differ diff --git a/.yarn/cache/path-exists-npm-3.0.0-011a64e18ad7150064570b6f2c9d2ad10fbb71a9dd16ec13468415a565ed0a2b.zip b/.yarn/cache/path-exists-npm-3.0.0-011a64e18ad7150064570b6f2c9d2ad10fbb71a9dd16ec13468415a565ed0a2b.zip new file mode 100644 index 0000000..04e5983 Binary files /dev/null and b/.yarn/cache/path-exists-npm-3.0.0-011a64e18ad7150064570b6f2c9d2ad10fbb71a9dd16ec13468415a565ed0a2b.zip differ diff --git a/.yarn/cache/path-is-absolute-npm-1.0.1-f8d2b1d193d42295a65c43c7a41f1b66c4b5c9f84218f5130f539af70d92c056.zip b/.yarn/cache/path-is-absolute-npm-1.0.1-f8d2b1d193d42295a65c43c7a41f1b66c4b5c9f84218f5130f539af70d92c056.zip new file mode 100644 index 0000000..0ca8eed Binary files /dev/null and b/.yarn/cache/path-is-absolute-npm-1.0.1-f8d2b1d193d42295a65c43c7a41f1b66c4b5c9f84218f5130f539af70d92c056.zip differ diff --git a/.yarn/cache/path-is-inside-npm-1.0.2-e5705424b379086429c351a899679e2ecf475e14e9f575e2332560e096991717.zip b/.yarn/cache/path-is-inside-npm-1.0.2-e5705424b379086429c351a899679e2ecf475e14e9f575e2332560e096991717.zip new file mode 100644 index 0000000..bf6cf8d Binary files /dev/null and b/.yarn/cache/path-is-inside-npm-1.0.2-e5705424b379086429c351a899679e2ecf475e14e9f575e2332560e096991717.zip differ diff --git a/.yarn/cache/path-key-npm-2.0.1-0b0b7cf0ee845648a109f2d5fec82c7806338f606ace6b037af486b988f18d0f.zip b/.yarn/cache/path-key-npm-2.0.1-0b0b7cf0ee845648a109f2d5fec82c7806338f606ace6b037af486b988f18d0f.zip new file mode 100644 index 0000000..c17fb77 Binary files /dev/null and b/.yarn/cache/path-key-npm-2.0.1-0b0b7cf0ee845648a109f2d5fec82c7806338f606ace6b037af486b988f18d0f.zip differ diff --git a/.yarn/cache/path-parse-npm-1.0.6-323234ec90792a36545d627dd7186aba626a879342032b3f104b04ea72f090b0.zip b/.yarn/cache/path-parse-npm-1.0.6-323234ec90792a36545d627dd7186aba626a879342032b3f104b04ea72f090b0.zip new file mode 100644 index 0000000..5bef043 Binary files /dev/null and b/.yarn/cache/path-parse-npm-1.0.6-323234ec90792a36545d627dd7186aba626a879342032b3f104b04ea72f090b0.zip differ diff --git a/.yarn/cache/path-root-npm-0.1.1-80cc8db3d6339883a82b754225ba1cae177fcdab76f0ccc0e759143059c9ecad.zip b/.yarn/cache/path-root-npm-0.1.1-80cc8db3d6339883a82b754225ba1cae177fcdab76f0ccc0e759143059c9ecad.zip new file mode 100644 index 0000000..73dcbb0 Binary files /dev/null and b/.yarn/cache/path-root-npm-0.1.1-80cc8db3d6339883a82b754225ba1cae177fcdab76f0ccc0e759143059c9ecad.zip differ diff --git a/.yarn/cache/path-root-regex-npm-0.1.2-9ec99f4267b32508a74c60b6d8105fbae34a25653803b99afd9c4b60f59215e4.zip b/.yarn/cache/path-root-regex-npm-0.1.2-9ec99f4267b32508a74c60b6d8105fbae34a25653803b99afd9c4b60f59215e4.zip new file mode 100644 index 0000000..3dae3a3 Binary files /dev/null and b/.yarn/cache/path-root-regex-npm-0.1.2-9ec99f4267b32508a74c60b6d8105fbae34a25653803b99afd9c4b60f59215e4.zip differ diff --git a/.yarn/cache/path-to-regexp-npm-0.1.7-1a40d7d0782b8fa0b41073a4d19970685a7096e6d79fe4e5896b38d47e381103.zip b/.yarn/cache/path-to-regexp-npm-0.1.7-1a40d7d0782b8fa0b41073a4d19970685a7096e6d79fe4e5896b38d47e381103.zip new file mode 100644 index 0000000..68909a4 Binary files /dev/null and b/.yarn/cache/path-to-regexp-npm-0.1.7-1a40d7d0782b8fa0b41073a4d19970685a7096e6d79fe4e5896b38d47e381103.zip differ diff --git a/.yarn/cache/path-type-npm-1.1.0-7ce1091a4337bae28b9ab75855f5fdf8a954583e76e5fd3b7d3eab6d47041b4b.zip b/.yarn/cache/path-type-npm-1.1.0-7ce1091a4337bae28b9ab75855f5fdf8a954583e76e5fd3b7d3eab6d47041b4b.zip new file mode 100644 index 0000000..015b0ec Binary files /dev/null and b/.yarn/cache/path-type-npm-1.1.0-7ce1091a4337bae28b9ab75855f5fdf8a954583e76e5fd3b7d3eab6d47041b4b.zip differ diff --git a/.yarn/cache/path-type-npm-2.0.0-9bc7355eb710589261bc5764582056ea96056d9becfb4c58b61d9d9d8ffb03a7.zip b/.yarn/cache/path-type-npm-2.0.0-9bc7355eb710589261bc5764582056ea96056d9becfb4c58b61d9d9d8ffb03a7.zip new file mode 100644 index 0000000..517b15b Binary files /dev/null and b/.yarn/cache/path-type-npm-2.0.0-9bc7355eb710589261bc5764582056ea96056d9becfb4c58b61d9d9d8ffb03a7.zip differ diff --git a/.yarn/cache/path-type-npm-3.0.0-7d1673dbb68e5a3252edfb47bfc0df505ed9c91301b905f7ef38880c323e303f.zip b/.yarn/cache/path-type-npm-3.0.0-7d1673dbb68e5a3252edfb47bfc0df505ed9c91301b905f7ef38880c323e303f.zip new file mode 100644 index 0000000..e3c2564 Binary files /dev/null and b/.yarn/cache/path-type-npm-3.0.0-7d1673dbb68e5a3252edfb47bfc0df505ed9c91301b905f7ef38880c323e303f.zip differ diff --git a/.yarn/cache/pbkdf2-npm-3.0.17-04a2b65e263b0b4ad47a49a532a8a25622e5ee1840a688cd41a5fb750da27436.zip b/.yarn/cache/pbkdf2-npm-3.0.17-04a2b65e263b0b4ad47a49a532a8a25622e5ee1840a688cd41a5fb750da27436.zip new file mode 100644 index 0000000..15e2a6f Binary files /dev/null and b/.yarn/cache/pbkdf2-npm-3.0.17-04a2b65e263b0b4ad47a49a532a8a25622e5ee1840a688cd41a5fb750da27436.zip differ diff --git a/.yarn/cache/performance-now-npm-2.1.0-eedf0620f310d1edaa1dd2fdd62fe9ba02713688391923a8ca1a83a3037766b3.zip b/.yarn/cache/performance-now-npm-2.1.0-eedf0620f310d1edaa1dd2fdd62fe9ba02713688391923a8ca1a83a3037766b3.zip new file mode 100644 index 0000000..043cf53 Binary files /dev/null and b/.yarn/cache/performance-now-npm-2.1.0-eedf0620f310d1edaa1dd2fdd62fe9ba02713688391923a8ca1a83a3037766b3.zip differ diff --git a/.yarn/cache/pify-npm-2.3.0-8a76f34bc8fcc31e50ccca41940c2af2605278b1cfa183dca47caf73a98db798.zip b/.yarn/cache/pify-npm-2.3.0-8a76f34bc8fcc31e50ccca41940c2af2605278b1cfa183dca47caf73a98db798.zip new file mode 100644 index 0000000..753d8c5 Binary files /dev/null and b/.yarn/cache/pify-npm-2.3.0-8a76f34bc8fcc31e50ccca41940c2af2605278b1cfa183dca47caf73a98db798.zip differ diff --git a/.yarn/cache/pify-npm-3.0.0-0e1369ba1d8add4bd80a946df45b8c29d67bc132c49294b9d4fd2bbcdd515a95.zip b/.yarn/cache/pify-npm-3.0.0-0e1369ba1d8add4bd80a946df45b8c29d67bc132c49294b9d4fd2bbcdd515a95.zip new file mode 100644 index 0000000..416095c Binary files /dev/null and b/.yarn/cache/pify-npm-3.0.0-0e1369ba1d8add4bd80a946df45b8c29d67bc132c49294b9d4fd2bbcdd515a95.zip differ diff --git a/.yarn/cache/pify-npm-4.0.1-abbe8a6e2805f3452e6cf773791e6b056b0389852994ba0309026597f917356f.zip b/.yarn/cache/pify-npm-4.0.1-abbe8a6e2805f3452e6cf773791e6b056b0389852994ba0309026597f917356f.zip new file mode 100644 index 0000000..279032d Binary files /dev/null and b/.yarn/cache/pify-npm-4.0.1-abbe8a6e2805f3452e6cf773791e6b056b0389852994ba0309026597f917356f.zip differ diff --git a/.yarn/cache/pinkie-npm-2.0.4-7a0ba77113d96322872a2b8081e4d3123d0cfb39b4dbdfdfaae9925f2ad85826.zip b/.yarn/cache/pinkie-npm-2.0.4-7a0ba77113d96322872a2b8081e4d3123d0cfb39b4dbdfdfaae9925f2ad85826.zip new file mode 100644 index 0000000..1f8280b Binary files /dev/null and b/.yarn/cache/pinkie-npm-2.0.4-7a0ba77113d96322872a2b8081e4d3123d0cfb39b4dbdfdfaae9925f2ad85826.zip differ diff --git a/.yarn/cache/pinkie-promise-npm-2.0.1-d6a08f4024c7e5d06a1f26715eadc8b37c17a62a97848172a3152f75d2055a36.zip b/.yarn/cache/pinkie-promise-npm-2.0.1-d6a08f4024c7e5d06a1f26715eadc8b37c17a62a97848172a3152f75d2055a36.zip new file mode 100644 index 0000000..f5389e6 Binary files /dev/null and b/.yarn/cache/pinkie-promise-npm-2.0.1-d6a08f4024c7e5d06a1f26715eadc8b37c17a62a97848172a3152f75d2055a36.zip differ diff --git a/.yarn/cache/pirates-npm-4.0.1-52be3da94b9a29b20a7a0b13748b5f0f51397b8f59f0dcb523e99a0f239590be.zip b/.yarn/cache/pirates-npm-4.0.1-52be3da94b9a29b20a7a0b13748b5f0f51397b8f59f0dcb523e99a0f239590be.zip new file mode 100644 index 0000000..9558a25 Binary files /dev/null and b/.yarn/cache/pirates-npm-4.0.1-52be3da94b9a29b20a7a0b13748b5f0f51397b8f59f0dcb523e99a0f239590be.zip differ diff --git a/.yarn/cache/pkg-dir-npm-2.0.0-97728ea9e623f32a7a9f9b194a71d57a3d35230bbe7ad173ebeccedf430aa646.zip b/.yarn/cache/pkg-dir-npm-2.0.0-97728ea9e623f32a7a9f9b194a71d57a3d35230bbe7ad173ebeccedf430aa646.zip new file mode 100644 index 0000000..51e2937 Binary files /dev/null and b/.yarn/cache/pkg-dir-npm-2.0.0-97728ea9e623f32a7a9f9b194a71d57a3d35230bbe7ad173ebeccedf430aa646.zip differ diff --git a/.yarn/cache/pkg-dir-npm-3.0.0-ae90d3a94ea91c658da36f10c9665eabe0925218af6541770ac366179302251d.zip b/.yarn/cache/pkg-dir-npm-3.0.0-ae90d3a94ea91c658da36f10c9665eabe0925218af6541770ac366179302251d.zip new file mode 100644 index 0000000..45312dc Binary files /dev/null and b/.yarn/cache/pkg-dir-npm-3.0.0-ae90d3a94ea91c658da36f10c9665eabe0925218af6541770ac366179302251d.zip differ diff --git a/.yarn/cache/plugin-error-npm-1.0.1-da0cd37bca5740ccba194b425758baa8b6b564389746ee762738f634b0a42b62.zip b/.yarn/cache/plugin-error-npm-1.0.1-da0cd37bca5740ccba194b425758baa8b6b564389746ee762738f634b0a42b62.zip new file mode 100644 index 0000000..def9f69 Binary files /dev/null and b/.yarn/cache/plugin-error-npm-1.0.1-da0cd37bca5740ccba194b425758baa8b6b564389746ee762738f634b0a42b62.zip differ diff --git a/.yarn/cache/pn-npm-1.1.0-a6cb67fb11106776f0cadeca019f0758866e6fe73507368be50ab2ab2e041c3a.zip b/.yarn/cache/pn-npm-1.1.0-a6cb67fb11106776f0cadeca019f0758866e6fe73507368be50ab2ab2e041c3a.zip new file mode 100644 index 0000000..98739aa Binary files /dev/null and b/.yarn/cache/pn-npm-1.1.0-a6cb67fb11106776f0cadeca019f0758866e6fe73507368be50ab2ab2e041c3a.zip differ diff --git a/.yarn/cache/pnp-webpack-plugin-npm-1.4.3-974fedba5e7df2a73a2f275f7a1bfa5035af815448ede226eedfe25fc6cec96a.zip b/.yarn/cache/pnp-webpack-plugin-npm-1.4.3-974fedba5e7df2a73a2f275f7a1bfa5035af815448ede226eedfe25fc6cec96a.zip new file mode 100644 index 0000000..f2e2e78 Binary files /dev/null and b/.yarn/cache/pnp-webpack-plugin-npm-1.4.3-974fedba5e7df2a73a2f275f7a1bfa5035af815448ede226eedfe25fc6cec96a.zip differ diff --git a/.yarn/cache/portfinder-npm-1.0.20-4cbe8262e181efb00d3ea7dbf318f8a65a402b2b064e9ad01042a5a14ea45bbf.zip b/.yarn/cache/portfinder-npm-1.0.20-4cbe8262e181efb00d3ea7dbf318f8a65a402b2b064e9ad01042a5a14ea45bbf.zip new file mode 100644 index 0000000..5ca531d Binary files /dev/null and b/.yarn/cache/portfinder-npm-1.0.20-4cbe8262e181efb00d3ea7dbf318f8a65a402b2b064e9ad01042a5a14ea45bbf.zip differ diff --git a/.yarn/cache/posix-character-classes-npm-0.1.1-9da76e1830a211fcca3b9f2e9871c73ce06725c1c4ac1ffd3503a038616d7540.zip b/.yarn/cache/posix-character-classes-npm-0.1.1-9da76e1830a211fcca3b9f2e9871c73ce06725c1c4ac1ffd3503a038616d7540.zip new file mode 100644 index 0000000..c0e66f8 Binary files /dev/null and b/.yarn/cache/posix-character-classes-npm-0.1.1-9da76e1830a211fcca3b9f2e9871c73ce06725c1c4ac1ffd3503a038616d7540.zip differ diff --git a/.yarn/cache/prelude-ls-npm-1.1.2-b39a134e3a8643d11f3d2cc0ec5341f8a6b7c905bf4dccccd2c10f4919f4e2a6.zip b/.yarn/cache/prelude-ls-npm-1.1.2-b39a134e3a8643d11f3d2cc0ec5341f8a6b7c905bf4dccccd2c10f4919f4e2a6.zip new file mode 100644 index 0000000..2c74904 Binary files /dev/null and b/.yarn/cache/prelude-ls-npm-1.1.2-b39a134e3a8643d11f3d2cc0ec5341f8a6b7c905bf4dccccd2c10f4919f4e2a6.zip differ diff --git a/.yarn/cache/prettier-linter-helpers-npm-1.0.0-d88507b0296e14ad925b60938b75848ae4ff020dc39aecf9c61b89f8bb372d51.zip b/.yarn/cache/prettier-linter-helpers-npm-1.0.0-d88507b0296e14ad925b60938b75848ae4ff020dc39aecf9c61b89f8bb372d51.zip new file mode 100644 index 0000000..cf003ac Binary files /dev/null and b/.yarn/cache/prettier-linter-helpers-npm-1.0.0-d88507b0296e14ad925b60938b75848ae4ff020dc39aecf9c61b89f8bb372d51.zip differ diff --git a/.yarn/cache/prettier-npm-1.17.0-8d24ef48856d55b540775cee0771b6dbca5e95581e9bab103a2dc8e60c1ef363.zip b/.yarn/cache/prettier-npm-1.17.0-8d24ef48856d55b540775cee0771b6dbca5e95581e9bab103a2dc8e60c1ef363.zip new file mode 100644 index 0000000..6622a32 Binary files /dev/null and b/.yarn/cache/prettier-npm-1.17.0-8d24ef48856d55b540775cee0771b6dbca5e95581e9bab103a2dc8e60c1ef363.zip differ diff --git a/.yarn/cache/pretty-error-npm-2.1.1-449ed96c0488eb7dbf408378a1f889119c277b05cb53119e50656376b155027a.zip b/.yarn/cache/pretty-error-npm-2.1.1-449ed96c0488eb7dbf408378a1f889119c277b05cb53119e50656376b155027a.zip new file mode 100644 index 0000000..5b055f0 Binary files /dev/null and b/.yarn/cache/pretty-error-npm-2.1.1-449ed96c0488eb7dbf408378a1f889119c277b05cb53119e50656376b155027a.zip differ diff --git a/.yarn/cache/pretty-format-npm-24.7.0-8c316a854af70023425e8649bb4b7d0c2546e1266e55dadb4db106db3e771f16.zip b/.yarn/cache/pretty-format-npm-24.7.0-8c316a854af70023425e8649bb4b7d0c2546e1266e55dadb4db106db3e771f16.zip new file mode 100644 index 0000000..fb89cf0 Binary files /dev/null and b/.yarn/cache/pretty-format-npm-24.7.0-8c316a854af70023425e8649bb4b7d0c2546e1266e55dadb4db106db3e771f16.zip differ diff --git a/.yarn/cache/pretty-hrtime-npm-1.0.3-784cdd612c0a3817d5f393ea74fdc3fce0b3f207dd43f5f10b2e8c600c5a34b6.zip b/.yarn/cache/pretty-hrtime-npm-1.0.3-784cdd612c0a3817d5f393ea74fdc3fce0b3f207dd43f5f10b2e8c600c5a34b6.zip new file mode 100644 index 0000000..9fbb80c Binary files /dev/null and b/.yarn/cache/pretty-hrtime-npm-1.0.3-784cdd612c0a3817d5f393ea74fdc3fce0b3f207dd43f5f10b2e8c600c5a34b6.zip differ diff --git a/.yarn/cache/private-npm-0.1.8-d62144fff53c984ed24b32b9191e85a461d29d518ec18b69592c3ef31d322592.zip b/.yarn/cache/private-npm-0.1.8-d62144fff53c984ed24b32b9191e85a461d29d518ec18b69592c3ef31d322592.zip new file mode 100644 index 0000000..4aa1bbe Binary files /dev/null and b/.yarn/cache/private-npm-0.1.8-d62144fff53c984ed24b32b9191e85a461d29d518ec18b69592c3ef31d322592.zip differ diff --git a/.yarn/cache/process-nextick-args-npm-1.0.7-cded0b452f8d3d0ed83beeab1623209686f2c3c9295061d8244c6ea69a8a8463.zip b/.yarn/cache/process-nextick-args-npm-1.0.7-cded0b452f8d3d0ed83beeab1623209686f2c3c9295061d8244c6ea69a8a8463.zip new file mode 100644 index 0000000..15bde24 Binary files /dev/null and b/.yarn/cache/process-nextick-args-npm-1.0.7-cded0b452f8d3d0ed83beeab1623209686f2c3c9295061d8244c6ea69a8a8463.zip differ diff --git a/.yarn/cache/process-nextick-args-npm-2.0.0-7c8b742449d42d1d867c2c190f0ff159bddad09b41120d36643e6b66ca9861ad.zip b/.yarn/cache/process-nextick-args-npm-2.0.0-7c8b742449d42d1d867c2c190f0ff159bddad09b41120d36643e6b66ca9861ad.zip new file mode 100644 index 0000000..a3ec099 Binary files /dev/null and b/.yarn/cache/process-nextick-args-npm-2.0.0-7c8b742449d42d1d867c2c190f0ff159bddad09b41120d36643e6b66ca9861ad.zip differ diff --git a/.yarn/cache/process-npm-0.11.10-9fe95b99ea2cab3b8e695258a5981094158798d9004af8ebc1a3ea63ca4b9d9d.zip b/.yarn/cache/process-npm-0.11.10-9fe95b99ea2cab3b8e695258a5981094158798d9004af8ebc1a3ea63ca4b9d9d.zip new file mode 100644 index 0000000..3ae5f84 Binary files /dev/null and b/.yarn/cache/process-npm-0.11.10-9fe95b99ea2cab3b8e695258a5981094158798d9004af8ebc1a3ea63ca4b9d9d.zip differ diff --git a/.yarn/cache/progress-npm-2.0.3-1602803939d128358222ac2e8d4c0be82a388ab462288b5d0341676ca97dd815.zip b/.yarn/cache/progress-npm-2.0.3-1602803939d128358222ac2e8d4c0be82a388ab462288b5d0341676ca97dd815.zip new file mode 100644 index 0000000..c769827 Binary files /dev/null and b/.yarn/cache/progress-npm-2.0.3-1602803939d128358222ac2e8d4c0be82a388ab462288b5d0341676ca97dd815.zip differ diff --git a/.yarn/cache/promise-inflight-npm-1.0.1-283730fa74f98815eb54f4bc95bf986396507e9c5ac37459482f2ddf06e489f0.zip b/.yarn/cache/promise-inflight-npm-1.0.1-283730fa74f98815eb54f4bc95bf986396507e9c5ac37459482f2ddf06e489f0.zip new file mode 100644 index 0000000..62c99c6 Binary files /dev/null and b/.yarn/cache/promise-inflight-npm-1.0.1-283730fa74f98815eb54f4bc95bf986396507e9c5ac37459482f2ddf06e489f0.zip differ diff --git a/.yarn/cache/prompts-npm-2.0.4-8c4b1288a46892306e2e94bb317fe7f6014a2bdbcab26418d51910be9f0cd87d.zip b/.yarn/cache/prompts-npm-2.0.4-8c4b1288a46892306e2e94bb317fe7f6014a2bdbcab26418d51910be9f0cd87d.zip new file mode 100644 index 0000000..712aedd Binary files /dev/null and b/.yarn/cache/prompts-npm-2.0.4-8c4b1288a46892306e2e94bb317fe7f6014a2bdbcab26418d51910be9f0cd87d.zip differ diff --git a/.yarn/cache/prop-types-npm-15.7.2-ad621c02aa737aa329d969ec52a0bd41774faff2a5b47079806c20674d02a814.zip b/.yarn/cache/prop-types-npm-15.7.2-ad621c02aa737aa329d969ec52a0bd41774faff2a5b47079806c20674d02a814.zip new file mode 100644 index 0000000..3fa009c Binary files /dev/null and b/.yarn/cache/prop-types-npm-15.7.2-ad621c02aa737aa329d969ec52a0bd41774faff2a5b47079806c20674d02a814.zip differ diff --git a/.yarn/cache/proxy-addr-npm-2.0.5-ef4cd01f9aad663743e556f6ee0c233f1a3c78267c5454a9a21e12039b41d45b.zip b/.yarn/cache/proxy-addr-npm-2.0.5-ef4cd01f9aad663743e556f6ee0c233f1a3c78267c5454a9a21e12039b41d45b.zip new file mode 100644 index 0000000..4bee7bd Binary files /dev/null and b/.yarn/cache/proxy-addr-npm-2.0.5-ef4cd01f9aad663743e556f6ee0c233f1a3c78267c5454a9a21e12039b41d45b.zip differ diff --git a/.yarn/cache/prr-npm-1.0.1-195c2397bcdf13e8deda1cba5f9b3dcd6df843b3b71fb356751d60d0bd8e539b.zip b/.yarn/cache/prr-npm-1.0.1-195c2397bcdf13e8deda1cba5f9b3dcd6df843b3b71fb356751d60d0bd8e539b.zip new file mode 100644 index 0000000..0edc9d5 Binary files /dev/null and b/.yarn/cache/prr-npm-1.0.1-195c2397bcdf13e8deda1cba5f9b3dcd6df843b3b71fb356751d60d0bd8e539b.zip differ diff --git a/.yarn/cache/psl-npm-1.1.31-642f08fa0cc1795f3aa0fa12b73faa8b5288db0e3945a992ba1a1cf6c7d48dfb.zip b/.yarn/cache/psl-npm-1.1.31-642f08fa0cc1795f3aa0fa12b73faa8b5288db0e3945a992ba1a1cf6c7d48dfb.zip new file mode 100644 index 0000000..0bccea4 Binary files /dev/null and b/.yarn/cache/psl-npm-1.1.31-642f08fa0cc1795f3aa0fa12b73faa8b5288db0e3945a992ba1a1cf6c7d48dfb.zip differ diff --git a/.yarn/cache/public-encrypt-npm-4.0.3-3cae9acc9688921683aed7cc8f04a15e0a0fe6466a2f3e17f88f209d61d6f828.zip b/.yarn/cache/public-encrypt-npm-4.0.3-3cae9acc9688921683aed7cc8f04a15e0a0fe6466a2f3e17f88f209d61d6f828.zip new file mode 100644 index 0000000..73edbad Binary files /dev/null and b/.yarn/cache/public-encrypt-npm-4.0.3-3cae9acc9688921683aed7cc8f04a15e0a0fe6466a2f3e17f88f209d61d6f828.zip differ diff --git a/.yarn/cache/pump-npm-2.0.1-dcdd4a4c023a2b305ff477d8f681cc2d31a1ac9b8f5b5f5ccf3ec416064c0a2f.zip b/.yarn/cache/pump-npm-2.0.1-dcdd4a4c023a2b305ff477d8f681cc2d31a1ac9b8f5b5f5ccf3ec416064c0a2f.zip new file mode 100644 index 0000000..0797943 Binary files /dev/null and b/.yarn/cache/pump-npm-2.0.1-dcdd4a4c023a2b305ff477d8f681cc2d31a1ac9b8f5b5f5ccf3ec416064c0a2f.zip differ diff --git a/.yarn/cache/pump-npm-3.0.0-621080e5b5d55695c4df04159c381595dbca9c34699cd019a452da1d0a634157.zip b/.yarn/cache/pump-npm-3.0.0-621080e5b5d55695c4df04159c381595dbca9c34699cd019a452da1d0a634157.zip new file mode 100644 index 0000000..330311b Binary files /dev/null and b/.yarn/cache/pump-npm-3.0.0-621080e5b5d55695c4df04159c381595dbca9c34699cd019a452da1d0a634157.zip differ diff --git a/.yarn/cache/pumpify-npm-1.5.1-1299a610bfeca79c22bf03490fe28066f1d8ebd2e68b96dfea4ed312dcd4a38a.zip b/.yarn/cache/pumpify-npm-1.5.1-1299a610bfeca79c22bf03490fe28066f1d8ebd2e68b96dfea4ed312dcd4a38a.zip new file mode 100644 index 0000000..b56fa6e Binary files /dev/null and b/.yarn/cache/pumpify-npm-1.5.1-1299a610bfeca79c22bf03490fe28066f1d8ebd2e68b96dfea4ed312dcd4a38a.zip differ diff --git a/.yarn/cache/punycode-npm-1.3.2-0dc28f015f120dbef6fb799bc163ac397d9784ef81b15fcf1081afbbf88289b7.zip b/.yarn/cache/punycode-npm-1.3.2-0dc28f015f120dbef6fb799bc163ac397d9784ef81b15fcf1081afbbf88289b7.zip new file mode 100644 index 0000000..22b886d Binary files /dev/null and b/.yarn/cache/punycode-npm-1.3.2-0dc28f015f120dbef6fb799bc163ac397d9784ef81b15fcf1081afbbf88289b7.zip differ diff --git a/.yarn/cache/punycode-npm-1.4.1-22a9e27af21be89d092301ea6da7205b633301719091092824bcacdf454c3620.zip b/.yarn/cache/punycode-npm-1.4.1-22a9e27af21be89d092301ea6da7205b633301719091092824bcacdf454c3620.zip new file mode 100644 index 0000000..7117acd Binary files /dev/null and b/.yarn/cache/punycode-npm-1.4.1-22a9e27af21be89d092301ea6da7205b633301719091092824bcacdf454c3620.zip differ diff --git a/.yarn/cache/punycode-npm-2.1.1-6a08098e02f116bd734f4c64a9ebf1d03e6b1bafcc04f3a7f76ace335f1c1480.zip b/.yarn/cache/punycode-npm-2.1.1-6a08098e02f116bd734f4c64a9ebf1d03e6b1bafcc04f3a7f76ace335f1c1480.zip new file mode 100644 index 0000000..4ea3b21 Binary files /dev/null and b/.yarn/cache/punycode-npm-2.1.1-6a08098e02f116bd734f4c64a9ebf1d03e6b1bafcc04f3a7f76ace335f1c1480.zip differ diff --git a/.yarn/cache/qs-npm-2.3.3-d0b5c910e7a33208b2df56eae7e1393dd37896821b26534c1a16c1cf052eff4c.zip b/.yarn/cache/qs-npm-2.3.3-d0b5c910e7a33208b2df56eae7e1393dd37896821b26534c1a16c1cf052eff4c.zip new file mode 100644 index 0000000..4a098ff Binary files /dev/null and b/.yarn/cache/qs-npm-2.3.3-d0b5c910e7a33208b2df56eae7e1393dd37896821b26534c1a16c1cf052eff4c.zip differ diff --git a/.yarn/cache/qs-npm-6.5.2-681b16242a087b38849c852734939f7cbdb4bd038be111c8d0becd67fd3a5838.zip b/.yarn/cache/qs-npm-6.5.2-681b16242a087b38849c852734939f7cbdb4bd038be111c8d0becd67fd3a5838.zip new file mode 100644 index 0000000..1b4afa8 Binary files /dev/null and b/.yarn/cache/qs-npm-6.5.2-681b16242a087b38849c852734939f7cbdb4bd038be111c8d0becd67fd3a5838.zip differ diff --git a/.yarn/cache/querystring-es3-npm-0.2.1-133c2ae817d8b9c86c78de2748c2702946df5befa7a279fc4eab322bfb1724e6.zip b/.yarn/cache/querystring-es3-npm-0.2.1-133c2ae817d8b9c86c78de2748c2702946df5befa7a279fc4eab322bfb1724e6.zip new file mode 100644 index 0000000..8fc5097 Binary files /dev/null and b/.yarn/cache/querystring-es3-npm-0.2.1-133c2ae817d8b9c86c78de2748c2702946df5befa7a279fc4eab322bfb1724e6.zip differ diff --git a/.yarn/cache/querystring-npm-0.2.0-0b3e12f29ad0693026a0d9b9878628b715ef946d6e9cde52b68a65ece3ae7300.zip b/.yarn/cache/querystring-npm-0.2.0-0b3e12f29ad0693026a0d9b9878628b715ef946d6e9cde52b68a65ece3ae7300.zip new file mode 100644 index 0000000..726d873 Binary files /dev/null and b/.yarn/cache/querystring-npm-0.2.0-0b3e12f29ad0693026a0d9b9878628b715ef946d6e9cde52b68a65ece3ae7300.zip differ diff --git a/.yarn/cache/randombytes-npm-2.1.0-730501a23f3a8bc9b2d55ce3ea43471a7fa7a382696216e4c141f11b83e29848.zip b/.yarn/cache/randombytes-npm-2.1.0-730501a23f3a8bc9b2d55ce3ea43471a7fa7a382696216e4c141f11b83e29848.zip new file mode 100644 index 0000000..bc49cc4 Binary files /dev/null and b/.yarn/cache/randombytes-npm-2.1.0-730501a23f3a8bc9b2d55ce3ea43471a7fa7a382696216e4c141f11b83e29848.zip differ diff --git a/.yarn/cache/randomfill-npm-1.0.4-f897aa7249ece3b43cc6cae2beaaf3ffbf0e8d54c94583883ce9ea39a7037bee.zip b/.yarn/cache/randomfill-npm-1.0.4-f897aa7249ece3b43cc6cae2beaaf3ffbf0e8d54c94583883ce9ea39a7037bee.zip new file mode 100644 index 0000000..1636175 Binary files /dev/null and b/.yarn/cache/randomfill-npm-1.0.4-f897aa7249ece3b43cc6cae2beaaf3ffbf0e8d54c94583883ce9ea39a7037bee.zip differ diff --git a/.yarn/cache/range-parser-npm-1.2.0-9a6065a0f05c5d7345f77280083e7551891d246fea1867a9afbd8a7bc7d1c015.zip b/.yarn/cache/range-parser-npm-1.2.0-9a6065a0f05c5d7345f77280083e7551891d246fea1867a9afbd8a7bc7d1c015.zip new file mode 100644 index 0000000..21faf61 Binary files /dev/null and b/.yarn/cache/range-parser-npm-1.2.0-9a6065a0f05c5d7345f77280083e7551891d246fea1867a9afbd8a7bc7d1c015.zip differ diff --git a/.yarn/cache/raw-body-npm-2.3.3-94f5538b794c0907e5769d94c650982014bbce01abfbfaf85e1e799878607d59.zip b/.yarn/cache/raw-body-npm-2.3.3-94f5538b794c0907e5769d94c650982014bbce01abfbfaf85e1e799878607d59.zip new file mode 100644 index 0000000..5b232b0 Binary files /dev/null and b/.yarn/cache/raw-body-npm-2.3.3-94f5538b794c0907e5769d94c650982014bbce01abfbfaf85e1e799878607d59.zip differ diff --git a/.yarn/cache/rc-npm-1.2.8-1627751389893c338defe7df0e9534b84724dc63fcc8874df54a52a7422de178.zip b/.yarn/cache/rc-npm-1.2.8-1627751389893c338defe7df0e9534b84724dc63fcc8874df54a52a7422de178.zip new file mode 100644 index 0000000..c2e23ca Binary files /dev/null and b/.yarn/cache/rc-npm-1.2.8-1627751389893c338defe7df0e9534b84724dc63fcc8874df54a52a7422de178.zip differ diff --git a/.yarn/cache/react-dom-npm-16.8.6-a779059f773bba2417840e551db1b124158ee8035241f5b079c50910ec11e1a1.zip b/.yarn/cache/react-dom-npm-16.8.6-a779059f773bba2417840e551db1b124158ee8035241f5b079c50910ec11e1a1.zip new file mode 100644 index 0000000..f432783 Binary files /dev/null and b/.yarn/cache/react-dom-npm-16.8.6-a779059f773bba2417840e551db1b124158ee8035241f5b079c50910ec11e1a1.zip differ diff --git a/.yarn/cache/react-is-npm-16.8.6-9a80d9fe3f744648a0718a7952f622dbab045ef925ea5179d6a83f0bef37f51a.zip b/.yarn/cache/react-is-npm-16.8.6-9a80d9fe3f744648a0718a7952f622dbab045ef925ea5179d6a83f0bef37f51a.zip new file mode 100644 index 0000000..f4c07ef Binary files /dev/null and b/.yarn/cache/react-is-npm-16.8.6-9a80d9fe3f744648a0718a7952f622dbab045ef925ea5179d6a83f0bef37f51a.zip differ diff --git a/.yarn/cache/react-npm-16.8.6-4f8c439da1fef97bea5523a416fbfc0005aa720dacf7db14265b2576173a220e.zip b/.yarn/cache/react-npm-16.8.6-4f8c439da1fef97bea5523a416fbfc0005aa720dacf7db14265b2576173a220e.zip new file mode 100644 index 0000000..ed7a226 Binary files /dev/null and b/.yarn/cache/react-npm-16.8.6-4f8c439da1fef97bea5523a416fbfc0005aa720dacf7db14265b2576173a220e.zip differ diff --git a/.yarn/cache/read-pkg-npm-1.1.0-3ba25f1f673a3cc57f347c5d0bea9388506c7fbffbd6700ed9a48b93abe9fc2f.zip b/.yarn/cache/read-pkg-npm-1.1.0-3ba25f1f673a3cc57f347c5d0bea9388506c7fbffbd6700ed9a48b93abe9fc2f.zip new file mode 100644 index 0000000..9f4c02d Binary files /dev/null and b/.yarn/cache/read-pkg-npm-1.1.0-3ba25f1f673a3cc57f347c5d0bea9388506c7fbffbd6700ed9a48b93abe9fc2f.zip differ diff --git a/.yarn/cache/read-pkg-npm-2.0.0-f99c4271d1194708d8c1bbfe707ffbe270896864aeb1aa94807280a210caec72.zip b/.yarn/cache/read-pkg-npm-2.0.0-f99c4271d1194708d8c1bbfe707ffbe270896864aeb1aa94807280a210caec72.zip new file mode 100644 index 0000000..01ff663 Binary files /dev/null and b/.yarn/cache/read-pkg-npm-2.0.0-f99c4271d1194708d8c1bbfe707ffbe270896864aeb1aa94807280a210caec72.zip differ diff --git a/.yarn/cache/read-pkg-npm-3.0.0-b1e027e0453f686f98b6aadbfa2b398752353ebeb581a64671c0524b27755c0f.zip b/.yarn/cache/read-pkg-npm-3.0.0-b1e027e0453f686f98b6aadbfa2b398752353ebeb581a64671c0524b27755c0f.zip new file mode 100644 index 0000000..d679372 Binary files /dev/null and b/.yarn/cache/read-pkg-npm-3.0.0-b1e027e0453f686f98b6aadbfa2b398752353ebeb581a64671c0524b27755c0f.zip differ diff --git a/.yarn/cache/read-pkg-up-npm-1.0.1-243e4746eb618e5e4c4f52ae21eb97e54a5d224f0a519a3dbb1fc9ab64783e24.zip b/.yarn/cache/read-pkg-up-npm-1.0.1-243e4746eb618e5e4c4f52ae21eb97e54a5d224f0a519a3dbb1fc9ab64783e24.zip new file mode 100644 index 0000000..30cd62a Binary files /dev/null and b/.yarn/cache/read-pkg-up-npm-1.0.1-243e4746eb618e5e4c4f52ae21eb97e54a5d224f0a519a3dbb1fc9ab64783e24.zip differ diff --git a/.yarn/cache/read-pkg-up-npm-2.0.0-df82a2aef03ab518fc9be5e940f11176ae025f0a483a6a19639aab6f50d8e58f.zip b/.yarn/cache/read-pkg-up-npm-2.0.0-df82a2aef03ab518fc9be5e940f11176ae025f0a483a6a19639aab6f50d8e58f.zip new file mode 100644 index 0000000..aed0a21 Binary files /dev/null and b/.yarn/cache/read-pkg-up-npm-2.0.0-df82a2aef03ab518fc9be5e940f11176ae025f0a483a6a19639aab6f50d8e58f.zip differ diff --git a/.yarn/cache/read-pkg-up-npm-4.0.0-d96d09775e76285c2308a2003cbbb5b049e77f5d3f2b91f59447e92a1d3591ec.zip b/.yarn/cache/read-pkg-up-npm-4.0.0-d96d09775e76285c2308a2003cbbb5b049e77f5d3f2b91f59447e92a1d3591ec.zip new file mode 100644 index 0000000..13dc3d9 Binary files /dev/null and b/.yarn/cache/read-pkg-up-npm-4.0.0-d96d09775e76285c2308a2003cbbb5b049e77f5d3f2b91f59447e92a1d3591ec.zip differ diff --git a/.yarn/cache/readable-stream-npm-2.3.6-fbab54b6298c2ef3e597d8a3c077350aa2b1fb77c1f7d3b86958224fe294b614.zip b/.yarn/cache/readable-stream-npm-2.3.6-fbab54b6298c2ef3e597d8a3c077350aa2b1fb77c1f7d3b86958224fe294b614.zip new file mode 100644 index 0000000..fbb4cf6 Binary files /dev/null and b/.yarn/cache/readable-stream-npm-2.3.6-fbab54b6298c2ef3e597d8a3c077350aa2b1fb77c1f7d3b86958224fe294b614.zip differ diff --git a/.yarn/cache/readable-stream-npm-3.3.0-a7635de1bc1e819ded69547fca9b1ddeb1146792138abe722ed1e10968d47a76.zip b/.yarn/cache/readable-stream-npm-3.3.0-a7635de1bc1e819ded69547fca9b1ddeb1146792138abe722ed1e10968d47a76.zip new file mode 100644 index 0000000..0dde20c Binary files /dev/null and b/.yarn/cache/readable-stream-npm-3.3.0-a7635de1bc1e819ded69547fca9b1ddeb1146792138abe722ed1e10968d47a76.zip differ diff --git a/.yarn/cache/readdirp-npm-2.2.1-47142d20340570c219e62ffdf3f26e71b3b3c3f550488d94708474cdcf09a50d.zip b/.yarn/cache/readdirp-npm-2.2.1-47142d20340570c219e62ffdf3f26e71b3b3c3f550488d94708474cdcf09a50d.zip new file mode 100644 index 0000000..4b154f1 Binary files /dev/null and b/.yarn/cache/readdirp-npm-2.2.1-47142d20340570c219e62ffdf3f26e71b3b3c3f550488d94708474cdcf09a50d.zip differ diff --git a/.yarn/cache/realpath-native-npm-1.1.0-1382f31e92125dbe1b3266e4ef26090412e60c05e3cacfa2f436f2f7757793a9.zip b/.yarn/cache/realpath-native-npm-1.1.0-1382f31e92125dbe1b3266e4ef26090412e60c05e3cacfa2f436f2f7757793a9.zip new file mode 100644 index 0000000..51251d1 Binary files /dev/null and b/.yarn/cache/realpath-native-npm-1.1.0-1382f31e92125dbe1b3266e4ef26090412e60c05e3cacfa2f436f2f7757793a9.zip differ diff --git a/.yarn/cache/rechoir-npm-0.6.2-626cec180b2cc4684d5ee390bee7aee09f4adc85a97b2eaeb077d789144007d9.zip b/.yarn/cache/rechoir-npm-0.6.2-626cec180b2cc4684d5ee390bee7aee09f4adc85a97b2eaeb077d789144007d9.zip new file mode 100644 index 0000000..2f87110 Binary files /dev/null and b/.yarn/cache/rechoir-npm-0.6.2-626cec180b2cc4684d5ee390bee7aee09f4adc85a97b2eaeb077d789144007d9.zip differ diff --git a/.yarn/cache/regenerate-npm-1.4.0-c41125641c8ed9ac37156e3694977569173b57fa6a9afefccd5770dc4265ab90.zip b/.yarn/cache/regenerate-npm-1.4.0-c41125641c8ed9ac37156e3694977569173b57fa6a9afefccd5770dc4265ab90.zip new file mode 100644 index 0000000..915bb2b Binary files /dev/null and b/.yarn/cache/regenerate-npm-1.4.0-c41125641c8ed9ac37156e3694977569173b57fa6a9afefccd5770dc4265ab90.zip differ diff --git a/.yarn/cache/regenerate-unicode-properties-npm-8.0.2-e345edcfe2a4d5756b339066db376ed442bc16169470d91dad0f94fdf659fad7.zip b/.yarn/cache/regenerate-unicode-properties-npm-8.0.2-e345edcfe2a4d5756b339066db376ed442bc16169470d91dad0f94fdf659fad7.zip new file mode 100644 index 0000000..21dfd29 Binary files /dev/null and b/.yarn/cache/regenerate-unicode-properties-npm-8.0.2-e345edcfe2a4d5756b339066db376ed442bc16169470d91dad0f94fdf659fad7.zip differ diff --git a/.yarn/cache/regenerator-runtime-npm-0.13.2-50b4e6a65634c2788c113abb68d037d860929b51fb0ba37ba17a5d7592559398.zip b/.yarn/cache/regenerator-runtime-npm-0.13.2-50b4e6a65634c2788c113abb68d037d860929b51fb0ba37ba17a5d7592559398.zip new file mode 100644 index 0000000..e73d23f Binary files /dev/null and b/.yarn/cache/regenerator-runtime-npm-0.13.2-50b4e6a65634c2788c113abb68d037d860929b51fb0ba37ba17a5d7592559398.zip differ diff --git a/.yarn/cache/regenerator-transform-npm-0.13.4-c2059ad7195ebda4a96c09869932318db51aedd9e6fa129bc1442243005ce3bd.zip b/.yarn/cache/regenerator-transform-npm-0.13.4-c2059ad7195ebda4a96c09869932318db51aedd9e6fa129bc1442243005ce3bd.zip new file mode 100644 index 0000000..eb2f420 Binary files /dev/null and b/.yarn/cache/regenerator-transform-npm-0.13.4-c2059ad7195ebda4a96c09869932318db51aedd9e6fa129bc1442243005ce3bd.zip differ diff --git a/.yarn/cache/regex-not-npm-1.0.2-405f02b978a6a4089135aaf2b2777b913cd4277d87bc9d5e43cb8bc2c9f01628.zip b/.yarn/cache/regex-not-npm-1.0.2-405f02b978a6a4089135aaf2b2777b913cd4277d87bc9d5e43cb8bc2c9f01628.zip new file mode 100644 index 0000000..bc68352 Binary files /dev/null and b/.yarn/cache/regex-not-npm-1.0.2-405f02b978a6a4089135aaf2b2777b913cd4277d87bc9d5e43cb8bc2c9f01628.zip differ diff --git a/.yarn/cache/regexp-tree-npm-0.1.5-a79962ed9bff2d272860ee0adb9728b629b16783ca876795dbefa1027b4f9299.zip b/.yarn/cache/regexp-tree-npm-0.1.5-a79962ed9bff2d272860ee0adb9728b629b16783ca876795dbefa1027b4f9299.zip new file mode 100644 index 0000000..9ab124b Binary files /dev/null and b/.yarn/cache/regexp-tree-npm-0.1.5-a79962ed9bff2d272860ee0adb9728b629b16783ca876795dbefa1027b4f9299.zip differ diff --git a/.yarn/cache/regexpp-npm-2.0.1-10dc72403815ae25b463dc711bb2da7c7d071182e0a0185d17619edf64df4093.zip b/.yarn/cache/regexpp-npm-2.0.1-10dc72403815ae25b463dc711bb2da7c7d071182e0a0185d17619edf64df4093.zip new file mode 100644 index 0000000..581bfba Binary files /dev/null and b/.yarn/cache/regexpp-npm-2.0.1-10dc72403815ae25b463dc711bb2da7c7d071182e0a0185d17619edf64df4093.zip differ diff --git a/.yarn/cache/regexpu-core-npm-4.5.4-f6ef828a8a620a17f9772bf20a50e16fb18af302bf5c4cfe28302c3e00aff19f.zip b/.yarn/cache/regexpu-core-npm-4.5.4-f6ef828a8a620a17f9772bf20a50e16fb18af302bf5c4cfe28302c3e00aff19f.zip new file mode 100644 index 0000000..32b790b Binary files /dev/null and b/.yarn/cache/regexpu-core-npm-4.5.4-f6ef828a8a620a17f9772bf20a50e16fb18af302bf5c4cfe28302c3e00aff19f.zip differ diff --git a/.yarn/cache/regjsgen-npm-0.5.0-c01e9697f91173c4a4d6f34c9a192d7f18851d4cf902b59c2211d115afc037cd.zip b/.yarn/cache/regjsgen-npm-0.5.0-c01e9697f91173c4a4d6f34c9a192d7f18851d4cf902b59c2211d115afc037cd.zip new file mode 100644 index 0000000..75f436e Binary files /dev/null and b/.yarn/cache/regjsgen-npm-0.5.0-c01e9697f91173c4a4d6f34c9a192d7f18851d4cf902b59c2211d115afc037cd.zip differ diff --git a/.yarn/cache/regjsparser-npm-0.6.0-0dddddf42a4cd7278dfaaac63d1fab41633a8e5b3554159486dca9ce88eeed7b.zip b/.yarn/cache/regjsparser-npm-0.6.0-0dddddf42a4cd7278dfaaac63d1fab41633a8e5b3554159486dca9ce88eeed7b.zip new file mode 100644 index 0000000..ec14a1f Binary files /dev/null and b/.yarn/cache/regjsparser-npm-0.6.0-0dddddf42a4cd7278dfaaac63d1fab41633a8e5b3554159486dca9ce88eeed7b.zip differ diff --git a/.yarn/cache/relateurl-npm-0.2.7-94c082ee24485e2d57d057a9fa1872dc45cce81f6c320b40e2550aa8ec769396.zip b/.yarn/cache/relateurl-npm-0.2.7-94c082ee24485e2d57d057a9fa1872dc45cce81f6c320b40e2550aa8ec769396.zip new file mode 100644 index 0000000..1b7e717 Binary files /dev/null and b/.yarn/cache/relateurl-npm-0.2.7-94c082ee24485e2d57d057a9fa1872dc45cce81f6c320b40e2550aa8ec769396.zip differ diff --git a/.yarn/cache/remove-bom-buffer-npm-3.0.0-2f86c7a7461fdf416c5b48dc61ca4d08f627a953fdbea52336cdec8a20d62944.zip b/.yarn/cache/remove-bom-buffer-npm-3.0.0-2f86c7a7461fdf416c5b48dc61ca4d08f627a953fdbea52336cdec8a20d62944.zip new file mode 100644 index 0000000..d58be78 Binary files /dev/null and b/.yarn/cache/remove-bom-buffer-npm-3.0.0-2f86c7a7461fdf416c5b48dc61ca4d08f627a953fdbea52336cdec8a20d62944.zip differ diff --git a/.yarn/cache/remove-bom-stream-npm-1.2.0-6cc49295172e6fde302dc0504a2daeae09b914d4a17a0b6f912f57da3d5bd948.zip b/.yarn/cache/remove-bom-stream-npm-1.2.0-6cc49295172e6fde302dc0504a2daeae09b914d4a17a0b6f912f57da3d5bd948.zip new file mode 100644 index 0000000..c51d67c Binary files /dev/null and b/.yarn/cache/remove-bom-stream-npm-1.2.0-6cc49295172e6fde302dc0504a2daeae09b914d4a17a0b6f912f57da3d5bd948.zip differ diff --git a/.yarn/cache/remove-trailing-separator-npm-1.1.0-2772452f30fb4174f4d9c406c495821bec6eb83ec68d4cfa862069a6ae0a4f24.zip b/.yarn/cache/remove-trailing-separator-npm-1.1.0-2772452f30fb4174f4d9c406c495821bec6eb83ec68d4cfa862069a6ae0a4f24.zip new file mode 100644 index 0000000..825e796 Binary files /dev/null and b/.yarn/cache/remove-trailing-separator-npm-1.1.0-2772452f30fb4174f4d9c406c495821bec6eb83ec68d4cfa862069a6ae0a4f24.zip differ diff --git a/.yarn/cache/renderkid-npm-2.0.3-692d72624c5f6cce58e8cc3967aa58655f80b375ffda164767affe10940a2103.zip b/.yarn/cache/renderkid-npm-2.0.3-692d72624c5f6cce58e8cc3967aa58655f80b375ffda164767affe10940a2103.zip new file mode 100644 index 0000000..6f1897d Binary files /dev/null and b/.yarn/cache/renderkid-npm-2.0.3-692d72624c5f6cce58e8cc3967aa58655f80b375ffda164767affe10940a2103.zip differ diff --git a/.yarn/cache/repeat-element-npm-1.1.3-1b92c86e20710acf31c8e170326460a23fe09fdbcc5125bcff8ee8dc39e5455d.zip b/.yarn/cache/repeat-element-npm-1.1.3-1b92c86e20710acf31c8e170326460a23fe09fdbcc5125bcff8ee8dc39e5455d.zip new file mode 100644 index 0000000..dda1993 Binary files /dev/null and b/.yarn/cache/repeat-element-npm-1.1.3-1b92c86e20710acf31c8e170326460a23fe09fdbcc5125bcff8ee8dc39e5455d.zip differ diff --git a/.yarn/cache/repeat-string-npm-1.6.1-f4c75d4eb57bbd6e44727422301f8fa308cf1b14e633744b9963015112a53e39.zip b/.yarn/cache/repeat-string-npm-1.6.1-f4c75d4eb57bbd6e44727422301f8fa308cf1b14e633744b9963015112a53e39.zip new file mode 100644 index 0000000..6ed0741 Binary files /dev/null and b/.yarn/cache/repeat-string-npm-1.6.1-f4c75d4eb57bbd6e44727422301f8fa308cf1b14e633744b9963015112a53e39.zip differ diff --git a/.yarn/cache/replace-ext-npm-1.0.0-470dd17ecfbbcb625f0335706b8ccf7fb185e40969e95f932533844dac899097.zip b/.yarn/cache/replace-ext-npm-1.0.0-470dd17ecfbbcb625f0335706b8ccf7fb185e40969e95f932533844dac899097.zip new file mode 100644 index 0000000..1381a09 Binary files /dev/null and b/.yarn/cache/replace-ext-npm-1.0.0-470dd17ecfbbcb625f0335706b8ccf7fb185e40969e95f932533844dac899097.zip differ diff --git a/.yarn/cache/replace-homedir-npm-1.0.0-ae5365f1b63bdd7b5eb0f9a9db87c45f5ede6503c34670e7f03d76f3f8d6c0c1.zip b/.yarn/cache/replace-homedir-npm-1.0.0-ae5365f1b63bdd7b5eb0f9a9db87c45f5ede6503c34670e7f03d76f3f8d6c0c1.zip new file mode 100644 index 0000000..2483c2e Binary files /dev/null and b/.yarn/cache/replace-homedir-npm-1.0.0-ae5365f1b63bdd7b5eb0f9a9db87c45f5ede6503c34670e7f03d76f3f8d6c0c1.zip differ diff --git a/.yarn/cache/request-npm-2.88.0-48813a3c6df4402646dc095f9ab7b82e744f39a7b10c66fc28b132f169b82cef.zip b/.yarn/cache/request-npm-2.88.0-48813a3c6df4402646dc095f9ab7b82e744f39a7b10c66fc28b132f169b82cef.zip new file mode 100644 index 0000000..3677468 Binary files /dev/null and b/.yarn/cache/request-npm-2.88.0-48813a3c6df4402646dc095f9ab7b82e744f39a7b10c66fc28b132f169b82cef.zip differ diff --git a/.yarn/cache/request-promise-core-npm-1.1.2-3e270898d78b33c21755ef69d54f54ff7e1dd37f25e7fe529b23436dbefd9d4b.zip b/.yarn/cache/request-promise-core-npm-1.1.2-3e270898d78b33c21755ef69d54f54ff7e1dd37f25e7fe529b23436dbefd9d4b.zip new file mode 100644 index 0000000..440143f Binary files /dev/null and b/.yarn/cache/request-promise-core-npm-1.1.2-3e270898d78b33c21755ef69d54f54ff7e1dd37f25e7fe529b23436dbefd9d4b.zip differ diff --git a/.yarn/cache/request-promise-native-npm-1.0.7-9b5c7fc7b48d23a178595f340cf0ae449393a8b23c848839a332760d6e7fac05.zip b/.yarn/cache/request-promise-native-npm-1.0.7-9b5c7fc7b48d23a178595f340cf0ae449393a8b23c848839a332760d6e7fac05.zip new file mode 100644 index 0000000..5c2864f Binary files /dev/null and b/.yarn/cache/request-promise-native-npm-1.0.7-9b5c7fc7b48d23a178595f340cf0ae449393a8b23c848839a332760d6e7fac05.zip differ diff --git a/.yarn/cache/require-directory-npm-2.1.1-c479f1e7059e43cb4411823190f800f67d1a55bc47f97dbab16cfc4831f0e223.zip b/.yarn/cache/require-directory-npm-2.1.1-c479f1e7059e43cb4411823190f800f67d1a55bc47f97dbab16cfc4831f0e223.zip new file mode 100644 index 0000000..0dc5b39 Binary files /dev/null and b/.yarn/cache/require-directory-npm-2.1.1-c479f1e7059e43cb4411823190f800f67d1a55bc47f97dbab16cfc4831f0e223.zip differ diff --git a/.yarn/cache/require-main-filename-npm-1.0.1-853340429658b14ca2403b2b72f97c03f16472e07a9863fd30ed3d6f73b68b0b.zip b/.yarn/cache/require-main-filename-npm-1.0.1-853340429658b14ca2403b2b72f97c03f16472e07a9863fd30ed3d6f73b68b0b.zip new file mode 100644 index 0000000..624d6dc Binary files /dev/null and b/.yarn/cache/require-main-filename-npm-1.0.1-853340429658b14ca2403b2b72f97c03f16472e07a9863fd30ed3d6f73b68b0b.zip differ diff --git a/.yarn/cache/require-main-filename-npm-2.0.0-9e922169a9e3bf8bd49c78b638ffe4fca489ef4092aa21075fe73fee7f895036.zip b/.yarn/cache/require-main-filename-npm-2.0.0-9e922169a9e3bf8bd49c78b638ffe4fca489ef4092aa21075fe73fee7f895036.zip new file mode 100644 index 0000000..4706051 Binary files /dev/null and b/.yarn/cache/require-main-filename-npm-2.0.0-9e922169a9e3bf8bd49c78b638ffe4fca489ef4092aa21075fe73fee7f895036.zip differ diff --git a/.yarn/cache/requires-port-npm-1.0.0-3b2433c0722c706fb35eb8efbc6460625079be5cea15d95ec7f37fd5981396b8.zip b/.yarn/cache/requires-port-npm-1.0.0-3b2433c0722c706fb35eb8efbc6460625079be5cea15d95ec7f37fd5981396b8.zip new file mode 100644 index 0000000..dd46ac0 Binary files /dev/null and b/.yarn/cache/requires-port-npm-1.0.0-3b2433c0722c706fb35eb8efbc6460625079be5cea15d95ec7f37fd5981396b8.zip differ diff --git a/.yarn/cache/resolve-cwd-npm-2.0.0-898fee80539407e8d5f75459f2d83eb6fd6b6787337310ff66b58210fd651029.zip b/.yarn/cache/resolve-cwd-npm-2.0.0-898fee80539407e8d5f75459f2d83eb6fd6b6787337310ff66b58210fd651029.zip new file mode 100644 index 0000000..77cad2c Binary files /dev/null and b/.yarn/cache/resolve-cwd-npm-2.0.0-898fee80539407e8d5f75459f2d83eb6fd6b6787337310ff66b58210fd651029.zip differ diff --git a/.yarn/cache/resolve-dir-npm-1.0.1-4d7c2e0bf4972c7d392a4bb68a2ca54ff43cd66a29638b63b91a68b944dabe1c.zip b/.yarn/cache/resolve-dir-npm-1.0.1-4d7c2e0bf4972c7d392a4bb68a2ca54ff43cd66a29638b63b91a68b944dabe1c.zip new file mode 100644 index 0000000..790160b Binary files /dev/null and b/.yarn/cache/resolve-dir-npm-1.0.1-4d7c2e0bf4972c7d392a4bb68a2ca54ff43cd66a29638b63b91a68b944dabe1c.zip differ diff --git a/.yarn/cache/resolve-from-npm-3.0.0-74dcaf63c1f463e471b3f8ba7af943b8e98efd1b8936368b608ba4553904abd8.zip b/.yarn/cache/resolve-from-npm-3.0.0-74dcaf63c1f463e471b3f8ba7af943b8e98efd1b8936368b608ba4553904abd8.zip new file mode 100644 index 0000000..e94236a Binary files /dev/null and b/.yarn/cache/resolve-from-npm-3.0.0-74dcaf63c1f463e471b3f8ba7af943b8e98efd1b8936368b608ba4553904abd8.zip differ diff --git a/.yarn/cache/resolve-from-npm-4.0.0-99cdd50683c2cc1e27687ed263811dd77c5dd7b903fda4b2797495207b0634c0.zip b/.yarn/cache/resolve-from-npm-4.0.0-99cdd50683c2cc1e27687ed263811dd77c5dd7b903fda4b2797495207b0634c0.zip new file mode 100644 index 0000000..7fc3d05 Binary files /dev/null and b/.yarn/cache/resolve-from-npm-4.0.0-99cdd50683c2cc1e27687ed263811dd77c5dd7b903fda4b2797495207b0634c0.zip differ diff --git a/.yarn/cache/resolve-npm-1.1.7-66fdcab1d24546015a41326cfab33e3f3eae855d3ed894a008653d76921d777f.zip b/.yarn/cache/resolve-npm-1.1.7-66fdcab1d24546015a41326cfab33e3f3eae855d3ed894a008653d76921d777f.zip new file mode 100644 index 0000000..07ae132 Binary files /dev/null and b/.yarn/cache/resolve-npm-1.1.7-66fdcab1d24546015a41326cfab33e3f3eae855d3ed894a008653d76921d777f.zip differ diff --git a/.yarn/cache/resolve-npm-1.10.1-c5efd8356fea6c422811c9e2126879f2a28ef383ddff73e9b70325b54cc802e0.zip b/.yarn/cache/resolve-npm-1.10.1-c5efd8356fea6c422811c9e2126879f2a28ef383ddff73e9b70325b54cc802e0.zip new file mode 100644 index 0000000..94e4ff8 Binary files /dev/null and b/.yarn/cache/resolve-npm-1.10.1-c5efd8356fea6c422811c9e2126879f2a28ef383ddff73e9b70325b54cc802e0.zip differ diff --git a/.yarn/cache/resolve-options-npm-1.1.0-9e68b8bccaec78335705c667c0657a2c748c0977196f40cfd26c32f15907a81b.zip b/.yarn/cache/resolve-options-npm-1.1.0-9e68b8bccaec78335705c667c0657a2c748c0977196f40cfd26c32f15907a81b.zip new file mode 100644 index 0000000..d4f7d79 Binary files /dev/null and b/.yarn/cache/resolve-options-npm-1.1.0-9e68b8bccaec78335705c667c0657a2c748c0977196f40cfd26c32f15907a81b.zip differ diff --git a/.yarn/cache/resolve-url-npm-0.2.1-ec3028a25774a7d4faa3c1acab6245768be5d67134c368542859b465d3c6a46b.zip b/.yarn/cache/resolve-url-npm-0.2.1-ec3028a25774a7d4faa3c1acab6245768be5d67134c368542859b465d3c6a46b.zip new file mode 100644 index 0000000..770ac5f Binary files /dev/null and b/.yarn/cache/resolve-url-npm-0.2.1-ec3028a25774a7d4faa3c1acab6245768be5d67134c368542859b465d3c6a46b.zip differ diff --git a/.yarn/cache/restore-cursor-npm-2.0.0-3536a5f7f263321e30c6d6bf2405b0f910e2d54e8f3e8c6e01c9dfa2c2d1ce0c.zip b/.yarn/cache/restore-cursor-npm-2.0.0-3536a5f7f263321e30c6d6bf2405b0f910e2d54e8f3e8c6e01c9dfa2c2d1ce0c.zip new file mode 100644 index 0000000..ab4afd7 Binary files /dev/null and b/.yarn/cache/restore-cursor-npm-2.0.0-3536a5f7f263321e30c6d6bf2405b0f910e2d54e8f3e8c6e01c9dfa2c2d1ce0c.zip differ diff --git a/.yarn/cache/ret-npm-0.1.15-bb23b4c610c662eb37485a23ccbb79f01a9ca9cd733026078ba0f50c7c8d3d4c.zip b/.yarn/cache/ret-npm-0.1.15-bb23b4c610c662eb37485a23ccbb79f01a9ca9cd733026078ba0f50c7c8d3d4c.zip new file mode 100644 index 0000000..c8d0c6e Binary files /dev/null and b/.yarn/cache/ret-npm-0.1.15-bb23b4c610c662eb37485a23ccbb79f01a9ca9cd733026078ba0f50c7c8d3d4c.zip differ diff --git a/.yarn/cache/rimraf-npm-2.6.3-0f7ef1f8a19b619aa38636b2117fe2eafbf57806ddfa6487c43742fe966ced5d.zip b/.yarn/cache/rimraf-npm-2.6.3-0f7ef1f8a19b619aa38636b2117fe2eafbf57806ddfa6487c43742fe966ced5d.zip new file mode 100644 index 0000000..24feb3a Binary files /dev/null and b/.yarn/cache/rimraf-npm-2.6.3-0f7ef1f8a19b619aa38636b2117fe2eafbf57806ddfa6487c43742fe966ced5d.zip differ diff --git a/.yarn/cache/ripemd160-npm-2.0.2-76333df6313d970889e004e861660f7d3802ed8ce5085557b3b0c280647ec9f7.zip b/.yarn/cache/ripemd160-npm-2.0.2-76333df6313d970889e004e861660f7d3802ed8ce5085557b3b0c280647ec9f7.zip new file mode 100644 index 0000000..726b2e9 Binary files /dev/null and b/.yarn/cache/ripemd160-npm-2.0.2-76333df6313d970889e004e861660f7d3802ed8ce5085557b3b0c280647ec9f7.zip differ diff --git a/.yarn/cache/rollup-npm-1.10.1-c784718f905a637f30e6f6d868644035e3f7df09fa14f89bd1f417709a6fe722.zip b/.yarn/cache/rollup-npm-1.10.1-c784718f905a637f30e6f6d868644035e3f7df09fa14f89bd1f417709a6fe722.zip new file mode 100644 index 0000000..64ba3c3 Binary files /dev/null and b/.yarn/cache/rollup-npm-1.10.1-c784718f905a637f30e6f6d868644035e3f7df09fa14f89bd1f417709a6fe722.zip differ diff --git a/.yarn/cache/rollup-plugin-commonjs-npm-9.3.4-b09da00a5f5a6de1ddfc894d56c6986bb733004c032a058adfc1c552d0a5f872.zip b/.yarn/cache/rollup-plugin-commonjs-npm-9.3.4-b09da00a5f5a6de1ddfc894d56c6986bb733004c032a058adfc1c552d0a5f872.zip new file mode 100644 index 0000000..ab1f5c0 Binary files /dev/null and b/.yarn/cache/rollup-plugin-commonjs-npm-9.3.4-b09da00a5f5a6de1ddfc894d56c6986bb733004c032a058adfc1c552d0a5f872.zip differ diff --git a/.yarn/cache/rollup-plugin-pnp-resolve-npm-1.0.1-d74200be75fa69f919bac58cd7dcb2360a2a6c4210957a498819655e4c412886.zip b/.yarn/cache/rollup-plugin-pnp-resolve-npm-1.0.1-d74200be75fa69f919bac58cd7dcb2360a2a6c4210957a498819655e4c412886.zip new file mode 100644 index 0000000..c51ed4a Binary files /dev/null and b/.yarn/cache/rollup-plugin-pnp-resolve-npm-1.0.1-d74200be75fa69f919bac58cd7dcb2360a2a6c4210957a498819655e4c412886.zip differ diff --git a/.yarn/cache/rollup-pluginutils-npm-2.6.0-afdaa66cfed60938315db924bb391de538688750ad1e860707a2388445bdb7d4.zip b/.yarn/cache/rollup-pluginutils-npm-2.6.0-afdaa66cfed60938315db924bb391de538688750ad1e860707a2388445bdb7d4.zip new file mode 100644 index 0000000..efc22a7 Binary files /dev/null and b/.yarn/cache/rollup-pluginutils-npm-2.6.0-afdaa66cfed60938315db924bb391de538688750ad1e860707a2388445bdb7d4.zip differ diff --git a/.yarn/cache/rsvp-npm-4.8.4-4759e505b4ee0d9f76b5c964ff598c90e0a4d270716d445d31653f6c8d958a92.zip b/.yarn/cache/rsvp-npm-4.8.4-4759e505b4ee0d9f76b5c964ff598c90e0a4d270716d445d31653f6c8d958a92.zip new file mode 100644 index 0000000..d98aed3 Binary files /dev/null and b/.yarn/cache/rsvp-npm-4.8.4-4759e505b4ee0d9f76b5c964ff598c90e0a4d270716d445d31653f6c8d958a92.zip differ diff --git a/.yarn/cache/run-async-npm-2.3.0-009ea505cc8e59ebdf7bedcd80b1a3cc6fde57e59b7b0714ab2dc81bead643aa.zip b/.yarn/cache/run-async-npm-2.3.0-009ea505cc8e59ebdf7bedcd80b1a3cc6fde57e59b7b0714ab2dc81bead643aa.zip new file mode 100644 index 0000000..83584f1 Binary files /dev/null and b/.yarn/cache/run-async-npm-2.3.0-009ea505cc8e59ebdf7bedcd80b1a3cc6fde57e59b7b0714ab2dc81bead643aa.zip differ diff --git a/.yarn/cache/run-queue-npm-1.0.3-c6679ced1b902636c794d452e2593e48ba90c183dec0b367af2900fe4d56d733.zip b/.yarn/cache/run-queue-npm-1.0.3-c6679ced1b902636c794d452e2593e48ba90c183dec0b367af2900fe4d56d733.zip new file mode 100644 index 0000000..d849e8c Binary files /dev/null and b/.yarn/cache/run-queue-npm-1.0.3-c6679ced1b902636c794d452e2593e48ba90c183dec0b367af2900fe4d56d733.zip differ diff --git a/.yarn/cache/rxjs-compat-npm-6.5.1-3ee8d189822e88bee6946f614c59f835dd9ae81cd607991c390e32ede3af08e9.zip b/.yarn/cache/rxjs-compat-npm-6.5.1-3ee8d189822e88bee6946f614c59f835dd9ae81cd607991c390e32ede3af08e9.zip new file mode 100644 index 0000000..3b7100a Binary files /dev/null and b/.yarn/cache/rxjs-compat-npm-6.5.1-3ee8d189822e88bee6946f614c59f835dd9ae81cd607991c390e32ede3af08e9.zip differ diff --git a/.yarn/cache/rxjs-npm-6.5.1-d778d2b5d3bafea06f728f430abfa7053fee18c4a9fe99ed7605c997247d49d8.zip b/.yarn/cache/rxjs-npm-6.5.1-d778d2b5d3bafea06f728f430abfa7053fee18c4a9fe99ed7605c997247d49d8.zip new file mode 100644 index 0000000..a9777cd Binary files /dev/null and b/.yarn/cache/rxjs-npm-6.5.1-d778d2b5d3bafea06f728f430abfa7053fee18c4a9fe99ed7605c997247d49d8.zip differ diff --git a/.yarn/cache/safe-buffer-npm-5.1.2-21d427e513509e077f1ab34a7dd8d14f32096e3565594fede6ca263eccd868f2.zip b/.yarn/cache/safe-buffer-npm-5.1.2-21d427e513509e077f1ab34a7dd8d14f32096e3565594fede6ca263eccd868f2.zip new file mode 100644 index 0000000..cf2d876 Binary files /dev/null and b/.yarn/cache/safe-buffer-npm-5.1.2-21d427e513509e077f1ab34a7dd8d14f32096e3565594fede6ca263eccd868f2.zip differ diff --git a/.yarn/cache/safe-regex-npm-1.1.0-bb044a6193a62942ef87aae464401d5275b4882eb473364eb918a6bcd77d2ac4.zip b/.yarn/cache/safe-regex-npm-1.1.0-bb044a6193a62942ef87aae464401d5275b4882eb473364eb918a6bcd77d2ac4.zip new file mode 100644 index 0000000..9dbd33a Binary files /dev/null and b/.yarn/cache/safe-regex-npm-1.1.0-bb044a6193a62942ef87aae464401d5275b4882eb473364eb918a6bcd77d2ac4.zip differ diff --git a/.yarn/cache/safer-buffer-npm-2.1.2-94e2886027ad0565245108a47586376fc7f128f432412cb9586bdb88bc4048b9.zip b/.yarn/cache/safer-buffer-npm-2.1.2-94e2886027ad0565245108a47586376fc7f128f432412cb9586bdb88bc4048b9.zip new file mode 100644 index 0000000..422d611 Binary files /dev/null and b/.yarn/cache/safer-buffer-npm-2.1.2-94e2886027ad0565245108a47586376fc7f128f432412cb9586bdb88bc4048b9.zip differ diff --git a/.yarn/cache/sane-npm-4.1.0-f9b8852b5aa40e169de33c03f7e517662dd2a207f039ae0de6d526d5ebf526aa.zip b/.yarn/cache/sane-npm-4.1.0-f9b8852b5aa40e169de33c03f7e517662dd2a207f039ae0de6d526d5ebf526aa.zip new file mode 100644 index 0000000..12716f4 Binary files /dev/null and b/.yarn/cache/sane-npm-4.1.0-f9b8852b5aa40e169de33c03f7e517662dd2a207f039ae0de6d526d5ebf526aa.zip differ diff --git a/.yarn/cache/sax-npm-1.2.4-a8badd55720d95400b379c5a0763fa9f1049f4d4051818726e5a7e5f9b167d3d.zip b/.yarn/cache/sax-npm-1.2.4-a8badd55720d95400b379c5a0763fa9f1049f4d4051818726e5a7e5f9b167d3d.zip new file mode 100644 index 0000000..0666710 Binary files /dev/null and b/.yarn/cache/sax-npm-1.2.4-a8badd55720d95400b379c5a0763fa9f1049f4d4051818726e5a7e5f9b167d3d.zip differ diff --git a/.yarn/cache/scheduler-npm-0.13.6-15624f21a0746c1e4e298de36c58348bea70d7f67ef0d89a18bbb6e12db776e1.zip b/.yarn/cache/scheduler-npm-0.13.6-15624f21a0746c1e4e298de36c58348bea70d7f67ef0d89a18bbb6e12db776e1.zip new file mode 100644 index 0000000..c4818e1 Binary files /dev/null and b/.yarn/cache/scheduler-npm-0.13.6-15624f21a0746c1e4e298de36c58348bea70d7f67ef0d89a18bbb6e12db776e1.zip differ diff --git a/.yarn/cache/schema-utils-npm-1.0.0-72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4.zip b/.yarn/cache/schema-utils-npm-1.0.0-72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4.zip new file mode 100644 index 0000000..fd72e73 Binary files /dev/null and b/.yarn/cache/schema-utils-npm-1.0.0-72a10026d1e4aa98837bcd346d69988ccee98290d607080bb9594fa9b01f47e4.zip differ diff --git a/.yarn/cache/semver-greatest-satisfied-range-npm-1.1.0-918cda662f49baf1d26858d9674e9f2942f1bc230061dc8d2ee3b7280d53c383.zip b/.yarn/cache/semver-greatest-satisfied-range-npm-1.1.0-918cda662f49baf1d26858d9674e9f2942f1bc230061dc8d2ee3b7280d53c383.zip new file mode 100644 index 0000000..54693bd Binary files /dev/null and b/.yarn/cache/semver-greatest-satisfied-range-npm-1.1.0-918cda662f49baf1d26858d9674e9f2942f1bc230061dc8d2ee3b7280d53c383.zip differ diff --git a/.yarn/cache/semver-npm-5.3.0-8505dbd5aae5f1172ccde37efe99ba39fccb8d28a62b071e8d631266416dc07d.zip b/.yarn/cache/semver-npm-5.3.0-8505dbd5aae5f1172ccde37efe99ba39fccb8d28a62b071e8d631266416dc07d.zip new file mode 100644 index 0000000..988e114 Binary files /dev/null and b/.yarn/cache/semver-npm-5.3.0-8505dbd5aae5f1172ccde37efe99ba39fccb8d28a62b071e8d631266416dc07d.zip differ diff --git a/.yarn/cache/semver-npm-5.7.0-90d221b6db8ac49cd695be07e32e88e80877263c518448ddf92b5eb2c8d58ebe.zip b/.yarn/cache/semver-npm-5.7.0-90d221b6db8ac49cd695be07e32e88e80877263c518448ddf92b5eb2c8d58ebe.zip new file mode 100644 index 0000000..f9ba411 Binary files /dev/null and b/.yarn/cache/semver-npm-5.7.0-90d221b6db8ac49cd695be07e32e88e80877263c518448ddf92b5eb2c8d58ebe.zip differ diff --git a/.yarn/cache/semver-npm-6.0.0-6d3c916af92382b77fc63e229fa017021e7ef0b26d59f79c418b817a05bead08.zip b/.yarn/cache/semver-npm-6.0.0-6d3c916af92382b77fc63e229fa017021e7ef0b26d59f79c418b817a05bead08.zip new file mode 100644 index 0000000..a1e05c3 Binary files /dev/null and b/.yarn/cache/semver-npm-6.0.0-6d3c916af92382b77fc63e229fa017021e7ef0b26d59f79c418b817a05bead08.zip differ diff --git a/.yarn/cache/send-npm-0.16.2-09b2f1ccb867d67c13df30cdef70d295526725397e8e5147927f8606210a2fee.zip b/.yarn/cache/send-npm-0.16.2-09b2f1ccb867d67c13df30cdef70d295526725397e8e5147927f8606210a2fee.zip new file mode 100644 index 0000000..0f63b3d Binary files /dev/null and b/.yarn/cache/send-npm-0.16.2-09b2f1ccb867d67c13df30cdef70d295526725397e8e5147927f8606210a2fee.zip differ diff --git a/.yarn/cache/serialize-javascript-npm-1.7.0-6242f21a549e4969e20a22ada37dd930ba1f63dba2f4c50ee8b9a1e1ccc5cba0.zip b/.yarn/cache/serialize-javascript-npm-1.7.0-6242f21a549e4969e20a22ada37dd930ba1f63dba2f4c50ee8b9a1e1ccc5cba0.zip new file mode 100644 index 0000000..5789f59 Binary files /dev/null and b/.yarn/cache/serialize-javascript-npm-1.7.0-6242f21a549e4969e20a22ada37dd930ba1f63dba2f4c50ee8b9a1e1ccc5cba0.zip differ diff --git a/.yarn/cache/serve-static-npm-1.13.2-165e0a07830f2dacd607a6314f91a9b9d410aa50ff087f52e6336fa1f16bc08a.zip b/.yarn/cache/serve-static-npm-1.13.2-165e0a07830f2dacd607a6314f91a9b9d410aa50ff087f52e6336fa1f16bc08a.zip new file mode 100644 index 0000000..138afa1 Binary files /dev/null and b/.yarn/cache/serve-static-npm-1.13.2-165e0a07830f2dacd607a6314f91a9b9d410aa50ff087f52e6336fa1f16bc08a.zip differ diff --git a/.yarn/cache/set-blocking-npm-2.0.0-9cc208f820bf24e65593f97e3016a8bc99e8237a7b359f58eef36afdfbecc94f.zip b/.yarn/cache/set-blocking-npm-2.0.0-9cc208f820bf24e65593f97e3016a8bc99e8237a7b359f58eef36afdfbecc94f.zip new file mode 100644 index 0000000..ad9af2a Binary files /dev/null and b/.yarn/cache/set-blocking-npm-2.0.0-9cc208f820bf24e65593f97e3016a8bc99e8237a7b359f58eef36afdfbecc94f.zip differ diff --git a/.yarn/cache/set-value-npm-0.4.3-5a6a057a0cd86465de897f20342356ea827499957740325247e52bbea3aed4a5.zip b/.yarn/cache/set-value-npm-0.4.3-5a6a057a0cd86465de897f20342356ea827499957740325247e52bbea3aed4a5.zip new file mode 100644 index 0000000..489f3b0 Binary files /dev/null and b/.yarn/cache/set-value-npm-0.4.3-5a6a057a0cd86465de897f20342356ea827499957740325247e52bbea3aed4a5.zip differ diff --git a/.yarn/cache/set-value-npm-2.0.0-dffb4607b74507ad1dd46e6a000c565eb0977865b113b5fec8033fd5b107b3ea.zip b/.yarn/cache/set-value-npm-2.0.0-dffb4607b74507ad1dd46e6a000c565eb0977865b113b5fec8033fd5b107b3ea.zip new file mode 100644 index 0000000..3799de1 Binary files /dev/null and b/.yarn/cache/set-value-npm-2.0.0-dffb4607b74507ad1dd46e6a000c565eb0977865b113b5fec8033fd5b107b3ea.zip differ diff --git a/.yarn/cache/setimmediate-npm-1.0.5-41964e92dad19b0eb773ea9a9f281525964e6472f723f40ee53a8d7361b59b70.zip b/.yarn/cache/setimmediate-npm-1.0.5-41964e92dad19b0eb773ea9a9f281525964e6472f723f40ee53a8d7361b59b70.zip new file mode 100644 index 0000000..69fa65e Binary files /dev/null and b/.yarn/cache/setimmediate-npm-1.0.5-41964e92dad19b0eb773ea9a9f281525964e6472f723f40ee53a8d7361b59b70.zip differ diff --git a/.yarn/cache/setprototypeof-npm-1.1.0-8fc47ab25b40d47987d73fe572be160b53f1f18535c970f6f15cac10286f16ff.zip b/.yarn/cache/setprototypeof-npm-1.1.0-8fc47ab25b40d47987d73fe572be160b53f1f18535c970f6f15cac10286f16ff.zip new file mode 100644 index 0000000..e3a7d40 Binary files /dev/null and b/.yarn/cache/setprototypeof-npm-1.1.0-8fc47ab25b40d47987d73fe572be160b53f1f18535c970f6f15cac10286f16ff.zip differ diff --git a/.yarn/cache/sha.js-npm-2.4.11-e84cb9d8bb1af82cfde0367706205ae268622d7b80156b9ee651d9fed67945a1.zip b/.yarn/cache/sha.js-npm-2.4.11-e84cb9d8bb1af82cfde0367706205ae268622d7b80156b9ee651d9fed67945a1.zip new file mode 100644 index 0000000..af429b7 Binary files /dev/null and b/.yarn/cache/sha.js-npm-2.4.11-e84cb9d8bb1af82cfde0367706205ae268622d7b80156b9ee651d9fed67945a1.zip differ diff --git a/.yarn/cache/shebang-command-npm-1.2.0-30a77bb393967a24b6fd0665d4c4248a8fa048f3f4b163972abe33fff3060151.zip b/.yarn/cache/shebang-command-npm-1.2.0-30a77bb393967a24b6fd0665d4c4248a8fa048f3f4b163972abe33fff3060151.zip new file mode 100644 index 0000000..1802f32 Binary files /dev/null and b/.yarn/cache/shebang-command-npm-1.2.0-30a77bb393967a24b6fd0665d4c4248a8fa048f3f4b163972abe33fff3060151.zip differ diff --git a/.yarn/cache/shebang-regex-npm-1.0.0-59169b4f7333c2441090fa27c3a4f4c82818e5dc77b2b2d7768060acaf112933.zip b/.yarn/cache/shebang-regex-npm-1.0.0-59169b4f7333c2441090fa27c3a4f4c82818e5dc77b2b2d7768060acaf112933.zip new file mode 100644 index 0000000..5754879 Binary files /dev/null and b/.yarn/cache/shebang-regex-npm-1.0.0-59169b4f7333c2441090fa27c3a4f4c82818e5dc77b2b2d7768060acaf112933.zip differ diff --git a/.yarn/cache/shellwords-npm-0.1.1-6b819b33088a15baa818a7b5c1126d240763068c31a60bb3573ddcdd46333211.zip b/.yarn/cache/shellwords-npm-0.1.1-6b819b33088a15baa818a7b5c1126d240763068c31a60bb3573ddcdd46333211.zip new file mode 100644 index 0000000..7dc0106 Binary files /dev/null and b/.yarn/cache/shellwords-npm-0.1.1-6b819b33088a15baa818a7b5c1126d240763068c31a60bb3573ddcdd46333211.zip differ diff --git a/.yarn/cache/signal-exit-npm-3.0.2-d90eb939325af718053937395a324f00526292cae49f4e3030c757a93fdca5df.zip b/.yarn/cache/signal-exit-npm-3.0.2-d90eb939325af718053937395a324f00526292cae49f4e3030c757a93fdca5df.zip new file mode 100644 index 0000000..e3b79c9 Binary files /dev/null and b/.yarn/cache/signal-exit-npm-3.0.2-d90eb939325af718053937395a324f00526292cae49f4e3030c757a93fdca5df.zip differ diff --git a/.yarn/cache/sisteransi-npm-1.0.0-afe2882a8ebdbe4b83f1048db49234bffddb1e5b2a5353859e08abb5f3b7a5fb.zip b/.yarn/cache/sisteransi-npm-1.0.0-afe2882a8ebdbe4b83f1048db49234bffddb1e5b2a5353859e08abb5f3b7a5fb.zip new file mode 100644 index 0000000..309983c Binary files /dev/null and b/.yarn/cache/sisteransi-npm-1.0.0-afe2882a8ebdbe4b83f1048db49234bffddb1e5b2a5353859e08abb5f3b7a5fb.zip differ diff --git a/.yarn/cache/slash-npm-2.0.0-749b7381986a4cd4e31f00f116037d5a9f3d55e22c57fd12042e11c8eb54894a.zip b/.yarn/cache/slash-npm-2.0.0-749b7381986a4cd4e31f00f116037d5a9f3d55e22c57fd12042e11c8eb54894a.zip new file mode 100644 index 0000000..5d635be Binary files /dev/null and b/.yarn/cache/slash-npm-2.0.0-749b7381986a4cd4e31f00f116037d5a9f3d55e22c57fd12042e11c8eb54894a.zip differ diff --git a/.yarn/cache/slice-ansi-npm-2.1.0-306d3e5c88b5b5ec787e7641b9a2dff8b8705a9d7acee3dfeaf0ae93a6f4a152.zip b/.yarn/cache/slice-ansi-npm-2.1.0-306d3e5c88b5b5ec787e7641b9a2dff8b8705a9d7acee3dfeaf0ae93a6f4a152.zip new file mode 100644 index 0000000..7c304fb Binary files /dev/null and b/.yarn/cache/slice-ansi-npm-2.1.0-306d3e5c88b5b5ec787e7641b9a2dff8b8705a9d7acee3dfeaf0ae93a6f4a152.zip differ diff --git a/.yarn/cache/snapdragon-node-npm-2.1.1-34ba11a53b283d920b3a210e0f66393326b96d9910eb90bf050c50cce789afd4.zip b/.yarn/cache/snapdragon-node-npm-2.1.1-34ba11a53b283d920b3a210e0f66393326b96d9910eb90bf050c50cce789afd4.zip new file mode 100644 index 0000000..621a969 Binary files /dev/null and b/.yarn/cache/snapdragon-node-npm-2.1.1-34ba11a53b283d920b3a210e0f66393326b96d9910eb90bf050c50cce789afd4.zip differ diff --git a/.yarn/cache/snapdragon-npm-0.8.2-1038bc533997241dce9c8d5dbeba5ca87248506a19dc9f63da5e7f8877281618.zip b/.yarn/cache/snapdragon-npm-0.8.2-1038bc533997241dce9c8d5dbeba5ca87248506a19dc9f63da5e7f8877281618.zip new file mode 100644 index 0000000..eca45a2 Binary files /dev/null and b/.yarn/cache/snapdragon-npm-0.8.2-1038bc533997241dce9c8d5dbeba5ca87248506a19dc9f63da5e7f8877281618.zip differ diff --git a/.yarn/cache/snapdragon-util-npm-3.0.1-a5940a2858f017d531e9cbfe474326f36383530d1aba6acd7b184d7965834e03.zip b/.yarn/cache/snapdragon-util-npm-3.0.1-a5940a2858f017d531e9cbfe474326f36383530d1aba6acd7b184d7965834e03.zip new file mode 100644 index 0000000..b14f498 Binary files /dev/null and b/.yarn/cache/snapdragon-util-npm-3.0.1-a5940a2858f017d531e9cbfe474326f36383530d1aba6acd7b184d7965834e03.zip differ diff --git a/.yarn/cache/source-list-map-npm-2.0.1-e3053c0559322471c350687e325d102137556ffcfc0f69f4ad3e30b59393c705.zip b/.yarn/cache/source-list-map-npm-2.0.1-e3053c0559322471c350687e325d102137556ffcfc0f69f4ad3e30b59393c705.zip new file mode 100644 index 0000000..284e2e0 Binary files /dev/null and b/.yarn/cache/source-list-map-npm-2.0.1-e3053c0559322471c350687e325d102137556ffcfc0f69f4ad3e30b59393c705.zip differ diff --git a/.yarn/cache/source-map-npm-0.5.7-e1044ec2e814649a218bb928c5cb8d195a1108fc7e3c57f5a830139d2dcac8cb.zip b/.yarn/cache/source-map-npm-0.5.7-e1044ec2e814649a218bb928c5cb8d195a1108fc7e3c57f5a830139d2dcac8cb.zip new file mode 100644 index 0000000..2579583 Binary files /dev/null and b/.yarn/cache/source-map-npm-0.5.7-e1044ec2e814649a218bb928c5cb8d195a1108fc7e3c57f5a830139d2dcac8cb.zip differ diff --git a/.yarn/cache/source-map-npm-0.6.1-dd48ef0bb938492fa1deb8274ed8159b7196a421132ae6c6b86bcb8c49f0740c.zip b/.yarn/cache/source-map-npm-0.6.1-dd48ef0bb938492fa1deb8274ed8159b7196a421132ae6c6b86bcb8c49f0740c.zip new file mode 100644 index 0000000..4ff00e0 Binary files /dev/null and b/.yarn/cache/source-map-npm-0.6.1-dd48ef0bb938492fa1deb8274ed8159b7196a421132ae6c6b86bcb8c49f0740c.zip differ diff --git a/.yarn/cache/source-map-resolve-npm-0.5.2-00ae448185ed5ccad0c925a152c5f57b5ffe6e464ad64cf6aaa45ad8522201e3.zip b/.yarn/cache/source-map-resolve-npm-0.5.2-00ae448185ed5ccad0c925a152c5f57b5ffe6e464ad64cf6aaa45ad8522201e3.zip new file mode 100644 index 0000000..0f74af0 Binary files /dev/null and b/.yarn/cache/source-map-resolve-npm-0.5.2-00ae448185ed5ccad0c925a152c5f57b5ffe6e464ad64cf6aaa45ad8522201e3.zip differ diff --git a/.yarn/cache/source-map-support-npm-0.5.12-f9718d24cce2f6a3d7e02a0bf7c2152c29429274727e790f567a8cc7a3676649.zip b/.yarn/cache/source-map-support-npm-0.5.12-f9718d24cce2f6a3d7e02a0bf7c2152c29429274727e790f567a8cc7a3676649.zip new file mode 100644 index 0000000..86c24a6 Binary files /dev/null and b/.yarn/cache/source-map-support-npm-0.5.12-f9718d24cce2f6a3d7e02a0bf7c2152c29429274727e790f567a8cc7a3676649.zip differ diff --git a/.yarn/cache/source-map-url-npm-0.4.0-46b7385bad72e50d77a4beb6f67b087f5fad18c1e665690e4dbd0b254a1f428f.zip b/.yarn/cache/source-map-url-npm-0.4.0-46b7385bad72e50d77a4beb6f67b087f5fad18c1e665690e4dbd0b254a1f428f.zip new file mode 100644 index 0000000..fac9407 Binary files /dev/null and b/.yarn/cache/source-map-url-npm-0.4.0-46b7385bad72e50d77a4beb6f67b087f5fad18c1e665690e4dbd0b254a1f428f.zip differ diff --git a/.yarn/cache/sourcemap-codec-npm-1.4.4-b79d27c67e3daa22173c6dfa50989b3f2841edc190eaba435c4179cc7dfdc253.zip b/.yarn/cache/sourcemap-codec-npm-1.4.4-b79d27c67e3daa22173c6dfa50989b3f2841edc190eaba435c4179cc7dfdc253.zip new file mode 100644 index 0000000..e5110fb Binary files /dev/null and b/.yarn/cache/sourcemap-codec-npm-1.4.4-b79d27c67e3daa22173c6dfa50989b3f2841edc190eaba435c4179cc7dfdc253.zip differ diff --git a/.yarn/cache/sparkles-npm-1.0.1-021e6d0b051cd27801975f42c0e51b68c3eb1eb97976ee748f17c13087971cad.zip b/.yarn/cache/sparkles-npm-1.0.1-021e6d0b051cd27801975f42c0e51b68c3eb1eb97976ee748f17c13087971cad.zip new file mode 100644 index 0000000..736f301 Binary files /dev/null and b/.yarn/cache/sparkles-npm-1.0.1-021e6d0b051cd27801975f42c0e51b68c3eb1eb97976ee748f17c13087971cad.zip differ diff --git a/.yarn/cache/spdx-correct-npm-3.1.0-aa15198e21cb332d846e11e1b01e669bccd3ac74c6ebb51c2ab9ff288b988296.zip b/.yarn/cache/spdx-correct-npm-3.1.0-aa15198e21cb332d846e11e1b01e669bccd3ac74c6ebb51c2ab9ff288b988296.zip new file mode 100644 index 0000000..19f25d6 Binary files /dev/null and b/.yarn/cache/spdx-correct-npm-3.1.0-aa15198e21cb332d846e11e1b01e669bccd3ac74c6ebb51c2ab9ff288b988296.zip differ diff --git a/.yarn/cache/spdx-exceptions-npm-2.2.0-96769442e221eeb9369b38b2441a6f4a80c5a8a736e0e1f1141b45c16a3d1b9c.zip b/.yarn/cache/spdx-exceptions-npm-2.2.0-96769442e221eeb9369b38b2441a6f4a80c5a8a736e0e1f1141b45c16a3d1b9c.zip new file mode 100644 index 0000000..94d64e2 Binary files /dev/null and b/.yarn/cache/spdx-exceptions-npm-2.2.0-96769442e221eeb9369b38b2441a6f4a80c5a8a736e0e1f1141b45c16a3d1b9c.zip differ diff --git a/.yarn/cache/spdx-expression-parse-npm-3.0.0-7618396a5cb5ee99d225bae37e5c5c1fb3771151766db35ed3391f5a91084991.zip b/.yarn/cache/spdx-expression-parse-npm-3.0.0-7618396a5cb5ee99d225bae37e5c5c1fb3771151766db35ed3391f5a91084991.zip new file mode 100644 index 0000000..80739f8 Binary files /dev/null and b/.yarn/cache/spdx-expression-parse-npm-3.0.0-7618396a5cb5ee99d225bae37e5c5c1fb3771151766db35ed3391f5a91084991.zip differ diff --git a/.yarn/cache/spdx-license-ids-npm-3.0.4-33bef4d0e986ed91e5fb15b3d4ee1850936f925ff1b08763fa9897995b8c03aa.zip b/.yarn/cache/spdx-license-ids-npm-3.0.4-33bef4d0e986ed91e5fb15b3d4ee1850936f925ff1b08763fa9897995b8c03aa.zip new file mode 100644 index 0000000..c278b5e Binary files /dev/null and b/.yarn/cache/spdx-license-ids-npm-3.0.4-33bef4d0e986ed91e5fb15b3d4ee1850936f925ff1b08763fa9897995b8c03aa.zip differ diff --git a/.yarn/cache/split-string-npm-3.1.0-5562e242fde59dc44dcb3dfdc56fe64099d8150c7f26fad968147605268cbe13.zip b/.yarn/cache/split-string-npm-3.1.0-5562e242fde59dc44dcb3dfdc56fe64099d8150c7f26fad968147605268cbe13.zip new file mode 100644 index 0000000..02cc80d Binary files /dev/null and b/.yarn/cache/split-string-npm-3.1.0-5562e242fde59dc44dcb3dfdc56fe64099d8150c7f26fad968147605268cbe13.zip differ diff --git a/.yarn/cache/sprintf-js-npm-1.0.3-bde65fdf34028eff6da06450f0c706868684639e3c12d9218cf57c2b68c1f18c.zip b/.yarn/cache/sprintf-js-npm-1.0.3-bde65fdf34028eff6da06450f0c706868684639e3c12d9218cf57c2b68c1f18c.zip new file mode 100644 index 0000000..1d105aa Binary files /dev/null and b/.yarn/cache/sprintf-js-npm-1.0.3-bde65fdf34028eff6da06450f0c706868684639e3c12d9218cf57c2b68c1f18c.zip differ diff --git a/.yarn/cache/sshpk-npm-1.16.1-0664e7a47e5037c757b0845a60231706c94f903afa5ca2fb68a9f11300ffd5e5.zip b/.yarn/cache/sshpk-npm-1.16.1-0664e7a47e5037c757b0845a60231706c94f903afa5ca2fb68a9f11300ffd5e5.zip new file mode 100644 index 0000000..f6e5ec2 Binary files /dev/null and b/.yarn/cache/sshpk-npm-1.16.1-0664e7a47e5037c757b0845a60231706c94f903afa5ca2fb68a9f11300ffd5e5.zip differ diff --git a/.yarn/cache/ssri-npm-6.0.1-49e766705c3d90e1be8072683fc32b0f5f6e0e689bb7e463486f4cb2cf4fd5ca.zip b/.yarn/cache/ssri-npm-6.0.1-49e766705c3d90e1be8072683fc32b0f5f6e0e689bb7e463486f4cb2cf4fd5ca.zip new file mode 100644 index 0000000..1e0f6f9 Binary files /dev/null and b/.yarn/cache/ssri-npm-6.0.1-49e766705c3d90e1be8072683fc32b0f5f6e0e689bb7e463486f4cb2cf4fd5ca.zip differ diff --git a/.yarn/cache/stack-trace-npm-0.0.10-bb4a78f731d2dd5b63ed3fb871bf633a00e1136ba992e1527c127da3e42dcd9e.zip b/.yarn/cache/stack-trace-npm-0.0.10-bb4a78f731d2dd5b63ed3fb871bf633a00e1136ba992e1527c127da3e42dcd9e.zip new file mode 100644 index 0000000..2c21937 Binary files /dev/null and b/.yarn/cache/stack-trace-npm-0.0.10-bb4a78f731d2dd5b63ed3fb871bf633a00e1136ba992e1527c127da3e42dcd9e.zip differ diff --git a/.yarn/cache/stack-utils-npm-1.0.2-6cf570d3074ffa33d528687f9aae4e2248073de0fcb38fbd9ab6f9a59f831999.zip b/.yarn/cache/stack-utils-npm-1.0.2-6cf570d3074ffa33d528687f9aae4e2248073de0fcb38fbd9ab6f9a59f831999.zip new file mode 100644 index 0000000..8049fb7 Binary files /dev/null and b/.yarn/cache/stack-utils-npm-1.0.2-6cf570d3074ffa33d528687f9aae4e2248073de0fcb38fbd9ab6f9a59f831999.zip differ diff --git a/.yarn/cache/static-extend-npm-0.1.2-089d64824504bf5aa3ebdaf7b21ba7695063d61a908f95451be43e8c5d120dae.zip b/.yarn/cache/static-extend-npm-0.1.2-089d64824504bf5aa3ebdaf7b21ba7695063d61a908f95451be43e8c5d120dae.zip new file mode 100644 index 0000000..0c011d1 Binary files /dev/null and b/.yarn/cache/static-extend-npm-0.1.2-089d64824504bf5aa3ebdaf7b21ba7695063d61a908f95451be43e8c5d120dae.zip differ diff --git a/.yarn/cache/statuses-npm-1.4.0-c0dfe9f92376475a7fb8faaacd8a4debadd3c25eeb716b6a4e507aa9d35fc5df.zip b/.yarn/cache/statuses-npm-1.4.0-c0dfe9f92376475a7fb8faaacd8a4debadd3c25eeb716b6a4e507aa9d35fc5df.zip new file mode 100644 index 0000000..1d35a0f Binary files /dev/null and b/.yarn/cache/statuses-npm-1.4.0-c0dfe9f92376475a7fb8faaacd8a4debadd3c25eeb716b6a4e507aa9d35fc5df.zip differ diff --git a/.yarn/cache/stealthy-require-npm-1.1.1-59a10a59e1e49079ff03888b194528080b91eaf1f77e54d458c32f2ffc439e89.zip b/.yarn/cache/stealthy-require-npm-1.1.1-59a10a59e1e49079ff03888b194528080b91eaf1f77e54d458c32f2ffc439e89.zip new file mode 100644 index 0000000..41cb14c Binary files /dev/null and b/.yarn/cache/stealthy-require-npm-1.1.1-59a10a59e1e49079ff03888b194528080b91eaf1f77e54d458c32f2ffc439e89.zip differ diff --git a/.yarn/cache/stream-browserify-npm-2.0.2-7199e1be68bf1778f3fd93d4004b9e849e83b3bd8f3f488b3bc2a3cd16c93be6.zip b/.yarn/cache/stream-browserify-npm-2.0.2-7199e1be68bf1778f3fd93d4004b9e849e83b3bd8f3f488b3bc2a3cd16c93be6.zip new file mode 100644 index 0000000..64a9b2b Binary files /dev/null and b/.yarn/cache/stream-browserify-npm-2.0.2-7199e1be68bf1778f3fd93d4004b9e849e83b3bd8f3f488b3bc2a3cd16c93be6.zip differ diff --git a/.yarn/cache/stream-each-npm-1.2.3-e1b79d8c21e6783075951e07b4264787f9f5598011fa63b4ba58eb27dd40f39f.zip b/.yarn/cache/stream-each-npm-1.2.3-e1b79d8c21e6783075951e07b4264787f9f5598011fa63b4ba58eb27dd40f39f.zip new file mode 100644 index 0000000..3151131 Binary files /dev/null and b/.yarn/cache/stream-each-npm-1.2.3-e1b79d8c21e6783075951e07b4264787f9f5598011fa63b4ba58eb27dd40f39f.zip differ diff --git a/.yarn/cache/stream-exhaust-npm-1.0.2-6bd691fa106508da09804da07e3710819ff9b6be691fbc7f07f3cde310b1e4a7.zip b/.yarn/cache/stream-exhaust-npm-1.0.2-6bd691fa106508da09804da07e3710819ff9b6be691fbc7f07f3cde310b1e4a7.zip new file mode 100644 index 0000000..8e9339d Binary files /dev/null and b/.yarn/cache/stream-exhaust-npm-1.0.2-6bd691fa106508da09804da07e3710819ff9b6be691fbc7f07f3cde310b1e4a7.zip differ diff --git a/.yarn/cache/stream-http-npm-2.8.3-6bacb614ae96dfb5eb48fac2bb66a16b7f1ea23b46bb209fd570e6e385f31b0e.zip b/.yarn/cache/stream-http-npm-2.8.3-6bacb614ae96dfb5eb48fac2bb66a16b7f1ea23b46bb209fd570e6e385f31b0e.zip new file mode 100644 index 0000000..40d507b Binary files /dev/null and b/.yarn/cache/stream-http-npm-2.8.3-6bacb614ae96dfb5eb48fac2bb66a16b7f1ea23b46bb209fd570e6e385f31b0e.zip differ diff --git a/.yarn/cache/stream-shift-npm-1.0.0-6c69c4113cd4c5884a516f87031693c4b058cd90f1f9cc8856419f7554bb2196.zip b/.yarn/cache/stream-shift-npm-1.0.0-6c69c4113cd4c5884a516f87031693c4b058cd90f1f9cc8856419f7554bb2196.zip new file mode 100644 index 0000000..e7d5e6b Binary files /dev/null and b/.yarn/cache/stream-shift-npm-1.0.0-6c69c4113cd4c5884a516f87031693c4b058cd90f1f9cc8856419f7554bb2196.zip differ diff --git a/.yarn/cache/string-length-npm-2.0.0-c2ac3e3cdd343689661819d9eab4ab7db2e37dbd7de2c6a9ef8b6e875c120417.zip b/.yarn/cache/string-length-npm-2.0.0-c2ac3e3cdd343689661819d9eab4ab7db2e37dbd7de2c6a9ef8b6e875c120417.zip new file mode 100644 index 0000000..ffc2d89 Binary files /dev/null and b/.yarn/cache/string-length-npm-2.0.0-c2ac3e3cdd343689661819d9eab4ab7db2e37dbd7de2c6a9ef8b6e875c120417.zip differ diff --git a/.yarn/cache/string-width-npm-1.0.2-414242a537280882b2e413e129aee409602c9b117825da42114f0843b3e07183.zip b/.yarn/cache/string-width-npm-1.0.2-414242a537280882b2e413e129aee409602c9b117825da42114f0843b3e07183.zip new file mode 100644 index 0000000..05b21cd Binary files /dev/null and b/.yarn/cache/string-width-npm-1.0.2-414242a537280882b2e413e129aee409602c9b117825da42114f0843b3e07183.zip differ diff --git a/.yarn/cache/string-width-npm-2.1.1-f7470cad46162ecc95ce2792be96cf88b425f299bc0d829d3ef085abbb03e3eb.zip b/.yarn/cache/string-width-npm-2.1.1-f7470cad46162ecc95ce2792be96cf88b425f299bc0d829d3ef085abbb03e3eb.zip new file mode 100644 index 0000000..a4cc074 Binary files /dev/null and b/.yarn/cache/string-width-npm-2.1.1-f7470cad46162ecc95ce2792be96cf88b425f299bc0d829d3ef085abbb03e3eb.zip differ diff --git a/.yarn/cache/string-width-npm-3.1.0-4e8f0a9993d0a96fe9d5a4ea61f32f4b36f1ad8da0fd09750163b6854e7b712f.zip b/.yarn/cache/string-width-npm-3.1.0-4e8f0a9993d0a96fe9d5a4ea61f32f4b36f1ad8da0fd09750163b6854e7b712f.zip new file mode 100644 index 0000000..d6fd481 Binary files /dev/null and b/.yarn/cache/string-width-npm-3.1.0-4e8f0a9993d0a96fe9d5a4ea61f32f4b36f1ad8da0fd09750163b6854e7b712f.zip differ diff --git a/.yarn/cache/string_decoder-npm-1.1.1-ab04f5f5e77b83f3c5c1b857715f5d2a38cfa079a1c64dbfd5af4dca508f87e3.zip b/.yarn/cache/string_decoder-npm-1.1.1-ab04f5f5e77b83f3c5c1b857715f5d2a38cfa079a1c64dbfd5af4dca508f87e3.zip new file mode 100644 index 0000000..477cba5 Binary files /dev/null and b/.yarn/cache/string_decoder-npm-1.1.1-ab04f5f5e77b83f3c5c1b857715f5d2a38cfa079a1c64dbfd5af4dca508f87e3.zip differ diff --git a/.yarn/cache/string_decoder-npm-1.2.0-1d50ba703e235fb48c8a84511b2913416b58dd4f47a1e3dc09c8a69504c40285.zip b/.yarn/cache/string_decoder-npm-1.2.0-1d50ba703e235fb48c8a84511b2913416b58dd4f47a1e3dc09c8a69504c40285.zip new file mode 100644 index 0000000..91daef0 Binary files /dev/null and b/.yarn/cache/string_decoder-npm-1.2.0-1d50ba703e235fb48c8a84511b2913416b58dd4f47a1e3dc09c8a69504c40285.zip differ diff --git a/.yarn/cache/strip-ansi-npm-3.0.1-2dff4d910217766ba9e6839a1cc2c2e7e2581ed86545d0c9f84b77a8a47d9e8c.zip b/.yarn/cache/strip-ansi-npm-3.0.1-2dff4d910217766ba9e6839a1cc2c2e7e2581ed86545d0c9f84b77a8a47d9e8c.zip new file mode 100644 index 0000000..02678ae Binary files /dev/null and b/.yarn/cache/strip-ansi-npm-3.0.1-2dff4d910217766ba9e6839a1cc2c2e7e2581ed86545d0c9f84b77a8a47d9e8c.zip differ diff --git a/.yarn/cache/strip-ansi-npm-4.0.0-0a4dce1e1065a8b9270a893601895d38f62879f069973984e468a48b92cf0890.zip b/.yarn/cache/strip-ansi-npm-4.0.0-0a4dce1e1065a8b9270a893601895d38f62879f069973984e468a48b92cf0890.zip new file mode 100644 index 0000000..3cb7f75 Binary files /dev/null and b/.yarn/cache/strip-ansi-npm-4.0.0-0a4dce1e1065a8b9270a893601895d38f62879f069973984e468a48b92cf0890.zip differ diff --git a/.yarn/cache/strip-ansi-npm-5.2.0-6ae14885df2c0e3a79afb4bc1c3dfe06ca489de1e14cca8a045bfacb9703cf72.zip b/.yarn/cache/strip-ansi-npm-5.2.0-6ae14885df2c0e3a79afb4bc1c3dfe06ca489de1e14cca8a045bfacb9703cf72.zip new file mode 100644 index 0000000..ac6ecbb Binary files /dev/null and b/.yarn/cache/strip-ansi-npm-5.2.0-6ae14885df2c0e3a79afb4bc1c3dfe06ca489de1e14cca8a045bfacb9703cf72.zip differ diff --git a/.yarn/cache/strip-bom-npm-2.0.0-f9293632c208fdfe3c2fe1bf09ca971d1ff496c2007eeac08626fb311ad8c019.zip b/.yarn/cache/strip-bom-npm-2.0.0-f9293632c208fdfe3c2fe1bf09ca971d1ff496c2007eeac08626fb311ad8c019.zip new file mode 100644 index 0000000..a062e01 Binary files /dev/null and b/.yarn/cache/strip-bom-npm-2.0.0-f9293632c208fdfe3c2fe1bf09ca971d1ff496c2007eeac08626fb311ad8c019.zip differ diff --git a/.yarn/cache/strip-bom-npm-3.0.0-477340b7c7d6c4e09aeb8cdbb2c7544e62a872905e8aae16f8d137ae586b94f8.zip b/.yarn/cache/strip-bom-npm-3.0.0-477340b7c7d6c4e09aeb8cdbb2c7544e62a872905e8aae16f8d137ae586b94f8.zip new file mode 100644 index 0000000..bd63ad7 Binary files /dev/null and b/.yarn/cache/strip-bom-npm-3.0.0-477340b7c7d6c4e09aeb8cdbb2c7544e62a872905e8aae16f8d137ae586b94f8.zip differ diff --git a/.yarn/cache/strip-eof-npm-1.0.0-477e34a782d72f881503bc42a671814908399387d54f3f2d127f807394595708.zip b/.yarn/cache/strip-eof-npm-1.0.0-477e34a782d72f881503bc42a671814908399387d54f3f2d127f807394595708.zip new file mode 100644 index 0000000..5b63c4d Binary files /dev/null and b/.yarn/cache/strip-eof-npm-1.0.0-477e34a782d72f881503bc42a671814908399387d54f3f2d127f807394595708.zip differ diff --git a/.yarn/cache/strip-json-comments-npm-2.0.1-58e60c9fea72c46b788a3059277b6495111bffaa7e212cec8b6d6bc7fa20caa3.zip b/.yarn/cache/strip-json-comments-npm-2.0.1-58e60c9fea72c46b788a3059277b6495111bffaa7e212cec8b6d6bc7fa20caa3.zip new file mode 100644 index 0000000..c00b637 Binary files /dev/null and b/.yarn/cache/strip-json-comments-npm-2.0.1-58e60c9fea72c46b788a3059277b6495111bffaa7e212cec8b6d6bc7fa20caa3.zip differ diff --git a/.yarn/cache/supports-color-npm-5.5.0-bc0df33b8bddd09aa0166b259651e37843703d145decdde83bd6f6467d18fe29.zip b/.yarn/cache/supports-color-npm-5.5.0-bc0df33b8bddd09aa0166b259651e37843703d145decdde83bd6f6467d18fe29.zip new file mode 100644 index 0000000..fc25dea Binary files /dev/null and b/.yarn/cache/supports-color-npm-5.5.0-bc0df33b8bddd09aa0166b259651e37843703d145decdde83bd6f6467d18fe29.zip differ diff --git a/.yarn/cache/supports-color-npm-6.1.0-a71ece519bd6fa532cb7a93b16636101ed00ee8025e57d6c94e73bc5ee09d76a.zip b/.yarn/cache/supports-color-npm-6.1.0-a71ece519bd6fa532cb7a93b16636101ed00ee8025e57d6c94e73bc5ee09d76a.zip new file mode 100644 index 0000000..c645732 Binary files /dev/null and b/.yarn/cache/supports-color-npm-6.1.0-a71ece519bd6fa532cb7a93b16636101ed00ee8025e57d6c94e73bc5ee09d76a.zip differ diff --git a/.yarn/cache/sver-compat-npm-1.5.0-b13e4168687b60ba973d161090772f8f8e9b318b4431655c396f306150c4309b.zip b/.yarn/cache/sver-compat-npm-1.5.0-b13e4168687b60ba973d161090772f8f8e9b318b4431655c396f306150c4309b.zip new file mode 100644 index 0000000..7ece327 Binary files /dev/null and b/.yarn/cache/sver-compat-npm-1.5.0-b13e4168687b60ba973d161090772f8f8e9b318b4431655c396f306150c4309b.zip differ diff --git a/.yarn/cache/symbol-tree-npm-3.2.2-427d776662cd8632e600e0b8e2e89961601b7d69f8510feea6b59dd251b7e751.zip b/.yarn/cache/symbol-tree-npm-3.2.2-427d776662cd8632e600e0b8e2e89961601b7d69f8510feea6b59dd251b7e751.zip new file mode 100644 index 0000000..e8f35ea Binary files /dev/null and b/.yarn/cache/symbol-tree-npm-3.2.2-427d776662cd8632e600e0b8e2e89961601b7d69f8510feea6b59dd251b7e751.zip differ diff --git a/.yarn/cache/table-npm-5.2.3-687557095fb88d6a3c2bff0827bdea64b54d13f78865dcbda341431798ee43b7.zip b/.yarn/cache/table-npm-5.2.3-687557095fb88d6a3c2bff0827bdea64b54d13f78865dcbda341431798ee43b7.zip new file mode 100644 index 0000000..56f01c4 Binary files /dev/null and b/.yarn/cache/table-npm-5.2.3-687557095fb88d6a3c2bff0827bdea64b54d13f78865dcbda341431798ee43b7.zip differ diff --git a/.yarn/cache/tapable-npm-1.1.3-e777e120887c68f709db7bd2155405a3245c93b3b61d1f343a87a753485daad4.zip b/.yarn/cache/tapable-npm-1.1.3-e777e120887c68f709db7bd2155405a3245c93b3b61d1f343a87a753485daad4.zip new file mode 100644 index 0000000..be3b210 Binary files /dev/null and b/.yarn/cache/tapable-npm-1.1.3-e777e120887c68f709db7bd2155405a3245c93b3b61d1f343a87a753485daad4.zip differ diff --git a/.yarn/cache/tar-npm-4.4.8-925c7a5df99da1fd0e02f122d94541215c6699063840bd5d6b367cbee0b4779d.zip b/.yarn/cache/tar-npm-4.4.8-925c7a5df99da1fd0e02f122d94541215c6699063840bd5d6b367cbee0b4779d.zip new file mode 100644 index 0000000..6943baf Binary files /dev/null and b/.yarn/cache/tar-npm-4.4.8-925c7a5df99da1fd0e02f122d94541215c6699063840bd5d6b367cbee0b4779d.zip differ diff --git a/.yarn/cache/ternary-stream-npm-2.0.1-3ac6517dd18993d6f4d463c8a22a0d94fb08b8ca8802fd8b3330b18344f0ffe9.zip b/.yarn/cache/ternary-stream-npm-2.0.1-3ac6517dd18993d6f4d463c8a22a0d94fb08b8ca8802fd8b3330b18344f0ffe9.zip new file mode 100644 index 0000000..5e02439 Binary files /dev/null and b/.yarn/cache/ternary-stream-npm-2.0.1-3ac6517dd18993d6f4d463c8a22a0d94fb08b8ca8802fd8b3330b18344f0ffe9.zip differ diff --git a/.yarn/cache/terser-npm-3.17.0-cb190a16599095e1386abe5b61c8e804821ac8f2b5d482ccca1f1695ff021276.zip b/.yarn/cache/terser-npm-3.17.0-cb190a16599095e1386abe5b61c8e804821ac8f2b5d482ccca1f1695ff021276.zip new file mode 100644 index 0000000..65df8f0 Binary files /dev/null and b/.yarn/cache/terser-npm-3.17.0-cb190a16599095e1386abe5b61c8e804821ac8f2b5d482ccca1f1695ff021276.zip differ diff --git a/.yarn/cache/terser-webpack-plugin-npm-1.2.3-a1caa8216cd1f445a1bb234beb2898612cbf29db523ebb772bc969c9a2c53215.zip b/.yarn/cache/terser-webpack-plugin-npm-1.2.3-a1caa8216cd1f445a1bb234beb2898612cbf29db523ebb772bc969c9a2c53215.zip new file mode 100644 index 0000000..a449881 Binary files /dev/null and b/.yarn/cache/terser-webpack-plugin-npm-1.2.3-a1caa8216cd1f445a1bb234beb2898612cbf29db523ebb772bc969c9a2c53215.zip differ diff --git a/.yarn/cache/test-exclude-npm-5.2.3-c8818e41f19499bce9e088566159bc6cb66d5e89ba78920a62debd54e133dbc0.zip b/.yarn/cache/test-exclude-npm-5.2.3-c8818e41f19499bce9e088566159bc6cb66d5e89ba78920a62debd54e133dbc0.zip new file mode 100644 index 0000000..31ba81d Binary files /dev/null and b/.yarn/cache/test-exclude-npm-5.2.3-c8818e41f19499bce9e088566159bc6cb66d5e89ba78920a62debd54e133dbc0.zip differ diff --git a/.yarn/cache/text-table-npm-0.2.0-1f7662a99bd221eeea32f1b58940c39c74b965b5160d0f6cd5bb69cb73108eb6.zip b/.yarn/cache/text-table-npm-0.2.0-1f7662a99bd221eeea32f1b58940c39c74b965b5160d0f6cd5bb69cb73108eb6.zip new file mode 100644 index 0000000..d099e49 Binary files /dev/null and b/.yarn/cache/text-table-npm-0.2.0-1f7662a99bd221eeea32f1b58940c39c74b965b5160d0f6cd5bb69cb73108eb6.zip differ diff --git a/.yarn/cache/throat-npm-4.1.0-5c534ad16bba885d87c00faa706614d06f7fdae6c2d58d099c86061e997a7dc7.zip b/.yarn/cache/throat-npm-4.1.0-5c534ad16bba885d87c00faa706614d06f7fdae6c2d58d099c86061e997a7dc7.zip new file mode 100644 index 0000000..6fea47c Binary files /dev/null and b/.yarn/cache/throat-npm-4.1.0-5c534ad16bba885d87c00faa706614d06f7fdae6c2d58d099c86061e997a7dc7.zip differ diff --git a/.yarn/cache/through-npm-2.3.8-823c97dbf8d72ac039fce12653ed2655a798fe069c30189200e42b6beadc9700.zip b/.yarn/cache/through-npm-2.3.8-823c97dbf8d72ac039fce12653ed2655a798fe069c30189200e42b6beadc9700.zip new file mode 100644 index 0000000..fb22fb5 Binary files /dev/null and b/.yarn/cache/through-npm-2.3.8-823c97dbf8d72ac039fce12653ed2655a798fe069c30189200e42b6beadc9700.zip differ diff --git a/.yarn/cache/through2-filter-npm-3.0.0-293140f0b6d7bdbeacf903269ae0d82ea9c649ae4775dc7fb86a4aefc2fb22b4.zip b/.yarn/cache/through2-filter-npm-3.0.0-293140f0b6d7bdbeacf903269ae0d82ea9c649ae4775dc7fb86a4aefc2fb22b4.zip new file mode 100644 index 0000000..591c33c Binary files /dev/null and b/.yarn/cache/through2-filter-npm-3.0.0-293140f0b6d7bdbeacf903269ae0d82ea9c649ae4775dc7fb86a4aefc2fb22b4.zip differ diff --git a/.yarn/cache/through2-npm-2.0.5-6e2c3c00393403084da976c33a118b5840a77bad8cfb1a846e227dd097174d20.zip b/.yarn/cache/through2-npm-2.0.5-6e2c3c00393403084da976c33a118b5840a77bad8cfb1a846e227dd097174d20.zip new file mode 100644 index 0000000..77a114a Binary files /dev/null and b/.yarn/cache/through2-npm-2.0.5-6e2c3c00393403084da976c33a118b5840a77bad8cfb1a846e227dd097174d20.zip differ diff --git a/.yarn/cache/time-stamp-npm-1.1.0-c643267d160cc84884837503a9364365351108f8d2e03d222442e1f586fa0705.zip b/.yarn/cache/time-stamp-npm-1.1.0-c643267d160cc84884837503a9364365351108f8d2e03d222442e1f586fa0705.zip new file mode 100644 index 0000000..d442ac1 Binary files /dev/null and b/.yarn/cache/time-stamp-npm-1.1.0-c643267d160cc84884837503a9364365351108f8d2e03d222442e1f586fa0705.zip differ diff --git a/.yarn/cache/timers-browserify-npm-2.0.10-6475dd90db9cf603b9c5a8b530bf194cf4b9d4c8d7f0a7a180121c4075378ab6.zip b/.yarn/cache/timers-browserify-npm-2.0.10-6475dd90db9cf603b9c5a8b530bf194cf4b9d4c8d7f0a7a180121c4075378ab6.zip new file mode 100644 index 0000000..ca6fa7d Binary files /dev/null and b/.yarn/cache/timers-browserify-npm-2.0.10-6475dd90db9cf603b9c5a8b530bf194cf4b9d4c8d7f0a7a180121c4075378ab6.zip differ diff --git a/.yarn/cache/tmp-npm-0.0.33-a61bcf1dbcef5bde6a21f4b52280f475faad365ebd7e6259e7df77302db17129.zip b/.yarn/cache/tmp-npm-0.0.33-a61bcf1dbcef5bde6a21f4b52280f475faad365ebd7e6259e7df77302db17129.zip new file mode 100644 index 0000000..2c6445e Binary files /dev/null and b/.yarn/cache/tmp-npm-0.0.33-a61bcf1dbcef5bde6a21f4b52280f475faad365ebd7e6259e7df77302db17129.zip differ diff --git a/.yarn/cache/tmpl-npm-1.0.4-368e7faa64dd81066e2a00ec9d1c12874933ab3a9c1b3de8607393ed07909ced.zip b/.yarn/cache/tmpl-npm-1.0.4-368e7faa64dd81066e2a00ec9d1c12874933ab3a9c1b3de8607393ed07909ced.zip new file mode 100644 index 0000000..9489141 Binary files /dev/null and b/.yarn/cache/tmpl-npm-1.0.4-368e7faa64dd81066e2a00ec9d1c12874933ab3a9c1b3de8607393ed07909ced.zip differ diff --git a/.yarn/cache/to-absolute-glob-npm-2.0.2-5d7e72f62eeb18566f181de5fb1e83599dbbb84f27f3aa38804c796fb1ade74f.zip b/.yarn/cache/to-absolute-glob-npm-2.0.2-5d7e72f62eeb18566f181de5fb1e83599dbbb84f27f3aa38804c796fb1ade74f.zip new file mode 100644 index 0000000..4be6544 Binary files /dev/null and b/.yarn/cache/to-absolute-glob-npm-2.0.2-5d7e72f62eeb18566f181de5fb1e83599dbbb84f27f3aa38804c796fb1ade74f.zip differ diff --git a/.yarn/cache/to-arraybuffer-npm-1.0.1-c0b731cc21aa2a40b3d3f39fe1db0ddb062408b9e0ab96ea2c8169e9fc321091.zip b/.yarn/cache/to-arraybuffer-npm-1.0.1-c0b731cc21aa2a40b3d3f39fe1db0ddb062408b9e0ab96ea2c8169e9fc321091.zip new file mode 100644 index 0000000..37c0896 Binary files /dev/null and b/.yarn/cache/to-arraybuffer-npm-1.0.1-c0b731cc21aa2a40b3d3f39fe1db0ddb062408b9e0ab96ea2c8169e9fc321091.zip differ diff --git a/.yarn/cache/to-fast-properties-npm-2.0.0-456268784d81ce0aeb482a9051effd67749310f2e518998f8daa52cf5a2f33d3.zip b/.yarn/cache/to-fast-properties-npm-2.0.0-456268784d81ce0aeb482a9051effd67749310f2e518998f8daa52cf5a2f33d3.zip new file mode 100644 index 0000000..518b22f Binary files /dev/null and b/.yarn/cache/to-fast-properties-npm-2.0.0-456268784d81ce0aeb482a9051effd67749310f2e518998f8daa52cf5a2f33d3.zip differ diff --git a/.yarn/cache/to-object-path-npm-0.3.0-f9b2af90c0935fb4b1d45c43b5a70fa2aea198b5caf25b064737cd651eb9626f.zip b/.yarn/cache/to-object-path-npm-0.3.0-f9b2af90c0935fb4b1d45c43b5a70fa2aea198b5caf25b064737cd651eb9626f.zip new file mode 100644 index 0000000..43b92f7 Binary files /dev/null and b/.yarn/cache/to-object-path-npm-0.3.0-f9b2af90c0935fb4b1d45c43b5a70fa2aea198b5caf25b064737cd651eb9626f.zip differ diff --git a/.yarn/cache/to-regex-npm-3.0.2-262ff98e7f36f4a047dffa820071894b95cc7528d36169ba948c846e4a6becf4.zip b/.yarn/cache/to-regex-npm-3.0.2-262ff98e7f36f4a047dffa820071894b95cc7528d36169ba948c846e4a6becf4.zip new file mode 100644 index 0000000..7505176 Binary files /dev/null and b/.yarn/cache/to-regex-npm-3.0.2-262ff98e7f36f4a047dffa820071894b95cc7528d36169ba948c846e4a6becf4.zip differ diff --git a/.yarn/cache/to-regex-range-npm-2.1.1-2e528bc747871655b66af875043376c6eda59114565093263ff1f96e9dc64a83.zip b/.yarn/cache/to-regex-range-npm-2.1.1-2e528bc747871655b66af875043376c6eda59114565093263ff1f96e9dc64a83.zip new file mode 100644 index 0000000..a0abf90 Binary files /dev/null and b/.yarn/cache/to-regex-range-npm-2.1.1-2e528bc747871655b66af875043376c6eda59114565093263ff1f96e9dc64a83.zip differ diff --git a/.yarn/cache/to-through-npm-2.0.0-107eca4a3b3382dc2660c4bb6b56fe04b4634c8ab611c2dc304e1ed0d37f5bd4.zip b/.yarn/cache/to-through-npm-2.0.0-107eca4a3b3382dc2660c4bb6b56fe04b4634c8ab611c2dc304e1ed0d37f5bd4.zip new file mode 100644 index 0000000..8c81051 Binary files /dev/null and b/.yarn/cache/to-through-npm-2.0.0-107eca4a3b3382dc2660c4bb6b56fe04b4634c8ab611c2dc304e1ed0d37f5bd4.zip differ diff --git a/.yarn/cache/toposort-npm-1.0.7-6ab0df9236bb487a106aeb7bd2d492a78b36fec2fde1275c0cc40c312db410dd.zip b/.yarn/cache/toposort-npm-1.0.7-6ab0df9236bb487a106aeb7bd2d492a78b36fec2fde1275c0cc40c312db410dd.zip new file mode 100644 index 0000000..2399a83 Binary files /dev/null and b/.yarn/cache/toposort-npm-1.0.7-6ab0df9236bb487a106aeb7bd2d492a78b36fec2fde1275c0cc40c312db410dd.zip differ diff --git a/.yarn/cache/tough-cookie-npm-2.4.3-9dfe2ba78f2f37e33d6fe87c7983066eebd56454c5157c28678226e50131f62f.zip b/.yarn/cache/tough-cookie-npm-2.4.3-9dfe2ba78f2f37e33d6fe87c7983066eebd56454c5157c28678226e50131f62f.zip new file mode 100644 index 0000000..642503c Binary files /dev/null and b/.yarn/cache/tough-cookie-npm-2.4.3-9dfe2ba78f2f37e33d6fe87c7983066eebd56454c5157c28678226e50131f62f.zip differ diff --git a/.yarn/cache/tough-cookie-npm-2.5.0-c84bcb439b4626eb97498f0cb8f66357c81aa431393a7bd0bb650b2bcd584d5a.zip b/.yarn/cache/tough-cookie-npm-2.5.0-c84bcb439b4626eb97498f0cb8f66357c81aa431393a7bd0bb650b2bcd584d5a.zip new file mode 100644 index 0000000..a1ee45e Binary files /dev/null and b/.yarn/cache/tough-cookie-npm-2.5.0-c84bcb439b4626eb97498f0cb8f66357c81aa431393a7bd0bb650b2bcd584d5a.zip differ diff --git a/.yarn/cache/tr46-npm-1.0.1-841daaa1ea4e5739f0eecbee81f9f895b587034113313ff552ee33a130ac931f.zip b/.yarn/cache/tr46-npm-1.0.1-841daaa1ea4e5739f0eecbee81f9f895b587034113313ff552ee33a130ac931f.zip new file mode 100644 index 0000000..9da7bbd Binary files /dev/null and b/.yarn/cache/tr46-npm-1.0.1-841daaa1ea4e5739f0eecbee81f9f895b587034113313ff552ee33a130ac931f.zip differ diff --git a/.yarn/cache/trim-right-npm-1.0.1-baa7d857e16528d0a72f865a59d19486b4292b703acc54381ef691b2040b0e79.zip b/.yarn/cache/trim-right-npm-1.0.1-baa7d857e16528d0a72f865a59d19486b4292b703acc54381ef691b2040b0e79.zip new file mode 100644 index 0000000..f0bddfe Binary files /dev/null and b/.yarn/cache/trim-right-npm-1.0.1-baa7d857e16528d0a72f865a59d19486b4292b703acc54381ef691b2040b0e79.zip differ diff --git a/.yarn/cache/tryer-npm-1.0.1-1351e85c19381bcf4fd746868ce0e4e275219b30bfe5c537e31aa4a8f699043e.zip b/.yarn/cache/tryer-npm-1.0.1-1351e85c19381bcf4fd746868ce0e4e275219b30bfe5c537e31aa4a8f699043e.zip new file mode 100644 index 0000000..8cae6b3 Binary files /dev/null and b/.yarn/cache/tryer-npm-1.0.1-1351e85c19381bcf4fd746868ce0e4e275219b30bfe5c537e31aa4a8f699043e.zip differ diff --git a/.yarn/cache/ts-pnp-npm-1.1.2-908b85f2f22bd47799f853b00f82cb99992ebdd73f40cea9c1a4eff02ae9ea3e.zip b/.yarn/cache/ts-pnp-npm-1.1.2-908b85f2f22bd47799f853b00f82cb99992ebdd73f40cea9c1a4eff02ae9ea3e.zip new file mode 100644 index 0000000..e18601f Binary files /dev/null and b/.yarn/cache/ts-pnp-npm-1.1.2-908b85f2f22bd47799f853b00f82cb99992ebdd73f40cea9c1a4eff02ae9ea3e.zip differ diff --git a/.yarn/cache/tslib-npm-1.9.3-8323ac5d9f340c79c9ded614a0edebcf747eb4fbc9c58a6fd1d9b8f169f5a2e5.zip b/.yarn/cache/tslib-npm-1.9.3-8323ac5d9f340c79c9ded614a0edebcf747eb4fbc9c58a6fd1d9b8f169f5a2e5.zip new file mode 100644 index 0000000..b998a40 Binary files /dev/null and b/.yarn/cache/tslib-npm-1.9.3-8323ac5d9f340c79c9ded614a0edebcf747eb4fbc9c58a6fd1d9b8f169f5a2e5.zip differ diff --git a/.yarn/cache/tty-browserify-npm-0.0.0-1b7ab50399465f44915d73f12cf61d587424e5c499971293371c634cd08fef19.zip b/.yarn/cache/tty-browserify-npm-0.0.0-1b7ab50399465f44915d73f12cf61d587424e5c499971293371c634cd08fef19.zip new file mode 100644 index 0000000..5c79174 Binary files /dev/null and b/.yarn/cache/tty-browserify-npm-0.0.0-1b7ab50399465f44915d73f12cf61d587424e5c499971293371c634cd08fef19.zip differ diff --git a/.yarn/cache/tunnel-agent-npm-0.6.0-90013d995e35cca8d3a3b646d51b1e5756726a6ddd1acdf612060b5c5c688462.zip b/.yarn/cache/tunnel-agent-npm-0.6.0-90013d995e35cca8d3a3b646d51b1e5756726a6ddd1acdf612060b5c5c688462.zip new file mode 100644 index 0000000..8616d88 Binary files /dev/null and b/.yarn/cache/tunnel-agent-npm-0.6.0-90013d995e35cca8d3a3b646d51b1e5756726a6ddd1acdf612060b5c5c688462.zip differ diff --git a/.yarn/cache/tweetnacl-npm-0.14.5-c47b63525e0ff18d0583285bc5a3ddb27c24c88598fdb064ab6ccc6ccce4ebb1.zip b/.yarn/cache/tweetnacl-npm-0.14.5-c47b63525e0ff18d0583285bc5a3ddb27c24c88598fdb064ab6ccc6ccce4ebb1.zip new file mode 100644 index 0000000..f54f851 Binary files /dev/null and b/.yarn/cache/tweetnacl-npm-0.14.5-c47b63525e0ff18d0583285bc5a3ddb27c24c88598fdb064ab6ccc6ccce4ebb1.zip differ diff --git a/.yarn/cache/type-check-npm-0.3.2-0799f5823c08a5d3f714f67f4cab31921ace4fed79ea8c70f210d7b2dee6fcd9.zip b/.yarn/cache/type-check-npm-0.3.2-0799f5823c08a5d3f714f67f4cab31921ace4fed79ea8c70f210d7b2dee6fcd9.zip new file mode 100644 index 0000000..b7b96ec Binary files /dev/null and b/.yarn/cache/type-check-npm-0.3.2-0799f5823c08a5d3f714f67f4cab31921ace4fed79ea8c70f210d7b2dee6fcd9.zip differ diff --git a/.yarn/cache/type-is-npm-1.6.18-e7be2adaf4fa408e0e1b1cd89a765d7db99ee066a08cfc8d96272c17574a48f4.zip b/.yarn/cache/type-is-npm-1.6.18-e7be2adaf4fa408e0e1b1cd89a765d7db99ee066a08cfc8d96272c17574a48f4.zip new file mode 100644 index 0000000..da7a9df Binary files /dev/null and b/.yarn/cache/type-is-npm-1.6.18-e7be2adaf4fa408e0e1b1cd89a765d7db99ee066a08cfc8d96272c17574a48f4.zip differ diff --git a/.yarn/cache/typedarray-npm-0.0.6-55d52e5ae757bdd5672a56408fbdcbe0f44bfdfb7a132676b3902dc5711a30d0.zip b/.yarn/cache/typedarray-npm-0.0.6-55d52e5ae757bdd5672a56408fbdcbe0f44bfdfb7a132676b3902dc5711a30d0.zip new file mode 100644 index 0000000..2bc504a Binary files /dev/null and b/.yarn/cache/typedarray-npm-0.0.6-55d52e5ae757bdd5672a56408fbdcbe0f44bfdfb7a132676b3902dc5711a30d0.zip differ diff --git a/.yarn/cache/uglify-js-npm-3.4.10-60e3cf344397048e38490f7ad4a234038e62724289f6c770bac07adc586e67d6.zip b/.yarn/cache/uglify-js-npm-3.4.10-60e3cf344397048e38490f7ad4a234038e62724289f6c770bac07adc586e67d6.zip new file mode 100644 index 0000000..dd4aca0 Binary files /dev/null and b/.yarn/cache/uglify-js-npm-3.4.10-60e3cf344397048e38490f7ad4a234038e62724289f6c770bac07adc586e67d6.zip differ diff --git a/.yarn/cache/uglify-js-npm-3.5.9-c0bc8881de90af0312448184d5430deb8071bc7c9a8d957664f04235d92cf199.zip b/.yarn/cache/uglify-js-npm-3.5.9-c0bc8881de90af0312448184d5430deb8071bc7c9a8d957664f04235d92cf199.zip new file mode 100644 index 0000000..f767678 Binary files /dev/null and b/.yarn/cache/uglify-js-npm-3.5.9-c0bc8881de90af0312448184d5430deb8071bc7c9a8d957664f04235d92cf199.zip differ diff --git a/.yarn/cache/unc-path-regex-npm-0.1.2-6dbbd7679e9f189a2cb883c84ef756775cdd5e8133da0e45972c7c3c59714ad4.zip b/.yarn/cache/unc-path-regex-npm-0.1.2-6dbbd7679e9f189a2cb883c84ef756775cdd5e8133da0e45972c7c3c59714ad4.zip new file mode 100644 index 0000000..29c8a9d Binary files /dev/null and b/.yarn/cache/unc-path-regex-npm-0.1.2-6dbbd7679e9f189a2cb883c84ef756775cdd5e8133da0e45972c7c3c59714ad4.zip differ diff --git a/.yarn/cache/undertaker-npm-1.2.1-f02aa1875be1f2dbee57d8959c88b5c5d2cbda07523ffb8f9831d0c5475c465e.zip b/.yarn/cache/undertaker-npm-1.2.1-f02aa1875be1f2dbee57d8959c88b5c5d2cbda07523ffb8f9831d0c5475c465e.zip new file mode 100644 index 0000000..4836db6 Binary files /dev/null and b/.yarn/cache/undertaker-npm-1.2.1-f02aa1875be1f2dbee57d8959c88b5c5d2cbda07523ffb8f9831d0c5475c465e.zip differ diff --git a/.yarn/cache/undertaker-registry-npm-1.0.1-00b8bb00d3a4db17703111cd4b89464e1c0c48d29724e443b1a246999539d3ef.zip b/.yarn/cache/undertaker-registry-npm-1.0.1-00b8bb00d3a4db17703111cd4b89464e1c0c48d29724e443b1a246999539d3ef.zip new file mode 100644 index 0000000..519c452 Binary files /dev/null and b/.yarn/cache/undertaker-registry-npm-1.0.1-00b8bb00d3a4db17703111cd4b89464e1c0c48d29724e443b1a246999539d3ef.zip differ diff --git a/.yarn/cache/unicode-canonical-property-names-ecmascript-npm-1.0.4-4e53e524f5e4ee08f626a5b8b0fd4ec7b1e8055a80a6349b61b1c285bac190a0.zip b/.yarn/cache/unicode-canonical-property-names-ecmascript-npm-1.0.4-4e53e524f5e4ee08f626a5b8b0fd4ec7b1e8055a80a6349b61b1c285bac190a0.zip new file mode 100644 index 0000000..1d77e83 Binary files /dev/null and b/.yarn/cache/unicode-canonical-property-names-ecmascript-npm-1.0.4-4e53e524f5e4ee08f626a5b8b0fd4ec7b1e8055a80a6349b61b1c285bac190a0.zip differ diff --git a/.yarn/cache/unicode-match-property-ecmascript-npm-1.0.4-b71e8e1fde4816b3c523be29968a37f85e7a52a99449b2df807948574b895c5c.zip b/.yarn/cache/unicode-match-property-ecmascript-npm-1.0.4-b71e8e1fde4816b3c523be29968a37f85e7a52a99449b2df807948574b895c5c.zip new file mode 100644 index 0000000..3e873fc Binary files /dev/null and b/.yarn/cache/unicode-match-property-ecmascript-npm-1.0.4-b71e8e1fde4816b3c523be29968a37f85e7a52a99449b2df807948574b895c5c.zip differ diff --git a/.yarn/cache/unicode-match-property-value-ecmascript-npm-1.1.0-517fbb5415fb19c2fee0d46209a34bd60d0ee26b61dcc53c5e16258cd4e925f9.zip b/.yarn/cache/unicode-match-property-value-ecmascript-npm-1.1.0-517fbb5415fb19c2fee0d46209a34bd60d0ee26b61dcc53c5e16258cd4e925f9.zip new file mode 100644 index 0000000..d414242 Binary files /dev/null and b/.yarn/cache/unicode-match-property-value-ecmascript-npm-1.1.0-517fbb5415fb19c2fee0d46209a34bd60d0ee26b61dcc53c5e16258cd4e925f9.zip differ diff --git a/.yarn/cache/unicode-property-aliases-ecmascript-npm-1.0.5-84221825b62c0eca9ec74a1a3153e6d8d10849d68dc0d00e001ba0bd977b96a1.zip b/.yarn/cache/unicode-property-aliases-ecmascript-npm-1.0.5-84221825b62c0eca9ec74a1a3153e6d8d10849d68dc0d00e001ba0bd977b96a1.zip new file mode 100644 index 0000000..b202d59 Binary files /dev/null and b/.yarn/cache/unicode-property-aliases-ecmascript-npm-1.0.5-84221825b62c0eca9ec74a1a3153e6d8d10849d68dc0d00e001ba0bd977b96a1.zip differ diff --git a/.yarn/cache/union-npm-0.4.6-4924f7a599de62c699aa7e13c5dd2dd560e0a6a5960acfa4fb1dfdb1484de409.zip b/.yarn/cache/union-npm-0.4.6-4924f7a599de62c699aa7e13c5dd2dd560e0a6a5960acfa4fb1dfdb1484de409.zip new file mode 100644 index 0000000..fc35676 Binary files /dev/null and b/.yarn/cache/union-npm-0.4.6-4924f7a599de62c699aa7e13c5dd2dd560e0a6a5960acfa4fb1dfdb1484de409.zip differ diff --git a/.yarn/cache/union-value-npm-1.0.0-29659aac55ba42a50c67a62ab6e1398849ce40f6e06c686fcab5332d659a9f7c.zip b/.yarn/cache/union-value-npm-1.0.0-29659aac55ba42a50c67a62ab6e1398849ce40f6e06c686fcab5332d659a9f7c.zip new file mode 100644 index 0000000..b67371c Binary files /dev/null and b/.yarn/cache/union-value-npm-1.0.0-29659aac55ba42a50c67a62ab6e1398849ce40f6e06c686fcab5332d659a9f7c.zip differ diff --git a/.yarn/cache/unique-filename-npm-1.1.1-3f8caa124171d2d26084527d5d693871e2c1231a0d28c2334167c7f4b7402392.zip b/.yarn/cache/unique-filename-npm-1.1.1-3f8caa124171d2d26084527d5d693871e2c1231a0d28c2334167c7f4b7402392.zip new file mode 100644 index 0000000..cf6582e Binary files /dev/null and b/.yarn/cache/unique-filename-npm-1.1.1-3f8caa124171d2d26084527d5d693871e2c1231a0d28c2334167c7f4b7402392.zip differ diff --git a/.yarn/cache/unique-slug-npm-2.0.1-3383fbdf4bbdd1845fb2d14eb368028353d0256c557ca21daefc9a4075c47323.zip b/.yarn/cache/unique-slug-npm-2.0.1-3383fbdf4bbdd1845fb2d14eb368028353d0256c557ca21daefc9a4075c47323.zip new file mode 100644 index 0000000..d38bf59 Binary files /dev/null and b/.yarn/cache/unique-slug-npm-2.0.1-3383fbdf4bbdd1845fb2d14eb368028353d0256c557ca21daefc9a4075c47323.zip differ diff --git a/.yarn/cache/unique-stream-npm-2.3.1-3963ba187c54e827cd5983d70489bf33fed770fb73d0e4a7a1c4cc9770c3494d.zip b/.yarn/cache/unique-stream-npm-2.3.1-3963ba187c54e827cd5983d70489bf33fed770fb73d0e4a7a1c4cc9770c3494d.zip new file mode 100644 index 0000000..e14ba83 Binary files /dev/null and b/.yarn/cache/unique-stream-npm-2.3.1-3963ba187c54e827cd5983d70489bf33fed770fb73d0e4a7a1c4cc9770c3494d.zip differ diff --git a/.yarn/cache/unpipe-npm-1.0.0-70558b560a2354fa04135a2aef12ea3cb329698774400972b8f544606fc8d5a4.zip b/.yarn/cache/unpipe-npm-1.0.0-70558b560a2354fa04135a2aef12ea3cb329698774400972b8f544606fc8d5a4.zip new file mode 100644 index 0000000..5564db5 Binary files /dev/null and b/.yarn/cache/unpipe-npm-1.0.0-70558b560a2354fa04135a2aef12ea3cb329698774400972b8f544606fc8d5a4.zip differ diff --git a/.yarn/cache/unset-value-npm-1.0.0-b436376d085f535601b404d9be4451265939f948a6c0fcc506148dc74718522e.zip b/.yarn/cache/unset-value-npm-1.0.0-b436376d085f535601b404d9be4451265939f948a6c0fcc506148dc74718522e.zip new file mode 100644 index 0000000..8a90814 Binary files /dev/null and b/.yarn/cache/unset-value-npm-1.0.0-b436376d085f535601b404d9be4451265939f948a6c0fcc506148dc74718522e.zip differ diff --git a/.yarn/cache/upath-npm-1.1.2-4bf1913de850d07e88a4684a5a81f73e71dc84fd999b32f0c055ed823c485319.zip b/.yarn/cache/upath-npm-1.1.2-4bf1913de850d07e88a4684a5a81f73e71dc84fd999b32f0c055ed823c485319.zip new file mode 100644 index 0000000..947fed7 Binary files /dev/null and b/.yarn/cache/upath-npm-1.1.2-4bf1913de850d07e88a4684a5a81f73e71dc84fd999b32f0c055ed823c485319.zip differ diff --git a/.yarn/cache/upper-case-npm-1.1.3-9689c25fd17caf410a5504d5e2f5cfd6a8d77c094f329daa65d6cfcf4fce89a4.zip b/.yarn/cache/upper-case-npm-1.1.3-9689c25fd17caf410a5504d5e2f5cfd6a8d77c094f329daa65d6cfcf4fce89a4.zip new file mode 100644 index 0000000..e867672 Binary files /dev/null and b/.yarn/cache/upper-case-npm-1.1.3-9689c25fd17caf410a5504d5e2f5cfd6a8d77c094f329daa65d6cfcf4fce89a4.zip differ diff --git a/.yarn/cache/uri-js-npm-4.2.2-f07de78d80b8cf6abe4ed33f58afbf5c76a86c7ef9f4e8494a6c4691a45e745b.zip b/.yarn/cache/uri-js-npm-4.2.2-f07de78d80b8cf6abe4ed33f58afbf5c76a86c7ef9f4e8494a6c4691a45e745b.zip new file mode 100644 index 0000000..fa66d08 Binary files /dev/null and b/.yarn/cache/uri-js-npm-4.2.2-f07de78d80b8cf6abe4ed33f58afbf5c76a86c7ef9f4e8494a6c4691a45e745b.zip differ diff --git a/.yarn/cache/urix-npm-0.1.0-30bf36106988ede6249f1863d64b6d24c66d3594c599b81e3c1a4ae1a29e4e8a.zip b/.yarn/cache/urix-npm-0.1.0-30bf36106988ede6249f1863d64b6d24c66d3594c599b81e3c1a4ae1a29e4e8a.zip new file mode 100644 index 0000000..b263e20 Binary files /dev/null and b/.yarn/cache/urix-npm-0.1.0-30bf36106988ede6249f1863d64b6d24c66d3594c599b81e3c1a4ae1a29e4e8a.zip differ diff --git a/.yarn/cache/url-join-npm-2.0.5-471636779f45ab4f01c30f2745d5d3045a43ae80c63800d814643013f2857b56.zip b/.yarn/cache/url-join-npm-2.0.5-471636779f45ab4f01c30f2745d5d3045a43ae80c63800d814643013f2857b56.zip new file mode 100644 index 0000000..bc85ed9 Binary files /dev/null and b/.yarn/cache/url-join-npm-2.0.5-471636779f45ab4f01c30f2745d5d3045a43ae80c63800d814643013f2857b56.zip differ diff --git a/.yarn/cache/url-npm-0.11.0-1a28ea261e744934c0cc84004bab51a9793f16c80a35961e46109fb4d03b3d69.zip b/.yarn/cache/url-npm-0.11.0-1a28ea261e744934c0cc84004bab51a9793f16c80a35961e46109fb4d03b3d69.zip new file mode 100644 index 0000000..a7a0be5 Binary files /dev/null and b/.yarn/cache/url-npm-0.11.0-1a28ea261e744934c0cc84004bab51a9793f16c80a35961e46109fb4d03b3d69.zip differ diff --git a/.yarn/cache/use-npm-3.1.1-d2c9777e6d7c846aef0ffbe015b23f3797209358ff0ab70b7208a7d8fb8b0ace.zip b/.yarn/cache/use-npm-3.1.1-d2c9777e6d7c846aef0ffbe015b23f3797209358ff0ab70b7208a7d8fb8b0ace.zip new file mode 100644 index 0000000..a871599 Binary files /dev/null and b/.yarn/cache/use-npm-3.1.1-d2c9777e6d7c846aef0ffbe015b23f3797209358ff0ab70b7208a7d8fb8b0ace.zip differ diff --git a/.yarn/cache/util-deprecate-npm-1.0.2-9ecf5b2f9f93c3167ff7040fc7b88e5813069455ccde9bb67509f4c7254f781e.zip b/.yarn/cache/util-deprecate-npm-1.0.2-9ecf5b2f9f93c3167ff7040fc7b88e5813069455ccde9bb67509f4c7254f781e.zip new file mode 100644 index 0000000..4b24ef7 Binary files /dev/null and b/.yarn/cache/util-deprecate-npm-1.0.2-9ecf5b2f9f93c3167ff7040fc7b88e5813069455ccde9bb67509f4c7254f781e.zip differ diff --git a/.yarn/cache/util-npm-0.10.3-f56d028e89c08cd0f55f0db7b881bd6da38f273650bce5ca232d615a4337d8e0.zip b/.yarn/cache/util-npm-0.10.3-f56d028e89c08cd0f55f0db7b881bd6da38f273650bce5ca232d615a4337d8e0.zip new file mode 100644 index 0000000..3c44858 Binary files /dev/null and b/.yarn/cache/util-npm-0.10.3-f56d028e89c08cd0f55f0db7b881bd6da38f273650bce5ca232d615a4337d8e0.zip differ diff --git a/.yarn/cache/util-npm-0.11.1-b3dc5f3899bb8af9562c5cf8f3503d4d387a8e0b55908eaa8841ecda01a49fa7.zip b/.yarn/cache/util-npm-0.11.1-b3dc5f3899bb8af9562c5cf8f3503d4d387a8e0b55908eaa8841ecda01a49fa7.zip new file mode 100644 index 0000000..38b5554 Binary files /dev/null and b/.yarn/cache/util-npm-0.11.1-b3dc5f3899bb8af9562c5cf8f3503d4d387a8e0b55908eaa8841ecda01a49fa7.zip differ diff --git a/.yarn/cache/util.promisify-npm-1.0.0-25fefe50bc9e0ac7fb8e40b83d83095ca7647553ed855fb13bf03a643de01c57.zip b/.yarn/cache/util.promisify-npm-1.0.0-25fefe50bc9e0ac7fb8e40b83d83095ca7647553ed855fb13bf03a643de01c57.zip new file mode 100644 index 0000000..87c8c67 Binary files /dev/null and b/.yarn/cache/util.promisify-npm-1.0.0-25fefe50bc9e0ac7fb8e40b83d83095ca7647553ed855fb13bf03a643de01c57.zip differ diff --git a/.yarn/cache/utila-npm-0.4.0-61118e7d9dc1d93b02c1c73c1cc73c10c0721c4b5982471b60d705738feed32d.zip b/.yarn/cache/utila-npm-0.4.0-61118e7d9dc1d93b02c1c73c1cc73c10c0721c4b5982471b60d705738feed32d.zip new file mode 100644 index 0000000..eb2b657 Binary files /dev/null and b/.yarn/cache/utila-npm-0.4.0-61118e7d9dc1d93b02c1c73c1cc73c10c0721c4b5982471b60d705738feed32d.zip differ diff --git a/.yarn/cache/utils-merge-npm-1.0.1-5366aaa5b7a63d99c2055c61d123f37d3da9eeef189cc2c8c322eec4a01102f2.zip b/.yarn/cache/utils-merge-npm-1.0.1-5366aaa5b7a63d99c2055c61d123f37d3da9eeef189cc2c8c322eec4a01102f2.zip new file mode 100644 index 0000000..3dfc508 Binary files /dev/null and b/.yarn/cache/utils-merge-npm-1.0.1-5366aaa5b7a63d99c2055c61d123f37d3da9eeef189cc2c8c322eec4a01102f2.zip differ diff --git a/.yarn/cache/uuid-npm-3.3.2-3aad97ece48c58efad10917f544b5854fa3da515f5a15a15d4854e05ac02ae54.zip b/.yarn/cache/uuid-npm-3.3.2-3aad97ece48c58efad10917f544b5854fa3da515f5a15a15d4854e05ac02ae54.zip new file mode 100644 index 0000000..09521a0 Binary files /dev/null and b/.yarn/cache/uuid-npm-3.3.2-3aad97ece48c58efad10917f544b5854fa3da515f5a15a15d4854e05ac02ae54.zip differ diff --git a/.yarn/cache/v8-compile-cache-npm-2.0.2-17947293ffecdaee7d9e4d938ebcb88b57ddf1a30ac12649ae97e13402e339d0.zip b/.yarn/cache/v8-compile-cache-npm-2.0.2-17947293ffecdaee7d9e4d938ebcb88b57ddf1a30ac12649ae97e13402e339d0.zip new file mode 100644 index 0000000..47cbada Binary files /dev/null and b/.yarn/cache/v8-compile-cache-npm-2.0.2-17947293ffecdaee7d9e4d938ebcb88b57ddf1a30ac12649ae97e13402e339d0.zip differ diff --git a/.yarn/cache/v8flags-npm-3.1.2-9c5eb268473c90a0a70f0718f4790469f0aaa97e250392033b40af1545982c35.zip b/.yarn/cache/v8flags-npm-3.1.2-9c5eb268473c90a0a70f0718f4790469f0aaa97e250392033b40af1545982c35.zip new file mode 100644 index 0000000..e705e20 Binary files /dev/null and b/.yarn/cache/v8flags-npm-3.1.2-9c5eb268473c90a0a70f0718f4790469f0aaa97e250392033b40af1545982c35.zip differ diff --git a/.yarn/cache/validate-npm-package-license-npm-3.0.4-abbdf76690ffb8200519ac67154d9f7095e940c46666785f175cb96166f4132f.zip b/.yarn/cache/validate-npm-package-license-npm-3.0.4-abbdf76690ffb8200519ac67154d9f7095e940c46666785f175cb96166f4132f.zip new file mode 100644 index 0000000..bf55e70 Binary files /dev/null and b/.yarn/cache/validate-npm-package-license-npm-3.0.4-abbdf76690ffb8200519ac67154d9f7095e940c46666785f175cb96166f4132f.zip differ diff --git a/.yarn/cache/value-or-function-npm-3.0.0-b3025048d4e079358424fab8fcb2bcc9450a8d998c540ecb1b73d8c7742d1516.zip b/.yarn/cache/value-or-function-npm-3.0.0-b3025048d4e079358424fab8fcb2bcc9450a8d998c540ecb1b73d8c7742d1516.zip new file mode 100644 index 0000000..4fc356d Binary files /dev/null and b/.yarn/cache/value-or-function-npm-3.0.0-b3025048d4e079358424fab8fcb2bcc9450a8d998c540ecb1b73d8c7742d1516.zip differ diff --git a/.yarn/cache/vary-npm-1.1.2-edf75b3a6f9122bbc7b51b8526312bd0c58d9df4160c1bd398246fe47f342da5.zip b/.yarn/cache/vary-npm-1.1.2-edf75b3a6f9122bbc7b51b8526312bd0c58d9df4160c1bd398246fe47f342da5.zip new file mode 100644 index 0000000..d92c6b9 Binary files /dev/null and b/.yarn/cache/vary-npm-1.1.2-edf75b3a6f9122bbc7b51b8526312bd0c58d9df4160c1bd398246fe47f342da5.zip differ diff --git a/.yarn/cache/verror-npm-1.10.0-d8db30d14c33c49256998c85eca819aea17eeb0117a67c996673c17e18581f25.zip b/.yarn/cache/verror-npm-1.10.0-d8db30d14c33c49256998c85eca819aea17eeb0117a67c996673c17e18581f25.zip new file mode 100644 index 0000000..51ce564 Binary files /dev/null and b/.yarn/cache/verror-npm-1.10.0-d8db30d14c33c49256998c85eca819aea17eeb0117a67c996673c17e18581f25.zip differ diff --git a/.yarn/cache/vinyl-fs-npm-3.0.3-926d43a9bfdd073321688b87e5e90d819185a38773b1516d87dd1002b7f10a60.zip b/.yarn/cache/vinyl-fs-npm-3.0.3-926d43a9bfdd073321688b87e5e90d819185a38773b1516d87dd1002b7f10a60.zip new file mode 100644 index 0000000..78ebe55 Binary files /dev/null and b/.yarn/cache/vinyl-fs-npm-3.0.3-926d43a9bfdd073321688b87e5e90d819185a38773b1516d87dd1002b7f10a60.zip differ diff --git a/.yarn/cache/vinyl-npm-2.2.0-c3521c2085e8d79100c614b94eec8cb258d120e192ed73f837643482c6d0b047.zip b/.yarn/cache/vinyl-npm-2.2.0-c3521c2085e8d79100c614b94eec8cb258d120e192ed73f837643482c6d0b047.zip new file mode 100644 index 0000000..36004c6 Binary files /dev/null and b/.yarn/cache/vinyl-npm-2.2.0-c3521c2085e8d79100c614b94eec8cb258d120e192ed73f837643482c6d0b047.zip differ diff --git a/.yarn/cache/vinyl-sourcemap-npm-1.1.0-0e749c5fa206477f7ea1f80f85ba100e2d848c575dbe758102b561582fc36b59.zip b/.yarn/cache/vinyl-sourcemap-npm-1.1.0-0e749c5fa206477f7ea1f80f85ba100e2d848c575dbe758102b561582fc36b59.zip new file mode 100644 index 0000000..80fdb0b Binary files /dev/null and b/.yarn/cache/vinyl-sourcemap-npm-1.1.0-0e749c5fa206477f7ea1f80f85ba100e2d848c575dbe758102b561582fc36b59.zip differ diff --git a/.yarn/cache/vinyl-sourcemaps-apply-npm-0.2.1-f9c87783219989d759473197f58ec09958535a8b84a621f84e8b2c70c59ca500.zip b/.yarn/cache/vinyl-sourcemaps-apply-npm-0.2.1-f9c87783219989d759473197f58ec09958535a8b84a621f84e8b2c70c59ca500.zip new file mode 100644 index 0000000..5f625f5 Binary files /dev/null and b/.yarn/cache/vinyl-sourcemaps-apply-npm-0.2.1-f9c87783219989d759473197f58ec09958535a8b84a621f84e8b2c70c59ca500.zip differ diff --git a/.yarn/cache/vm-browserify-npm-0.0.4-a33db56c2459dbb161d8c6e901a2a393675aca518582fdb9614f341db5554c95.zip b/.yarn/cache/vm-browserify-npm-0.0.4-a33db56c2459dbb161d8c6e901a2a393675aca518582fdb9614f341db5554c95.zip new file mode 100644 index 0000000..805d22f Binary files /dev/null and b/.yarn/cache/vm-browserify-npm-0.0.4-a33db56c2459dbb161d8c6e901a2a393675aca518582fdb9614f341db5554c95.zip differ diff --git a/.yarn/cache/w3c-hr-time-npm-1.0.1-26fb426a51f0e961506aa3a8ce50f8055560ba3f5ce0be508da6bb0f43330e3a.zip b/.yarn/cache/w3c-hr-time-npm-1.0.1-26fb426a51f0e961506aa3a8ce50f8055560ba3f5ce0be508da6bb0f43330e3a.zip new file mode 100644 index 0000000..6a5efdd Binary files /dev/null and b/.yarn/cache/w3c-hr-time-npm-1.0.1-26fb426a51f0e961506aa3a8ce50f8055560ba3f5ce0be508da6bb0f43330e3a.zip differ diff --git a/.yarn/cache/walker-npm-1.0.7-73611a8b803d0791d9eada8ef769848a1382791bead3c2d408f171562f3179bc.zip b/.yarn/cache/walker-npm-1.0.7-73611a8b803d0791d9eada8ef769848a1382791bead3c2d408f171562f3179bc.zip new file mode 100644 index 0000000..ec332db Binary files /dev/null and b/.yarn/cache/walker-npm-1.0.7-73611a8b803d0791d9eada8ef769848a1382791bead3c2d408f171562f3179bc.zip differ diff --git a/.yarn/cache/watchpack-npm-1.6.0-c6f5b3fb7d20a7f383b75fd328d05ce98d185891e805a0cf6a22cd9b3f76d205.zip b/.yarn/cache/watchpack-npm-1.6.0-c6f5b3fb7d20a7f383b75fd328d05ce98d185891e805a0cf6a22cd9b3f76d205.zip new file mode 100644 index 0000000..236080a Binary files /dev/null and b/.yarn/cache/watchpack-npm-1.6.0-c6f5b3fb7d20a7f383b75fd328d05ce98d185891e805a0cf6a22cd9b3f76d205.zip differ diff --git a/.yarn/cache/webidl-conversions-npm-4.0.2-8dfa2c14df744f758f85d408c5ecb5432cf223268a5ccf284a67103160cbd54b.zip b/.yarn/cache/webidl-conversions-npm-4.0.2-8dfa2c14df744f758f85d408c5ecb5432cf223268a5ccf284a67103160cbd54b.zip new file mode 100644 index 0000000..78fa649 Binary files /dev/null and b/.yarn/cache/webidl-conversions-npm-4.0.2-8dfa2c14df744f758f85d408c5ecb5432cf223268a5ccf284a67103160cbd54b.zip differ diff --git a/.yarn/cache/webpack-bundle-analyzer-npm-3.3.2-755cae6a24ac33e8319ab168a4791933ac44f5892a7d03dcd5b6394bb500a42c.zip b/.yarn/cache/webpack-bundle-analyzer-npm-3.3.2-755cae6a24ac33e8319ab168a4791933ac44f5892a7d03dcd5b6394bb500a42c.zip new file mode 100644 index 0000000..e4f7135 Binary files /dev/null and b/.yarn/cache/webpack-bundle-analyzer-npm-3.3.2-755cae6a24ac33e8319ab168a4791933ac44f5892a7d03dcd5b6394bb500a42c.zip differ diff --git a/.yarn/cache/webpack-cli-npm-3.3.1-65c4ff5cda895cda35e70189039a898991481ca268e5bfc40b502ccec690bbc3.zip b/.yarn/cache/webpack-cli-npm-3.3.1-65c4ff5cda895cda35e70189039a898991481ca268e5bfc40b502ccec690bbc3.zip new file mode 100644 index 0000000..90d682b Binary files /dev/null and b/.yarn/cache/webpack-cli-npm-3.3.1-65c4ff5cda895cda35e70189039a898991481ca268e5bfc40b502ccec690bbc3.zip differ diff --git a/.yarn/cache/webpack-npm-4.30.0-755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f18.zip b/.yarn/cache/webpack-npm-4.30.0-755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f18.zip new file mode 100644 index 0000000..9d71d8b Binary files /dev/null and b/.yarn/cache/webpack-npm-4.30.0-755355621c00c2d22785f1e627ca51939cad51b16c530b4cd2328dd8e2319f18.zip differ diff --git a/.yarn/cache/webpack-sources-npm-1.3.0-9f9e0044ba75694fc21545c7ca42ab67f67de1db6a498c28da1f9fdb240d6e88.zip b/.yarn/cache/webpack-sources-npm-1.3.0-9f9e0044ba75694fc21545c7ca42ab67f67de1db6a498c28da1f9fdb240d6e88.zip new file mode 100644 index 0000000..41ac90f Binary files /dev/null and b/.yarn/cache/webpack-sources-npm-1.3.0-9f9e0044ba75694fc21545c7ca42ab67f67de1db6a498c28da1f9fdb240d6e88.zip differ diff --git a/.yarn/cache/webpack-stream-npm-5.2.1-f62df0144a2e906c9b1f2ca192a01b6d4f5ed31b3aa7ac3d421845e9c6eb75ed.zip b/.yarn/cache/webpack-stream-npm-5.2.1-f62df0144a2e906c9b1f2ca192a01b6d4f5ed31b3aa7ac3d421845e9c6eb75ed.zip new file mode 100644 index 0000000..49125c2 Binary files /dev/null and b/.yarn/cache/webpack-stream-npm-5.2.1-f62df0144a2e906c9b1f2ca192a01b6d4f5ed31b3aa7ac3d421845e9c6eb75ed.zip differ diff --git a/.yarn/cache/whatwg-encoding-npm-1.0.5-1322912bbabfbe130fa5d25781df4453c215a4ca7a01116226799cc12c8a8ca4.zip b/.yarn/cache/whatwg-encoding-npm-1.0.5-1322912bbabfbe130fa5d25781df4453c215a4ca7a01116226799cc12c8a8ca4.zip new file mode 100644 index 0000000..e7d07cb Binary files /dev/null and b/.yarn/cache/whatwg-encoding-npm-1.0.5-1322912bbabfbe130fa5d25781df4453c215a4ca7a01116226799cc12c8a8ca4.zip differ diff --git a/.yarn/cache/whatwg-mimetype-npm-2.3.0-f4a27dc8ddccb5df51e96af023272c3dd370c43f55300a20961d5ea8b4fb45fb.zip b/.yarn/cache/whatwg-mimetype-npm-2.3.0-f4a27dc8ddccb5df51e96af023272c3dd370c43f55300a20961d5ea8b4fb45fb.zip new file mode 100644 index 0000000..b458a3d Binary files /dev/null and b/.yarn/cache/whatwg-mimetype-npm-2.3.0-f4a27dc8ddccb5df51e96af023272c3dd370c43f55300a20961d5ea8b4fb45fb.zip differ diff --git a/.yarn/cache/whatwg-url-npm-6.5.0-76d17126eb1d62b4fe4de8bd9ab3e9939b4414b5e03a55c78b2846529ee44a36.zip b/.yarn/cache/whatwg-url-npm-6.5.0-76d17126eb1d62b4fe4de8bd9ab3e9939b4414b5e03a55c78b2846529ee44a36.zip new file mode 100644 index 0000000..fe13cef Binary files /dev/null and b/.yarn/cache/whatwg-url-npm-6.5.0-76d17126eb1d62b4fe4de8bd9ab3e9939b4414b5e03a55c78b2846529ee44a36.zip differ diff --git a/.yarn/cache/whatwg-url-npm-7.0.0-8300a8afa8cc9f5ca7eb2e888ebb63f427142a743aeead7a9fde074e58ddfca8.zip b/.yarn/cache/whatwg-url-npm-7.0.0-8300a8afa8cc9f5ca7eb2e888ebb63f427142a743aeead7a9fde074e58ddfca8.zip new file mode 100644 index 0000000..6da3062 Binary files /dev/null and b/.yarn/cache/whatwg-url-npm-7.0.0-8300a8afa8cc9f5ca7eb2e888ebb63f427142a743aeead7a9fde074e58ddfca8.zip differ diff --git a/.yarn/cache/which-module-npm-1.0.0-da5bc61d9c5da893b968e71965d48024992373a2d8bea70c7b969cf57d6bdea6.zip b/.yarn/cache/which-module-npm-1.0.0-da5bc61d9c5da893b968e71965d48024992373a2d8bea70c7b969cf57d6bdea6.zip new file mode 100644 index 0000000..8bf0fdf Binary files /dev/null and b/.yarn/cache/which-module-npm-1.0.0-da5bc61d9c5da893b968e71965d48024992373a2d8bea70c7b969cf57d6bdea6.zip differ diff --git a/.yarn/cache/which-module-npm-2.0.0-9af7bd1ba11284dd5bbb62453562ae5d3a459631cda2cf388d01cc9fcf17123e.zip b/.yarn/cache/which-module-npm-2.0.0-9af7bd1ba11284dd5bbb62453562ae5d3a459631cda2cf388d01cc9fcf17123e.zip new file mode 100644 index 0000000..9fcdf09 Binary files /dev/null and b/.yarn/cache/which-module-npm-2.0.0-9af7bd1ba11284dd5bbb62453562ae5d3a459631cda2cf388d01cc9fcf17123e.zip differ diff --git a/.yarn/cache/which-npm-1.3.1-b884326ecb347e77009bba24579d1626fb1b59135951b4fcd8e3976e3ed5c409.zip b/.yarn/cache/which-npm-1.3.1-b884326ecb347e77009bba24579d1626fb1b59135951b4fcd8e3976e3ed5c409.zip new file mode 100644 index 0000000..3e4f7bd Binary files /dev/null and b/.yarn/cache/which-npm-1.3.1-b884326ecb347e77009bba24579d1626fb1b59135951b4fcd8e3976e3ed5c409.zip differ diff --git a/.yarn/cache/wide-align-npm-1.1.3-76f5cdf078f4d2b1e16e1a529bdc31e6f37d142b635f4a4d6e7097fc8e0dee6f.zip b/.yarn/cache/wide-align-npm-1.1.3-76f5cdf078f4d2b1e16e1a529bdc31e6f37d142b635f4a4d6e7097fc8e0dee6f.zip new file mode 100644 index 0000000..0fd93a0 Binary files /dev/null and b/.yarn/cache/wide-align-npm-1.1.3-76f5cdf078f4d2b1e16e1a529bdc31e6f37d142b635f4a4d6e7097fc8e0dee6f.zip differ diff --git a/.yarn/cache/wordwrap-npm-0.0.3-d354b06d539616cf5ac61d5be39d24ae5af937eeb880ef7b431eb3575934baf2.zip b/.yarn/cache/wordwrap-npm-0.0.3-d354b06d539616cf5ac61d5be39d24ae5af937eeb880ef7b431eb3575934baf2.zip new file mode 100644 index 0000000..23b4d88 Binary files /dev/null and b/.yarn/cache/wordwrap-npm-0.0.3-d354b06d539616cf5ac61d5be39d24ae5af937eeb880ef7b431eb3575934baf2.zip differ diff --git a/.yarn/cache/wordwrap-npm-1.0.0-7ee9a989a132335d2da8108d8b3b35140b2373fd3fd5cf447e0026468698ff5e.zip b/.yarn/cache/wordwrap-npm-1.0.0-7ee9a989a132335d2da8108d8b3b35140b2373fd3fd5cf447e0026468698ff5e.zip new file mode 100644 index 0000000..7e4cacd Binary files /dev/null and b/.yarn/cache/wordwrap-npm-1.0.0-7ee9a989a132335d2da8108d8b3b35140b2373fd3fd5cf447e0026468698ff5e.zip differ diff --git a/.yarn/cache/worker-farm-npm-1.6.0-0653c70d504f8f28804803489533910df8892f066035402a6ede27b9f13a2ef6.zip b/.yarn/cache/worker-farm-npm-1.6.0-0653c70d504f8f28804803489533910df8892f066035402a6ede27b9f13a2ef6.zip new file mode 100644 index 0000000..38a9e81 Binary files /dev/null and b/.yarn/cache/worker-farm-npm-1.6.0-0653c70d504f8f28804803489533910df8892f066035402a6ede27b9f13a2ef6.zip differ diff --git a/.yarn/cache/wrap-ansi-npm-2.1.0-e4ce545bc7bdea2ad2f31981cb5be5fee57f4a0aeb2497de87de58d165427e7b.zip b/.yarn/cache/wrap-ansi-npm-2.1.0-e4ce545bc7bdea2ad2f31981cb5be5fee57f4a0aeb2497de87de58d165427e7b.zip new file mode 100644 index 0000000..5af1be8 Binary files /dev/null and b/.yarn/cache/wrap-ansi-npm-2.1.0-e4ce545bc7bdea2ad2f31981cb5be5fee57f4a0aeb2497de87de58d165427e7b.zip differ diff --git a/.yarn/cache/wrappy-npm-1.0.2-df5d6419d820e7bcde1c8403b78cedfa4c9b67ee273d3a4bb9ffedc02c2eace1.zip b/.yarn/cache/wrappy-npm-1.0.2-df5d6419d820e7bcde1c8403b78cedfa4c9b67ee273d3a4bb9ffedc02c2eace1.zip new file mode 100644 index 0000000..b366ca0 Binary files /dev/null and b/.yarn/cache/wrappy-npm-1.0.2-df5d6419d820e7bcde1c8403b78cedfa4c9b67ee273d3a4bb9ffedc02c2eace1.zip differ diff --git a/.yarn/cache/write-file-atomic-npm-2.4.1-085e824a63f826a74d15a0f89463e8680335ae78b1d34764be7b1993b73cf449.zip b/.yarn/cache/write-file-atomic-npm-2.4.1-085e824a63f826a74d15a0f89463e8680335ae78b1d34764be7b1993b73cf449.zip new file mode 100644 index 0000000..489ac63 Binary files /dev/null and b/.yarn/cache/write-file-atomic-npm-2.4.1-085e824a63f826a74d15a0f89463e8680335ae78b1d34764be7b1993b73cf449.zip differ diff --git a/.yarn/cache/write-npm-1.0.3-245e61e7896b5bca28c1caf951e9faa4246d3c4c43b990fb37cb4fabb59eb575.zip b/.yarn/cache/write-npm-1.0.3-245e61e7896b5bca28c1caf951e9faa4246d3c4c43b990fb37cb4fabb59eb575.zip new file mode 100644 index 0000000..a1a8fd1 Binary files /dev/null and b/.yarn/cache/write-npm-1.0.3-245e61e7896b5bca28c1caf951e9faa4246d3c4c43b990fb37cb4fabb59eb575.zip differ diff --git a/.yarn/cache/ws-npm-5.2.2-8b2d5b70470630165eebd16bdd8e30d9667d8a5a078316ef8b60e0e3a86a6828.zip b/.yarn/cache/ws-npm-5.2.2-8b2d5b70470630165eebd16bdd8e30d9667d8a5a078316ef8b60e0e3a86a6828.zip new file mode 100644 index 0000000..f961ba9 Binary files /dev/null and b/.yarn/cache/ws-npm-5.2.2-8b2d5b70470630165eebd16bdd8e30d9667d8a5a078316ef8b60e0e3a86a6828.zip differ diff --git a/.yarn/cache/ws-npm-6.2.1-8ab2b16111ee7b61df37a4f6df0f60f20aa115d4e30bb5782b271c1ff8253707.zip b/.yarn/cache/ws-npm-6.2.1-8ab2b16111ee7b61df37a4f6df0f60f20aa115d4e30bb5782b271c1ff8253707.zip new file mode 100644 index 0000000..c2671e7 Binary files /dev/null and b/.yarn/cache/ws-npm-6.2.1-8ab2b16111ee7b61df37a4f6df0f60f20aa115d4e30bb5782b271c1ff8253707.zip differ diff --git a/.yarn/cache/xml-name-validator-npm-3.0.0-684c128769305540d3346030d4b88080dd32870f2d9a1e89df02b913dae64033.zip b/.yarn/cache/xml-name-validator-npm-3.0.0-684c128769305540d3346030d4b88080dd32870f2d9a1e89df02b913dae64033.zip new file mode 100644 index 0000000..ea0d6b0 Binary files /dev/null and b/.yarn/cache/xml-name-validator-npm-3.0.0-684c128769305540d3346030d4b88080dd32870f2d9a1e89df02b913dae64033.zip differ diff --git a/.yarn/cache/xtend-npm-4.0.1-385c35fc55882c94c5025a709a169fbee383ca9a7cc13cd0562412ab424edf09.zip b/.yarn/cache/xtend-npm-4.0.1-385c35fc55882c94c5025a709a169fbee383ca9a7cc13cd0562412ab424edf09.zip new file mode 100644 index 0000000..ba5061f Binary files /dev/null and b/.yarn/cache/xtend-npm-4.0.1-385c35fc55882c94c5025a709a169fbee383ca9a7cc13cd0562412ab424edf09.zip differ diff --git a/.yarn/cache/y18n-npm-3.2.1-b6160891833ab9768c30ab22f02842a6bba8b3ede82df8737a37b3d29e425425.zip b/.yarn/cache/y18n-npm-3.2.1-b6160891833ab9768c30ab22f02842a6bba8b3ede82df8737a37b3d29e425425.zip new file mode 100644 index 0000000..b3017f2 Binary files /dev/null and b/.yarn/cache/y18n-npm-3.2.1-b6160891833ab9768c30ab22f02842a6bba8b3ede82df8737a37b3d29e425425.zip differ diff --git a/.yarn/cache/y18n-npm-4.0.0-e651611f639ebd2a9e68ff9eacf45384a4d9192e5d28eb88c690090eaf7a9896.zip b/.yarn/cache/y18n-npm-4.0.0-e651611f639ebd2a9e68ff9eacf45384a4d9192e5d28eb88c690090eaf7a9896.zip new file mode 100644 index 0000000..f15fd99 Binary files /dev/null and b/.yarn/cache/y18n-npm-4.0.0-e651611f639ebd2a9e68ff9eacf45384a4d9192e5d28eb88c690090eaf7a9896.zip differ diff --git a/.yarn/cache/yallist-npm-3.0.3-5a3340944e8f6f377f853ff4323d2dedfa102abae3861f0058080021775df965.zip b/.yarn/cache/yallist-npm-3.0.3-5a3340944e8f6f377f853ff4323d2dedfa102abae3861f0058080021775df965.zip new file mode 100644 index 0000000..8aaec3f Binary files /dev/null and b/.yarn/cache/yallist-npm-3.0.3-5a3340944e8f6f377f853ff4323d2dedfa102abae3861f0058080021775df965.zip differ diff --git a/.yarn/cache/yargs-npm-12.0.5-18c426aea9a03bc58a6704778e77147379425224d79bf4e3635adf4a736a13f8.zip b/.yarn/cache/yargs-npm-12.0.5-18c426aea9a03bc58a6704778e77147379425224d79bf4e3635adf4a736a13f8.zip new file mode 100644 index 0000000..1573e96 Binary files /dev/null and b/.yarn/cache/yargs-npm-12.0.5-18c426aea9a03bc58a6704778e77147379425224d79bf4e3635adf4a736a13f8.zip differ diff --git a/.yarn/cache/yargs-npm-7.1.0-f6a7e06488f1e6383b3941250602a7e27f0dbbed7e40e4cf515119b1683f92df.zip b/.yarn/cache/yargs-npm-7.1.0-f6a7e06488f1e6383b3941250602a7e27f0dbbed7e40e4cf515119b1683f92df.zip new file mode 100644 index 0000000..f0f5f74 Binary files /dev/null and b/.yarn/cache/yargs-npm-7.1.0-f6a7e06488f1e6383b3941250602a7e27f0dbbed7e40e4cf515119b1683f92df.zip differ diff --git a/.yarn/cache/yargs-parser-npm-11.1.1-401c5211a9384ef28520a85fc7f4b657ebb8643bc3bfe014f0f4f18271e074c4.zip b/.yarn/cache/yargs-parser-npm-11.1.1-401c5211a9384ef28520a85fc7f4b657ebb8643bc3bfe014f0f4f18271e074c4.zip new file mode 100644 index 0000000..890ea7b Binary files /dev/null and b/.yarn/cache/yargs-parser-npm-11.1.1-401c5211a9384ef28520a85fc7f4b657ebb8643bc3bfe014f0f4f18271e074c4.zip differ diff --git a/.yarn/cache/yargs-parser-npm-5.0.0-606553367976fbf7513fdd0ad87cfa138203186177b330d66ecb1da128e89028.zip b/.yarn/cache/yargs-parser-npm-5.0.0-606553367976fbf7513fdd0ad87cfa138203186177b330d66ecb1da128e89028.zip new file mode 100644 index 0000000..abb4d1e Binary files /dev/null and b/.yarn/cache/yargs-parser-npm-5.0.0-606553367976fbf7513fdd0ad87cfa138203186177b330d66ecb1da128e89028.zip differ diff --git a/.yarn/releases/yarn-berry.js b/.yarn/releases/yarn-berry.js new file mode 100755 index 0000000..45139c9 --- /dev/null +++ b/.yarn/releases/yarn-berry.js @@ -0,0 +1,125976 @@ +#!/usr/bin/env node +module.exports = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); +/******/ } +/******/ }; +/******/ +/******/ // define __esModule on exports +/******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = __webpack_require__(1); +const fslib_1 = __webpack_require__(3); +const child_process_1 = __webpack_require__(21); +const clipanion_1 = __webpack_require__(169); +const path_1 = __webpack_require__(6); +const yup = __importStar(__webpack_require__(476)); +const pluginConfiguration_1 = __webpack_require__(688); +const clipanion = new clipanion_1.Clipanion({ configKey: null }); +clipanion.topLevel(`[--cwd PATH]`) + .validate(yup.object().shape({ + cwd: yup.string().transform((cwd = process.cwd()) => { + // Note that the `--cwd` option might be a relative path that we need to resolve + return path_1.posix.resolve(fslib_1.NodeFS.toPortablePath(process.cwd()), fslib_1.NodeFS.toPortablePath(cwd)); + }), +})); +function runBinary(path) { + const physicalPath = fslib_1.NodeFS.fromPortablePath(path); + if (physicalPath) { + child_process_1.execFileSync(process.execPath, [physicalPath, ...process.argv.slice(2)], { + stdio: `inherit`, + env: Object.assign({}, process.env, { YARN_IGNORE_PATH: `1` }) + }); + } + else { + child_process_1.execFileSync(physicalPath, process.argv.slice(2), { + stdio: `inherit`, + env: Object.assign({}, process.env, { YARN_IGNORE_PATH: `1` }) + }); + } +} +async function run() { + const configuration = await core_1.Configuration.find(fslib_1.NodeFS.toPortablePath(process.cwd()), pluginConfiguration_1.pluginConfiguration); + const yarnPath = configuration.get(`yarnPath`); + const ignorePath = configuration.get(`ignorePath`); + if (yarnPath !== null && !ignorePath) { + if (!fslib_1.xfs.existsSync(yarnPath)) { + clipanion.error(new Error(`The "yarn-path" option has been set (in ${configuration.sources.get(`yarnPath`)}), but the specified location doesn't exist (${yarnPath}).`), { stream: process.stderr }); + process.exitCode = 1; + } + else { + try { + runBinary(yarnPath); + } + catch (error) { + process.exitCode = error.code || 1; + } + } + } + else { + for (const plugin of configuration.plugins.values()) + for (const command of plugin.commands || []) + command(clipanion, pluginConfiguration_1.pluginConfiguration); + clipanion.runExit(`yarn`, process.argv.slice(2), { + cwd: fslib_1.NodeFS.toPortablePath(process.cwd()) + }); + } +} +run().catch(error => { + clipanion.error(error, { stream: process.stdout }); + process.exitCode = 1; +}); + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const execUtils = __importStar(__webpack_require__(2)); +exports.execUtils = execUtils; +const httpUtils = __importStar(__webpack_require__(36)); +exports.httpUtils = httpUtils; +const miscUtils = __importStar(__webpack_require__(99)); +exports.miscUtils = miscUtils; +const scriptUtils = __importStar(__webpack_require__(100)); +exports.scriptUtils = scriptUtils; +const structUtils = __importStar(__webpack_require__(113)); +exports.structUtils = structUtils; +const tgzUtils = __importStar(__webpack_require__(117)); +exports.tgzUtils = tgzUtils; +var Cache_1 = __webpack_require__(150); +exports.Cache = Cache_1.Cache; +var Configuration_1 = __webpack_require__(156); +exports.Configuration = Configuration_1.Configuration; +exports.SettingsType = Configuration_1.SettingsType; +var Installer_1 = __webpack_require__(277); +exports.BuildType = Installer_1.BuildType; +var LightReport_1 = __webpack_require__(278); +exports.LightReport = LightReport_1.LightReport; +var Manifest_1 = __webpack_require__(112); +exports.Manifest = Manifest_1.Manifest; +var Project_1 = __webpack_require__(279); +exports.Project = Project_1.Project; +var Report_1 = __webpack_require__(116); +exports.ReportError = Report_1.ReportError; +exports.Report = Report_1.Report; +exports.MessageName = Report_1.MessageName; +var StreamReport_1 = __webpack_require__(115); +exports.StreamReport = StreamReport_1.StreamReport; +var ThrowReport_1 = __webpack_require__(289); +exports.ThrowReport = ThrowReport_1.ThrowReport; +var VirtualFetcher_1 = __webpack_require__(271); +exports.VirtualFetcher = VirtualFetcher_1.VirtualFetcher; +var Workspace_1 = __webpack_require__(290); +exports.Workspace = Workspace_1.Workspace; +var types_1 = __webpack_require__(274); +exports.LinkType = types_1.LinkType; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const cross_spawn_1 = __importDefault(__webpack_require__(20)); +async function pipevp(fileName, args, { cwd, env = process.env, strict = false, stdin = null, stdout, stderr }) { + const stdio = [`pipe`, `pipe`, `pipe`]; + if (stdin === null) + stdio[0] = `ignore`; + else if (stdin === process.stdin) + stdio[0] = stdin; + if (stdout === process.stdout) + stdio[1] = stdout; + if (stderr === process.stderr) + stdio[2] = stderr; + const subprocess = cross_spawn_1.default(fileName, args, { + cwd: fslib_1.NodeFS.fromPortablePath(cwd), + env, + stdio, + }); + if (stdin !== process.stdin && stdin !== null) + stdin.pipe(subprocess.stdin); + if (stdout !== process.stdout) + subprocess.stdout.pipe(stdout); + if (stderr !== process.stderr) + subprocess.stderr.pipe(stderr); + return new Promise((resolve, reject) => { + subprocess.on(`close`, (code) => { + if (code === 0 || !strict) { + resolve({ code }); + } + else { + reject(new Error(`Child "${fileName}" exited with exit code ${code}`)); + } + }); + }); +} +exports.pipevp = pipevp; +async function execvp(fileName, args, { cwd, env = process.env, encoding = `utf8`, strict = false }) { + const stdio = [`ignore`, `pipe`, `pipe`]; + const stdoutChunks = []; + const stderrChunks = []; + const subprocess = cross_spawn_1.default(fileName, args, { + cwd: fslib_1.NodeFS.fromPortablePath(cwd), + env, + stdio, + }); + subprocess.stdout.on(`data`, (chunk) => { + stdoutChunks.push(chunk); + }); + subprocess.stderr.on(`data`, (chunk) => { + stderrChunks.push(chunk); + }); + return await new Promise((resolve, reject) => { + subprocess.on(`close`, (code) => { + const stdout = encoding === `buffer` + ? Buffer.concat(stdoutChunks) + : Buffer.concat(stdoutChunks).toString(encoding); + const stderr = encoding === `buffer` + ? Buffer.concat(stderrChunks) + : Buffer.concat(stderrChunks).toString(encoding); + if (code === 0 || !strict) { + resolve({ code, stdout, stderr }); + } + else { + reject(new Error(`Child "${fileName}" exited with exit code ${code}`)); + } + }); + }); +} +exports.execvp = execvp; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const NodeFS_1 = __webpack_require__(4); +var AliasFS_1 = __webpack_require__(8); +exports.AliasFS = AliasFS_1.AliasFS; +var FakeFS_1 = __webpack_require__(7); +exports.FakeFS = FakeFS_1.FakeFS; +var CwdFS_1 = __webpack_require__(9); +exports.CwdFS = CwdFS_1.CwdFS; +var JailFS_1 = __webpack_require__(10); +exports.JailFS = JailFS_1.JailFS; +var LazyFS_1 = __webpack_require__(11); +exports.LazyFS = LazyFS_1.LazyFS; +var NodeFS_2 = __webpack_require__(4); +exports.NodeFS = NodeFS_2.NodeFS; +var PosixFS_1 = __webpack_require__(12); +exports.PosixFS = PosixFS_1.PosixFS; +var ZipFS_1 = __webpack_require__(13); +exports.ZipFS = ZipFS_1.ZipFS; +var ZipOpenFS_1 = __webpack_require__(19); +exports.ZipOpenFS = ZipOpenFS_1.ZipOpenFS; +function wrapSync(fn) { + return fn; +} +function wrapAsync(fn) { + return function (...args) { + const cb = typeof args[args.length - 1] === `function` + ? args.pop() + : null; + setImmediate(() => { + let error, result; + try { + result = fn(...args); + } + catch (caught) { + error = caught; + } + cb(error, result); + }); + }; +} +function patchFs(patchedFs, fakeFs) { + const SYNC_IMPLEMENTATIONS = new Set([ + `accessSync`, + `createReadStream`, + `chmodSync`, + `copyFileSync`, + `lstatSync`, + `openSync`, + `readlinkSync`, + `readFileSync`, + `readdirSync`, + `readlinkSync`, + `realpathSync`, + `rmdirSync`, + `statSync`, + `symlinkSync`, + `unlinkSync`, + `utimesSync`, + `writeFileSync`, + ]); + const ASYNC_IMPLEMENTATIONS = new Set([ + `accessPromise`, + `chmodPromise`, + `copyFilePromise`, + `lstatPromise`, + `openPromise`, + `readdirPromise`, + `realpathPromise`, + `readFilePromise`, + `readdirPromise`, + `readlinkPromise`, + `rmdirPromise`, + `statPromise`, + `symlinkPromise`, + `unlinkPromise`, + `utimesPromise`, + `writeFilePromise`, + ]); + patchedFs.existsSync = (p) => { + try { + return fakeFs.existsSync(p); + } + catch (error) { + return false; + } + }; + patchedFs.exists = (p, callback) => { + fakeFs.existsPromise(p).then(result => { + if (callback) { + callback(result); + } + }, () => { + if (callback) { + callback(false); + } + }); + }; + for (const fnName of ASYNC_IMPLEMENTATIONS) { + const fakeImpl = fakeFs[fnName].bind(fakeFs); + const origName = fnName.replace(/Promise$/, ``); + patchedFs[origName] = (...args) => { + const hasCallback = typeof args[args.length - 1] === `function`; + const callback = hasCallback ? args.pop() : () => { }; + fakeImpl(...args).then((result) => { + callback(undefined, result); + }, (error) => { + callback(error); + }); + }; + } + for (const fnName of SYNC_IMPLEMENTATIONS) { + const fakeImpl = fakeFs[fnName].bind(fakeFs); + const origName = fnName; + patchedFs[origName] = fakeImpl; + } + patchedFs.realpathSync.native = patchedFs.realpathSync; + patchedFs.realpath.native = patchedFs.realpath; +} +exports.patchFs = patchFs; +function extendFs(realFs, fakeFs) { + const patchedFs = Object.create(realFs); + patchFs(patchedFs, fakeFs); + return patchedFs; +} +exports.extendFs = extendFs; +exports.xfs = new NodeFS_1.NodeFS(); + + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __importDefault(__webpack_require__(5)); +const path_1 = __webpack_require__(6); +const FakeFS_1 = __webpack_require__(7); +const PORTABLE_PATH_PREFIX = `/mnt/`; +const PORTABLE_PREFIX_REGEXP = /^\/mnt\/([a-z])(?:\/(.*))?$/; +class NodeFS extends FakeFS_1.FakeFS { + constructor(realFs = fs_1.default) { + super(); + this.realFs = realFs; + } + getRealPath() { + return `/`; + } + async openPromise(p, flags, mode) { + return await new Promise((resolve, reject) => { + this.realFs.open(NodeFS.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject)); + }); + } + openSync(p, flags, mode) { + return this.realFs.openSync(NodeFS.fromPortablePath(p), flags, mode); + } + async closePromise(fd) { + await new Promise((resolve, reject) => { + this.realFs.close(fd, this.makeCallback(resolve, reject)); + }); + } + closeSync(fd) { + this.realFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.realFs.createReadStream(NodeFS.fromPortablePath(p), opts); + } + createWriteStream(p, opts) { + return this.realFs.createWriteStream(NodeFS.fromPortablePath(p), opts); + } + async realpathPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.realpath(NodeFS.fromPortablePath(p), {}, this.makeCallback(resolve, reject)); + }).then(path => { + return NodeFS.toPortablePath(path); + }); + } + realpathSync(p) { + return NodeFS.toPortablePath(this.realFs.realpathSync(NodeFS.fromPortablePath(p), {})); + } + async existsPromise(p) { + return await new Promise(resolve => { + this.realFs.exists(NodeFS.fromPortablePath(p), resolve); + }); + } + accessSync(p, mode) { + return this.realFs.accessSync(NodeFS.fromPortablePath(p), mode); + } + async accessPromise(p, mode) { + return await new Promise((resolve, reject) => { + this.realFs.access(NodeFS.fromPortablePath(p), mode, this.makeCallback(resolve, reject)); + }); + } + existsSync(p) { + return this.realFs.existsSync(NodeFS.fromPortablePath(p)); + } + async statPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.stat(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + statSync(p) { + return this.realFs.statSync(NodeFS.fromPortablePath(p)); + } + async lstatPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.lstat(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + lstatSync(p) { + return this.realFs.lstatSync(NodeFS.fromPortablePath(p)); + } + async chmodPromise(p, mask) { + return await new Promise((resolve, reject) => { + this.realFs.chmod(NodeFS.fromPortablePath(p), mask, this.makeCallback(resolve, reject)); + }); + } + chmodSync(p, mask) { + return this.realFs.chmodSync(NodeFS.fromPortablePath(p), mask); + } + async renamePromise(oldP, newP) { + return await new Promise((resolve, reject) => { + this.realFs.rename(NodeFS.fromPortablePath(oldP), NodeFS.fromPortablePath(newP), this.makeCallback(resolve, reject)); + }); + } + renameSync(oldP, newP) { + return this.realFs.renameSync(NodeFS.fromPortablePath(oldP), NodeFS.fromPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags = 0) { + return await new Promise((resolve, reject) => { + this.realFs.copyFile(NodeFS.fromPortablePath(sourceP), NodeFS.fromPortablePath(destP), flags, this.makeCallback(resolve, reject)); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + return this.realFs.copyFileSync(NodeFS.fromPortablePath(sourceP), NodeFS.fromPortablePath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await new Promise((resolve, reject) => { + if (opts) { + this.realFs.writeFile(NodeFS.fromPortablePath(p), content, opts, this.makeCallback(resolve, reject)); + } + else { + this.realFs.writeFile(NodeFS.fromPortablePath(p), content, this.makeCallback(resolve, reject)); + } + }); + } + writeFileSync(p, content, opts) { + if (opts) { + this.realFs.writeFileSync(NodeFS.fromPortablePath(p), content, opts); + } + else { + this.realFs.writeFileSync(NodeFS.fromPortablePath(p), content); + } + } + async unlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.unlink(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + unlinkSync(p) { + return this.realFs.unlinkSync(NodeFS.fromPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await new Promise((resolve, reject) => { + this.realFs.utimes(NodeFS.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject)); + }); + } + utimesSync(p, atime, mtime) { + this.realFs.utimesSync(NodeFS.fromPortablePath(p), atime, mtime); + } + async mkdirPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.mkdir(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + mkdirSync(p) { + return this.realFs.mkdirSync(NodeFS.fromPortablePath(p)); + } + async rmdirPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.rmdir(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + rmdirSync(p) { + return this.realFs.rmdirSync(NodeFS.fromPortablePath(p)); + } + async symlinkPromise(target, p) { + const type = target.endsWith(`/`) ? `dir` : `file`; + return await new Promise((resolve, reject) => { + this.realFs.symlink(NodeFS.fromPortablePath(target.replace(/\/+$/, ``)), NodeFS.fromPortablePath(p), type, this.makeCallback(resolve, reject)); + }); + } + symlinkSync(target, p) { + const type = target.endsWith(`/`) ? `dir` : `file`; + return this.realFs.symlinkSync(NodeFS.fromPortablePath(target.replace(/\/+$/, ``)), NodeFS.fromPortablePath(p), type); + } + async readFilePromise(p, encoding) { + return await new Promise((resolve, reject) => { + this.realFs.readFile(NodeFS.fromPortablePath(p), encoding, this.makeCallback(resolve, reject)); + }); + } + readFileSync(p, encoding) { + return this.realFs.readFileSync(NodeFS.fromPortablePath(p), encoding); + } + async readdirPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readdir(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }); + } + readdirSync(p) { + return this.realFs.readdirSync(NodeFS.fromPortablePath(p)); + } + async readlinkPromise(p) { + return await new Promise((resolve, reject) => { + this.realFs.readlink(NodeFS.fromPortablePath(p), this.makeCallback(resolve, reject)); + }).then(path => { + return NodeFS.toPortablePath(path); + }); + } + readlinkSync(p) { + return NodeFS.toPortablePath(this.realFs.readlinkSync(NodeFS.fromPortablePath(p))); + } + makeCallback(resolve, reject) { + return (err, result) => { + if (err) { + reject(err); + } + else { + resolve(result); + } + }; + } + static fromPortablePath(p) { + if (process.platform !== `win32`) + return p; + // Path should look like "/mnt/n/berry/scripts/plugin-pack.js" + // And transform to "N:\berry/scripts/plugin-pack.js" + const match = p.match(PORTABLE_PREFIX_REGEXP); + if (!match) + return p; + const [, drive, pathWithoutPrefix = ''] = match; + const windowsPath = pathWithoutPrefix.replace(/\//g, '\\'); + return `${drive.toUpperCase()}:\\${windowsPath}`; + } + static toPortablePath(p) { + if (process.platform !== `win32`) + return p; + // Path should look like "N:\berry/scripts/plugin-pack.js" + // And transform to "/mnt/n/berry/scripts/plugin-pack.js" + // Skip if the path is already portable + if (p.startsWith(PORTABLE_PATH_PREFIX)) + return p; + const { root } = path_1.win32.parse(p); + // If relative path, just replace win32 slashes by posix slashes + if (!root) + return p.replace(/\\/g, '/'); + const driveLetter = root[0].toLowerCase(); + const pathWithoutRoot = p.substr(root.length); + const posixPath = pathWithoutRoot.replace(/\\/g, '/'); + return `${PORTABLE_PATH_PREFIX}${driveLetter}/${posixPath}`; + } +} +exports.NodeFS = NodeFS; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + +module.exports = require("fs"); + +/***/ }), +/* 6 */ +/***/ (function(module, exports) { + +module.exports = require("path"); + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __webpack_require__(6); +class FakeFS { + resolve(p) { + return path_1.posix.resolve(`/`, p); + } + async removePromise(p) { + let stat; + try { + stat = await this.lstatPromise(p); + } + catch (error) { + if (error.code === `ENOENT`) { + return; + } + else { + throw error; + } + } + if (stat.isDirectory()) { + for (const entry of await this.readdirPromise(p)) + await this.removePromise(path_1.posix.resolve(p, entry)); + // 5 gives 1s worth of retries at worst + for (let t = 0; t < 5; ++t) { + try { + await this.rmdirPromise(p); + break; + } + catch (error) { + if (error.code === `EBUSY` || error.code === `ENOTEMPTY`) { + await new Promise(resolve => setTimeout(resolve, t * 100)); + continue; + } + else { + throw error; + } + } + } + } + else { + await this.unlinkPromise(p); + } + } + removeSync(p) { + let stat; + try { + stat = this.lstatSync(p); + } + catch (error) { + if (error.code === `ENOENT`) { + return; + } + else { + throw error; + } + } + if (stat.isDirectory()) { + for (const entry of this.readdirSync(p)) + this.removeSync(path_1.posix.resolve(p, entry)); + this.rmdirSync(p); + } + else { + this.unlinkSync(p); + } + } + async mkdirpPromise(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === `/`) + return; + const parts = p.split(`/`); + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(`/`); + if (!this.existsSync(subPath)) { + try { + await this.mkdirPromise(subPath); + } + catch (error) { + if (error.code === `EEXIST`) { + continue; + } + else { + throw error; + } + } + if (chmod != null) + await this.chmodPromise(subPath, chmod); + if (utimes != null) { + await this.utimesPromise(subPath, utimes[0], utimes[1]); + } + } + } + } + mkdirpSync(p, { chmod, utimes } = {}) { + p = this.resolve(p); + if (p === `/`) + return; + const parts = p.split(`/`); + for (let u = 2; u <= parts.length; ++u) { + const subPath = parts.slice(0, u).join(`/`); + if (!this.existsSync(subPath)) { + try { + this.mkdirSync(subPath); + } + catch (error) { + if (error.code === `EEXIST`) { + continue; + } + else { + throw error; + } + } + if (chmod != null) + this.chmodSync(subPath, chmod); + if (utimes != null) { + this.utimesSync(subPath, utimes[0], utimes[1]); + } + } + } + } + async copyPromise(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = await baseFs.lstatPromise(source); + const exists = await this.existsSync(destination); + if (stat.isDirectory()) { + await this.mkdirpPromise(destination); + const directoryListing = await baseFs.readdirPromise(source); + await Promise.all(directoryListing.map(entry => { + return this.copyPromise(path_1.posix.join(destination, entry), path_1.posix.join(source, entry), { baseFs, overwrite }); + })); + } + else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + await this.removePromise(destination); + const content = await baseFs.readFilePromise(source); + await this.writeFilePromise(destination, content); + } + } + else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + await this.removePromise(destination); + const target = await baseFs.readlinkPromise(source); + await this.symlinkPromise(target, destination); + } + } + else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 0o777; + await this.chmodPromise(destination, mode); + } + copySync(destination, source, { baseFs = this, overwrite = true } = {}) { + const stat = baseFs.lstatSync(source); + const exists = this.existsSync(destination); + if (stat.isDirectory()) { + this.mkdirpSync(destination); + const directoryListing = baseFs.readdirSync(source); + for (const entry of directoryListing) { + this.copySync(path_1.posix.join(destination, entry), path_1.posix.join(source, entry), { baseFs, overwrite }); + } + } + else if (stat.isFile()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const content = baseFs.readFileSync(source); + this.writeFileSync(destination, content); + } + } + else if (stat.isSymbolicLink()) { + if (!exists || overwrite) { + if (exists) + this.removeSync(destination); + const target = baseFs.readlinkSync(source); + this.symlinkSync(target, destination); + } + } + else { + throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`); + } + const mode = stat.mode & 0o777; + this.chmodSync(destination, mode); + } + async changeFilePromise(p, content) { + try { + const current = await this.readFilePromise(p, `utf8`); + if (current === content) { + return; + } + } + catch (error) { + // ignore errors, no big deal + } + await this.writeFilePromise(p, content); + } + changeFileSync(p, content) { + try { + const current = this.readFileSync(p, `utf8`); + if (current === content) { + return; + } + } + catch (error) { + // ignore errors, no big deal + } + this.writeFileSync(p, content); + } + async movePromise(fromP, toP) { + try { + await this.renamePromise(fromP, toP); + } + catch (error) { + if (error.code === `EXDEV`) { + await this.copyPromise(toP, fromP); + await this.removePromise(fromP); + } + else { + throw error; + } + } + } + moveSync(fromP, toP) { + try { + this.renameSync(fromP, toP); + } + catch (error) { + if (error.code === `EXDEV`) { + this.copySync(toP, fromP); + this.removeSync(fromP); + } + else { + throw error; + } + } + } + async lockPromise(affectedPath, callback) { + const lockPath = `${affectedPath}.lock`; + const interval = 1000 / 60; + const timeout = Date.now() + 60 * 1000; + let fd = null; + while (fd === null) { + try { + fd = await this.openPromise(lockPath, `wx`); + } + catch (error) { + if (error.code === `EEXIST`) { + if (Date.now() < timeout) { + await new Promise(resolve => setTimeout(resolve, interval)); + } + else { + throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`); + } + } + else { + throw error; + } + } + } + try { + await callback(); + } + finally { + await this.closePromise(fd); + await this.unlinkPromise(lockPath); + } + } +} +exports.FakeFS = FakeFS; +; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const FakeFS_1 = __webpack_require__(7); +class AliasFS extends FakeFS_1.FakeFS { + constructor(target, { baseFs }) { + super(); + this.target = target; + this.baseFs = baseFs; + } + getRealPath() { + return this.target; + } + getBaseFs() { + return this.baseFs; + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(p, flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(p, flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(p, opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(p, opts); + } + async realpathPromise(p) { + return await this.baseFs.realpathPromise(p); + } + realpathSync(p) { + return this.baseFs.realpathSync(p); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(p); + } + existsSync(p) { + return this.baseFs.existsSync(p); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(p, mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(p, mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(p); + } + statSync(p) { + return this.baseFs.statSync(p); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(p); + } + lstatSync(p) { + return this.baseFs.lstatSync(p); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(p, mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(p, mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(oldP, newP); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(oldP, newP); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(sourceP, destP, flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(p, content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(p, content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(p); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(p); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(p, atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(p); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(p); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(p); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(p); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, p); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, p); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(p, encoding); + default: + return await this.baseFs.readFilePromise(p, encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(p, encoding); + default: + return this.baseFs.readFileSync(p, encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(p); + } + readdirSync(p) { + return this.baseFs.readdirSync(p); + } + async readlinkPromise(p) { + return await this.baseFs.readlinkPromise(p); + } + readlinkSync(p) { + return this.baseFs.readlinkSync(p); + } +} +exports.AliasFS = AliasFS; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __webpack_require__(6); +const FakeFS_1 = __webpack_require__(7); +const NodeFS_1 = __webpack_require__(4); +class CwdFS extends FakeFS_1.FakeFS { + constructor(target, { baseFs = new NodeFS_1.NodeFS() } = {}) { + super(); + this.target = target; + this.baseFs = baseFs; + } + getRealPath() { + return path_1.posix.resolve(this.baseFs.getRealPath(), this.target); + } + getTarget() { + return this.target; + } + getBaseFs() { + return this.baseFs; + } + resolve(p) { + return this.baseFs.resolve(this.fromCwdPath(p)); + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(this.fromCwdPath(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.fromCwdPath(p), flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(this.fromCwdPath(p), opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(this.fromCwdPath(p), opts); + } + async realpathPromise(p) { + return await this.baseFs.realpathPromise(this.fromCwdPath(p)); + } + realpathSync(p) { + return this.baseFs.realpathSync(this.fromCwdPath(p)); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(this.fromCwdPath(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.fromCwdPath(p)); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(this.fromCwdPath(p), mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.fromCwdPath(p), mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(this.fromCwdPath(p)); + } + statSync(p) { + return this.baseFs.statSync(this.fromCwdPath(p)); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(this.fromCwdPath(p)); + } + lstatSync(p) { + return this.baseFs.lstatSync(this.fromCwdPath(p)); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(this.fromCwdPath(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.fromCwdPath(p), mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(this.fromCwdPath(oldP), this.fromCwdPath(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.fromCwdPath(oldP), this.fromCwdPath(newP)); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(this.fromCwdPath(sourceP), this.fromCwdPath(destP), flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(this.fromCwdPath(sourceP), this.fromCwdPath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(this.fromCwdPath(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fromCwdPath(p), content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(this.fromCwdPath(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.fromCwdPath(p)); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(this.fromCwdPath(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.fromCwdPath(p), atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(this.fromCwdPath(p)); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(this.fromCwdPath(p)); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(this.fromCwdPath(p)); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(this.fromCwdPath(p)); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, this.fromCwdPath(p)); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, this.fromCwdPath(p)); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(this.fromCwdPath(p), encoding); + default: + return await this.baseFs.readFilePromise(this.fromCwdPath(p), encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(this.fromCwdPath(p), encoding); + default: + return this.baseFs.readFileSync(this.fromCwdPath(p), encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(this.fromCwdPath(p)); + } + readdirSync(p) { + return this.baseFs.readdirSync(this.fromCwdPath(p)); + } + async readlinkPromise(p) { + return await this.baseFs.readlinkPromise(this.fromCwdPath(p)); + } + readlinkSync(p) { + return this.baseFs.readlinkSync(this.fromCwdPath(p)); + } + fromCwdPath(p) { + return path_1.posix.resolve(this.getRealPath(), p); + } +} +exports.CwdFS = CwdFS; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const path_1 = __webpack_require__(6); +const FakeFS_1 = __webpack_require__(7); +const NodeFS_1 = __webpack_require__(4); +class JailFS extends FakeFS_1.FakeFS { + constructor(target, { baseFs = new NodeFS_1.NodeFS() } = {}) { + super(); + this.target = path_1.posix.resolve(`/`, target); + this.baseFs = baseFs; + } + getRealPath() { + return path_1.posix.resolve(this.baseFs.getRealPath(), path_1.posix.relative(`/`, this.target)); + } + getTarget() { + return this.target; + } + getBaseFs() { + return this.baseFs; + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(this.fromJailedPath(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(this.fromJailedPath(p), flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(this.fromJailedPath(p), opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(this.fromJailedPath(p), opts); + } + async realpathPromise(p) { + return this.toJailedPath(await this.baseFs.realpathPromise(this.fromJailedPath(p))); + } + realpathSync(p) { + return this.toJailedPath(this.baseFs.realpathSync(this.fromJailedPath(p))); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(this.fromJailedPath(p)); + } + existsSync(p) { + return this.baseFs.existsSync(this.fromJailedPath(p)); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(this.fromJailedPath(p), mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(this.fromJailedPath(p), mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(this.fromJailedPath(p)); + } + statSync(p) { + return this.baseFs.statSync(this.fromJailedPath(p)); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(this.fromJailedPath(p)); + } + lstatSync(p) { + return this.baseFs.lstatSync(this.fromJailedPath(p)); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(this.fromJailedPath(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(this.fromJailedPath(p), mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(this.fromJailedPath(oldP), this.fromJailedPath(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(this.fromJailedPath(oldP), this.fromJailedPath(newP)); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(this.fromJailedPath(sourceP), this.fromJailedPath(destP), flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(this.fromJailedPath(sourceP), this.fromJailedPath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(this.fromJailedPath(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(this.fromJailedPath(p), content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(this.fromJailedPath(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(this.fromJailedPath(p)); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(this.fromJailedPath(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(this.fromJailedPath(p), atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(this.fromJailedPath(p)); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(this.fromJailedPath(p)); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(this.fromJailedPath(p)); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(this.fromJailedPath(p)); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, this.fromJailedPath(p)); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, this.fromJailedPath(p)); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(this.fromJailedPath(p), encoding); + default: + return await this.baseFs.readFilePromise(this.fromJailedPath(p), encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(this.fromJailedPath(p), encoding); + default: + return this.baseFs.readFileSync(this.fromJailedPath(p), encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(this.fromJailedPath(p)); + } + readdirSync(p) { + return this.baseFs.readdirSync(this.fromJailedPath(p)); + } + async readlinkPromise(p) { + return await this.baseFs.readlinkPromise(this.fromJailedPath(p)); + } + readlinkSync(p) { + return this.baseFs.readlinkSync(this.fromJailedPath(p)); + } + fromJailedPath(p) { + const normalized = path_1.posix.normalize(p); + if (path_1.posix.isAbsolute(p)) + return path_1.posix.resolve(this.target, path_1.posix.relative(`/`, p)); + if (normalized.match(/^\.\.\//)) + throw new Error(`Resolving this path (${p}) would escape the jail`); + return path_1.posix.resolve(this.target, p); + } + toJailedPath(p) { + return path_1.posix.resolve(`/`, path_1.posix.relative(this.target, p)); + } +} +exports.JailFS = JailFS; + + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const FakeFS_1 = __webpack_require__(7); +class LazyFS extends FakeFS_1.FakeFS { + constructor(factory) { + super(); + this.baseFs = null; + this.factory = factory; + } + getRealPath() { + return this.prepareFs().getRealPath(); + } + async openPromise(p, flags, mode) { + return await this.prepareFs().openPromise(p, flags, mode); + } + openSync(p, flags, mode) { + return this.prepareFs().openSync(p, flags, mode); + } + async closePromise(fd) { + await this.prepareFs().closePromise(fd); + } + closeSync(fd) { + this.prepareFs().closeSync(fd); + } + createReadStream(p, opts) { + return this.prepareFs().createReadStream(p, opts); + } + createWriteStream(p, opts) { + return this.prepareFs().createWriteStream(p, opts); + } + async realpathPromise(p) { + return await this.prepareFs().realpathPromise(p); + } + realpathSync(p) { + return this.prepareFs().realpathSync(p); + } + async existsPromise(p) { + return await this.prepareFs().existsPromise(p); + } + existsSync(p) { + return this.prepareFs().existsSync(p); + } + async accessPromise(p, mode) { + return await this.prepareFs().accessPromise(p, mode); + } + accessSync(p, mode) { + return this.prepareFs().accessSync(p, mode); + } + async statPromise(p) { + return await this.prepareFs().statPromise(p); + } + statSync(p) { + return this.prepareFs().statSync(p); + } + async lstatPromise(p) { + return await this.prepareFs().lstatPromise(p); + } + lstatSync(p) { + return this.prepareFs().lstatSync(p); + } + async chmodPromise(p, mask) { + return await this.prepareFs().chmodPromise(p, mask); + } + chmodSync(p, mask) { + return this.prepareFs().chmodSync(p, mask); + } + async renamePromise(oldP, newP) { + return await this.prepareFs().renamePromise(oldP, newP); + } + renameSync(oldP, newP) { + return this.prepareFs().renameSync(oldP, newP); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.prepareFs().copyFilePromise(sourceP, destP, flags); + } + copyFileSync(sourceP, destP, flags) { + return this.prepareFs().copyFileSync(sourceP, destP, flags); + } + async writeFilePromise(p, content, opts) { + return await this.prepareFs().writeFilePromise(p, content, opts); + } + writeFileSync(p, content, opts) { + return this.prepareFs().writeFileSync(p, content, opts); + } + async unlinkPromise(p) { + return await this.prepareFs().unlinkPromise(p); + } + unlinkSync(p) { + return this.prepareFs().unlinkSync(p); + } + async utimesPromise(p, atime, mtime) { + return await this.prepareFs().utimesPromise(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.prepareFs().utimesSync(p, atime, mtime); + } + async mkdirPromise(p) { + return await this.prepareFs().mkdirPromise(p); + } + mkdirSync(p) { + return this.prepareFs().mkdirSync(p); + } + async rmdirPromise(p) { + return await this.prepareFs().rmdirPromise(p); + } + rmdirSync(p) { + return this.prepareFs().rmdirSync(p); + } + async symlinkPromise(target, p) { + return await this.prepareFs().symlinkPromise(target, p); + } + symlinkSync(target, p) { + return this.prepareFs().symlinkSync(target, p); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.prepareFs().readFilePromise(p, encoding); + default: + return await this.prepareFs().readFilePromise(p, encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.prepareFs().readFileSync(p, encoding); + default: + return this.prepareFs().readFileSync(p, encoding); + } + } + async readdirPromise(p) { + return await this.prepareFs().readdirPromise(p); + } + readdirSync(p) { + return this.prepareFs().readdirSync(p); + } + async readlinkPromise(p) { + return await this.prepareFs().readlinkPromise(p); + } + readlinkSync(p) { + return this.prepareFs().readlinkSync(p); + } + prepareFs() { + let baseFs = this.baseFs; + if (baseFs === null) + baseFs = this.baseFs = this.factory(); + return baseFs; + } +} +exports.LazyFS = LazyFS; + + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const FakeFS_1 = __webpack_require__(7); +const NodeFS_1 = __webpack_require__(4); +class PosixFS extends FakeFS_1.FakeFS { + constructor(baseFs) { + super(); + this.baseFs = baseFs; + } + getRealPath() { + return NodeFS_1.NodeFS.fromPortablePath(this.baseFs.getRealPath()); + } + async openPromise(p, flags, mode) { + return await this.baseFs.openPromise(NodeFS_1.NodeFS.toPortablePath(p), flags, mode); + } + openSync(p, flags, mode) { + return this.baseFs.openSync(NodeFS_1.NodeFS.toPortablePath(p), flags, mode); + } + async closePromise(fd) { + await this.baseFs.closePromise(fd); + } + closeSync(fd) { + this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.baseFs.createReadStream(NodeFS_1.NodeFS.toPortablePath(p), opts); + } + createWriteStream(p, opts) { + return this.baseFs.createWriteStream(NodeFS_1.NodeFS.toPortablePath(p), opts); + } + async realpathPromise(p) { + return NodeFS_1.NodeFS.fromPortablePath(await this.baseFs.realpathPromise(NodeFS_1.NodeFS.toPortablePath(p))); + } + realpathSync(p) { + return NodeFS_1.NodeFS.fromPortablePath(this.baseFs.realpathSync(NodeFS_1.NodeFS.toPortablePath(p))); + } + async existsPromise(p) { + return await this.baseFs.existsPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + existsSync(p) { + return this.baseFs.existsSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async accessPromise(p, mode) { + return await this.baseFs.accessPromise(NodeFS_1.NodeFS.toPortablePath(p), mode); + } + accessSync(p, mode) { + return this.baseFs.accessSync(NodeFS_1.NodeFS.toPortablePath(p), mode); + } + async statPromise(p) { + return await this.baseFs.statPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + statSync(p) { + return this.baseFs.statSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async lstatPromise(p) { + return await this.baseFs.lstatPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + lstatSync(p) { + return this.baseFs.lstatSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async chmodPromise(p, mask) { + return await this.baseFs.chmodPromise(NodeFS_1.NodeFS.toPortablePath(p), mask); + } + chmodSync(p, mask) { + return this.baseFs.chmodSync(NodeFS_1.NodeFS.toPortablePath(p), mask); + } + async renamePromise(oldP, newP) { + return await this.baseFs.renamePromise(NodeFS_1.NodeFS.toPortablePath(oldP), NodeFS_1.NodeFS.toPortablePath(newP)); + } + renameSync(oldP, newP) { + return this.baseFs.renameSync(NodeFS_1.NodeFS.toPortablePath(oldP), NodeFS_1.NodeFS.toPortablePath(newP)); + } + async copyFilePromise(sourceP, destP, flags) { + return await this.baseFs.copyFilePromise(NodeFS_1.NodeFS.toPortablePath(sourceP), NodeFS_1.NodeFS.toPortablePath(destP), flags); + } + copyFileSync(sourceP, destP, flags) { + return this.baseFs.copyFileSync(NodeFS_1.NodeFS.toPortablePath(sourceP), NodeFS_1.NodeFS.toPortablePath(destP), flags); + } + async writeFilePromise(p, content, opts) { + return await this.baseFs.writeFilePromise(NodeFS_1.NodeFS.toPortablePath(p), content, opts); + } + writeFileSync(p, content, opts) { + return this.baseFs.writeFileSync(NodeFS_1.NodeFS.toPortablePath(p), content, opts); + } + async unlinkPromise(p) { + return await this.baseFs.unlinkPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + unlinkSync(p) { + return this.baseFs.unlinkSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async utimesPromise(p, atime, mtime) { + return await this.baseFs.utimesPromise(NodeFS_1.NodeFS.toPortablePath(p), atime, mtime); + } + utimesSync(p, atime, mtime) { + return this.baseFs.utimesSync(NodeFS_1.NodeFS.toPortablePath(p), atime, mtime); + } + async mkdirPromise(p) { + return await this.baseFs.mkdirPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + mkdirSync(p) { + return this.baseFs.mkdirSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async rmdirPromise(p) { + return await this.baseFs.rmdirPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + rmdirSync(p) { + return this.baseFs.rmdirSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async symlinkPromise(target, p) { + return await this.baseFs.symlinkPromise(target, NodeFS_1.NodeFS.toPortablePath(p)); + } + symlinkSync(target, p) { + return this.baseFs.symlinkSync(target, NodeFS_1.NodeFS.toPortablePath(p)); + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(NodeFS_1.NodeFS.toPortablePath(p), encoding); + default: + return await this.baseFs.readFilePromise(NodeFS_1.NodeFS.toPortablePath(p), encoding); + } + } + readFileSync(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(NodeFS_1.NodeFS.toPortablePath(p), encoding); + default: + return this.baseFs.readFileSync(NodeFS_1.NodeFS.toPortablePath(p), encoding); + } + } + async readdirPromise(p) { + return await this.baseFs.readdirPromise(NodeFS_1.NodeFS.toPortablePath(p)); + } + readdirSync(p) { + return this.baseFs.readdirSync(NodeFS_1.NodeFS.toPortablePath(p)); + } + async readlinkPromise(p) { + return NodeFS_1.NodeFS.fromPortablePath(await this.baseFs.readlinkPromise(NodeFS_1.NodeFS.toPortablePath(p))); + } + readlinkSync(p) { + return NodeFS_1.NodeFS.fromPortablePath(this.baseFs.readlinkSync(NodeFS_1.NodeFS.toPortablePath(p))); + } +} +exports.PosixFS = PosixFS; + + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const libzip_1 = __importDefault(__webpack_require__(14)); +const fs_1 = __webpack_require__(5); +const path_1 = __webpack_require__(6); +const stream_1 = __webpack_require__(17); +const util_1 = __webpack_require__(18); +const FakeFS_1 = __webpack_require__(7); +const NodeFS_1 = __webpack_require__(4); +const S_IFMT = 0o170000; +const S_IFDIR = 0o040000; +const S_IFREG = 0o100000; +const S_IFLNK = 0o120000; +class StatEntry { + constructor() { + this.dev = 0; + this.ino = 0; + this.mode = 0; + this.nlink = 1; + this.rdev = 0; + this.blocks = 1; + } + isBlockDevice() { + return false; + } + isCharacterDevice() { + return false; + } + isDirectory() { + return (this.mode & S_IFMT) === S_IFDIR; + } + isFIFO() { + return false; + } + isFile() { + return (this.mode & S_IFMT) === S_IFREG; + } + isSocket() { + return false; + } + isSymbolicLink() { + return (this.mode & S_IFMT) === S_IFLNK; + } +} +function toUnixTimestamp(time) { + if (typeof time === 'string' && String(+time) === time) + return +time; + // @ts-ignore + if (Number.isFinite(time)) { + if (time < 0) { + return Date.now() / 1000; + } + else { + return time; + } + } + // convert to 123.456 UNIX timestamp + if (util_1.isDate(time)) + return time.getTime() / 1000; + throw new Error(`Invalid time`); +} +class ZipFS extends FakeFS_1.FakeFS { + constructor(p, { baseFs = new NodeFS_1.NodeFS(), create = false, readOnly = false, stats } = {}) { + super(); + this.listings = new Map(); + this.entries = new Map(); + this.ready = false; + this.path = p; + this.baseFs = baseFs; + if (stats) { + this.stats = stats; + } + else { + try { + this.stats = this.baseFs.statSync(p); + } + catch (error) { + if (error.code === `ENOENT` && create) { + this.stats = Object.assign(new StatEntry(), { uid: 0, gid: 0, size: 0, blksize: 0, atimeMs: 0, mtimeMs: 0, ctimeMs: 0, birthtimeMs: 0, atime: new Date(0), mtime: new Date(0), ctime: new Date(0), birthtime: new Date(0), mode: S_IFREG | 0o644 }); + } + else { + throw error; + } + } + } + const errPtr = libzip_1.default.malloc(4); + try { + let flags = 0; + if (create) + flags |= libzip_1.default.ZIP_CREATE | libzip_1.default.ZIP_TRUNCATE; + if (readOnly) + flags |= libzip_1.default.ZIP_RDONLY; + this.zip = libzip_1.default.open(NodeFS_1.NodeFS.fromPortablePath(p), flags, errPtr); + if (this.zip === 0) { + const error = libzip_1.default.struct.errorS(); + libzip_1.default.error.initWithCode(error, libzip_1.default.getValue(errPtr, `i32`)); + throw new Error(libzip_1.default.error.strerror(error)); + } + } + finally { + libzip_1.default.free(errPtr); + } + const entryCount = libzip_1.default.getNumEntries(this.zip, 0); + this.listings.set(`/`, new Set()); + for (let t = 0; t < entryCount; ++t) { + const raw = libzip_1.default.getName(this.zip, t, 0); + if (path_1.posix.isAbsolute(raw)) + continue; + const p = path_1.posix.resolve(`/`, raw); + this.registerEntry(p, t); + // If the raw path is a directory, register it + // to prevent empty folder being skipped + if (raw.endsWith('/')) { + this.registerListing(p); + } + } + this.ready = true; + } + getRealPath() { + return this.path; + } + saveAndClose() { + if (!this.ready) + throw Object.assign(new Error(`EBUSY: archive closed, close`), { code: `EBUSY` }); + const previousMod = this.baseFs.existsSync(this.path) + ? this.baseFs.statSync(this.path).mode & 0o777 + : null; + const rc = libzip_1.default.close(this.zip); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + // Libzip overrides the chmod when writing the archive, which is a weird + // behavior I don't totally understand (plus the umask seems bogus in some + // weird cases - maybe related to emscripten?) + // + // See also https://github.com/nih-at/libzip/issues/77 + if (previousMod !== null && previousMod !== (this.baseFs.statSync(this.path).mode & 0o777)) + this.baseFs.chmodSync(this.path, previousMod); + this.ready = false; + } + discardAndClose() { + libzip_1.default.discard(this.zip); + this.ready = false; + } + async openPromise(p, flags, mode) { + return this.openSync(p, flags, mode); + } + openSync(p, flags, mode) { + throw new Error(`Unimplemented`); + } + async closePromise(fd) { + this.closeSync(fd); + } + closeSync(fd) { + throw new Error(`Unimplemented`); + } + createReadStream(p, { encoding } = {}) { + const stream = Object.assign(new stream_1.PassThrough(), { + bytesRead: 0, + path: p, + close: () => { + clearImmediate(immediate); + } + }); + const immediate = setImmediate(() => { + try { + const data = this.readFileSync(p, encoding); + stream.bytesRead = data.length; + stream.write(data); + stream.end(); + } + catch (error) { + stream.emit(`error`, error); + stream.end(); + } + }); + return stream; + } + createWriteStream(p, { encoding } = {}) { + const stream = Object.assign(new stream_1.PassThrough(), { + bytesWritten: 0, + path: p, + close: () => { + stream.end(); + }, + }); + const chunks = []; + stream.on(`data`, chunk => { + const chunkBuffer = Buffer.from(chunk); + stream.bytesWritten += chunkBuffer.length; + chunks.push(chunkBuffer); + }); + stream.on(`end`, () => { + this.writeFileSync(p, Buffer.concat(chunks), encoding); + }); + return stream; + } + async realpathPromise(p) { + return this.realpathSync(p); + } + realpathSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, lstat '${p}'`), { code: `ENOENT` }); + return resolvedP; + } + async existsPromise(p) { + return this.existsSync(p); + } + existsSync(p) { + let resolvedP; + try { + resolvedP = this.resolveFilename(`stat '${p}'`, p); + } + catch (error) { + return false; + } + return this.entries.has(resolvedP) || this.listings.has(resolvedP); + } + async accessPromise(p, mode) { + return this.accessSync(p, mode); + } + accessSync(p, mode) { + const resolvedP = this.resolveFilename(`access '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) { + throw Object.assign(new Error(`ENOENT: no such file or directory, access '${p}'`), { code: `ENOENT` }); + } + } + async statPromise(p) { + return this.statSync(p); + } + statSync(p) { + const resolvedP = this.resolveFilename(`stat '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, stat '${p}'`), { code: `ENOENT` }); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, stat '${p}'`), { code: `ENOTDIR` }); + return this.statImpl(`stat '${p}'`, resolvedP); + } + async lstatPromise(p) { + return this.lstatSync(p); + } + lstatSync(p) { + const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, lstat '${p}'`), { code: `ENOENT` }); + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, lstat '${p}'`), { code: `ENOTDIR` }); + return this.statImpl(`lstat '${p}'`, resolvedP); + } + statImpl(reason, p) { + if (this.listings.has(p)) { + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = 0; + const blksize = 512; + const blocks = 0; + const atimeMs = this.stats.mtimeMs; + const birthtimeMs = this.stats.mtimeMs; + const ctimeMs = this.stats.mtimeMs; + const mtimeMs = this.stats.mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = S_IFDIR | 0o755; + return Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode }); + } + const entry = this.entries.get(p); + if (entry !== undefined) { + const stat = libzip_1.default.struct.statS(); + const rc = libzip_1.default.statIndex(this.zip, entry, 0, 0, stat); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const uid = this.stats.uid; + const gid = this.stats.gid; + const size = (libzip_1.default.struct.statSize(stat) >>> 0); + const blksize = 512; + const blocks = Math.ceil(size / blksize); + const mtimeMs = (libzip_1.default.struct.statMtime(stat) >>> 0) * 1000; + const atimeMs = mtimeMs; + const birthtimeMs = mtimeMs; + const ctimeMs = mtimeMs; + const atime = new Date(atimeMs); + const birthtime = new Date(birthtimeMs); + const ctime = new Date(ctimeMs); + const mtime = new Date(mtimeMs); + const mode = this.getUnixMode(entry, S_IFREG | 0o644); + return Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode }); + } + throw new Error(`Unreachable`); + } + getUnixMode(index, defaultMode) { + const rc = libzip_1.default.file.getExternalAttributes(this.zip, index, 0, 0, libzip_1.default.uint08S, libzip_1.default.uint32S); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const opsys = libzip_1.default.getValue(libzip_1.default.uint08S, `i8`) >>> 0; + if (opsys !== libzip_1.default.ZIP_OPSYS_UNIX) + return defaultMode; + return libzip_1.default.getValue(libzip_1.default.uint32S, `i32`) >>> 16; + } + registerListing(p) { + let listing = this.listings.get(p); + if (listing) + return listing; + const parentListing = this.registerListing(path_1.posix.dirname(p)); + listing = new Set(); + parentListing.add(path_1.posix.basename(p)); + this.listings.set(p, listing); + return listing; + } + registerEntry(p, index) { + const parentListing = this.registerListing(path_1.posix.dirname(p)); + parentListing.add(path_1.posix.basename(p)); + this.entries.set(p, index); + } + resolveFilename(reason, p, resolveLastComponent = true) { + if (!this.ready) + throw Object.assign(new Error(`EBUSY: archive closed, ${reason}`), { code: `EBUSY` }); + let resolvedP = path_1.posix.resolve(`/`, p); + if (resolvedP === `/`) + return `/`; + while (true) { + const parentP = this.resolveFilename(reason, path_1.posix.dirname(resolvedP), true); + const isDir = this.listings.has(parentP); + const doesExist = this.entries.has(parentP); + if (!isDir && !doesExist) + throw Object.assign(new Error(`ENOENT: no such file or directory, ${reason}`), { code: `ENOENT` }); + if (!isDir) + throw Object.assign(new Error(`ENOTDIR: not a directory, ${reason}`), { code: `ENOTDIR` }); + resolvedP = path_1.posix.resolve(parentP, path_1.posix.basename(resolvedP)); + if (!resolveLastComponent) + break; + const index = libzip_1.default.name.locate(this.zip, resolvedP); + if (index === -1) + break; + if (this.isSymbolicLink(index)) { + const target = this.getFileSource(index).toString(); + resolvedP = path_1.posix.resolve(path_1.posix.dirname(resolvedP), target); + } + else { + break; + } + } + return resolvedP; + } + setFileSource(p, content) { + if (!Buffer.isBuffer(content)) + content = Buffer.from(content); + const buffer = libzip_1.default.malloc(content.byteLength); + if (!buffer) + throw new Error(`Couldn't allocate enough memory`); + // Copy the file into the Emscripten heap + const heap = new Uint8Array(libzip_1.default.HEAPU8.buffer, buffer, content.byteLength); + heap.set(content); + const source = libzip_1.default.source.fromBuffer(this.zip, buffer, content.byteLength, 0, true); + if (source === 0) { + libzip_1.default.free(buffer); + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + return libzip_1.default.file.add(this.zip, path_1.posix.relative(`/`, p), source, libzip_1.default.ZIP_FL_OVERWRITE); + } + isSymbolicLink(index) { + const attrs = libzip_1.default.file.getExternalAttributes(this.zip, index, 0, 0, libzip_1.default.uint08S, libzip_1.default.uint32S); + if (attrs === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const opsys = libzip_1.default.getValue(libzip_1.default.uint08S, `i8`) >>> 0; + if (opsys !== libzip_1.default.ZIP_OPSYS_UNIX) + return false; + const attributes = libzip_1.default.getValue(libzip_1.default.uint32S, `i32`) >>> 16; + return (attributes & S_IFMT) === S_IFLNK; + } + getFileSource(index) { + const stat = libzip_1.default.struct.statS(); + const rc = libzip_1.default.statIndex(this.zip, index, 0, 0, stat); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const size = libzip_1.default.struct.statSize(stat); + const buffer = libzip_1.default.malloc(size); + try { + const file = libzip_1.default.fopenIndex(this.zip, index, 0, 0); + if (file === 0) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + try { + const rc = libzip_1.default.fread(file, buffer, size, 0); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.file.getError(file))); + else if (rc < size) + throw new Error(`Incomplete read`); + else if (rc > size) + throw new Error(`Overread`); + const memory = libzip_1.default.HEAPU8.subarray(buffer, buffer + size); + const data = Buffer.from(memory); + return data; + } + finally { + libzip_1.default.fclose(file); + } + } + finally { + libzip_1.default.free(buffer); + } + } + async chmodPromise(p, mask) { + return this.chmodSync(p, mask); + } + chmodSync(p, mask) { + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + // We silently ignore chmod requests for directories + if (this.listings.has(resolvedP)) + return; + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const oldMod = this.getUnixMode(entry, S_IFREG | 0o000); + const newMod = oldMod & (~0o777) | mask; + const rc = libzip_1.default.file.setExternalAttributes(this.zip, entry, 0, 0, libzip_1.default.ZIP_OPSYS_UNIX, newMod << 16); + if (rc === -1) { + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + } + async renamePromise(oldP, newP) { + return this.renameSync(oldP, newP); + } + renameSync(oldP, newP) { + throw new Error(`Unimplemented`); + } + async copyFilePromise(sourceP, destP, flags) { + return this.copyFileSync(sourceP, destP, flags); + } + copyFileSync(sourceP, destP, flags = 0) { + if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`ENOSYS: unsupported clone operation, copyfile '${sourceP}' -> ${destP}'`), { code: `ENOSYS` }); + const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP); + const indexSource = this.entries.get(resolvedSourceP); + if (typeof indexSource === `undefined`) + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), { code: `EINVAL` }); + const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP); + const indexDest = this.entries.get(resolvedDestP); + if ((flags & (fs_1.constants.COPYFILE_EXCL | fs_1.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), { code: `EEXIST` }); + const source = this.getFileSource(indexSource); + const newIndex = this.setFileSource(resolvedDestP, source); + if (newIndex !== indexDest) { + this.registerEntry(resolvedDestP, newIndex); + } + } + async writeFilePromise(p, content, opts) { + return this.writeFileSync(p, content, opts); + } + writeFileSync(p, content, opts) { + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EISDIR: illegal operation on a directory, open '${p}'`), { code: `EISDIR` }); + const index = this.entries.get(resolvedP); + if (index !== undefined && typeof opts === `object` && opts.flag && opts.flag.includes(`a`)) + content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]); + let encoding = null; + if (typeof opts === `string`) + encoding = opts; + else if (typeof opts === `object` && opts.encoding) + encoding = opts.encoding; + if (encoding !== null) + content = content.toString(encoding); + const newIndex = this.setFileSource(resolvedP, content); + if (newIndex !== index) { + this.registerEntry(resolvedP, newIndex); + } + } + async unlinkPromise(p) { + return this.unlinkSync(p); + } + unlinkSync(p) { + throw new Error(`Unimplemented`); + } + async utimesPromise(p, atime, mtime) { + return this.utimesSync(p, atime, mtime); + } + utimesSync(p, atime, mtime) { + const resolvedP = this.resolveFilename(`chmod '${p}'`, p); + return this.utimesImpl(resolvedP, mtime); + } + async lutimesPromise(p, atime, mtime) { + return this.lutimesSync(p, atime, mtime); + } + lutimesSync(p, atime, mtime) { + const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false); + return this.utimesImpl(resolvedP, mtime); + } + utimesImpl(resolvedP, mtime) { + if (this.listings.has(resolvedP)) + if (!this.entries.has(resolvedP)) + this.hydrateDirectory(resolvedP); + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const rc = libzip_1.default.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0); + if (rc === -1) { + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + } + async mkdirPromise(p) { + return this.mkdirSync(p); + } + mkdirSync(p) { + const resolvedP = this.resolveFilename(`mkdir '${p}'`, p); + if (this.entries.has(resolvedP) || this.listings.has(resolvedP)) + throw Object.assign(new Error(`EEXIST: file already exists, mkdir '${p}'`), { code: `EEXIST` }); + this.hydrateDirectory(resolvedP); + } + async rmdirPromise(p) { + return this.rmdirSync(p); + } + rmdirSync(p) { + throw new Error(`Unimplemented`); + } + hydrateDirectory(resolvedP) { + const index = libzip_1.default.dir.add(this.zip, path_1.posix.relative(`/`, resolvedP)); + if (index === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + this.registerListing(resolvedP); + this.registerEntry(resolvedP, index); + return index; + } + async symlinkPromise(target, p) { + return this.symlinkSync(target, p); + } + symlinkSync(target, p) { + const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EISDIR: illegal operation on a directory, symlink '${target}' -> '${p}'`), { code: `EISDIR` }); + if (this.entries.has(resolvedP)) + throw Object.assign(new Error(`EEXIST: file already exists, symlink '${target}' -> '${p}'`), { code: `EEXIST` }); + const index = this.setFileSource(resolvedP, target); + this.registerEntry(resolvedP, index); + const rc = libzip_1.default.file.setExternalAttributes(this.zip, index, 0, 0, libzip_1.default.ZIP_OPSYS_UNIX, (0o120000 | 0o777) << 16); + if (rc === -1) { + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + } + } + async readFilePromise(p, encoding) { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.readFileSync(p, encoding); + default: + return this.readFileSync(p, encoding); + } + } + readFileSync(p, encoding) { + // This is messed up regarding the TS signatures + if (typeof encoding === `object`) + // @ts-ignore + encoding = encoding ? encoding.encoding : undefined; + const resolvedP = this.resolveFilename(`open '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, open '${p}'`), { code: `ENOENT` }); + // Ensures that the last component is a directory, if the user said so (even if it is we'll throw right after with EISDIR anyway) + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, open '${p}'`), { code: `ENOTDIR` }); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EISDIR: illegal operation on a directory, read`), { code: `EISDIR` }); + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const data = this.getFileSource(entry); + return encoding ? data.toString(encoding) : data; + } + async readdirPromise(p) { + return this.readdirSync(p); + } + readdirSync(p) { + const resolvedP = this.resolveFilename(`scandir '${p}'`, p); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, scandir '${p}'`), { code: `ENOENT` }); + const directoryListing = this.listings.get(resolvedP); + if (!directoryListing) + throw Object.assign(new Error(`ENOTDIR: not a directory, scandir '${p}'`), { code: `ENOTDIR` }); + return Array.from(directoryListing); + } + async readlinkPromise(p) { + return this.readlinkSync(p); + } + readlinkSync(p) { + const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false); + if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOENT: no such file or directory, readlink '${p}'`), { code: `ENOENT` }); + // Ensure that the last component is a directory (if it is we'll throw right after with EISDIR anyway) + if (p[p.length - 1] === `/` && !this.listings.has(resolvedP)) + throw Object.assign(new Error(`ENOTDIR: not a directory, open '${p}'`), { code: `ENOTDIR` }); + if (this.listings.has(resolvedP)) + throw Object.assign(new Error(`EINVAL: invalid argument, readlink '${p}'`), { code: `EINVAL` }); + const entry = this.entries.get(resolvedP); + if (entry === undefined) + throw new Error(`Unreachable`); + const rc = libzip_1.default.file.getExternalAttributes(this.zip, entry, 0, 0, libzip_1.default.uint08S, libzip_1.default.uint32S); + if (rc === -1) + throw new Error(libzip_1.default.error.strerror(libzip_1.default.getError(this.zip))); + const opsys = libzip_1.default.getValue(libzip_1.default.uint08S, `i8`) >>> 0; + if (opsys !== libzip_1.default.ZIP_OPSYS_UNIX) + throw Object.assign(new Error(`EINVAL: invalid argument, readlink '${p}'`), { code: `EINVAL` }); + const attributes = libzip_1.default.getValue(libzip_1.default.uint32S, `i32`) >>> 16; + if ((attributes & 0o170000) !== 0o120000) + throw Object.assign(new Error(`EINVAL: invalid argument, readlink '${p}'`), { code: `EINVAL` }); + return this.getFileSource(entry).toString(); + } +} +exports.ZipFS = ZipFS; +; + + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const libzip_1 = __importDefault(__webpack_require__(15)); +const number64 = [ + `number`, + `number`, +]; +// eslint-disable-next-line arca/no-default-export +exports.default = { + // Those are getters because they can change after memory growth + get HEAP8() { return libzip_1.default.HEAP8; }, + get HEAPU8() { return libzip_1.default.HEAPU8; }, + ZIP_CHECKCONS: 4, + ZIP_CREATE: 1, + ZIP_EXCL: 2, + ZIP_TRUNCATE: 8, + ZIP_RDONLY: 16, + ZIP_FL_OVERWRITE: 8192, + ZIP_OPSYS_DOS: 0x00, + ZIP_OPSYS_AMIGA: 0x01, + ZIP_OPSYS_OPENVMS: 0x02, + ZIP_OPSYS_UNIX: 0x03, + ZIP_OPSYS_VM_CMS: 0x04, + ZIP_OPSYS_ATARI_ST: 0x05, + ZIP_OPSYS_OS_2: 0x06, + ZIP_OPSYS_MACINTOSH: 0x07, + ZIP_OPSYS_Z_SYSTEM: 0x08, + ZIP_OPSYS_CPM: 0x09, + ZIP_OPSYS_WINDOWS_NTFS: 0x0a, + ZIP_OPSYS_MVS: 0x0b, + ZIP_OPSYS_VSE: 0x0c, + ZIP_OPSYS_ACORN_RISC: 0x0d, + ZIP_OPSYS_VFAT: 0x0e, + ZIP_OPSYS_ALTERNATE_MVS: 0x0f, + ZIP_OPSYS_BEOS: 0x10, + ZIP_OPSYS_TANDEM: 0x11, + ZIP_OPSYS_OS_400: 0x12, + ZIP_OPSYS_OS_X: 0x13, + uint08S: libzip_1.default._malloc(1), + uint16S: libzip_1.default._malloc(2), + uint32S: libzip_1.default._malloc(4), + uint64S: libzip_1.default._malloc(8), + malloc: libzip_1.default._malloc, + free: libzip_1.default._free, + getValue: libzip_1.default.getValue, + open: libzip_1.default.cwrap(`zip_open`, `number`, [`string`, `number`, `number`]), + close: libzip_1.default.cwrap(`zip_close`, `number`, [`number`]), + discard: libzip_1.default.cwrap(`zip_discard`, `void`, [`number`]), + getError: libzip_1.default.cwrap(`zip_get_error`, `number`, [`number`]), + getName: libzip_1.default.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]), + getNumEntries: libzip_1.default.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]), + stat: libzip_1.default.cwrap(`zip_stat`, `number`, [`number`, `string`, `number`, `number`]), + statIndex: libzip_1.default.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]), + fopen: libzip_1.default.cwrap(`zip_fopen`, `number`, [`number`, `string`, `number`]), + fopenIndex: libzip_1.default.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]), + fread: libzip_1.default.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]), + fclose: libzip_1.default.cwrap(`zip_fclose`, `number`, [`number`]), + dir: { + add: libzip_1.default.cwrap(`zip_dir_add`, `number`, [`number`, `string`]), + }, + file: { + add: libzip_1.default.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]), + getError: libzip_1.default.cwrap(`zip_file_get_error`, `number`, [`number`]), + getExternalAttributes: libzip_1.default.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setExternalAttributes: libzip_1.default.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]), + setMtime: libzip_1.default.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]), + }, + error: { + initWithCode: libzip_1.default.cwrap(`zip_error_init_with_code`, `void`, [`number`, `number`]), + strerror: libzip_1.default.cwrap(`zip_error_strerror`, `string`, [`number`]), + }, + name: { + locate: libzip_1.default.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`]), + }, + source: { + fromBuffer: libzip_1.default.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]), + }, + struct: { + stat: libzip_1.default.cwrap(`zipstruct_stat`, `number`, []), + statS: libzip_1.default.cwrap(`zipstruct_statS`, `number`, []), + statName: libzip_1.default.cwrap(`zipstruct_stat_name`, `string`, [`number`]), + statIndex: libzip_1.default.cwrap(`zipstruct_stat_index`, `number`, [`number`]), + statSize: libzip_1.default.cwrap(`zipstruct_stat_size`, `number`, [`number`]), + statMtime: libzip_1.default.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]), + error: libzip_1.default.cwrap(`zipstruct_error`, `number`, []), + errorS: libzip_1.default.cwrap(`zipstruct_errorS`, `number`, []), + }, +}; + + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + +var frozenFs = Object.assign({}, __webpack_require__(5)); +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}Module["arguments"]=[];Module["thisProgram"]="./this.program";Module["quit"]=(function(status,toThrow){throw toThrow});Module["preRun"]=[];Module["postRun"]=[];var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=true;if(Module["ENVIRONMENT"]){throw new Error("Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)")}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}else{return scriptDirectory+path}}if(ENVIRONMENT_IS_NODE){if(!(typeof process==="object"&&"function"==="function"))throw new Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");scriptDirectory=__dirname+"/";var nodeFS;var nodePath;Module["read"]=function shell_read(filename,binary){var ret;ret=tryParseAsDataURI(filename);if(!ret){if(!nodeFS)nodeFS=frozenFs;if(!nodePath)nodePath=__webpack_require__(6);filename=nodePath["normalize"](filename);ret=nodeFS["readFileSync"](filename)}return binary?ret:ret.toString()};Module["readBinary"]=function readBinary(filename){var ret=Module["read"](filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}Module["arguments"]=process["argv"].slice(2);if(true){module["exports"]=Module}(function(){})("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}));(function(){})("unhandledRejection",abort);Module["quit"]=(function(status){process["exit"](status)});Module["inspect"]=(function(){return"[Emscripten Module object]"})}else{throw new Error("environment detection error")}var out=Module["print"]||(typeof console!=="undefined"?console.log.bind(console):typeof print!=="undefined"?print:null);var err=Module["printErr"]||(typeof printErr!=="undefined"?printErr:typeof console!=="undefined"&&console.warn.bind(console)||out);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=undefined;assert(typeof Module["memoryInitializerPrefixURL"]==="undefined","Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["pthreadMainPrefixURL"]==="undefined","Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["cdInitializerPrefixURL"]==="undefined","Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");assert(typeof Module["filePackagePrefixURL"]==="undefined","Module.filePackagePrefixURL option was removed, use Module.locateFile instead");stackSave=stackRestore=stackAlloc=(function(){abort("cannot use the stack before compiled code is ready to run, and has provided stack access")});function dynamicAlloc(size){assert(DYNAMICTOP_PTR);var ret=HEAP32[DYNAMICTOP_PTR>>2];var end=ret+size+15&-16;HEAP32[DYNAMICTOP_PTR>>2]=end;if(end>=TOTAL_MEMORY){var success=enlargeMemory();if(!success){HEAP32[DYNAMICTOP_PTR>>2]=ret;return 0}}return ret}function getNativeTypeSize(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return 4}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var asm2wasmImports={"f64-rem":(function(x,y){return x%y}),"debugger":(function(){debugger})};var functionPointers=new Array(0);var tempRet0=0;var setTempRet0=(function(value){tempRet0=value});var GLOBAL_BASE=1024;function getSafeHeapType(bytes,isFloat){switch(bytes){case 1:return"i8";case 2:return"i16";case 4:return isFloat?"float":"i32";case 8:return"double";default:assert(0)}}function SAFE_HEAP_STORE(dest,value,bytes,isFloat){if(dest<=0)abort("segmentation fault storing "+bytes+" bytes to address "+dest);if(dest%bytes!==0)abort("alignment error storing to address "+dest+", which was expected to be aligned to a multiple of "+bytes);if(dest+bytes>HEAP32[DYNAMICTOP_PTR>>2])abort("segmentation fault, exceeded the top of the available dynamic heap when storing "+bytes+" bytes to address "+dest+". DYNAMICTOP="+HEAP32[DYNAMICTOP_PTR>>2]);assert(DYNAMICTOP_PTR);assert(HEAP32[DYNAMICTOP_PTR>>2]<=TOTAL_MEMORY);setValue(dest,value,getSafeHeapType(bytes,isFloat),1)}function SAFE_HEAP_STORE_D(dest,value,bytes){SAFE_HEAP_STORE(dest,value,bytes,true)}function SAFE_HEAP_LOAD(dest,bytes,unsigned,isFloat){if(dest<=0)abort("segmentation fault loading "+bytes+" bytes from address "+dest);if(dest%bytes!==0)abort("alignment error loading from address "+dest+", which was expected to be aligned to a multiple of "+bytes);if(dest+bytes>HEAP32[DYNAMICTOP_PTR>>2])abort("segmentation fault, exceeded the top of the available dynamic heap when loading "+bytes+" bytes from address "+dest+". DYNAMICTOP="+HEAP32[DYNAMICTOP_PTR>>2]);assert(DYNAMICTOP_PTR);assert(HEAP32[DYNAMICTOP_PTR>>2]<=TOTAL_MEMORY);var type=getSafeHeapType(bytes,isFloat);var ret=getValue(dest,type,1);if(unsigned)ret=unSign(ret,parseInt(type.substr(1)),1);return ret}function SAFE_HEAP_LOAD_D(dest,bytes,unsigned){return SAFE_HEAP_LOAD(dest,bytes,unsigned,true)}function segfault(){abort("segmentation fault")}function alignfault(){abort("alignment fault")}var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function getCFunc(ident){var func=Module["_"+ident];assert(func,"Cannot call unknown function "+ident+", make sure it is exported");return func}var JSfuncs={"stackSave":(function(){stackSave()}),"stackRestore":(function(){stackRestore()}),"arrayToC":(function(arr){var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){var len=(str.length<<2)+1;ret=stackAlloc(len);stringToUTF8(str,ret,len)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};function ccall(ident,returnType,argTypes,args,opts){function convertReturnValue(ret){if(returnType==="string")return Pointer_stringify(ret);if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;assert(returnType!=="array",'Return type should not be "array".');if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}else{switch(type){case"i1":SAFE_HEAP_STORE(ptr|0,value|0,1);break;case"i8":SAFE_HEAP_STORE(ptr|0,value|0,1);break;case"i16":SAFE_HEAP_STORE(ptr|0,value|0,2);break;case"i32":SAFE_HEAP_STORE(ptr|0,value|0,4);break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/4294967296)>>>0:0)],SAFE_HEAP_STORE(ptr|0,tempI64[0]|0,4),SAFE_HEAP_STORE(ptr+4|0,tempI64[1]|0,4);break;case"float":SAFE_HEAP_STORE_D(ptr|0,Math_fround(value),4);break;case"double":SAFE_HEAP_STORE_D(ptr|0,+value,8);break;default:abort("invalid type for setValue: "+type)}}}function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";if(noSafe){switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for getValue: "+type)}}else{switch(type){case"i1":return SAFE_HEAP_LOAD(ptr|0,1,0)|0;case"i8":return SAFE_HEAP_LOAD(ptr|0,1,0)|0;case"i16":return SAFE_HEAP_LOAD(ptr|0,2,0)|0;case"i32":return SAFE_HEAP_LOAD(ptr|0,4,0)|0;case"i64":return SAFE_HEAP_LOAD(ptr|0,8,0)|0;case"float":return Math_fround(SAFE_HEAP_LOAD_D(ptr|0,4,0));case"double":return+SAFE_HEAP_LOAD_D(ptr|0,8,0);default:abort("invalid type for getValue: "+type)}}return null}var ALLOC_NORMAL=0;var ALLOC_NONE=3;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,stackAlloc,dynamicAlloc][allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var stop;ptr=ret;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}return UTF8ToString(ptr)}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(u8Array,idx){var endPtr=idx;while(u8Array[endPtr])++endPtr;if(endPtr-idx>16&&u8Array.subarray&&UTF8Decoder){return UTF8Decoder.decode(u8Array.subarray(idx,endPtr))}else{var u0,u1,u2,u3,u4,u5;var str="";while(1){u0=u8Array[idx++];if(!u0)return str;if(!(u0&128)){str+=String.fromCharCode(u0);continue}u1=u8Array[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}u2=u8Array[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u3=u8Array[idx++]&63;if((u0&248)==240){u0=(u0&7)<<18|u1<<12|u2<<6|u3}else{u4=u8Array[idx++]&63;if((u0&252)==248){u0=(u0&3)<<24|u1<<18|u2<<12|u3<<6|u4}else{u5=u8Array[idx++]&63;u0=(u0&1)<<30|u1<<24|u2<<18|u3<<12|u4<<6|u5}}}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}}}function UTF8ToString(ptr){return UTF8ArrayToString(HEAPU8,ptr)}function stringToUTF8Array(str,outU8Array,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;outU8Array[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;outU8Array[outIdx++]=192|u>>6;outU8Array[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;outU8Array[outIdx++]=224|u>>12;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=2097151){if(outIdx+3>=endIdx)break;outU8Array[outIdx++]=240|u>>18;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else if(u<=67108863){if(outIdx+4>=endIdx)break;outU8Array[outIdx++]=248|u>>24;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}else{if(outIdx+5>=endIdx)break;outU8Array[outIdx++]=252|u>>30;outU8Array[outIdx++]=128|u>>24&63;outU8Array[outIdx++]=128|u>>18&63;outU8Array[outIdx++]=128|u>>12&63;outU8Array[outIdx++]=128|u>>6&63;outU8Array[outIdx++]=128|u&63}}outU8Array[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){assert(typeof maxBytesToWrite=="number","stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127){++len}else if(u<=2047){len+=2}else if(u<=65535){len+=3}else if(u<=2097151){len+=4}else if(u<=67108863){len+=5}else{len+=6}}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function demangle(func){warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling");return func}function demangleAll(text){var regex=/__Z[\w\d_]+/g;return text.replace(regex,(function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}var WASM_PAGE_SIZE=65536;var MIN_TOTAL_MEMORY=16777216;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBuffer(buf){Module["buffer"]=buffer=buf}function updateGlobalBufferViews(){Module["HEAP8"]=HEAP8=new Int8Array(buffer);Module["HEAP16"]=HEAP16=new Int16Array(buffer);Module["HEAP32"]=HEAP32=new Int32Array(buffer);Module["HEAPU8"]=HEAPU8=new Uint8Array(buffer);Module["HEAPU16"]=HEAPU16=new Uint16Array(buffer);Module["HEAPU32"]=HEAPU32=new Uint32Array(buffer);Module["HEAPF32"]=HEAPF32=new Float32Array(buffer);Module["HEAPF64"]=HEAPF64=new Float64Array(buffer)}var STATIC_BASE=1024,STACK_BASE=22720,STACK_MAX=5265600,DYNAMIC_BASE=5265600,DYNAMICTOP_PTR=22464;assert(STACK_BASE%16===0,"stack must start aligned");assert(DYNAMIC_BASE%16===0,"heap must start aligned");function writeStackCookie(){assert((STACK_MAX&3)==0);HEAPU32[(STACK_MAX>>2)-1]=34821223;HEAPU32[(STACK_MAX>>2)-2]=2310721022}function checkStackCookie(){if(HEAPU32[(STACK_MAX>>2)-1]!=34821223||HEAPU32[(STACK_MAX>>2)-2]!=2310721022){abort("Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x"+HEAPU32[(STACK_MAX>>2)-2].toString(16)+" "+HEAPU32[(STACK_MAX>>2)-1].toString(16))}if(HEAP32[0]!==1668509029)throw"Runtime error: The application has corrupted its heap memory area (address zero)!"}function abortStackOverflow(allocSize){abort("Stack overflow! Attempted to allocate "+allocSize+" bytes on the stack, but stack has only "+(STACK_MAX-stackSave()+allocSize)+" bytes available!")}function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){assert(HEAP32[DYNAMICTOP_PTR>>2]>TOTAL_MEMORY);var PAGE_MULTIPLE=65536;var LIMIT=2147483648-PAGE_MULTIPLE;if(HEAP32[DYNAMICTOP_PTR>>2]>LIMIT){err("Cannot enlarge memory, asked to go up to "+HEAP32[DYNAMICTOP_PTR>>2]+" bytes, but the limit is "+LIMIT+" bytes!");return false}var OLD_TOTAL_MEMORY=TOTAL_MEMORY;TOTAL_MEMORY=Math.max(TOTAL_MEMORY,MIN_TOTAL_MEMORY);while(TOTAL_MEMORY>2]){if(TOTAL_MEMORY<=536870912){TOTAL_MEMORY=alignUp(2*TOTAL_MEMORY,PAGE_MULTIPLE)}else{TOTAL_MEMORY=Math.min(alignUp((3*TOTAL_MEMORY+2147483648)/4,PAGE_MULTIPLE),LIMIT);if(TOTAL_MEMORY===OLD_TOTAL_MEMORY){warnOnce("Cannot ask for more memory since we reached the practical limit in browsers (which is just below 2GB), so the request would have failed. Requesting only "+TOTAL_MEMORY)}}}var start=Date.now();var replacement=Module["reallocBuffer"](TOTAL_MEMORY);if(!replacement||replacement.byteLength!=TOTAL_MEMORY){err("Failed to grow the heap from "+OLD_TOTAL_MEMORY+" bytes to "+TOTAL_MEMORY+" bytes, not enough memory!");if(replacement){err("Expected to get back a buffer of size "+TOTAL_MEMORY+" bytes, but instead got back a buffer of size "+replacement.byteLength)}TOTAL_MEMORY=OLD_TOTAL_MEMORY;return false}updateGlobalBuffer(replacement);updateGlobalBufferViews();return true}var byteLength;try{byteLength=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get);byteLength(new ArrayBuffer(4))}catch(e){byteLength=(function(buffer){return buffer.byteLength})}var TOTAL_STACK=5242880;if(Module["TOTAL_STACK"])assert(TOTAL_STACK===Module["TOTAL_STACK"],"the stack size can no longer be determined at runtime");var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||16777216;if(TOTAL_MEMORY>2]=DYNAMIC_BASE;function getTotalMemory(){return TOTAL_MEMORY}HEAP32[0]=1668509029;HEAP16[1]=25459;if(HEAPU8[2]!==115||HEAPU8[3]!==99)throw"Runtime error: expected the system to be little-endian!";function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){checkStackCookie();if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){checkStackCookie();callRuntimeCallbacks(__ATMAIN__)}function postRun(){checkStackCookie();if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}function writeArrayToMemory(array,buffer){assert(array.length>=0,"writeArrayToMemory array must have a length (should be an array or typed array)");HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i=0){return value}return bits<=32?2*Math.abs(1<=0){err("Memory size incompatibility issues may be due to changing TOTAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set TOTAL_MEMORY at runtime to something smaller than it was at compile time).")}return false}receiveInstance(instance,module);return exports}Module["asmPreload"]=Module["asm"];var wasmReallocBuffer=(function(size){var PAGE_MULTIPLE=65536;size=alignUp(size,PAGE_MULTIPLE);var old=Module["buffer"];var oldSize=old.byteLength;try{var result=Module["wasmMemory"].grow((size-oldSize)/wasmPageSize);if(result!==(-1|0)){return Module["buffer"]=Module["wasmMemory"].buffer}else{return null}}catch(e){console.error("Module.reallocBuffer: Attempted to grow from "+oldSize+" bytes to "+size+" bytes, but got error: "+e);return null}});Module["reallocBuffer"]=(function(size){return wasmReallocBuffer(size)});Module["asm"]=(function(global,env,providedBuffer){if(!env["table"]){assert(Module["wasmTableSize"]!==undefined);var TABLE_SIZE=Module["wasmTableSize"];var MAX_TABLE_SIZE=Module["wasmMaxTableSize"];if(typeof WebAssembly==="object"&&typeof WebAssembly.Table==="function"){if(MAX_TABLE_SIZE!==undefined){env["table"]=new WebAssembly.Table({"initial":TABLE_SIZE,"maximum":MAX_TABLE_SIZE,"element":"anyfunc"})}else{env["table"]=new WebAssembly.Table({"initial":TABLE_SIZE,element:"anyfunc"})}}else{env["table"]=new Array(TABLE_SIZE)}Module["wasmTable"]=env["table"]}if(!env["__memory_base"]){env["__memory_base"]=Module["STATIC_BASE"]}if(!env["__table_base"]){env["__table_base"]=0}var exports=createWasm(global,env,providedBuffer);assert(exports,"binaryen setup failed (no wasm support?)");return exports})}integrateWasmJS();STATIC_BASE=GLOBAL_BASE;__ATINIT__.push({func:(function(){___emscripten_environ_constructor()})});var STATIC_BUMP=21696;Module["STATIC_BASE"]=STATIC_BASE;Module["STATIC_BUMP"]=STATIC_BUMP;var tempDoublePtr=22704;assert(tempDoublePtr%8==0);var ENV={};function ___buildEnvironment(environ){var MAX_ENV_VALUES=64;var TOTAL_ENV_SIZE=1024;var poolPtr;var envPtr;if(!___buildEnvironment.called){___buildEnvironment.called=true;ENV["USER"]=ENV["LOGNAME"]="web_user";ENV["PATH"]="/";ENV["PWD"]="/";ENV["HOME"]="/home/web_user";ENV["LANG"]="C.UTF-8";ENV["_"]=Module["thisProgram"];poolPtr=getMemory(TOTAL_ENV_SIZE);envPtr=getMemory(MAX_ENV_VALUES*4);SAFE_HEAP_STORE(envPtr|0,poolPtr|0,4);SAFE_HEAP_STORE(environ|0,envPtr|0,4)}else{envPtr=SAFE_HEAP_LOAD(environ|0,4,0)|0;poolPtr=SAFE_HEAP_LOAD(envPtr|0,4,0)|0}var strings=[];var totalSize=0;for(var key in ENV){if(typeof ENV[key]==="string"){var line=key+"="+ENV[key];strings.push(line);totalSize+=line.length}}if(totalSize>TOTAL_ENV_SIZE){throw new Error("Environment size exceeded TOTAL_ENV_SIZE!")}var ptrSize=4;for(var i=0;i=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts}),normalize:(function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path}),dirname:(function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir}),basename:(function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)}),extname:(function(path){return PATH.splitPath(path)[3]}),join:(function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))}),join2:(function(l,r){return PATH.normalize(l+"/"+r)}),resolve:(function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter((function(p){return!!p})),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."}),relative:(function(from,to){from=PATH.resolve(from).substr(1);to=PATH.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()}),put_char:(function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}})},default_tty1_ops:{put_char:(function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}}),flush:(function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}})}};var MEMFS={ops_table:null,mount:(function(mount){return MEMFS.createNode(null,"/",16384|511,0)}),createNode:(function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(ERRNO_CODES.EPERM)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node}return node}),getFileDataAsRegularArray:(function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;inode.contents.length){node.contents=MEMFS.getFileDataAsRegularArray(node);node.usedBytes=node.contents.length}if(!node.contents||node.contents.subarray){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return}if(!node.contents&&newCapacity>0)node.contents=[];while(node.contents.lengthnewSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);assert(size>=0);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length>2}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return stat.mode}),realPath:(function(node){var parts=[];while(node.parent!==node){parts.push(node.name);node=node.parent}parts.push(node.mount.opts.root);parts.reverse();return PATH.join.apply(null,parts)}),flagsForNode:(function(flags){flags&=~2097152;flags&=~2048;flags&=~32768;flags&=~524288;var newFlags=0;for(var k in NODEFS.flagsForNodeMap){if(flags&k){newFlags|=NODEFS.flagsForNodeMap[k];flags^=k}}if(!flags){return newFlags}else{throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}}),node_ops:{getattr:(function(node){var path=NODEFS.realPath(node);var stat;try{stat=fs.lstatSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}if(NODEFS.isWindows&&!stat.blksize){stat.blksize=4096}if(NODEFS.isWindows&&!stat.blocks){stat.blocks=(stat.size+stat.blksize-1)/stat.blksize|0}return{dev:stat.dev,ino:stat.ino,mode:stat.mode,nlink:stat.nlink,uid:stat.uid,gid:stat.gid,rdev:stat.rdev,size:stat.size,atime:stat.atime,mtime:stat.mtime,ctime:stat.ctime,blksize:stat.blksize,blocks:stat.blocks}}),setattr:(function(node,attr){var path=NODEFS.realPath(node);try{if(attr.mode!==undefined){fs.chmodSync(path,attr.mode);node.mode=attr.mode}if(attr.timestamp!==undefined){var date=new Date(attr.timestamp);fs.utimesSync(path,date,date)}if(attr.size!==undefined){fs.truncateSync(path,attr.size)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),lookup:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);var mode=NODEFS.getMode(path);return NODEFS.createNode(parent,name,mode)}),mknod:(function(parent,name,mode,dev){var node=NODEFS.createNode(parent,name,mode,dev);var path=NODEFS.realPath(node);try{if(FS.isDir(node.mode)){fs.mkdirSync(path,node.mode)}else{fs.writeFileSync(path,"",{mode:node.mode})}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}return node}),rename:(function(oldNode,newDir,newName){var oldPath=NODEFS.realPath(oldNode);var newPath=PATH.join2(NODEFS.realPath(newDir),newName);try{fs.renameSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),unlink:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.unlinkSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),rmdir:(function(parent,name){var path=PATH.join2(NODEFS.realPath(parent),name);try{fs.rmdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readdir:(function(node){var path=NODEFS.realPath(node);try{return fs.readdirSync(path)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),symlink:(function(parent,newName,oldPath){var newPath=PATH.join2(NODEFS.realPath(parent),newName);try{fs.symlinkSync(oldPath,newPath)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),readlink:(function(node){var path=NODEFS.realPath(node);try{path=fs.readlinkSync(path);path=NODEJS_PATH.relative(NODEJS_PATH.resolve(node.mount.opts.root),path);return path}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})},stream_ops:{open:(function(stream){var path=NODEFS.realPath(stream.node);try{if(FS.isFile(stream.node.mode)){stream.nfd=fs.openSync(path,NODEFS.flagsForNode(stream.flags))}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),close:(function(stream){try{if(FS.isFile(stream.node.mode)&&stream.nfd){fs.closeSync(stream.nfd)}}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),read:(function(stream,buffer,offset,length,position){if(length===0)return 0;try{return fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),write:(function(stream,buffer,offset,length,position){try{return fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position)}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}),llseek:(function(stream,offset,whence){var position=offset;if(whence===1){position+=stream.position}else if(whence===2){if(FS.isFile(stream.node.mode)){try{var stat=fs.fstatSync(stream.nfd);position+=stat.size}catch(e){throw new FS.ErrnoError(ERRNO_CODES[e.code])}}}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}return position})}};var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};var NODERAWFS={lookupPath:(function(path){return{path:path,node:{mode:NODEFS.getMode(path)}}}),createStandardStreams:(function(){FS.streams[0]={fd:0,nfd:0,position:0,path:"",flags:0,tty:true,seekable:false};for(var i=1;i<3;i++){FS.streams[i]={fd:i,nfd:i,position:0,path:"",flags:577,tty:true,seekable:false}}}),cwd:(function(){return process.cwd()}),chdir:(function(){process.chdir.apply(void 0,arguments)}),mknod:(function(path,mode){if(FS.isDir(path)){fs.mkdirSync(path,mode)}else{fs.writeFileSync(path,"",{mode:mode})}}),mkdir:(function(){fs.mkdirSync.apply(void 0,arguments)}),symlink:(function(){fs.symlinkSync.apply(void 0,arguments)}),rename:(function(){fs.renameSync.apply(void 0,arguments)}),rmdir:(function(){fs.rmdirSync.apply(void 0,arguments)}),readdir:(function(){fs.readdirSync.apply(void 0,arguments)}),unlink:(function(){fs.unlinkSync.apply(void 0,arguments)}),readlink:(function(){return fs.readlinkSync.apply(void 0,arguments)}),stat:(function(){return fs.statSync.apply(void 0,arguments)}),lstat:(function(){return fs.lstatSync.apply(void 0,arguments)}),chmod:(function(){fs.chmodSync.apply(void 0,arguments)}),fchmod:(function(){fs.fchmodSync.apply(void 0,arguments)}),chown:(function(){fs.chownSync.apply(void 0,arguments)}),fchown:(function(){fs.fchownSync.apply(void 0,arguments)}),truncate:(function(){fs.truncateSync.apply(void 0,arguments)}),ftruncate:(function(){fs.ftruncateSync.apply(void 0,arguments)}),utime:(function(){fs.utimesSync.apply(void 0,arguments)}),open:(function(path,flags,mode,suggestFD){if(typeof flags==="string"){flags=VFS.modeStringToFlags(flags)}var nfd=fs.openSync(path,NODEFS.flagsForNode(flags),mode);var fd=suggestFD!=null?suggestFD:FS.nextfd(nfd);var stream={fd:fd,nfd:nfd,position:0,path:path,flags:flags,seekable:true};FS.streams[fd]=stream;return stream}),close:(function(stream){if(!stream.stream_ops){fs.closeSync(stream.nfd)}FS.closeStream(stream.fd)}),llseek:(function(stream,offset,whence){if(stream.stream_ops){return VFS.llseek(stream,offset,whence)}var position=offset;if(whence===1){position+=stream.position}else if(whence===2){position+=fs.fstatSync(stream.nfd).size}if(position<0){throw new FS.ErrnoError(ERRNO_CODES.EINVAL)}stream.position=position;return position}),read:(function(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.read(stream,buffer,offset,length,position)}var seeking=typeof position!=="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesRead=fs.readSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead}),write:(function(stream,buffer,offset,length,position){if(stream.stream_ops){return VFS.write(stream,buffer,offset,length,position)}if(stream.flags&+"1024"){FS.llseek(stream,0,+"2")}var seeking=typeof position!=="undefined";if(!seeking&&stream.seekable)position=stream.position;var bytesWritten=fs.writeSync(stream.nfd,NODEFS.bufferFrom(buffer.buffer),offset,length,position);if(!seeking)stream.position+=bytesWritten;return bytesWritten}),allocate:(function(){throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP)}),mmap:(function(){throw new FS.ErrnoError(ERRNO_CODES.ENODEV)}),msync:(function(){return 0}),munmap:(function(){return 0}),ioctl:(function(){throw new FS.ErrnoError(ERRNO_CODES.ENOTTY)})};var ERRNO_MESSAGES={0:"Success",1:"Not super-user",2:"No such file or directory",3:"No such process",4:"Interrupted system call",5:"I/O error",6:"No such device or address",7:"Arg list too long",8:"Exec format error",9:"Bad file number",10:"No children",11:"No more processes",12:"Not enough core",13:"Permission denied",14:"Bad address",15:"Block device required",16:"Mount device busy",17:"File exists",18:"Cross-device link",19:"No such device",20:"Not a directory",21:"Is a directory",22:"Invalid argument",23:"Too many open files in system",24:"Too many open files",25:"Not a typewriter",26:"Text file busy",27:"File too large",28:"No space left on device",29:"Illegal seek",30:"Read only file system",31:"Too many links",32:"Broken pipe",33:"Math arg out of domain of func",34:"Math result not representable",35:"File locking deadlock error",36:"File or path name too long",37:"No record locks available",38:"Function not implemented",39:"Directory not empty",40:"Too many symbolic links",42:"No message of desired type",43:"Identifier removed",44:"Channel number out of range",45:"Level 2 not synchronized",46:"Level 3 halted",47:"Level 3 reset",48:"Link number out of range",49:"Protocol driver not attached",50:"No CSI structure available",51:"Level 2 halted",52:"Invalid exchange",53:"Invalid request descriptor",54:"Exchange full",55:"No anode",56:"Invalid request code",57:"Invalid slot",59:"Bad font file fmt",60:"Device not a stream",61:"No data (for no delay io)",62:"Timer expired",63:"Out of streams resources",64:"Machine is not on the network",65:"Package not installed",66:"The object is remote",67:"The link has been severed",68:"Advertise error",69:"Srmount error",70:"Communication error on send",71:"Protocol error",72:"Multihop attempted",73:"Cross mount point (not really error)",74:"Trying to read unreadable message",75:"Value too large for defined data type",76:"Given log. name not unique",77:"f.d. invalid for this operation",78:"Remote address changed",79:"Can access a needed shared lib",80:"Accessing a corrupted shared lib",81:".lib section in a.out corrupted",82:"Attempting to link in too many libs",83:"Attempting to exec a shared library",84:"Illegal byte sequence",86:"Streams pipe error",87:"Too many users",88:"Socket operation on non-socket",89:"Destination address required",90:"Message too long",91:"Protocol wrong type for socket",92:"Protocol not available",93:"Unknown protocol",94:"Socket type not supported",95:"Not supported",96:"Protocol family not supported",97:"Address family not supported by protocol family",98:"Address already in use",99:"Address not available",100:"Network interface is not configured",101:"Network is unreachable",102:"Connection reset by network",103:"Connection aborted",104:"Connection reset by peer",105:"No buffer space available",106:"Socket is already connected",107:"Socket is not connected",108:"Can't send after socket shutdown",109:"Too many references",110:"Connection timed out",111:"Connection refused",112:"Host is down",113:"Host is unreachable",114:"Socket already connected",115:"Connection already in progress",116:"Stale file handle",122:"Quota exceeded",123:"No medium (in tape drive)",125:"Operation canceled",130:"Previous owner died",131:"State not recoverable"};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,trackingDelegate:{},tracking:{openFlags:{READ:1,WRITE:2}},ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,handleFSError:(function(e){if(!(e instanceof FS.ErrnoError))throw e+" : "+stackTrace();return ___setErrNo(e.errno)}),lookupPath:(function(path,opts){path=PATH.resolve(FS.cwd(),path);opts=opts||{};if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};for(var key in defaults){if(opts[key]===undefined){opts[key]=defaults[key]}}if(opts.recurse_count>8){throw new FS.ErrnoError(40)}var parts=PATH.normalizeArray(path.split("/").filter((function(p){return!!p})),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(40)}}}}return{path:current_path,node:current}}),getPath:(function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}}),hashName:(function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length}),hashAddNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node}),hashRemoveNode:(function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}}),lookupNode:(function(parent,name){var err=FS.mayLookup(parent);if(err){throw new FS.ErrnoError(err,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)}),createNode:(function(parent,name,mode,rdev){if(!FS.FSNode){FS.FSNode=(function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev});FS.FSNode.prototype={};var readMode=292|73;var writeMode=146;Object.defineProperties(FS.FSNode.prototype,{read:{get:(function(){return(this.mode&readMode)===readMode}),set:(function(val){val?this.mode|=readMode:this.mode&=~readMode})},write:{get:(function(){return(this.mode&writeMode)===writeMode}),set:(function(val){val?this.mode|=writeMode:this.mode&=~writeMode})},isFolder:{get:(function(){return FS.isDir(this.mode)})},isDevice:{get:(function(){return FS.isChrdev(this.mode)})}})}var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node}),destroyNode:(function(node){FS.hashRemoveNode(node)}),isRoot:(function(node){return node===node.parent}),isMountpoint:(function(node){return!!node.mounted}),isFile:(function(mode){return(mode&61440)===32768}),isDir:(function(mode){return(mode&61440)===16384}),isLink:(function(mode){return(mode&61440)===40960}),isChrdev:(function(mode){return(mode&61440)===8192}),isBlkdev:(function(mode){return(mode&61440)===24576}),isFIFO:(function(mode){return(mode&61440)===4096}),isSocket:(function(mode){return(mode&49152)===49152}),flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:(function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags}),flagsToPermissionString:(function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms}),nodePermissions:(function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 13}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 13}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 13}return 0}),mayLookup:(function(dir){var err=FS.nodePermissions(dir,"x");if(err)return err;if(!dir.node_ops.lookup)return 13;return 0}),mayCreate:(function(dir,name){try{var node=FS.lookupNode(dir,name);return 17}catch(e){}return FS.nodePermissions(dir,"wx")}),mayDelete:(function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var err=FS.nodePermissions(dir,"wx");if(err){return err}if(isdir){if(!FS.isDir(node.mode)){return 20}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 16}}else{if(FS.isDir(node.mode)){return 21}}return 0}),mayOpen:(function(node,flags){if(!node){return 2}if(FS.isLink(node.mode)){return 40}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 21}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))}),MAX_OPEN_FDS:4096,nextfd:(function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(24)}),getStream:(function(fd){return FS.streams[fd]}),createStream:(function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=(function(){});FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get:(function(){return this.node}),set:(function(val){this.node=val})},isRead:{get:(function(){return(this.flags&2097155)!==1})},isWrite:{get:(function(){return(this.flags&2097155)!==0})},isAppend:{get:(function(){return this.flags&1024})}})}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream}),closeStream:(function(fd){FS.streams[fd]=null}),chrdev_stream_ops:{open:(function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}}),llseek:(function(){throw new FS.ErrnoError(29)})},major:(function(dev){return dev>>8}),minor:(function(dev){return dev&255}),makedev:(function(ma,mi){return ma<<8|mi}),registerDevice:(function(dev,ops){FS.devices[dev]={stream_ops:ops}}),getDevice:(function(dev){return FS.devices[dev]}),getMounts:(function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts}),syncfs:(function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){console.log("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(err){assert(FS.syncFSRequests>0);FS.syncFSRequests--;return callback(err)}function done(err){if(err){if(!done.errored){done.errored=true;return doCallback(err)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach((function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)}))}),mount:(function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(16)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(16)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(20)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot}),unmount:(function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(22)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach((function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}}));node.mounted=null;var idx=node.mount.mounts.indexOf(mount);assert(idx!==-1);node.mount.mounts.splice(idx,1)}),lookup:(function(parent,name){return parent.node_ops.lookup(parent,name)}),mknod:(function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(22)}var err=FS.mayCreate(parent,name);if(err){throw new FS.ErrnoError(err)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(1)}return parent.node_ops.mknod(parent,name,mode,dev)}),create:(function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)}),mkdir:(function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)}),mkdirTree:(function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}});var lazyArray=this;lazyArray.setDataGetter((function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]}));if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;console.log("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._length})},chunkSize:{get:(function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize})}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:(function(){return this.contents.length})}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach((function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}return fn.apply(null,arguments)}}));stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(5)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);assert(size>=0);if(contents.slice){for(var i=0;i=0)assert(high===0);else assert(high===-1);return low}),getZero:(function(){assert(SYSCALLS.get()===0)})};function ___syscall10(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.unlink(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall140(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),offset_high=SYSCALLS.get(),offset_low=SYSCALLS.get(),result=SYSCALLS.get(),whence=SYSCALLS.get();var offset=offset_low;FS.llseek(stream,offset,whence);SAFE_HEAP_STORE(result|0,stream.position|0,4);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall145(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doReadv(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall146(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),iov=SYSCALLS.get(),iovcnt=SYSCALLS.get();return SYSCALLS.doWritev(stream,iov,iovcnt)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall15(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),mode=SYSCALLS.get();FS.chmod(path,mode);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall195(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall197(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),buf=SYSCALLS.get();return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall221(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),cmd=SYSCALLS.get();switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-ERRNO_CODES.EINVAL}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd};case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0};case 12:case 12:{var arg=SYSCALLS.get();var offset=0;SAFE_HEAP_STORE(arg+offset|0,2|0,2);return 0};case 13:case 14:case 13:case 14:return 0;case 16:case 8:return-ERRNO_CODES.EINVAL;case 9:___setErrNo(ERRNO_CODES.EINVAL);return-1;default:{return-ERRNO_CODES.EINVAL}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall38(which,varargs){SYSCALLS.varargs=varargs;try{var old_path=SYSCALLS.getStr(),new_path=SYSCALLS.getStr();FS.rename(old_path,new_path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall40(which,varargs){SYSCALLS.varargs=varargs;try{var path=SYSCALLS.getStr();FS.rmdir(path);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall5(which,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(),flags=SYSCALLS.get(),mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall54(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(),op=SYSCALLS.get();switch(op){case 21509:case 21505:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21519:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;var argp=SYSCALLS.get();SAFE_HEAP_STORE(argp|0,0|0,4);return 0};case 21520:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return-ERRNO_CODES.EINVAL};case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)};case 21523:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};case 21524:{if(!stream.tty)return-ERRNO_CODES.ENOTTY;return 0};default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall6(which,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD();FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___syscall60(which,varargs){SYSCALLS.varargs=varargs;try{var mask=SYSCALLS.get();var old=SYSCALLS.umask;SYSCALLS.umask=mask;return old}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___unlock(){}var ___tm_current=22560;var ___tm_timezone=(stringToUTF8("GMT",22608,4),22608);function _gmtime_r(time,tmPtr){var date=new Date((SAFE_HEAP_LOAD(time|0,4,0)|0)*1e3);SAFE_HEAP_STORE(tmPtr|0,date.getUTCSeconds()|0,4);SAFE_HEAP_STORE(tmPtr+4|0,date.getUTCMinutes()|0,4);SAFE_HEAP_STORE(tmPtr+8|0,date.getUTCHours()|0,4);SAFE_HEAP_STORE(tmPtr+12|0,date.getUTCDate()|0,4);SAFE_HEAP_STORE(tmPtr+16|0,date.getUTCMonth()|0,4);SAFE_HEAP_STORE(tmPtr+20|0,date.getUTCFullYear()-1900|0,4);SAFE_HEAP_STORE(tmPtr+24|0,date.getUTCDay()|0,4);SAFE_HEAP_STORE(tmPtr+36|0,0|0,4);SAFE_HEAP_STORE(tmPtr+32|0,0|0,4);var start=Date.UTC(date.getUTCFullYear(),0,1,0,0,0,0);var yday=(date.getTime()-start)/(1e3*60*60*24)|0;SAFE_HEAP_STORE(tmPtr+28|0,yday|0,4);SAFE_HEAP_STORE(tmPtr+40|0,___tm_timezone|0,4);return tmPtr}function _gmtime(time){return _gmtime_r(time,___tm_current)}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}function _tzset(){if(_tzset.called)return;_tzset.called=true;SAFE_HEAP_STORE(__get_timezone()|0,(new Date).getTimezoneOffset()*60|0,4);var winter=new Date(2e3,0,1);var summer=new Date(2e3,6,1);SAFE_HEAP_STORE(__get_daylight()|0,Number(winter.getTimezoneOffset()!=summer.getTimezoneOffset())|0,4);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);var winterNamePtr=allocate(intArrayFromString(winterName),"i8",ALLOC_NORMAL);var summerNamePtr=allocate(intArrayFromString(summerName),"i8",ALLOC_NORMAL);if(summer.getTimezoneOffset()0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}SAFE_HEAP_STORE(tmPtr+24|0,date.getDay()|0,4);var yday=(date.getTime()-start.getTime())/(1e3*60*60*24)|0;SAFE_HEAP_STORE(tmPtr+28|0,yday|0,4);return date.getTime()/1e3|0}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){SAFE_HEAP_STORE(ptr|0,ret|0,4)}return ret}if(ENVIRONMENT_IS_NODE){_emscripten_get_now=function _emscripten_get_now_actual(){var t=process["hrtime"]();return t[0]*1e3+t[1]/1e6}}else if(typeof dateNow!=="undefined"){_emscripten_get_now=dateNow}else if(typeof self==="object"&&self["performance"]&&typeof self["performance"]["now"]==="function"){_emscripten_get_now=(function(){return self["performance"]["now"]()})}else if(typeof performance==="object"&&typeof performance["now"]==="function"){_emscripten_get_now=(function(){return performance["now"]()})}else{_emscripten_get_now=Date.now}FS.staticInit();__ATINIT__.unshift((function(){if(!Module["noFSInit"]&&!FS.init.initialized)FS.init()}));__ATMAIN__.push((function(){FS.ignorePermissions=false}));__ATEXIT__.push((function(){FS.quit()}));__ATINIT__.unshift((function(){TTY.init()}));__ATEXIT__.push((function(){TTY.shutdown()}));if(ENVIRONMENT_IS_NODE){var fs=frozenFs;var NODEJS_PATH=__webpack_require__(6);NODEFS.staticInit()}if(ENVIRONMENT_IS_NODE){var _wrapNodeError=(function(func){return(function(){try{return func.apply(this,arguments)}catch(e){if(!e.code)throw e;throw new FS.ErrnoError(ERRNO_CODES[e.code])}})});var VFS=Object.assign({},FS);for(var _key in NODERAWFS)FS[_key]=_wrapNodeError(NODERAWFS[_key])}else{throw new Error("NODERAWFS is currently only supported on Node.js environment.")}function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var decodeBase64=typeof atob==="function"?atob:(function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}writeStackCookie();preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();assert(!Module["_main"],'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}checkStackCookie()}Module["run"]=run;var abortDecorators=[];function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(what!==undefined){out(what);err(what);what=JSON.stringify(what)}else{what=""}ABORT=true;EXITSTATUS=1;var extra="";var output="abort("+what+") at "+stackTrace()+extra;if(abortDecorators){abortDecorators.forEach((function(decorator){output=decorator(output,what)}))}throw output}Module["abort"]=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}Module["noExitRuntime"]=true;run() + + + + + +/***/ }), +/* 16 */ +/***/ (function(module, exports) { + +module.exports = require("crypto"); + +/***/ }), +/* 17 */ +/***/ (function(module, exports) { + +module.exports = require("stream"); + +/***/ }), +/* 18 */ +/***/ (function(module, exports) { + +module.exports = require("util"); + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fs_1 = __webpack_require__(5); +const path_1 = __webpack_require__(6); +const FakeFS_1 = __webpack_require__(7); +const NodeFS_1 = __webpack_require__(4); +const ZipFS_1 = __webpack_require__(13); +class ZipOpenFS extends FakeFS_1.FakeFS { + constructor({ baseFs = new NodeFS_1.NodeFS(), filter = null, useCache = true } = {}) { + super(); + this.isZip = new Set(); + this.notZip = new Set(); + this.baseFs = baseFs; + this.zipInstances = useCache ? new Map() : null; + this.filter = filter; + this.isZip = new Set(); + this.notZip = new Set(); + } + static open(fn) { + const zipOpenFs = new ZipOpenFS(); + try { + return fn(zipOpenFs); + } + finally { + zipOpenFs.saveAndClose(); + } + } + static async openPromise(fn) { + const zipOpenFs = new ZipOpenFS(); + try { + return await fn(zipOpenFs); + } + finally { + zipOpenFs.saveAndClose(); + } + } + getRealPath() { + return this.baseFs.getRealPath(); + } + saveAndClose() { + if (this.zipInstances) { + for (const [path, zipFs] of this.zipInstances.entries()) { + zipFs.saveAndClose(); + this.zipInstances.delete(path); + } + } + } + discardAndClose() { + if (this.zipInstances) { + for (const [path, zipFs] of this.zipInstances.entries()) { + zipFs.discardAndClose(); + this.zipInstances.delete(path); + } + } + } + async openPromise(p, flags, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.openPromise(p, flags, mode); + }, async (zipFs, { archivePath, subPath }) => { + throw new Error(`Unsupported action (we wouldn't be able to disambiguate the close)`); + }); + } + openSync(p, flags, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.openSync(p, flags, mode); + }, (zipFs, { archivePath, subPath }) => { + throw new Error(`Unsupported action (we wouldn't be able to disambiguate the close)`); + }); + } + async closePromise(fd) { + return await this.baseFs.closePromise(fd); + } + closeSync(fd) { + return this.baseFs.closeSync(fd); + } + createReadStream(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.createReadStream(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.createReadStream(subPath, opts); + }); + } + createWriteStream(p, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.createWriteStream(p, opts); + }, (zipFs, { subPath }) => { + return zipFs.createWriteStream(subPath, opts); + }); + } + async realpathPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.realpathPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return path_1.posix.resolve(archivePath, path_1.posix.relative(`/`, await zipFs.realpathPromise(subPath))); + }); + } + realpathSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.realpathSync(p); + }, (zipFs, { archivePath, subPath }) => { + return path_1.posix.resolve(archivePath, path_1.posix.relative(`/`, zipFs.realpathSync(subPath))); + }); + } + async existsPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.existsPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.existsPromise(subPath); + }); + } + existsSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.existsSync(p); + }, (zipFs, { subPath }) => { + return zipFs.existsSync(subPath); + }); + } + async accessPromise(p, mode) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.accessPromise(p, mode); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.accessPromise(subPath, mode); + }); + } + accessSync(p, mode) { + return this.makeCallSync(p, () => { + return this.baseFs.accessSync(p, mode); + }, (zipFs, { subPath }) => { + return zipFs.accessSync(subPath, mode); + }); + } + async statPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.statPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.statPromise(subPath); + }); + } + statSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.statSync(p); + }, (zipFs, { subPath }) => { + return zipFs.statSync(subPath); + }); + } + async lstatPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.lstatPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.lstatPromise(subPath); + }); + } + lstatSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.lstatSync(p); + }, (zipFs, { subPath }) => { + return zipFs.lstatSync(subPath); + }); + } + async chmodPromise(p, mask) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.chmodPromise(p, mask); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.chmodPromise(subPath, mask); + }); + } + chmodSync(p, mask) { + return this.makeCallSync(p, () => { + return this.baseFs.chmodSync(p, mask); + }, (zipFs, { subPath }) => { + return zipFs.chmodSync(subPath, mask); + }); + } + async renamePromise(oldP, newP) { + return await this.makeCallPromise(oldP, async () => { + return await this.makeCallPromise(newP, async () => { + return await this.baseFs.renamePromise(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, async (zipFsO, { archivePath: archivePathO, subPath: subPathO }) => { + return await this.makeCallPromise(newP, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, async (zipFsN, { archivePath: archivePathN, subPath: subPathN }) => { + if (zipFsO !== zipFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } + else { + return await zipFsO.renamePromise(subPathO, subPathN); + } + }); + }); + } + renameSync(oldP, newP) { + return this.makeCallSync(oldP, () => { + return this.makeCallSync(newP, () => { + return this.baseFs.renameSync(oldP, newP); + }, async () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }); + }, (zipFsO, { archivePath: archivePathO, subPath: subPathO }) => { + return this.makeCallSync(newP, () => { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + }, (zipFsN, { archivePath: archivePathN, subPath: subPathN }) => { + if (zipFsO !== zipFsN) { + throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` }); + } + else { + return zipFsO.renameSync(subPathO, subPathN); + } + }); + }); + } + async copyFilePromise(sourceP, destP, flags = 0) { + const fallback = async (sourceFs, sourceP, destFs, destP) => { + if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP}' -> ${destP}'`), { code: `EXDEV` }); + if ((flags & fs_1.constants.COPYFILE_EXCL) && await this.existsPromise(sourceP)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), { code: `EEXIST` }); + let content; + try { + content = await sourceFs.readFilePromise(sourceP); + } + catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), { code: `EINVAL` }); + } + await destFs.writeFilePromise(destP, content); + }; + return await this.makeCallPromise(sourceP, async () => { + return await this.makeCallPromise(destP, async () => { + return await this.baseFs.copyFilePromise(sourceP, destP, flags); + }, async (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + return await fallback(this.baseFs, sourceP, zipFsD, subPathD); + }); + }, async (zipFsS, { archivePath: archivePathS, subPath: subPathS }) => { + return await this.makeCallPromise(destP, async () => { + return await fallback(zipFsS, subPathS, this.baseFs, destP); + }, async (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + if (zipFsS !== zipFsD) { + return await fallback(zipFsS, subPathS, zipFsD, subPathD); + } + else { + return await zipFsS.copyFilePromise(subPathS, subPathD, flags); + } + }); + }); + } + copyFileSync(sourceP, destP, flags = 0) { + const fallback = (sourceFs, sourceP, destFs, destP) => { + if ((flags & fs_1.constants.COPYFILE_FICLONE_FORCE) !== 0) + throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP}' -> ${destP}'`), { code: `EXDEV` }); + if ((flags & fs_1.constants.COPYFILE_EXCL) && this.existsSync(sourceP)) + throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP}' -> '${destP}'`), { code: `EEXIST` }); + let content; + try { + content = sourceFs.readFileSync(sourceP); + } + catch (error) { + throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP}' -> '${destP}'`), { code: `EINVAL` }); + } + destFs.writeFileSync(destP, content); + }; + return this.makeCallSync(sourceP, () => { + return this.makeCallSync(destP, () => { + return this.baseFs.copyFileSync(sourceP, destP, flags); + }, (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + return fallback(this.baseFs, sourceP, zipFsD, subPathD); + }); + }, (zipFsS, { archivePath: archivePathS, subPath: subPathS }) => { + return this.makeCallSync(destP, () => { + return fallback(zipFsS, subPathS, this.baseFs, destP); + }, (zipFsD, { archivePath: archivePathD, subPath: subPathD }) => { + if (zipFsS !== zipFsD) { + return fallback(zipFsS, subPathS, zipFsD, subPathD); + } + else { + return zipFsS.copyFileSync(subPathS, subPathD, flags); + } + }); + }); + } + async writeFilePromise(p, content, opts) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.writeFilePromise(p, content, opts); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.writeFilePromise(subPath, content, opts); + }); + } + writeFileSync(p, content, opts) { + return this.makeCallSync(p, () => { + return this.baseFs.writeFileSync(p, content, opts); + }, (zipFs, { subPath }) => { + return zipFs.writeFileSync(subPath, content, opts); + }); + } + async unlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.unlinkPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.unlinkPromise(subPath); + }); + } + unlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.unlinkSync(p); + }, (zipFs, { subPath }) => { + return zipFs.unlinkSync(subPath); + }); + } + async utimesPromise(p, atime, mtime) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.utimesPromise(p, atime, mtime); + }, async (zipFs, { subPath }) => { + return await zipFs.utimesPromise(subPath, atime, mtime); + }); + } + utimesSync(p, atime, mtime) { + return this.makeCallSync(p, () => { + return this.baseFs.utimesSync(p, atime, mtime); + }, (zipFs, { subPath }) => { + return zipFs.utimesSync(subPath, atime, mtime); + }); + } + async mkdirPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.mkdirPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.mkdirPromise(subPath); + }); + } + mkdirSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.mkdirSync(p); + }, (zipFs, { subPath }) => { + return zipFs.mkdirSync(subPath); + }); + } + async rmdirPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.rmdirPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.rmdirPromise(subPath); + }); + } + rmdirSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.rmdirSync(p); + }, (zipFs, { subPath }) => { + return zipFs.rmdirSync(subPath); + }); + } + async symlinkPromise(target, p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.symlinkPromise(target, p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.symlinkPromise(target, subPath); + }); + } + symlinkSync(target, p) { + return this.makeCallSync(p, () => { + return this.baseFs.symlinkSync(target, p); + }, (zipFs, { subPath }) => { + return zipFs.symlinkSync(target, subPath); + }); + } + async readFilePromise(p, encoding) { + return this.makeCallPromise(p, async () => { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return await this.baseFs.readFilePromise(p, encoding); + default: + return await this.baseFs.readFilePromise(p, encoding); + } + }, async (zipFs, { subPath }) => { + return await zipFs.readFilePromise(subPath, encoding); + }); + } + readFileSync(p, encoding) { + return this.makeCallSync(p, () => { + // This weird switch is required to tell TypeScript that the signatures are proper (otherwise it thinks that only the generic one is covered) + switch (encoding) { + case `utf8`: + return this.baseFs.readFileSync(p, encoding); + default: + return this.baseFs.readFileSync(p, encoding); + } + }, (zipFs, { subPath }) => { + return zipFs.readFileSync(subPath, encoding); + }); + } + async readdirPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readdirPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.readdirPromise(subPath); + }, { + requireSubpath: false, + }); + } + readdirSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readdirSync(p); + }, (zipFs, { subPath }) => { + return zipFs.readdirSync(subPath); + }, { + requireSubpath: false, + }); + } + async readlinkPromise(p) { + return await this.makeCallPromise(p, async () => { + return await this.baseFs.readlinkPromise(p); + }, async (zipFs, { archivePath, subPath }) => { + return await zipFs.readlinkPromise(subPath); + }); + } + readlinkSync(p) { + return this.makeCallSync(p, () => { + return this.baseFs.readlinkSync(p); + }, (zipFs, { subPath }) => { + return zipFs.readlinkSync(subPath); + }); + } + async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) { + p = path_1.posix.normalize(path_1.posix.resolve(`/`, p)); + const zipInfo = this.findZip(p); + if (!zipInfo) + return await discard(); + if (requireSubpath && zipInfo.subPath === `/`) + return await discard(); + return await this.getZipPromise(zipInfo.archivePath, async (zipFs) => await accept(zipFs, zipInfo)); + } + makeCallSync(p, discard, accept, { requireSubpath = true } = {}) { + p = path_1.posix.normalize(path_1.posix.resolve(`/`, p)); + const zipInfo = this.findZip(p); + if (!zipInfo) + return discard(); + if (requireSubpath && zipInfo.subPath === `/`) + return discard(); + return this.getZipSync(zipInfo.archivePath, zipFs => accept(zipFs, zipInfo)); + } + findZip(p) { + if (this.filter && !this.filter.test(p)) + return null; + const parts = p.split(/\//g); + for (let t = 2; t <= parts.length; ++t) { + const archivePath = parts.slice(0, t).join(`/`); + if (this.notZip.has(archivePath)) + continue; + if (this.isZip.has(archivePath)) + return { archivePath, subPath: path_1.posix.resolve(`/`, parts.slice(t).join(`/`)) }; + let realArchivePath = archivePath; + let stat; + while (true) { + try { + stat = this.baseFs.lstatSync(realArchivePath); + } + catch (error) { + return null; + } + if (stat.isSymbolicLink()) { + realArchivePath = path_1.posix.resolve(path_1.posix.dirname(realArchivePath), this.baseFs.readlinkSync(realArchivePath)); + } + else { + break; + } + } + const isZip = stat.isFile() && path_1.posix.extname(realArchivePath) === `.zip`; + if (isZip) { + this.isZip.add(archivePath); + return { archivePath, subPath: path_1.posix.resolve(`/`, parts.slice(t).join(`/`)) }; + } + else { + this.notZip.add(archivePath); + if (stat.isFile()) { + return null; + } + } + } + return null; + } + async getZipPromise(p, accept) { + if (this.zipInstances) { + let zipFs = this.zipInstances.get(p); + if (!zipFs) + this.zipInstances.set(p, zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs, stats: await this.baseFs.statPromise(p) })); + return await accept(zipFs); + } + else { + const zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs, stats: await this.baseFs.statPromise(p) }); + try { + return await accept(zipFs); + } + finally { + zipFs.saveAndClose(); + } + } + } + getZipSync(p, accept) { + if (this.zipInstances) { + let zipFs = this.zipInstances.get(p); + if (!zipFs) + this.zipInstances.set(p, zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs })); + return accept(zipFs); + } + else { + const zipFs = new ZipFS_1.ZipFS(p, { baseFs: this.baseFs }); + try { + return accept(zipFs); + } + finally { + zipFs.saveAndClose(); + } + } + } +} +exports.ZipOpenFS = ZipOpenFS; + + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const cp = __webpack_require__(21); +const parse = __webpack_require__(22); +const enoent = __webpack_require__(35); + +function spawn(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); + + // Spawn the child process + const spawned = cp.spawn(parsed.command, parsed.args, parsed.options); + + // Hook into child process "exit" event to emit an error if the command + // does not exists, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + enoent.hookChildProcess(spawned, parsed); + + return spawned; +} + +function spawnSync(command, args, options) { + // Parse the arguments + const parsed = parse(command, args, options); + + // Spawn the child process + const result = cp.spawnSync(parsed.command, parsed.args, parsed.options); + + // Analyze if the command does not exist, see: https://github.com/IndigoUnited/node-cross-spawn/issues/16 + result.error = result.error || enoent.verifyENOENTSync(result.status, parsed); + + return result; +} + +module.exports = spawn; +module.exports.spawn = spawn; +module.exports.sync = spawnSync; + +module.exports._parse = parse; +module.exports._enoent = enoent; + + +/***/ }), +/* 21 */ +/***/ (function(module, exports) { + +module.exports = require("child_process"); + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const path = __webpack_require__(6); +const niceTry = __webpack_require__(23); +const resolveCommand = __webpack_require__(24); +const escape = __webpack_require__(30); +const readShebang = __webpack_require__(31); +const semver = __webpack_require__(34); + +const isWin = process.platform === 'win32'; +const isExecutableRegExp = /\.(?:com|exe)$/i; +const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i; + +// `options.shell` is supported in Node ^4.8.0, ^5.7.0 and >= 6.0.0 +const supportsShellOption = niceTry(() => semver.satisfies(process.version, '^4.8.0 || ^5.7.0 || >= 6.0.0', true)) || false; + +function detectShebang(parsed) { + parsed.file = resolveCommand(parsed); + + const shebang = parsed.file && readShebang(parsed.file); + + if (shebang) { + parsed.args.unshift(parsed.file); + parsed.command = shebang; + + return resolveCommand(parsed); + } + + return parsed.file; +} + +function parseNonShell(parsed) { + if (!isWin) { + return parsed; + } + + // Detect & add support for shebangs + const commandFile = detectShebang(parsed); + + // We don't need a shell if the command filename is an executable + const needsShell = !isExecutableRegExp.test(commandFile); + + // If a shell is required, use cmd.exe and take care of escaping everything correctly + // Note that `forceShell` is an hidden option used only in tests + if (parsed.options.forceShell || needsShell) { + // Need to double escape meta chars if the command is a cmd-shim located in `node_modules/.bin/` + // The cmd-shim simply calls execute the package bin file with NodeJS, proxying any argument + // Because the escape of metachars with ^ gets interpreted when the cmd.exe is first called, + // we need to double escape them + const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile); + + // Normalize posix paths into OS compatible paths (e.g.: foo/bar -> foo\bar) + // This is necessary otherwise it will always fail with ENOENT in those cases + parsed.command = path.normalize(parsed.command); + + // Escape command & arguments + parsed.command = escape.command(parsed.command); + parsed.args = parsed.args.map((arg) => escape.argument(arg, needsDoubleEscapeMetaChars)); + + const shellCommand = [parsed.command].concat(parsed.args).join(' '); + + parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; + parsed.command = process.env.comspec || 'cmd.exe'; + parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped + } + + return parsed; +} + +function parseShell(parsed) { + // If node supports the shell option, there's no need to mimic its behavior + if (supportsShellOption) { + return parsed; + } + + // Mimic node shell option + // See https://github.com/nodejs/node/blob/b9f6a2dc059a1062776133f3d4fd848c4da7d150/lib/child_process.js#L335 + const shellCommand = [parsed.command].concat(parsed.args).join(' '); + + if (isWin) { + parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe'; + parsed.args = ['/d', '/s', '/c', `"${shellCommand}"`]; + parsed.options.windowsVerbatimArguments = true; // Tell node's spawn that the arguments are already escaped + } else { + if (typeof parsed.options.shell === 'string') { + parsed.command = parsed.options.shell; + } else if (process.platform === 'android') { + parsed.command = '/system/bin/sh'; + } else { + parsed.command = '/bin/sh'; + } + + parsed.args = ['-c', shellCommand]; + } + + return parsed; +} + +function parse(command, args, options) { + // Normalize arguments, similar to nodejs + if (args && !Array.isArray(args)) { + options = args; + args = null; + } + + args = args ? args.slice(0) : []; // Clone array to avoid changing the original + options = Object.assign({}, options); // Clone object to avoid changing the original + + // Build our parsed object + const parsed = { + command, + args, + options, + file: undefined, + original: { + command, + args, + }, + }; + + // Delegate further parsing to shell or non-shell + return options.shell ? parseShell(parsed) : parseNonShell(parsed); +} + +module.exports = parse; + + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Tries to execute a function and discards any error that occurs. + * @param {Function} fn - Function that might or might not throw an error. + * @returns {?*} Return-value of the function when no error occurred. + */ +module.exports = function(fn) { + + try { return fn() } catch (e) {} + +} + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const path = __webpack_require__(6); +const which = __webpack_require__(25); +const pathKey = __webpack_require__(29)(); + +function resolveCommandAttempt(parsed, withoutPathExt) { + const cwd = process.cwd(); + const hasCustomCwd = parsed.options.cwd != null; + + // If a custom `cwd` was specified, we need to change the process cwd + // because `which` will do stat calls but does not support a custom cwd + if (hasCustomCwd) { + try { + process.chdir(parsed.options.cwd); + } catch (err) { + /* Empty */ + } + } + + let resolved; + + try { + resolved = which.sync(parsed.command, { + path: (parsed.options.env || process.env)[pathKey], + pathExt: withoutPathExt ? path.delimiter : undefined, + }); + } catch (e) { + /* Empty */ + } finally { + process.chdir(cwd); + } + + // If we successfully resolved, ensure that an absolute path is returned + // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it + if (resolved) { + resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved); + } + + return resolved; +} + +function resolveCommand(parsed) { + return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true); +} + +module.exports = resolveCommand; + + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = which +which.sync = whichSync + +var isWindows = process.platform === 'win32' || + process.env.OSTYPE === 'cygwin' || + process.env.OSTYPE === 'msys' + +var path = __webpack_require__(6) +var COLON = isWindows ? ';' : ':' +var isexe = __webpack_require__(26) + +function getNotFoundError (cmd) { + var er = new Error('not found: ' + cmd) + er.code = 'ENOENT' + + return er +} + +function getPathInfo (cmd, opt) { + var colon = opt.colon || COLON + var pathEnv = opt.path || process.env.PATH || '' + var pathExt = [''] + + pathEnv = pathEnv.split(colon) + + var pathExtExe = '' + if (isWindows) { + pathEnv.unshift(process.cwd()) + pathExtExe = (opt.pathExt || process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM') + pathExt = pathExtExe.split(colon) + + + // Always test the cmd itself first. isexe will check to make sure + // it's found in the pathExt set. + if (cmd.indexOf('.') !== -1 && pathExt[0] !== '') + pathExt.unshift('') + } + + // If it has a slash, then we don't bother searching the pathenv. + // just check the file itself, and that's it. + if (cmd.match(/\//) || isWindows && cmd.match(/\\/)) + pathEnv = [''] + + return { + env: pathEnv, + ext: pathExt, + extExe: pathExtExe + } +} + +function which (cmd, opt, cb) { + if (typeof opt === 'function') { + cb = opt + opt = {} + } + + var info = getPathInfo(cmd, opt) + var pathEnv = info.env + var pathExt = info.ext + var pathExtExe = info.extExe + var found = [] + + ;(function F (i, l) { + if (i === l) { + if (opt.all && found.length) + return cb(null, found) + else + return cb(getNotFoundError(cmd)) + } + + var pathPart = pathEnv[i] + if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"') + pathPart = pathPart.slice(1, -1) + + var p = path.join(pathPart, cmd) + if (!pathPart && (/^\.[\\\/]/).test(cmd)) { + p = cmd.slice(0, 2) + p + } + ;(function E (ii, ll) { + if (ii === ll) return F(i + 1, l) + var ext = pathExt[ii] + isexe(p + ext, { pathExt: pathExtExe }, function (er, is) { + if (!er && is) { + if (opt.all) + found.push(p + ext) + else + return cb(null, p + ext) + } + return E(ii + 1, ll) + }) + })(0, pathExt.length) + })(0, pathEnv.length) +} + +function whichSync (cmd, opt) { + opt = opt || {} + + var info = getPathInfo(cmd, opt) + var pathEnv = info.env + var pathExt = info.ext + var pathExtExe = info.extExe + var found = [] + + for (var i = 0, l = pathEnv.length; i < l; i ++) { + var pathPart = pathEnv[i] + if (pathPart.charAt(0) === '"' && pathPart.slice(-1) === '"') + pathPart = pathPart.slice(1, -1) + + var p = path.join(pathPart, cmd) + if (!pathPart && /^\.[\\\/]/.test(cmd)) { + p = cmd.slice(0, 2) + p + } + for (var j = 0, ll = pathExt.length; j < ll; j ++) { + var cur = p + pathExt[j] + var is + try { + is = isexe.sync(cur, { pathExt: pathExtExe }) + if (is) { + if (opt.all) + found.push(cur) + else + return cur + } + } catch (ex) {} + } + } + + if (opt.all && found.length) + return found + + if (opt.nothrow) + return null + + throw getNotFoundError(cmd) +} + + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + +var fs = __webpack_require__(5) +var core +if (process.platform === 'win32' || global.TESTING_WINDOWS) { + core = __webpack_require__(27) +} else { + core = __webpack_require__(28) +} + +module.exports = isexe +isexe.sync = sync + +function isexe (path, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + if (!cb) { + if (typeof Promise !== 'function') { + throw new TypeError('callback not provided') + } + + return new Promise(function (resolve, reject) { + isexe(path, options || {}, function (er, is) { + if (er) { + reject(er) + } else { + resolve(is) + } + }) + }) + } + + core(path, options || {}, function (er, is) { + // ignore EACCES because that just means we aren't allowed to run it + if (er) { + if (er.code === 'EACCES' || options && options.ignoreErrors) { + er = null + is = false + } + } + cb(er, is) + }) +} + +function sync (path, options) { + // my kingdom for a filtered catch + try { + return core.sync(path, options || {}) + } catch (er) { + if (options && options.ignoreErrors || er.code === 'EACCES') { + return false + } else { + throw er + } + } +} + + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = isexe +isexe.sync = sync + +var fs = __webpack_require__(5) + +function checkPathExt (path, options) { + var pathext = options.pathExt !== undefined ? + options.pathExt : process.env.PATHEXT + + if (!pathext) { + return true + } + + pathext = pathext.split(';') + if (pathext.indexOf('') !== -1) { + return true + } + for (var i = 0; i < pathext.length; i++) { + var p = pathext[i].toLowerCase() + if (p && path.substr(-p.length).toLowerCase() === p) { + return true + } + } + return false +} + +function checkStat (stat, path, options) { + if (!stat.isSymbolicLink() && !stat.isFile()) { + return false + } + return checkPathExt(path, options) +} + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, path, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), path, options) +} + + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = isexe +isexe.sync = sync + +var fs = __webpack_require__(5) + +function isexe (path, options, cb) { + fs.stat(path, function (er, stat) { + cb(er, er ? false : checkStat(stat, options)) + }) +} + +function sync (path, options) { + return checkStat(fs.statSync(path), options) +} + +function checkStat (stat, options) { + return stat.isFile() && checkMode(stat, options) +} + +function checkMode (stat, options) { + var mod = stat.mode + var uid = stat.uid + var gid = stat.gid + + var myUid = options.uid !== undefined ? + options.uid : process.getuid && process.getuid() + var myGid = options.gid !== undefined ? + options.gid : process.getgid && process.getgid() + + var u = parseInt('100', 8) + var g = parseInt('010', 8) + var o = parseInt('001', 8) + var ug = u | g + + var ret = (mod & o) || + (mod & g) && gid === myGid || + (mod & u) && uid === myUid || + (mod & ug) && myUid === 0 + + return ret +} + + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = opts => { + opts = opts || {}; + + const env = opts.env || process.env; + const platform = opts.platform || process.platform; + + if (platform !== 'win32') { + return 'PATH'; + } + + return Object.keys(env).find(x => x.toUpperCase() === 'PATH') || 'Path'; +}; + + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// See http://www.robvanderwoude.com/escapechars.php +const metaCharsRegExp = /([()\][%!^"`<>&|;, *?])/g; + +function escapeCommand(arg) { + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); + + return arg; +} + +function escapeArgument(arg, doubleEscapeMetaChars) { + // Convert to string + arg = `${arg}`; + + // Algorithm below is based on https://qntm.org/cmd + + // Sequence of backslashes followed by a double quote: + // double up all the backslashes and escape the double quote + arg = arg.replace(/(\\*)"/g, '$1$1\\"'); + + // Sequence of backslashes followed by the end of the string + // (which will become a double quote later): + // double up all the backslashes + arg = arg.replace(/(\\*)$/, '$1$1'); + + // All other backslashes occur literally + + // Quote the whole thing: + arg = `"${arg}"`; + + // Escape meta chars + arg = arg.replace(metaCharsRegExp, '^$1'); + + // Double escape meta chars if necessary + if (doubleEscapeMetaChars) { + arg = arg.replace(metaCharsRegExp, '^$1'); + } + + return arg; +} + +module.exports.command = escapeCommand; +module.exports.argument = escapeArgument; + + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const fs = __webpack_require__(5); +const shebangCommand = __webpack_require__(32); + +function readShebang(command) { + // Read the first 150 bytes from the file + const size = 150; + let buffer; + + if (Buffer.alloc) { + // Node.js v4.5+ / v5.10+ + buffer = Buffer.alloc(size); + } else { + // Old Node.js API + buffer = new Buffer(size); + buffer.fill(0); // zero-fill + } + + let fd; + + try { + fd = fs.openSync(command, 'r'); + fs.readSync(fd, buffer, 0, size, 0); + fs.closeSync(fd); + } catch (e) { /* Empty */ } + + // Attempt to extract shebang (null is returned if not a shebang) + return shebangCommand(buffer.toString()); +} + +module.exports = readShebang; + + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var shebangRegex = __webpack_require__(33); + +module.exports = function (str) { + var match = str.match(shebangRegex); + + if (!match) { + return null; + } + + var arr = match[0].replace(/#! ?/, '').split(' '); + var bin = arr[0].split('/').pop(); + var arg = arr[1]; + + return (bin === 'env' ? + arg : + bin + (arg ? ' ' + arg : '') + ); +}; + + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = /^#!.*/; + + +/***/ }), +/* 34 */ +/***/ (function(module, exports) { + +exports = module.exports = SemVer; + +// The debug function is excluded entirely from the minified version. +/* nomin */ var debug; +/* nomin */ if (typeof process === 'object' && + /* nomin */ process.env && + /* nomin */ process.env.NODE_DEBUG && + /* nomin */ /\bsemver\b/i.test(process.env.NODE_DEBUG)) + /* nomin */ debug = function() { + /* nomin */ var args = Array.prototype.slice.call(arguments, 0); + /* nomin */ args.unshift('SEMVER'); + /* nomin */ console.log.apply(console, args); + /* nomin */ }; +/* nomin */ else + /* nomin */ debug = function() {}; + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0'; + +var MAX_LENGTH = 256; +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991; + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16; + +// The actual regexps go on exports.re +var re = exports.re = []; +var src = exports.src = []; +var R = 0; + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++; +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'; +var NUMERICIDENTIFIERLOOSE = R++; +src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'; + + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++; +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'; + + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++; +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')'; + +var MAINVERSIONLOOSE = R++; +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')'; + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++; +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + +var PRERELEASEIDENTIFIERLOOSE = R++; +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')'; + + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++; +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'; + +var PRERELEASELOOSE = R++; +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'; + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++; +src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'; + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++; +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'; + + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++; +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?'; + +src[FULL] = '^' + FULLPLAIN + '$'; + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?'; + +var LOOSE = R++; +src[LOOSE] = '^' + LOOSEPLAIN + '$'; + +var GTLT = R++; +src[GTLT] = '((?:<|>)?=?)'; + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++; +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'; +var XRANGEIDENTIFIER = R++; +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'; + +var XRANGEPLAIN = R++; +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGEPLAINLOOSE = R++; +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?'; + +var XRANGE = R++; +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'; +var XRANGELOOSE = R++; +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'; + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +var COERCE = R++; +src[COERCE] = '(?:^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])'; + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++; +src[LONETILDE] = '(?:~>?)'; + +var TILDETRIM = R++; +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'; +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g'); +var tildeTrimReplace = '$1~'; + +var TILDE = R++; +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'; +var TILDELOOSE = R++; +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'; + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++; +src[LONECARET] = '(?:\\^)'; + +var CARETTRIM = R++; +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'; +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g'); +var caretTrimReplace = '$1^'; + +var CARET = R++; +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'; +var CARETLOOSE = R++; +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'; + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++; +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'; +var COMPARATOR = R++; +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'; + + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++; +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'; + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g'); +var comparatorTrimReplace = '$1$2$3'; + + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++; +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$'; + +var HYPHENRANGELOOSE = R++; +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$'; + +// Star ranges basically just allow anything at all. +var STAR = R++; +src[STAR] = '(<|>)?=?\\s*\\*'; + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]); + if (!re[i]) + re[i] = new RegExp(src[i]); +} + +exports.parse = parse; +function parse(version, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + + if (version instanceof SemVer) + return version; + + if (typeof version !== 'string') + return null; + + if (version.length > MAX_LENGTH) + return null; + + var r = options.loose ? re[LOOSE] : re[FULL]; + if (!r.test(version)) + return null; + + try { + return new SemVer(version, options); + } catch (er) { + return null; + } +} + +exports.valid = valid; +function valid(version, options) { + var v = parse(version, options); + return v ? v.version : null; +} + + +exports.clean = clean; +function clean(version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options); + return s ? s.version : null; +} + +exports.SemVer = SemVer; + +function SemVer(version, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + if (version instanceof SemVer) { + if (version.loose === options.loose) + return version; + else + version = version.version; + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version); + } + + if (version.length > MAX_LENGTH) + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + + if (!(this instanceof SemVer)) + return new SemVer(version, options); + + debug('SemVer', version, options); + this.options = options; + this.loose = !!options.loose; + + var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]); + + if (!m) + throw new TypeError('Invalid Version: ' + version); + + this.raw = version; + + // these are actually numbers + this.major = +m[1]; + this.minor = +m[2]; + this.patch = +m[3]; + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) + throw new TypeError('Invalid major version') + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) + throw new TypeError('Invalid minor version') + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) + throw new TypeError('Invalid patch version') + + // numberify any prerelease numeric ids + if (!m[4]) + this.prerelease = []; + else + this.prerelease = m[4].split('.').map(function(id) { + if (/^[0-9]+$/.test(id)) { + var num = +id; + if (num >= 0 && num < MAX_SAFE_INTEGER) + return num; + } + return id; + }); + + this.build = m[5] ? m[5].split('.') : []; + this.format(); +} + +SemVer.prototype.format = function() { + this.version = this.major + '.' + this.minor + '.' + this.patch; + if (this.prerelease.length) + this.version += '-' + this.prerelease.join('.'); + return this.version; +}; + +SemVer.prototype.toString = function() { + return this.version; +}; + +SemVer.prototype.compare = function(other) { + debug('SemVer.compare', this.version, this.options, other); + if (!(other instanceof SemVer)) + other = new SemVer(other, this.options); + + return this.compareMain(other) || this.comparePre(other); +}; + +SemVer.prototype.compareMain = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.options); + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch); +}; + +SemVer.prototype.comparePre = function(other) { + if (!(other instanceof SemVer)) + other = new SemVer(other, this.options); + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) + return -1; + else if (!this.prerelease.length && other.prerelease.length) + return 1; + else if (!this.prerelease.length && !other.prerelease.length) + return 0; + + var i = 0; + do { + var a = this.prerelease[i]; + var b = other.prerelease[i]; + debug('prerelease compare', i, a, b); + if (a === undefined && b === undefined) + return 0; + else if (b === undefined) + return 1; + else if (a === undefined) + return -1; + else if (a === b) + continue; + else + return compareIdentifiers(a, b); + } while (++i); +}; + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function(release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0; + this.patch = 0; + this.minor = 0; + this.major++; + this.inc('pre', identifier); + break; + case 'preminor': + this.prerelease.length = 0; + this.patch = 0; + this.minor++; + this.inc('pre', identifier); + break; + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0; + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) + this.inc('patch', identifier); + this.inc('pre', identifier); + break; + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) + this.major++; + this.minor = 0; + this.patch = 0; + this.prerelease = []; + break; + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) + this.minor++; + this.patch = 0; + this.prerelease = []; + break; + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) + this.patch++; + this.prerelease = []; + break; + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) + this.prerelease = [0]; + else { + var i = this.prerelease.length; + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++; + i = -2; + } + } + if (i === -1) // didn't increment anything + this.prerelease.push(0); + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) + this.prerelease = [identifier, 0]; + } else + this.prerelease = [identifier, 0]; + } + break; + + default: + throw new Error('invalid increment argument: ' + release); + } + this.format(); + this.raw = this.version; + return this; +}; + +exports.inc = inc; +function inc(version, release, loose, identifier) { + if (typeof(loose) === 'string') { + identifier = loose; + loose = undefined; + } + + try { + return new SemVer(version, loose).inc(release, identifier).version; + } catch (er) { + return null; + } +} + +exports.diff = diff; +function diff(version1, version2) { + if (eq(version1, version2)) { + return null; + } else { + var v1 = parse(version1); + var v2 = parse(version2); + if (v1.prerelease.length || v2.prerelease.length) { + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return 'pre'+key; + } + } + } + return 'prerelease'; + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return key; + } + } + } + } +} + +exports.compareIdentifiers = compareIdentifiers; + +var numeric = /^[0-9]+$/; +function compareIdentifiers(a, b) { + var anum = numeric.test(a); + var bnum = numeric.test(b); + + if (anum && bnum) { + a = +a; + b = +b; + } + + return (anum && !bnum) ? -1 : + (bnum && !anum) ? 1 : + a < b ? -1 : + a > b ? 1 : + 0; +} + +exports.rcompareIdentifiers = rcompareIdentifiers; +function rcompareIdentifiers(a, b) { + return compareIdentifiers(b, a); +} + +exports.major = major; +function major(a, loose) { + return new SemVer(a, loose).major; +} + +exports.minor = minor; +function minor(a, loose) { + return new SemVer(a, loose).minor; +} + +exports.patch = patch; +function patch(a, loose) { + return new SemVer(a, loose).patch; +} + +exports.compare = compare; +function compare(a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)); +} + +exports.compareLoose = compareLoose; +function compareLoose(a, b) { + return compare(a, b, true); +} + +exports.rcompare = rcompare; +function rcompare(a, b, loose) { + return compare(b, a, loose); +} + +exports.sort = sort; +function sort(list, loose) { + return list.sort(function(a, b) { + return exports.compare(a, b, loose); + }); +} + +exports.rsort = rsort; +function rsort(list, loose) { + return list.sort(function(a, b) { + return exports.rcompare(a, b, loose); + }); +} + +exports.gt = gt; +function gt(a, b, loose) { + return compare(a, b, loose) > 0; +} + +exports.lt = lt; +function lt(a, b, loose) { + return compare(a, b, loose) < 0; +} + +exports.eq = eq; +function eq(a, b, loose) { + return compare(a, b, loose) === 0; +} + +exports.neq = neq; +function neq(a, b, loose) { + return compare(a, b, loose) !== 0; +} + +exports.gte = gte; +function gte(a, b, loose) { + return compare(a, b, loose) >= 0; +} + +exports.lte = lte; +function lte(a, b, loose) { + return compare(a, b, loose) <= 0; +} + +exports.cmp = cmp; +function cmp(a, op, b, loose) { + var ret; + switch (op) { + case '===': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a === b; + break; + case '!==': + if (typeof a === 'object') a = a.version; + if (typeof b === 'object') b = b.version; + ret = a !== b; + break; + case '': case '=': case '==': ret = eq(a, b, loose); break; + case '!=': ret = neq(a, b, loose); break; + case '>': ret = gt(a, b, loose); break; + case '>=': ret = gte(a, b, loose); break; + case '<': ret = lt(a, b, loose); break; + case '<=': ret = lte(a, b, loose); break; + default: throw new TypeError('Invalid operator: ' + op); + } + return ret; +} + +exports.Comparator = Comparator; +function Comparator(comp, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) + return comp; + else + comp = comp.value; + } + + if (!(this instanceof Comparator)) + return new Comparator(comp, options); + + debug('comparator', comp, options); + this.options = options; + this.loose = !!options.loose; + this.parse(comp); + + if (this.semver === ANY) + this.value = ''; + else + this.value = this.operator + this.semver.version; + + debug('comp', this); +} + +var ANY = {}; +Comparator.prototype.parse = function(comp) { + var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var m = comp.match(r); + + if (!m) + throw new TypeError('Invalid comparator: ' + comp); + + this.operator = m[1]; + if (this.operator === '=') + this.operator = ''; + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) + this.semver = ANY; + else + this.semver = new SemVer(m[2], this.options.loose); +}; + +Comparator.prototype.toString = function() { + return this.value; +}; + +Comparator.prototype.test = function(version) { + debug('Comparator.test', version, this.options.loose); + + if (this.semver === ANY) + return true; + + if (typeof version === 'string') + version = new SemVer(version, this.options); + + return cmp(version, this.operator, this.semver, this.options); +}; + +Comparator.prototype.intersects = function(comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required'); + } + + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + + var rangeTmp; + + if (this.operator === '') { + rangeTmp = new Range(comp.value, options); + return satisfies(this.value, rangeTmp, options); + } else if (comp.operator === '') { + rangeTmp = new Range(this.value, options); + return satisfies(comp.semver, rangeTmp, options); + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>'); + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<'); + var sameSemVer = this.semver.version === comp.semver.version; + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<='); + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')); + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')); + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan; +}; + + +exports.Range = Range; +function Range(range, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range; + } else { + return new Range(range.raw, options); + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options); + } + + if (!(this instanceof Range)) + return new Range(range, options); + + this.options = options; + this.loose = !!options.loose; + this.includePrerelease = !!options.includePrerelease + + // First, split based on boolean or || + this.raw = range; + this.set = range.split(/\s*\|\|\s*/).map(function(range) { + return this.parseRange(range.trim()); + }, this).filter(function(c) { + // throw out any that are not relevant for whatever reason + return c.length; + }); + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + range); + } + + this.format(); +} + +Range.prototype.format = function() { + this.range = this.set.map(function(comps) { + return comps.join(' ').trim(); + }).join('||').trim(); + return this.range; +}; + +Range.prototype.toString = function() { + return this.range; +}; + +Range.prototype.parseRange = function(range) { + var loose = this.options.loose; + range = range.trim(); + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]; + range = range.replace(hr, hyphenReplace); + debug('hyphen replace', range); + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace); + debug('comparator trim', range, re[COMPARATORTRIM]); + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(re[TILDETRIM], tildeTrimReplace); + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(re[CARETTRIM], caretTrimReplace); + + // normalize spaces + range = range.split(/\s+/).join(' '); + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + + var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]; + var set = range.split(' ').map(function(comp) { + return parseComparator(comp, this.options); + }, this).join(' ').split(/\s+/); + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function(comp) { + return !!comp.match(compRe); + }); + } + set = set.map(function(comp) { + return new Comparator(comp, this.options); + }, this); + + return set; +}; + +Range.prototype.intersects = function(range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required'); + } + + return this.set.some(function(thisComparators) { + return thisComparators.every(function(thisComparator) { + return range.set.some(function(rangeComparators) { + return rangeComparators.every(function(rangeComparator) { + return thisComparator.intersects(rangeComparator, options); + }); + }); + }); + }); +}; + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators; +function toComparators(range, options) { + return new Range(range, options).set.map(function(comp) { + return comp.map(function(c) { + return c.value; + }).join(' ').trim().split(' '); + }); +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator(comp, options) { + debug('comp', comp, options); + comp = replaceCarets(comp, options); + debug('caret', comp); + comp = replaceTildes(comp, options); + debug('tildes', comp); + comp = replaceXRanges(comp, options); + debug('xrange', comp); + comp = replaceStars(comp, options); + debug('stars', comp); + return comp; +} + +function isX(id) { + return !id || id.toLowerCase() === 'x' || id === '*'; +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes(comp, options) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceTilde(comp, options); + }).join(' '); +} + +function replaceTilde(comp, options) { + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + var r = options.loose ? re[TILDELOOSE] : re[TILDE]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else if (pr) { + debug('replaceTilde pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + + debug('tilde return', ret); + return ret; + }); +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets(comp, options) { + return comp.trim().split(/\s+/).map(function(comp) { + return replaceCaret(comp, options); + }).join(' '); +} + +function replaceCaret(comp, options) { + debug('caret', comp, options); + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + var r = options.loose ? re[CARETLOOSE] : re[CARET]; + return comp.replace(r, function(_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr); + var ret; + + if (isX(M)) + ret = ''; + else if (isX(m)) + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + else if (isX(p)) { + if (M === '0') + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + else + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'; + } else if (pr) { + debug('replaceCaret pr', pr); + if (pr.charAt(0) !== '-') + pr = '-' + pr; + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + pr + + ' <' + (+M + 1) + '.0.0'; + } else { + debug('no pr'); + if (M === '0') { + if (m === '0') + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1); + else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0'; + } else + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0'; + } + + debug('caret return', ret); + return ret; + }); +} + +function replaceXRanges(comp, options) { + debug('replaceXRanges', comp, options); + return comp.split(/\s+/).map(function(comp) { + return replaceXRange(comp, options); + }).join(' '); +} + +function replaceXRange(comp, options) { + comp = comp.trim(); + if (!options || typeof options !== 'object') + options = { loose: !!options, includePrerelease: false } + var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]; + return comp.replace(r, function(ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr); + var xM = isX(M); + var xm = xM || isX(m); + var xp = xm || isX(p); + var anyX = xp; + + if (gtlt === '=' && anyX) + gtlt = ''; + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0'; + } else { + // nothing is forbidden + ret = '*'; + } + } else if (gtlt && anyX) { + // replace X with 0 + if (xm) + m = 0; + if (xp) + p = 0; + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>='; + if (xm) { + M = +M + 1; + m = 0; + p = 0; + } else if (xp) { + m = +m + 1; + p = 0; + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<'; + if (xm) + M = +M + 1; + else + m = +m + 1; + } + + ret = gtlt + M + '.' + m + '.' + p; + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'; + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'; + } + + debug('xRange return', ret); + + return ret; + }); +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars(comp, options) { + debug('replaceStars', comp, options); + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(re[STAR], ''); +} + +// This function is passed to string.replace(re[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + + if (isX(fM)) + from = ''; + else if (isX(fm)) + from = '>=' + fM + '.0.0'; + else if (isX(fp)) + from = '>=' + fM + '.' + fm + '.0'; + else + from = '>=' + from; + + if (isX(tM)) + to = ''; + else if (isX(tm)) + to = '<' + (+tM + 1) + '.0.0'; + else if (isX(tp)) + to = '<' + tM + '.' + (+tm + 1) + '.0'; + else if (tpr) + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr; + else + to = '<=' + to; + + return (from + ' ' + to).trim(); +} + + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function(version) { + if (!version) + return false; + + if (typeof version === 'string') + version = new SemVer(version, this.options); + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) + return true; + } + return false; +}; + +function testSet(set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) + return false; + } + + if (!options) + options = {} + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (var i = 0; i < set.length; i++) { + debug(set[i].semver); + if (set[i].semver === ANY) + continue; + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver; + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) + return true; + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false; + } + + return true; +} + +exports.satisfies = satisfies; +function satisfies(version, range, options) { + try { + range = new Range(range, options); + } catch (er) { + return false; + } + return range.test(version); +} + +exports.maxSatisfying = maxSatisfying; +function maxSatisfying(versions, range, options) { + var max = null; + var maxSV = null; + try { + var rangeObj = new Range(range, options); + } catch (er) { + return null; + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { // compare(max, v, true) + max = v; + maxSV = new SemVer(max, options); + } + } + }) + return max; +} + +exports.minSatisfying = minSatisfying; +function minSatisfying(versions, range, options) { + var min = null; + var minSV = null; + try { + var rangeObj = new Range(range, options); + } catch (er) { + return null; + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { // compare(min, v, true) + min = v; + minSV = new SemVer(min, options); + } + } + }) + return min; +} + +exports.validRange = validRange; +function validRange(range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*'; + } catch (er) { + return null; + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr; +function ltr(version, range, options) { + return outside(version, range, '<', options); +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr; +function gtr(version, range, options) { + return outside(version, range, '>', options); +} + +exports.outside = outside; +function outside(version, range, hilo, options) { + version = new SemVer(version, options); + range = new Range(range, options); + + var gtfn, ltefn, ltfn, comp, ecomp; + switch (hilo) { + case '>': + gtfn = gt; + ltefn = lte; + ltfn = lt; + comp = '>'; + ecomp = '>='; + break; + case '<': + gtfn = lt; + ltefn = gte; + ltfn = gt; + comp = '<'; + ecomp = '<='; + break; + default: + throw new TypeError('Must provide a hilo val of "<" or ">"'); + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false; + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i]; + + var high = null; + var low = null; + + comparators.forEach(function(comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator; + low = low || comparator; + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator; + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator; + } + }); + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false; + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false; + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false; + } + } + return true; +} + +exports.prerelease = prerelease; +function prerelease(version, options) { + var parsed = parse(version, options); + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null; +} + +exports.intersects = intersects; +function intersects(r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce; +function coerce(version) { + if (version instanceof SemVer) + return version; + + if (typeof version !== 'string') + return null; + + var match = version.match(re[COERCE]); + + if (match == null) + return null; + + return parse((match[1] || '0') + '.' + (match[2] || '0') + '.' + (match[3] || '0')); +} + + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const isWin = process.platform === 'win32'; + +function notFoundError(original, syscall) { + return Object.assign(new Error(`${syscall} ${original.command} ENOENT`), { + code: 'ENOENT', + errno: 'ENOENT', + syscall: `${syscall} ${original.command}`, + path: original.command, + spawnargs: original.args, + }); +} + +function hookChildProcess(cp, parsed) { + if (!isWin) { + return; + } + + const originalEmit = cp.emit; + + cp.emit = function (name, arg1) { + // If emitting "exit" event and exit code is 1, we need to check if + // the command exists and emit an "error" instead + // See https://github.com/IndigoUnited/node-cross-spawn/issues/16 + if (name === 'exit') { + const err = verifyENOENT(arg1, parsed, 'spawn'); + + if (err) { + return originalEmit.call(cp, 'error', err); + } + } + + return originalEmit.apply(cp, arguments); // eslint-disable-line prefer-rest-params + }; +} + +function verifyENOENT(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawn'); + } + + return null; +} + +function verifyENOENTSync(status, parsed) { + if (isWin && status === 1 && !parsed.file) { + return notFoundError(parsed.original, 'spawnSync'); + } + + return null; +} + +module.exports = { + hookChildProcess, + verifyENOENT, + verifyENOENTSync, + notFoundError, +}; + + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const agentkeepalive_1 = __importStar(__webpack_require__(37)); +const got_1 = __importDefault(__webpack_require__(48)); +const tunnel_1 = __importDefault(__webpack_require__(95)); +const url_1 = __webpack_require__(52); +const cache = new Map(); +const globalHttpAgent = new agentkeepalive_1.default(); +const globalHttpsAgent = new agentkeepalive_1.HttpsAgent(); +function parseProxy(specifier) { + const url = new url_1.URL(specifier); + const proxy = { host: url.hostname, headers: {} }; + if (url.port) + proxy.port = Number(url.port); + return { proxy }; +} +async function getNoCache(target, configuration) { + if (!configuration.get(`enableNetwork`)) + throw new Error(`Network access have been disabled by configuration (when querying ${target})`); + const url = new url_1.URL(target); + let agent; + const httpProxy = configuration.get(`httpProxy`); + const httpsProxy = configuration.get(`httpsProxy`); + if (url.protocol === `http:`) + agent = httpProxy + ? tunnel_1.default.httpOverHttp(parseProxy(httpProxy)) + : globalHttpAgent; + if (url.protocol === `https:`) + agent = httpsProxy + ? tunnel_1.default.httpsOverHttp(parseProxy(httpsProxy)) + : globalHttpsAgent; + const res = await got_1.default(target, { agent, encoding: null }); + if (res.statusCode !== 200) + throw new Error(`The remote server answered with an HTTP ${res.statusCode} (when querying ${target})`); + return await res.body; +} +function get(target, configuration) { + let entry = cache.get(target); + if (!entry) { + entry = getNoCache(target, configuration); + cache.set(target, entry); + } + return entry; +} +exports.get = get; + + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = __webpack_require__(38); +module.exports.HttpsAgent = __webpack_require__(46); +module.exports.constants = __webpack_require__(45); + + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const OriginalAgent = __webpack_require__(39).Agent; +const ms = __webpack_require__(40); +const debug = __webpack_require__(42)('agentkeepalive'); +const deprecate = __webpack_require__(44)('agentkeepalive'); +const { + INIT_SOCKET, + CURRENT_ID, + CREATE_ID, + SOCKET_CREATED_TIME, + SOCKET_NAME, + SOCKET_REQUEST_COUNT, + SOCKET_REQUEST_FINISHED_COUNT, +} = __webpack_require__(45); + +// OriginalAgent come from +// - https://github.com/nodejs/node/blob/v8.12.0/lib/_http_agent.js +// - https://github.com/nodejs/node/blob/v10.12.0/lib/_http_agent.js + +class Agent extends OriginalAgent { + constructor(options) { + options = options || {}; + options.keepAlive = options.keepAlive !== false; + // default is keep-alive and 15s free socket timeout + if (options.freeSocketTimeout === undefined) { + options.freeSocketTimeout = 15000; + } + // Legacy API: keepAliveTimeout should be rename to `freeSocketTimeout` + if (options.keepAliveTimeout) { + deprecate('options.keepAliveTimeout is deprecated, please use options.freeSocketTimeout instead'); + options.freeSocketTimeout = options.keepAliveTimeout; + delete options.keepAliveTimeout; + } + // Legacy API: freeSocketKeepAliveTimeout should be rename to `freeSocketTimeout` + if (options.freeSocketKeepAliveTimeout) { + deprecate('options.freeSocketKeepAliveTimeout is deprecated, please use options.freeSocketTimeout instead'); + options.freeSocketTimeout = options.freeSocketKeepAliveTimeout; + delete options.freeSocketKeepAliveTimeout; + } + + // Sets the socket to timeout after timeout milliseconds of inactivity on the socket. + // By default is double free socket timeout. + if (options.timeout === undefined) { + // make sure socket default inactivity timeout >= 30s + options.timeout = Math.max(options.freeSocketTimeout * 2, 30000); + } + + // support humanize format + options.timeout = ms(options.timeout); + options.freeSocketTimeout = ms(options.freeSocketTimeout); + options.socketActiveTTL = options.socketActiveTTL ? ms(options.socketActiveTTL) : 0; + + super(options); + + this[CURRENT_ID] = 0; + + // create socket success counter + this.createSocketCount = 0; + this.createSocketCountLastCheck = 0; + + this.createSocketErrorCount = 0; + this.createSocketErrorCountLastCheck = 0; + + this.closeSocketCount = 0; + this.closeSocketCountLastCheck = 0; + + // socket error event count + this.errorSocketCount = 0; + this.errorSocketCountLastCheck = 0; + + // request finished counter + this.requestCount = 0; + this.requestCountLastCheck = 0; + + // including free socket timeout counter + this.timeoutSocketCount = 0; + this.timeoutSocketCountLastCheck = 0; + } + + get freeSocketKeepAliveTimeout() { + deprecate('agent.freeSocketKeepAliveTimeout is deprecated, please use agent.options.freeSocketTimeout instead'); + return this.options.freeSocketTimeout; + } + + get timeout() { + deprecate('agent.timeout is deprecated, please use agent.options.timeout instead'); + return this.options.timeout; + } + + get socketActiveTTL() { + deprecate('agent.socketActiveTTL is deprecated, please use agent.options.socketActiveTTL instead'); + return this.options.socketActiveTTL; + } + + keepSocketAlive(socket) { + const result = super.keepSocketAlive(socket); + // should not keepAlive, do nothing + if (!result) return result; + + let freeSocketTimeout = this.options.freeSocketTimeout; + const socketActiveTTL = this.options.socketActiveTTL; + if (socketActiveTTL) { + // check socketActiveTTL + const aliveTime = Date.now() - socket[SOCKET_CREATED_TIME]; + const diff = socketActiveTTL - aliveTime; + // destroy it + if (diff <= 0) { + debug('%s(requests: %s, finished: %s) free but need to destroy by TTL, alive %sms(max %sms)', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT], + aliveTime, socketActiveTTL); + return false; + } + + if (freeSocketTimeout && diff < freeSocketTimeout) { + debug('%s(requests: %s, finished: %s) free and wait for %sms TTL timeout', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT], + diff); + freeSocketTimeout = diff; + } + } + // set freeSocketTimeout + if (freeSocketTimeout) { + // set free keepalive timer + // try to use socket custom freeSocketTimeout first, support headers['keep-alive'] + // https://github.com/node-modules/urllib/blob/b76053020923f4d99a1c93cf2e16e0c5ba10bacf/lib/urllib.js#L498 + const customFreeSocketTimeout = socket.freeSocketTimeout || socket.freeSocketKeepAliveTimeout; + if (customFreeSocketTimeout && customFreeSocketTimeout < freeSocketTimeout) { + freeSocketTimeout = customFreeSocketTimeout; + } + // FIXME: need to make setRequestSocket as a method on Agent class + // then we can reset the agent.options.timeout when free socket is reused. + socket.setTimeout(freeSocketTimeout); + } + return true; + } + + // only call on addRequest + reuseSocket(...args) { + // reuseSocket(socket, req) + super.reuseSocket(...args); + const socket = args[0]; + const agentTimeout = this.options.timeout; + if (getSocketTimeout(socket) !== agentTimeout) { + // reset timeout before use + socket.setTimeout(agentTimeout); + debug('%s reset timeout to %sms', socket[SOCKET_NAME], agentTimeout); + } + socket[SOCKET_REQUEST_COUNT]++; + debug('%s(requests: %s, finished: %s) reuse on addRequest, timeout %sms', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT], + getSocketTimeout(socket)); + } + + [CREATE_ID]() { + const id = this[CURRENT_ID]++; + if (this[CURRENT_ID] === Number.MAX_SAFE_INTEGER) this[CURRENT_ID] = 0; + return id; + } + + [INIT_SOCKET](socket, options) { + // bugfix here. + // https on node 8, 10 won't set agent.options.timeout by default + // TODO: need to fix on node itself + if (options.timeout) { + const timeout = getSocketTimeout(socket); + if (!timeout) { + socket.setTimeout(options.timeout); + } + } + + if (this.options.keepAlive) { + // Disable Nagle's algorithm: http://blog.caustik.com/2012/04/08/scaling-node-js-to-100k-concurrent-connections/ + // https://fengmk2.com/benchmark/nagle-algorithm-delayed-ack-mock.html + socket.setNoDelay(true); + } + this.createSocketCount++; + if (this.options.socketActiveTTL) { + socket[SOCKET_CREATED_TIME] = Date.now(); + } + // don't show the hole '-----BEGIN CERTIFICATE----' key string + socket[SOCKET_NAME] = `sock[${this[CREATE_ID]()}#${options._agentKey}]`.split('-----BEGIN', 1)[0]; + socket[SOCKET_REQUEST_COUNT] = 1; + socket[SOCKET_REQUEST_FINISHED_COUNT] = 0; + installListeners(this, socket, options); + } + + createConnection(options, oncreate) { + let called = false; + const onNewCreate = (err, socket) => { + if (called) return; + called = true; + + if (err) { + this.createSocketErrorCount++; + return oncreate(err); + } + this[INIT_SOCKET](socket, options); + oncreate(err, socket); + }; + + const newSocket = super.createConnection(options, onNewCreate); + if (newSocket) onNewCreate(null, newSocket); + } + + get statusChanged() { + const changed = this.createSocketCount !== this.createSocketCountLastCheck || + this.createSocketErrorCount !== this.createSocketErrorCountLastCheck || + this.closeSocketCount !== this.closeSocketCountLastCheck || + this.errorSocketCount !== this.errorSocketCountLastCheck || + this.timeoutSocketCount !== this.timeoutSocketCountLastCheck || + this.requestCount !== this.requestCountLastCheck; + if (changed) { + this.createSocketCountLastCheck = this.createSocketCount; + this.createSocketErrorCountLastCheck = this.createSocketErrorCount; + this.closeSocketCountLastCheck = this.closeSocketCount; + this.errorSocketCountLastCheck = this.errorSocketCount; + this.timeoutSocketCountLastCheck = this.timeoutSocketCount; + this.requestCountLastCheck = this.requestCount; + } + return changed; + } + + getCurrentStatus() { + return { + createSocketCount: this.createSocketCount, + createSocketErrorCount: this.createSocketErrorCount, + closeSocketCount: this.closeSocketCount, + errorSocketCount: this.errorSocketCount, + timeoutSocketCount: this.timeoutSocketCount, + requestCount: this.requestCount, + freeSockets: inspect(this.freeSockets), + sockets: inspect(this.sockets), + requests: inspect(this.requests), + }; + } +} + +// node 8 don't has timeout attribute on socket +// https://github.com/nodejs/node/pull/21204/files#diff-e6ef024c3775d787c38487a6309e491dR408 +function getSocketTimeout(socket) { + return socket.timeout || socket._idleTimeout; +} + +function installListeners(agent, socket, options) { + debug('%s create, timeout %sms', socket[SOCKET_NAME], getSocketTimeout(socket)); + + // listener socket events: close, timeout, error, free + function onFree() { + // create and socket.emit('free') logic + // https://github.com/nodejs/node/blob/master/lib/_http_agent.js#L311 + // no req on the socket, it should be the new socket + if (!socket._httpMessage && socket[SOCKET_REQUEST_COUNT] === 1) return; + + socket[SOCKET_REQUEST_FINISHED_COUNT]++; + agent.requestCount++; + debug('%s(requests: %s, finished: %s) free', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT]); + + // should reuse on pedding requests? + const name = agent.getName(options); + if (socket.writable && agent.requests[name] && agent.requests[name].length) { + // will be reuse on agent free listener + socket[SOCKET_REQUEST_COUNT]++; + debug('%s(requests: %s, finished: %s) will be reuse on agent free event', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT]); + } + } + socket.on('free', onFree); + + function onClose(isError) { + debug('%s(requests: %s, finished: %s) close, isError: %s', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT], isError); + agent.closeSocketCount++; + } + socket.on('close', onClose); + + // start socket timeout handler + function onTimeout() { + const listenerCount = socket.listeners('timeout').length; + debug('%s(requests: %s, finished: %s) timeout after %sms, listeners %s', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT], + getSocketTimeout(socket), listenerCount); + agent.timeoutSocketCount++; + const name = agent.getName(options); + if (agent.freeSockets[name] && agent.freeSockets[name].indexOf(socket) !== -1) { + // free socket timeout, destroy quietly + socket.destroy(); + // Remove it from freeSockets list immediately to prevent new requests + // from being sent through this socket. + agent.removeSocket(socket, options); + debug('%s is free, destroy quietly', socket[SOCKET_NAME]); + } else { + // if there is no any request socket timeout handler, + // agent need to handle socket timeout itself. + // + // custom request socket timeout handle logic must follow these rules: + // 1. Destroy socket first + // 2. Must emit socket 'agentRemove' event tell agent remove socket + // from freeSockets list immediately. + // Otherise you may be get 'socket hang up' error when reuse + // free socket and timeout happen in the same time. + if (listenerCount === 1) { + const error = new Error('Socket timeout'); + error.code = 'ERR_SOCKET_TIMEOUT'; + error.timeout = getSocketTimeout(socket); + // must manually call socket.end() or socket.destroy() to end the connection. + // https://nodejs.org/dist/latest-v10.x/docs/api/net.html#net_socket_settimeout_timeout_callback + socket.destroy(error); + agent.removeSocket(socket, options); + debug('%s destroy with timeout error', socket[SOCKET_NAME]); + } + } + } + socket.on('timeout', onTimeout); + + function onError(err) { + const listenerCount = socket.listeners('error').length; + debug('%s(requests: %s, finished: %s) error: %s, listenerCount: %s', + socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT], + err, listenerCount); + agent.errorSocketCount++; + if (listenerCount === 1) { + // if socket don't contain error event handler, don't catch it, emit it again + debug('%s emit uncaught error event', socket[SOCKET_NAME]); + socket.removeListener('error', onError); + socket.emit('error', err); + } + } + socket.on('error', onError); + + function onRemove() { + debug('%s(requests: %s, finished: %s) agentRemove', + socket[SOCKET_NAME], + socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT]); + // We need this function for cases like HTTP 'upgrade' + // (defined by WebSockets) where we need to remove a socket from the + // pool because it'll be locked up indefinitely + socket.removeListener('close', onClose); + socket.removeListener('error', onError); + socket.removeListener('free', onFree); + socket.removeListener('timeout', onTimeout); + socket.removeListener('agentRemove', onRemove); + } + socket.on('agentRemove', onRemove); +} + +module.exports = Agent; + +function inspect(obj) { + const res = {}; + for (const key in obj) { + res[key] = obj[key].length; + } + return res; +} + + +/***/ }), +/* 39 */ +/***/ (function(module, exports) { + +module.exports = require("http"); + +/***/ }), +/* 40 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * humanize-ms - index.js + * Copyright(c) 2014 dead_horse + * MIT Licensed + */ + + + +/** + * Module dependencies. + */ + +var util = __webpack_require__(18); +var ms = __webpack_require__(41); + +module.exports = function (t) { + if (typeof t === 'number') return t; + var r = ms(t); + if (r === undefined) { + var err = new Error(util.format('humanize-ms(%j) result undefined', t)); + console.warn(err.stack); + } + return r; +}; + + +/***/ }), +/* 41 */ +/***/ (function(module, exports) { + +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var w = d * 7; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\-?\d?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'weeks': + case 'week': + case 'w': + return n * w; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return Math.round(ms / d) + 'd'; + } + if (msAbs >= h) { + return Math.round(ms / h) + 'h'; + } + if (msAbs >= m) { + return Math.round(ms / m) + 'm'; + } + if (msAbs >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + var msAbs = Math.abs(ms); + if (msAbs >= d) { + return plural(ms, msAbs, d, 'day'); + } + if (msAbs >= h) { + return plural(ms, msAbs, h, 'hour'); + } + if (msAbs >= m) { + return plural(ms, msAbs, m, 'minute'); + } + if (msAbs >= s) { + return plural(ms, msAbs, s, 'second'); + } + return ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, msAbs, n, name) { + var isPlural = msAbs >= n * 1.5; + return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); +} + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-env browser */ + +/** + * This is the web browser implementation of `debug()`. + */ + +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + '#0000CC', + '#0000FF', + '#0033CC', + '#0033FF', + '#0066CC', + '#0066FF', + '#0099CC', + '#0099FF', + '#00CC00', + '#00CC33', + '#00CC66', + '#00CC99', + '#00CCCC', + '#00CCFF', + '#3300CC', + '#3300FF', + '#3333CC', + '#3333FF', + '#3366CC', + '#3366FF', + '#3399CC', + '#3399FF', + '#33CC00', + '#33CC33', + '#33CC66', + '#33CC99', + '#33CCCC', + '#33CCFF', + '#6600CC', + '#6600FF', + '#6633CC', + '#6633FF', + '#66CC00', + '#66CC33', + '#9900CC', + '#9900FF', + '#9933CC', + '#9933FF', + '#99CC00', + '#99CC33', + '#CC0000', + '#CC0033', + '#CC0066', + '#CC0099', + '#CC00CC', + '#CC00FF', + '#CC3300', + '#CC3333', + '#CC3366', + '#CC3399', + '#CC33CC', + '#CC33FF', + '#CC6600', + '#CC6633', + '#CC9900', + '#CC9933', + '#CCCC00', + '#CCCC33', + '#FF0000', + '#FF0033', + '#FF0066', + '#FF0099', + '#FF00CC', + '#FF00FF', + '#FF3300', + '#FF3333', + '#FF3366', + '#FF3399', + '#FF33CC', + '#FF33FF', + '#FF6600', + '#FF6633', + '#FF9900', + '#FF9933', + '#FFCC00', + '#FFCC33' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +// eslint-disable-next-line complexity +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) { + return true; + } + + // Internet Explorer and Edge do not support colors. + if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { + return false; + } + + // Is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // Is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // Is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // Double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + args[0] = (this.useColors ? '%c' : '') + + this.namespace + + (this.useColors ? ' %c' : ' ') + + args[0] + + (this.useColors ? '%c ' : ' ') + + '+' + module.exports.humanize(this.diff); + + if (!this.useColors) { + return; + } + + const c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit'); + + // The final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + let index = 0; + let lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, match => { + if (match === '%%') { + return; + } + index++; + if (match === '%c') { + // We only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ +function log(...args) { + // This hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return typeof console === 'object' && + console.log && + console.log(...args); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ +function save(namespaces) { + try { + if (namespaces) { + exports.storage.setItem('debug', namespaces); + } else { + exports.storage.removeItem('debug'); + } + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ +function load() { + let r; + try { + r = exports.storage.getItem('debug'); + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context + // The Browser also has localStorage in the global context. + return localStorage; + } catch (error) { + // Swallow + // XXX (@Qix-) should we be logging these? + } +} + +module.exports = __webpack_require__(43)(exports); + +const {formatters} = module.exports; + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +formatters.j = function (v) { + try { + return JSON.stringify(v); + } catch (error) { + return '[UnexpectedJSONParseError]: ' + error.message; + } +}; + + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + */ + +function setup(env) { + createDebug.debug = createDebug; + createDebug.default = createDebug; + createDebug.coerce = coerce; + createDebug.disable = disable; + createDebug.enable = enable; + createDebug.enabled = enabled; + createDebug.humanize = __webpack_require__(41); + + Object.keys(env).forEach(key => { + createDebug[key] = env[key]; + }); + + /** + * Active `debug` instances. + */ + createDebug.instances = []; + + /** + * The currently active debug mode names, and names to skip. + */ + + createDebug.names = []; + createDebug.skips = []; + + /** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + createDebug.formatters = {}; + + /** + * Selects a color for a debug namespace + * @param {String} namespace The namespace string for the for the debug instance to be colored + * @return {Number|String} An ANSI color code for the given namespace + * @api private + */ + function selectColor(namespace) { + let hash = 0; + + for (let i = 0; i < namespace.length; i++) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; + } + createDebug.selectColor = selectColor; + + /** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + function createDebug(namespace) { + let prevTime; + + function debug(...args) { + // Disabled? + if (!debug.enabled) { + return; + } + + const self = debug; + + // Set `diff` timestamp + const curr = Number(new Date()); + const ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + args[0] = createDebug.coerce(args[0]); + + if (typeof args[0] !== 'string') { + // Anything else let's inspect with %O + args.unshift('%O'); + } + + // Apply any `formatters` transformations + let index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { + // If we encounter an escaped % then don't increase the array index + if (match === '%%') { + return match; + } + index++; + const formatter = createDebug.formatters[format]; + if (typeof formatter === 'function') { + const val = args[index]; + match = formatter.call(self, val); + + // Now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // Apply env-specific formatting (colors, etc.) + createDebug.formatArgs.call(self, args); + + const logFn = self.log || createDebug.log; + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = createDebug.enabled(namespace); + debug.useColors = createDebug.useColors(); + debug.color = selectColor(namespace); + debug.destroy = destroy; + debug.extend = extend; + // Debug.formatArgs = formatArgs; + // debug.rawLog = rawLog; + + // env-specific initialization logic for debug instances + if (typeof createDebug.init === 'function') { + createDebug.init(debug); + } + + createDebug.instances.push(debug); + + return debug; + } + + function destroy() { + const index = createDebug.instances.indexOf(this); + if (index !== -1) { + createDebug.instances.splice(index, 1); + return true; + } + return false; + } + + function extend(namespace, delimiter) { + const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace); + newDebug.log = this.log; + return newDebug; + } + + /** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + function enable(namespaces) { + createDebug.save(namespaces); + + createDebug.names = []; + createDebug.skips = []; + + let i; + const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + const len = split.length; + + for (i = 0; i < len; i++) { + if (!split[i]) { + // ignore empty strings + continue; + } + + namespaces = split[i].replace(/\*/g, '.*?'); + + if (namespaces[0] === '-') { + createDebug.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + createDebug.names.push(new RegExp('^' + namespaces + '$')); + } + } + + for (i = 0; i < createDebug.instances.length; i++) { + const instance = createDebug.instances[i]; + instance.enabled = createDebug.enabled(instance.namespace); + } + } + + /** + * Disable debug output. + * + * @return {String} namespaces + * @api public + */ + function disable() { + const namespaces = [ + ...createDebug.names.map(toNamespace), + ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace) + ].join(','); + createDebug.enable(''); + return namespaces; + } + + /** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + function enabled(name) { + if (name[name.length - 1] === '*') { + return true; + } + + let i; + let len; + + for (i = 0, len = createDebug.skips.length; i < len; i++) { + if (createDebug.skips[i].test(name)) { + return false; + } + } + + for (i = 0, len = createDebug.names.length; i < len; i++) { + if (createDebug.names[i].test(name)) { + return true; + } + } + + return false; + } + + /** + * Convert regexp to namespace + * + * @param {RegExp} regxep + * @return {String} namespace + * @api private + */ + function toNamespace(regexp) { + return regexp.toString() + .substring(2, regexp.toString().length - 2) + .replace(/\.\*\?$/, '*'); + } + + /** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + function coerce(val) { + if (val instanceof Error) { + return val.stack || val.message; + } + return val; + } + + createDebug.enable(createDebug.load()); + + return createDebug; +} + +module.exports = setup; + + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * depd + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + + + +/** + * Module exports. + * @public + */ + +module.exports = depd + +/** + * Create deprecate for namespace in caller. + */ + +function depd (namespace) { + if (!namespace) { + throw new TypeError('argument namespace is required') + } + + function deprecate (message) { + // no-op in browser + } + + deprecate._file = undefined + deprecate._ignored = true + deprecate._namespace = namespace + deprecate._traced = false + deprecate._warned = Object.create(null) + + deprecate.function = wrapfunction + deprecate.property = wrapproperty + + return deprecate +} + +/** + * Return a wrapped function in a deprecation message. + * + * This is a no-op version of the wrapper, which does nothing but call + * validation. + */ + +function wrapfunction (fn, message) { + if (typeof fn !== 'function') { + throw new TypeError('argument fn must be a function') + } + + return fn +} + +/** + * Wrap property in a deprecation message. + * + * This is a no-op version of the wrapper, which does nothing but call + * validation. + */ + +function wrapproperty (obj, prop, message) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + throw new TypeError('argument obj must be object') + } + + var descriptor = Object.getOwnPropertyDescriptor(obj, prop) + + if (!descriptor) { + throw new TypeError('must call property on owner object') + } + + if (!descriptor.configurable) { + throw new TypeError('property must be configurable') + } +} + + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + // agent + CURRENT_ID: Symbol('agentkeepalive#currentId'), + CREATE_ID: Symbol('agentkeepalive#createId'), + INIT_SOCKET: Symbol('agentkeepalive#initSocket'), + CREATE_HTTPS_CONNECTION: Symbol('agentkeepalive#createHttpsConnection'), + // socket + SOCKET_CREATED_TIME: Symbol('agentkeepalive#socketCreatedTime'), + SOCKET_NAME: Symbol('agentkeepalive#socketName'), + SOCKET_REQUEST_COUNT: Symbol('agentkeepalive#socketRequestCount'), + SOCKET_REQUEST_FINISHED_COUNT: Symbol('agentkeepalive#socketRequestFinishedCount'), +}; + + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const OriginalHttpsAgent = __webpack_require__(47).Agent; +const HttpAgent = __webpack_require__(38); +const { + INIT_SOCKET, + CREATE_HTTPS_CONNECTION, +} = __webpack_require__(45); + +class HttpsAgent extends HttpAgent { + constructor(options) { + super(options); + + this.defaultPort = 443; + this.protocol = 'https:'; + this.maxCachedSessions = this.options.maxCachedSessions; + /* istanbul ignore next */ + if (this.maxCachedSessions === undefined) { + this.maxCachedSessions = 100; + } + + this._sessionCache = { + map: {}, + list: [], + }; + } + + createConnection(options) { + const socket = this[CREATE_HTTPS_CONNECTION](options); + this[INIT_SOCKET](socket, options); + return socket; + } +} + +// https://github.com/nodejs/node/blob/master/lib/https.js#L89 +HttpsAgent.prototype[CREATE_HTTPS_CONNECTION] = OriginalHttpsAgent.prototype.createConnection; + +[ + 'getName', + '_getSession', + '_cacheSession', + // https://github.com/nodejs/node/pull/4982 + '_evictSession', +].forEach(function(method) { + /* istanbul ignore next */ + if (typeof OriginalHttpsAgent.prototype[method] === 'function') { + HttpsAgent.prototype[method] = OriginalHttpsAgent.prototype[method]; + } +}); + +module.exports = HttpsAgent; + + +/***/ }), +/* 47 */ +/***/ (function(module, exports) { + +module.exports = require("https"); + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const pkg = __webpack_require__(49); +const create = __webpack_require__(50); + +const defaults = { + options: { + retry: { + retries: 2, + methods: [ + 'GET', + 'PUT', + 'HEAD', + 'DELETE', + 'OPTIONS', + 'TRACE' + ], + statusCodes: [ + 408, + 413, + 429, + 500, + 502, + 503, + 504 + ], + errorCodes: [ + 'ETIMEDOUT', + 'ECONNRESET', + 'EADDRINUSE', + 'ECONNREFUSED', + 'EPIPE', + 'ENOTFOUND', + 'ENETUNREACH', + 'EAI_AGAIN' + ] + }, + headers: { + 'user-agent': `${pkg.name}/${pkg.version} (https://github.com/sindresorhus/got)` + }, + hooks: { + beforeRequest: [], + beforeRedirect: [], + beforeRetry: [], + afterResponse: [] + }, + decompress: true, + throwHttpErrors: true, + followRedirect: true, + stream: false, + form: false, + json: false, + cache: false, + useElectronNet: false + }, + mutableDefaults: false +}; + +const got = create(defaults); + +module.exports = got; + + +/***/ }), +/* 49 */ +/***/ (function(module) { + +module.exports = {"name":"got","version":"9.6.0","description":"Simplified HTTP requests","license":"MIT","repository":"sindresorhus/got","main":"source","engines":{"node":">=8.6"},"scripts":{"test":"xo && nyc ava","release":"np"},"files":["source"],"keywords":["http","https","get","got","url","uri","request","util","utility","simple","curl","wget","fetch","net","network","electron"],"dependencies":{"@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"},"devDependencies":{"ava":"^1.1.0","coveralls":"^3.0.0","delay":"^4.1.0","form-data":"^2.3.3","get-port":"^4.0.0","np":"^3.1.0","nyc":"^13.1.0","p-event":"^2.1.0","pem":"^1.13.2","proxyquire":"^2.0.1","sinon":"^7.2.2","slow-stream":"0.0.4","tempfile":"^2.0.0","tempy":"^0.2.1","tough-cookie":"^3.0.0","xo":"^0.24.0"},"ava":{"concurrency":4},"browser":{"decompress-response":false,"electron":false}}; + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const errors = __webpack_require__(51); +const asStream = __webpack_require__(55); +const asPromise = __webpack_require__(88); +const normalizeArguments = __webpack_require__(91); +const merge = __webpack_require__(89); +const deepFreeze = __webpack_require__(94); + +const getPromiseOrStream = options => options.stream ? asStream(options) : asPromise(options); + +const aliases = [ + 'get', + 'post', + 'put', + 'patch', + 'head', + 'delete' +]; + +const create = defaults => { + defaults = merge({}, defaults); + normalizeArguments.preNormalize(defaults.options); + + if (!defaults.handler) { + // This can't be getPromiseOrStream, because when merging + // the chain would stop at this point and no further handlers would be called. + defaults.handler = (options, next) => next(options); + } + + function got(url, options) { + try { + return defaults.handler(normalizeArguments(url, options, defaults), getPromiseOrStream); + } catch (error) { + if (options && options.stream) { + throw error; + } else { + return Promise.reject(error); + } + } + } + + got.create = create; + got.extend = options => { + let mutableDefaults; + if (options && Reflect.has(options, 'mutableDefaults')) { + mutableDefaults = options.mutableDefaults; + delete options.mutableDefaults; + } else { + mutableDefaults = defaults.mutableDefaults; + } + + return create({ + options: merge.options(defaults.options, options), + handler: defaults.handler, + mutableDefaults + }); + }; + + got.mergeInstances = (...args) => create(merge.instances(args)); + + got.stream = (url, options) => got(url, {...options, stream: true}); + + for (const method of aliases) { + got[method] = (url, options) => got(url, {...options, method}); + got.stream[method] = (url, options) => got.stream(url, {...options, method}); + } + + Object.assign(got, {...errors, mergeOptions: merge.options}); + Object.defineProperty(got, 'defaults', { + value: defaults.mutableDefaults ? defaults : deepFreeze(defaults), + writable: defaults.mutableDefaults, + configurable: defaults.mutableDefaults, + enumerable: true + }); + + return got; +}; + +module.exports = create; + + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const urlLib = __webpack_require__(52); +const http = __webpack_require__(39); +const PCancelable = __webpack_require__(53); +const is = __webpack_require__(54); + +class GotError extends Error { + constructor(message, error, options) { + super(message); + Error.captureStackTrace(this, this.constructor); + this.name = 'GotError'; + + if (!is.undefined(error.code)) { + this.code = error.code; + } + + Object.assign(this, { + host: options.host, + hostname: options.hostname, + method: options.method, + path: options.path, + socketPath: options.socketPath, + protocol: options.protocol, + url: options.href, + gotOptions: options + }); + } +} + +module.exports.GotError = GotError; + +module.exports.CacheError = class extends GotError { + constructor(error, options) { + super(error.message, error, options); + this.name = 'CacheError'; + } +}; + +module.exports.RequestError = class extends GotError { + constructor(error, options) { + super(error.message, error, options); + this.name = 'RequestError'; + } +}; + +module.exports.ReadError = class extends GotError { + constructor(error, options) { + super(error.message, error, options); + this.name = 'ReadError'; + } +}; + +module.exports.ParseError = class extends GotError { + constructor(error, statusCode, options, data) { + super(`${error.message} in "${urlLib.format(options)}": \n${data.slice(0, 77)}...`, error, options); + this.name = 'ParseError'; + this.statusCode = statusCode; + this.statusMessage = http.STATUS_CODES[this.statusCode]; + } +}; + +module.exports.HTTPError = class extends GotError { + constructor(response, options) { + const {statusCode} = response; + let {statusMessage} = response; + + if (statusMessage) { + statusMessage = statusMessage.replace(/\r?\n/g, ' ').trim(); + } else { + statusMessage = http.STATUS_CODES[statusCode]; + } + + super(`Response code ${statusCode} (${statusMessage})`, {}, options); + this.name = 'HTTPError'; + this.statusCode = statusCode; + this.statusMessage = statusMessage; + this.headers = response.headers; + this.body = response.body; + } +}; + +module.exports.MaxRedirectsError = class extends GotError { + constructor(statusCode, redirectUrls, options) { + super('Redirected 10 times. Aborting.', {}, options); + this.name = 'MaxRedirectsError'; + this.statusCode = statusCode; + this.statusMessage = http.STATUS_CODES[this.statusCode]; + this.redirectUrls = redirectUrls; + } +}; + +module.exports.UnsupportedProtocolError = class extends GotError { + constructor(options) { + super(`Unsupported protocol "${options.protocol}"`, {}, options); + this.name = 'UnsupportedProtocolError'; + } +}; + +module.exports.TimeoutError = class extends GotError { + constructor(error, options) { + super(error.message, {code: 'ETIMEDOUT'}, options); + this.name = 'TimeoutError'; + this.event = error.event; + } +}; + +module.exports.CancelError = PCancelable.CancelError; + + +/***/ }), +/* 52 */ +/***/ (function(module, exports) { + +module.exports = require("url"); + +/***/ }), +/* 53 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +class CancelError extends Error { + constructor(reason) { + super(reason || 'Promise was canceled'); + this.name = 'CancelError'; + } + + get isCanceled() { + return true; + } +} + +class PCancelable { + static fn(userFn) { + return (...args) => { + return new PCancelable((resolve, reject, onCancel) => { + args.push(onCancel); + userFn(...args).then(resolve, reject); + }); + }; + } + + constructor(executor) { + this._cancelHandlers = []; + this._isPending = true; + this._isCanceled = false; + this._rejectOnCancel = true; + + this._promise = new Promise((resolve, reject) => { + this._reject = reject; + + const onResolve = value => { + this._isPending = false; + resolve(value); + }; + + const onReject = error => { + this._isPending = false; + reject(error); + }; + + const onCancel = handler => { + this._cancelHandlers.push(handler); + }; + + Object.defineProperties(onCancel, { + shouldReject: { + get: () => this._rejectOnCancel, + set: bool => { + this._rejectOnCancel = bool; + } + } + }); + + return executor(onResolve, onReject, onCancel); + }); + } + + then(onFulfilled, onRejected) { + return this._promise.then(onFulfilled, onRejected); + } + + catch(onRejected) { + return this._promise.catch(onRejected); + } + + finally(onFinally) { + return this._promise.finally(onFinally); + } + + cancel(reason) { + if (!this._isPending || this._isCanceled) { + return; + } + + if (this._cancelHandlers.length > 0) { + try { + for (const handler of this._cancelHandlers) { + handler(); + } + } catch (error) { + this._reject(error); + } + } + + this._isCanceled = true; + if (this._rejectOnCancel) { + this._reject(new CancelError(reason)); + } + } + + get isCanceled() { + return this._isCanceled; + } +} + +Object.setPrototypeOf(PCancelable.prototype, Promise.prototype); + +module.exports = PCancelable; +module.exports.CancelError = CancelError; + + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/// +/// +/// +/// +Object.defineProperty(exports, "__esModule", { value: true }); +// TODO: Use the `URL` global when targeting Node.js 10 +// tslint:disable-next-line +const URLGlobal = typeof URL === 'undefined' ? __webpack_require__(52).URL : URL; +const toString = Object.prototype.toString; +const isOfType = (type) => (value) => typeof value === type; +const isBuffer = (input) => !is.nullOrUndefined(input) && !is.nullOrUndefined(input.constructor) && is.function_(input.constructor.isBuffer) && input.constructor.isBuffer(input); +const getObjectType = (value) => { + const objectName = toString.call(value).slice(8, -1); + if (objectName) { + return objectName; + } + return null; +}; +const isObjectOfType = (type) => (value) => getObjectType(value) === type; +function is(value) { + switch (value) { + case null: + return "null" /* null */; + case true: + case false: + return "boolean" /* boolean */; + default: + } + switch (typeof value) { + case 'undefined': + return "undefined" /* undefined */; + case 'string': + return "string" /* string */; + case 'number': + return "number" /* number */; + case 'symbol': + return "symbol" /* symbol */; + default: + } + if (is.function_(value)) { + return "Function" /* Function */; + } + if (is.observable(value)) { + return "Observable" /* Observable */; + } + if (Array.isArray(value)) { + return "Array" /* Array */; + } + if (isBuffer(value)) { + return "Buffer" /* Buffer */; + } + const tagType = getObjectType(value); + if (tagType) { + return tagType; + } + if (value instanceof String || value instanceof Boolean || value instanceof Number) { + throw new TypeError('Please don\'t use object wrappers for primitive types'); + } + return "Object" /* Object */; +} +(function (is) { + // tslint:disable-next-line:strict-type-predicates + const isObject = (value) => typeof value === 'object'; + // tslint:disable:variable-name + is.undefined = isOfType('undefined'); + is.string = isOfType('string'); + is.number = isOfType('number'); + is.function_ = isOfType('function'); + // tslint:disable-next-line:strict-type-predicates + is.null_ = (value) => value === null; + is.class_ = (value) => is.function_(value) && value.toString().startsWith('class '); + is.boolean = (value) => value === true || value === false; + is.symbol = isOfType('symbol'); + // tslint:enable:variable-name + is.numericString = (value) => is.string(value) && value.length > 0 && !Number.isNaN(Number(value)); + is.array = Array.isArray; + is.buffer = isBuffer; + is.nullOrUndefined = (value) => is.null_(value) || is.undefined(value); + is.object = (value) => !is.nullOrUndefined(value) && (is.function_(value) || isObject(value)); + is.iterable = (value) => !is.nullOrUndefined(value) && is.function_(value[Symbol.iterator]); + is.asyncIterable = (value) => !is.nullOrUndefined(value) && is.function_(value[Symbol.asyncIterator]); + is.generator = (value) => is.iterable(value) && is.function_(value.next) && is.function_(value.throw); + is.nativePromise = (value) => isObjectOfType("Promise" /* Promise */)(value); + const hasPromiseAPI = (value) => !is.null_(value) && + isObject(value) && + is.function_(value.then) && + is.function_(value.catch); + is.promise = (value) => is.nativePromise(value) || hasPromiseAPI(value); + is.generatorFunction = isObjectOfType("GeneratorFunction" /* GeneratorFunction */); + is.asyncFunction = isObjectOfType("AsyncFunction" /* AsyncFunction */); + is.boundFunction = (value) => is.function_(value) && !value.hasOwnProperty('prototype'); + is.regExp = isObjectOfType("RegExp" /* RegExp */); + is.date = isObjectOfType("Date" /* Date */); + is.error = isObjectOfType("Error" /* Error */); + is.map = (value) => isObjectOfType("Map" /* Map */)(value); + is.set = (value) => isObjectOfType("Set" /* Set */)(value); + is.weakMap = (value) => isObjectOfType("WeakMap" /* WeakMap */)(value); + is.weakSet = (value) => isObjectOfType("WeakSet" /* WeakSet */)(value); + is.int8Array = isObjectOfType("Int8Array" /* Int8Array */); + is.uint8Array = isObjectOfType("Uint8Array" /* Uint8Array */); + is.uint8ClampedArray = isObjectOfType("Uint8ClampedArray" /* Uint8ClampedArray */); + is.int16Array = isObjectOfType("Int16Array" /* Int16Array */); + is.uint16Array = isObjectOfType("Uint16Array" /* Uint16Array */); + is.int32Array = isObjectOfType("Int32Array" /* Int32Array */); + is.uint32Array = isObjectOfType("Uint32Array" /* Uint32Array */); + is.float32Array = isObjectOfType("Float32Array" /* Float32Array */); + is.float64Array = isObjectOfType("Float64Array" /* Float64Array */); + is.arrayBuffer = isObjectOfType("ArrayBuffer" /* ArrayBuffer */); + is.sharedArrayBuffer = isObjectOfType("SharedArrayBuffer" /* SharedArrayBuffer */); + is.dataView = isObjectOfType("DataView" /* DataView */); + is.directInstanceOf = (instance, klass) => Object.getPrototypeOf(instance) === klass.prototype; + is.urlInstance = (value) => isObjectOfType("URL" /* URL */)(value); + is.urlString = (value) => { + if (!is.string(value)) { + return false; + } + try { + new URLGlobal(value); // tslint:disable-line no-unused-expression + return true; + } + catch (_a) { + return false; + } + }; + is.truthy = (value) => Boolean(value); + is.falsy = (value) => !value; + is.nan = (value) => Number.isNaN(value); + const primitiveTypes = new Set([ + 'undefined', + 'string', + 'number', + 'boolean', + 'symbol' + ]); + is.primitive = (value) => is.null_(value) || primitiveTypes.has(typeof value); + is.integer = (value) => Number.isInteger(value); + is.safeInteger = (value) => Number.isSafeInteger(value); + is.plainObject = (value) => { + // From: https://github.com/sindresorhus/is-plain-obj/blob/master/index.js + let prototype; + return getObjectType(value) === "Object" /* Object */ && + (prototype = Object.getPrototypeOf(value), prototype === null || // tslint:disable-line:ban-comma-operator + prototype === Object.getPrototypeOf({})); + }; + const typedArrayTypes = new Set([ + "Int8Array" /* Int8Array */, + "Uint8Array" /* Uint8Array */, + "Uint8ClampedArray" /* Uint8ClampedArray */, + "Int16Array" /* Int16Array */, + "Uint16Array" /* Uint16Array */, + "Int32Array" /* Int32Array */, + "Uint32Array" /* Uint32Array */, + "Float32Array" /* Float32Array */, + "Float64Array" /* Float64Array */ + ]); + is.typedArray = (value) => { + const objectType = getObjectType(value); + if (objectType === null) { + return false; + } + return typedArrayTypes.has(objectType); + }; + const isValidLength = (value) => is.safeInteger(value) && value > -1; + is.arrayLike = (value) => !is.nullOrUndefined(value) && !is.function_(value) && isValidLength(value.length); + is.inRange = (value, range) => { + if (is.number(range)) { + return value >= Math.min(0, range) && value <= Math.max(range, 0); + } + if (is.array(range) && range.length === 2) { + return value >= Math.min(...range) && value <= Math.max(...range); + } + throw new TypeError(`Invalid range: ${JSON.stringify(range)}`); + }; + const NODE_TYPE_ELEMENT = 1; + const DOM_PROPERTIES_TO_CHECK = [ + 'innerHTML', + 'ownerDocument', + 'style', + 'attributes', + 'nodeValue' + ]; + is.domElement = (value) => is.object(value) && value.nodeType === NODE_TYPE_ELEMENT && is.string(value.nodeName) && + !is.plainObject(value) && DOM_PROPERTIES_TO_CHECK.every(property => property in value); + is.observable = (value) => { + if (!value) { + return false; + } + if (value[Symbol.observable] && value === value[Symbol.observable]()) { + return true; + } + if (value['@@observable'] && value === value['@@observable']()) { + return true; + } + return false; + }; + is.nodeStream = (value) => !is.nullOrUndefined(value) && isObject(value) && is.function_(value.pipe) && !is.observable(value); + is.infinite = (value) => value === Infinity || value === -Infinity; + const isAbsoluteMod2 = (rem) => (value) => is.integer(value) && Math.abs(value % 2) === rem; + is.even = isAbsoluteMod2(0); + is.odd = isAbsoluteMod2(1); + const isWhiteSpaceString = (value) => is.string(value) && /\S/.test(value) === false; + is.emptyArray = (value) => is.array(value) && value.length === 0; + is.nonEmptyArray = (value) => is.array(value) && value.length > 0; + is.emptyString = (value) => is.string(value) && value.length === 0; + is.nonEmptyString = (value) => is.string(value) && value.length > 0; + is.emptyStringOrWhitespace = (value) => is.emptyString(value) || isWhiteSpaceString(value); + is.emptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length === 0; + is.nonEmptyObject = (value) => is.object(value) && !is.map(value) && !is.set(value) && Object.keys(value).length > 0; + is.emptySet = (value) => is.set(value) && value.size === 0; + is.nonEmptySet = (value) => is.set(value) && value.size > 0; + is.emptyMap = (value) => is.map(value) && value.size === 0; + is.nonEmptyMap = (value) => is.map(value) && value.size > 0; + const predicateOnArray = (method, predicate, values) => { + if (is.function_(predicate) === false) { + throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`); + } + if (values.length === 0) { + throw new TypeError('Invalid number of values'); + } + return method.call(values, predicate); + }; + // tslint:disable variable-name + is.any = (predicate, ...values) => predicateOnArray(Array.prototype.some, predicate, values); + is.all = (predicate, ...values) => predicateOnArray(Array.prototype.every, predicate, values); + // tslint:enable variable-name +})(is || (is = {})); +// Some few keywords are reserved, but we'll populate them for Node.js users +// See https://github.com/Microsoft/TypeScript/issues/2536 +Object.defineProperties(is, { + class: { + value: is.class_ + }, + function: { + value: is.function_ + }, + null: { + value: is.null_ + } +}); +exports.default = is; +// For CommonJS default export support +module.exports = is; +module.exports.default = is; +//# sourceMappingURL=index.js.map + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const {PassThrough} = __webpack_require__(17); +const duplexer3 = __webpack_require__(56); +const requestAsEventEmitter = __webpack_require__(57); +const {HTTPError, ReadError} = __webpack_require__(51); + +module.exports = options => { + const input = new PassThrough(); + const output = new PassThrough(); + const proxy = duplexer3(input, output); + const piped = new Set(); + let isFinished = false; + + options.retry.retries = () => 0; + + if (options.body) { + proxy.write = () => { + throw new Error('Got\'s stream is not writable when the `body` option is used'); + }; + } + + const emitter = requestAsEventEmitter(options, input); + + // Cancels the request + proxy._destroy = emitter.abort; + + emitter.on('response', response => { + const {statusCode} = response; + + response.on('error', error => { + proxy.emit('error', new ReadError(error, options)); + }); + + if (options.throwHttpErrors && statusCode !== 304 && (statusCode < 200 || statusCode > 299)) { + proxy.emit('error', new HTTPError(response, options), null, response); + return; + } + + isFinished = true; + + response.pipe(output); + + for (const destination of piped) { + if (destination.headersSent) { + continue; + } + + for (const [key, value] of Object.entries(response.headers)) { + // Got gives *decompressed* data. Overriding `content-encoding` header would result in an error. + // It's not possible to decompress already decompressed data, is it? + const allowed = options.decompress ? key !== 'content-encoding' : true; + if (allowed) { + destination.setHeader(key, value); + } + } + + destination.statusCode = response.statusCode; + } + + proxy.emit('response', response); + }); + + [ + 'error', + 'request', + 'redirect', + 'uploadProgress', + 'downloadProgress' + ].forEach(event => emitter.on(event, (...args) => proxy.emit(event, ...args))); + + const pipe = proxy.pipe.bind(proxy); + const unpipe = proxy.unpipe.bind(proxy); + proxy.pipe = (destination, options) => { + if (isFinished) { + throw new Error('Failed to pipe. The response has been emitted already.'); + } + + const result = pipe(destination, options); + + if (Reflect.has(destination, 'setHeader')) { + piped.add(destination); + } + + return result; + }; + + proxy.unpipe = stream => { + piped.delete(stream); + return unpipe(stream); + }; + + return proxy; +}; + + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var stream = __webpack_require__(17); + +function DuplexWrapper(options, writable, readable) { + if (typeof readable === "undefined") { + readable = writable; + writable = options; + options = null; + } + + stream.Duplex.call(this, options); + + if (typeof readable.read !== "function") { + readable = (new stream.Readable(options)).wrap(readable); + } + + this._writable = writable; + this._readable = readable; + this._waiting = false; + + var self = this; + + writable.once("finish", function() { + self.end(); + }); + + this.once("finish", function() { + writable.end(); + }); + + readable.on("readable", function() { + if (self._waiting) { + self._waiting = false; + self._read(); + } + }); + + readable.once("end", function() { + self.push(null); + }); + + if (!options || typeof options.bubbleErrors === "undefined" || options.bubbleErrors) { + writable.on("error", function(err) { + self.emit("error", err); + }); + + readable.on("error", function(err) { + self.emit("error", err); + }); + } +} + +DuplexWrapper.prototype = Object.create(stream.Duplex.prototype, {constructor: {value: DuplexWrapper}}); + +DuplexWrapper.prototype._write = function _write(input, encoding, done) { + this._writable.write(input, encoding, done); +}; + +DuplexWrapper.prototype._read = function _read() { + var buf; + var reads = 0; + while ((buf = this._readable.read()) !== null) { + this.push(buf); + reads++; + } + if (reads === 0) { + this._waiting = true; + } +}; + +module.exports = function duplex2(options, writable, readable) { + return new DuplexWrapper(options, writable, readable); +}; + +module.exports.DuplexWrapper = DuplexWrapper; + + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const {URL} = __webpack_require__(52); // TODO: Use the `URL` global when targeting Node.js 10 +const util = __webpack_require__(18); +const EventEmitter = __webpack_require__(58); +const http = __webpack_require__(39); +const https = __webpack_require__(47); +const urlLib = __webpack_require__(52); +const CacheableRequest = __webpack_require__(59); +const toReadableStream = __webpack_require__(75); +const is = __webpack_require__(54); +const timer = __webpack_require__(76); +const timedOut = __webpack_require__(78); +const getBodySize = __webpack_require__(80); +const getResponse = __webpack_require__(82); +const progress = __webpack_require__(85); +const {CacheError, UnsupportedProtocolError, MaxRedirectsError, RequestError, TimeoutError} = __webpack_require__(51); +const urlToOptions = __webpack_require__(86); + +const getMethodRedirectCodes = new Set([300, 301, 302, 303, 304, 305, 307, 308]); +const allMethodRedirectCodes = new Set([300, 303, 307, 308]); + +module.exports = (options, input) => { + const emitter = new EventEmitter(); + const redirects = []; + let currentRequest; + let requestUrl; + let redirectString; + let uploadBodySize; + let retryCount = 0; + let shouldAbort = false; + + const setCookie = options.cookieJar ? util.promisify(options.cookieJar.setCookie.bind(options.cookieJar)) : null; + const getCookieString = options.cookieJar ? util.promisify(options.cookieJar.getCookieString.bind(options.cookieJar)) : null; + const agents = is.object(options.agent) ? options.agent : null; + + const emitError = async error => { + try { + for (const hook of options.hooks.beforeError) { + // eslint-disable-next-line no-await-in-loop + error = await hook(error); + } + + emitter.emit('error', error); + } catch (error2) { + emitter.emit('error', error2); + } + }; + + const get = async options => { + const currentUrl = redirectString || requestUrl; + + if (options.protocol !== 'http:' && options.protocol !== 'https:') { + throw new UnsupportedProtocolError(options); + } + + decodeURI(currentUrl); + + let fn; + if (is.function(options.request)) { + fn = {request: options.request}; + } else { + fn = options.protocol === 'https:' ? https : http; + } + + if (agents) { + const protocolName = options.protocol === 'https:' ? 'https' : 'http'; + options.agent = agents[protocolName] || options.agent; + } + + /* istanbul ignore next: electron.net is broken */ + if (options.useElectronNet && process.versions.electron) { + const r = ({x: __webpack_require__(87)})['yx'.slice(1)]; // Trick webpack + const electron = r('electron'); + fn = electron.net || electron.remote.net; + } + + if (options.cookieJar) { + const cookieString = await getCookieString(currentUrl, {}); + + if (is.nonEmptyString(cookieString)) { + options.headers.cookie = cookieString; + } + } + + let timings; + const handleResponse = async response => { + try { + /* istanbul ignore next: fixes https://github.com/electron/electron/blob/cbb460d47628a7a146adf4419ed48550a98b2923/lib/browser/api/net.js#L59-L65 */ + if (options.useElectronNet) { + response = new Proxy(response, { + get: (target, name) => { + if (name === 'trailers' || name === 'rawTrailers') { + return []; + } + + const value = target[name]; + return is.function(value) ? value.bind(target) : value; + } + }); + } + + const {statusCode} = response; + response.url = currentUrl; + response.requestUrl = requestUrl; + response.retryCount = retryCount; + response.timings = timings; + response.redirectUrls = redirects; + response.request = { + gotOptions: options + }; + + const rawCookies = response.headers['set-cookie']; + if (options.cookieJar && rawCookies) { + await Promise.all(rawCookies.map(rawCookie => setCookie(rawCookie, response.url))); + } + + if (options.followRedirect && 'location' in response.headers) { + if (allMethodRedirectCodes.has(statusCode) || (getMethodRedirectCodes.has(statusCode) && (options.method === 'GET' || options.method === 'HEAD'))) { + response.resume(); // We're being redirected, we don't care about the response. + + if (statusCode === 303) { + // Server responded with "see other", indicating that the resource exists at another location, + // and the client should request it from that location via GET or HEAD. + options.method = 'GET'; + } + + if (redirects.length >= 10) { + throw new MaxRedirectsError(statusCode, redirects, options); + } + + // Handles invalid URLs. See https://github.com/sindresorhus/got/issues/604 + const redirectBuffer = Buffer.from(response.headers.location, 'binary').toString(); + const redirectURL = new URL(redirectBuffer, currentUrl); + redirectString = redirectURL.toString(); + + redirects.push(redirectString); + + const redirectOptions = { + ...options, + ...urlToOptions(redirectURL) + }; + + for (const hook of options.hooks.beforeRedirect) { + // eslint-disable-next-line no-await-in-loop + await hook(redirectOptions); + } + + emitter.emit('redirect', response, redirectOptions); + + await get(redirectOptions); + return; + } + } + + getResponse(response, options, emitter); + } catch (error) { + emitError(error); + } + }; + + const handleRequest = request => { + if (shouldAbort) { + request.once('error', () => {}); + request.abort(); + return; + } + + currentRequest = request; + + request.once('error', error => { + if (request.aborted) { + return; + } + + if (error instanceof timedOut.TimeoutError) { + error = new TimeoutError(error, options); + } else { + error = new RequestError(error, options); + } + + if (emitter.retry(error) === false) { + emitError(error); + } + }); + + timings = timer(request); + + progress.upload(request, emitter, uploadBodySize); + + if (options.gotTimeout) { + timedOut(request, options.gotTimeout, options); + } + + emitter.emit('request', request); + + const uploadComplete = () => { + request.emit('upload-complete'); + }; + + try { + if (is.nodeStream(options.body)) { + options.body.once('end', uploadComplete); + options.body.pipe(request); + options.body = undefined; + } else if (options.body) { + request.end(options.body, uploadComplete); + } else if (input && (options.method === 'POST' || options.method === 'PUT' || options.method === 'PATCH')) { + input.once('end', uploadComplete); + input.pipe(request); + } else { + request.end(uploadComplete); + } + } catch (error) { + emitError(new RequestError(error, options)); + } + }; + + if (options.cache) { + const cacheableRequest = new CacheableRequest(fn.request, options.cache); + const cacheRequest = cacheableRequest(options, handleResponse); + + cacheRequest.once('error', error => { + if (error instanceof CacheableRequest.RequestError) { + emitError(new RequestError(error, options)); + } else { + emitError(new CacheError(error, options)); + } + }); + + cacheRequest.once('request', handleRequest); + } else { + // Catches errors thrown by calling fn.request(...) + try { + handleRequest(fn.request(options, handleResponse)); + } catch (error) { + emitError(new RequestError(error, options)); + } + } + }; + + emitter.retry = error => { + let backoff; + + try { + backoff = options.retry.retries(++retryCount, error); + } catch (error2) { + emitError(error2); + return; + } + + if (backoff) { + const retry = async options => { + try { + for (const hook of options.hooks.beforeRetry) { + // eslint-disable-next-line no-await-in-loop + await hook(options, error, retryCount); + } + + await get(options); + } catch (error) { + emitError(error); + } + }; + + setTimeout(retry, backoff, {...options, forceRefresh: true}); + return true; + } + + return false; + }; + + emitter.abort = () => { + if (currentRequest) { + currentRequest.once('error', () => {}); + currentRequest.abort(); + } else { + shouldAbort = true; + } + }; + + setImmediate(async () => { + try { + // Convert buffer to stream to receive upload progress events (#322) + const {body} = options; + if (is.buffer(body)) { + options.body = toReadableStream(body); + uploadBodySize = body.length; + } else { + uploadBodySize = await getBodySize(options); + } + + if (is.undefined(options.headers['content-length']) && is.undefined(options.headers['transfer-encoding'])) { + if ((uploadBodySize > 0 || options.method === 'PUT') && !is.null(uploadBodySize)) { + options.headers['content-length'] = uploadBodySize; + } + } + + for (const hook of options.hooks.beforeRequest) { + // eslint-disable-next-line no-await-in-loop + await hook(options); + } + + requestUrl = options.href || (new URL(options.path, urlLib.format(options))).toString(); + + await get(options); + } catch (error) { + emitError(error); + } + }); + + return emitter; +}; + + +/***/ }), +/* 58 */ +/***/ (function(module, exports) { + +module.exports = require("events"); + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const EventEmitter = __webpack_require__(58); +const urlLib = __webpack_require__(52); +const normalizeUrl = __webpack_require__(60); +const getStream = __webpack_require__(61); +const CachePolicy = __webpack_require__(67); +const Response = __webpack_require__(68); +const lowercaseKeys = __webpack_require__(69); +const cloneResponse = __webpack_require__(70); +const Keyv = __webpack_require__(72); + +class CacheableRequest { + constructor(request, cacheAdapter) { + if (typeof request !== 'function') { + throw new TypeError('Parameter `request` must be a function'); + } + + this.cache = new Keyv({ + uri: typeof cacheAdapter === 'string' && cacheAdapter, + store: typeof cacheAdapter !== 'string' && cacheAdapter, + namespace: 'cacheable-request' + }); + + return this.createCacheableRequest(request); + } + + createCacheableRequest(request) { + return (opts, cb) => { + let url; + if (typeof opts === 'string') { + url = normalizeUrlObject(urlLib.parse(opts)); + opts = {}; + } else if (opts instanceof urlLib.URL) { + url = normalizeUrlObject(urlLib.parse(opts.toString())); + opts = {}; + } else { + const [pathname, ...searchParts] = (opts.path || '').split('?'); + const search = searchParts.length > 0 ? + `?${searchParts.join('?')}` : + ''; + url = normalizeUrlObject({ ...opts, pathname, search }); + } + opts = { + headers: {}, + method: 'GET', + cache: true, + strictTtl: false, + automaticFailover: false, + ...opts, + ...urlObjectToRequestOptions(url) + }; + opts.headers = lowercaseKeys(opts.headers); + + const ee = new EventEmitter(); + const normalizedUrlString = normalizeUrl( + urlLib.format(url), + { + stripWWW: false, + removeTrailingSlash: false + } + ); + const key = `${opts.method}:${normalizedUrlString}`; + let revalidate = false; + let madeRequest = false; + + const makeRequest = opts => { + madeRequest = true; + let requestErrored = false; + let requestErrorCallback; + + const requestErrorPromise = new Promise(resolve => { + requestErrorCallback = () => { + requestErrored = true; + resolve(); + }; + }); + + const handler = response => { + if (revalidate && !opts.forceRefresh) { + response.status = response.statusCode; + const revalidatedPolicy = CachePolicy.fromObject(revalidate.cachePolicy).revalidatedPolicy(opts, response); + if (!revalidatedPolicy.modified) { + const headers = revalidatedPolicy.policy.responseHeaders(); + response = new Response(revalidate.statusCode, headers, revalidate.body, revalidate.url); + response.cachePolicy = revalidatedPolicy.policy; + response.fromCache = true; + } + } + + if (!response.fromCache) { + response.cachePolicy = new CachePolicy(opts, response, opts); + response.fromCache = false; + } + + let clonedResponse; + if (opts.cache && response.cachePolicy.storable()) { + clonedResponse = cloneResponse(response); + + (async () => { + try { + const bodyPromise = getStream.buffer(response); + + await Promise.race([ + requestErrorPromise, + new Promise(resolve => response.once('end', resolve)) + ]); + + if (requestErrored) { + return; + } + + const body = await bodyPromise; + + const value = { + cachePolicy: response.cachePolicy.toObject(), + url: response.url, + statusCode: response.fromCache ? revalidate.statusCode : response.statusCode, + body + }; + + let ttl = opts.strictTtl ? response.cachePolicy.timeToLive() : undefined; + if (opts.maxTtl) { + ttl = ttl ? Math.min(ttl, opts.maxTtl) : opts.maxTtl; + } + + await this.cache.set(key, value, ttl); + } catch (err) { + ee.emit('error', new CacheableRequest.CacheError(err)); + } + })(); + } else if (opts.cache && revalidate) { + (async () => { + try { + await this.cache.delete(key); + } catch (err) { + ee.emit('error', new CacheableRequest.CacheError(err)); + } + })(); + } + + ee.emit('response', clonedResponse || response); + if (typeof cb === 'function') { + cb(clonedResponse || response); + } + }; + + try { + const req = request(opts, handler); + req.once('error', requestErrorCallback); + req.once('abort', requestErrorCallback); + ee.emit('request', req); + } catch (err) { + ee.emit('error', new CacheableRequest.RequestError(err)); + } + }; + + (async () => { + const get = async opts => { + await Promise.resolve(); + + const cacheEntry = opts.cache ? await this.cache.get(key) : undefined; + if (typeof cacheEntry === 'undefined') { + return makeRequest(opts); + } + + const policy = CachePolicy.fromObject(cacheEntry.cachePolicy); + if (policy.satisfiesWithoutRevalidation(opts) && !opts.forceRefresh) { + const headers = policy.responseHeaders(); + const response = new Response(cacheEntry.statusCode, headers, cacheEntry.body, cacheEntry.url); + response.cachePolicy = policy; + response.fromCache = true; + + ee.emit('response', response); + if (typeof cb === 'function') { + cb(response); + } + } else { + revalidate = cacheEntry; + opts.headers = policy.revalidationHeaders(opts); + makeRequest(opts); + } + }; + + this.cache.on('error', err => ee.emit('error', new CacheableRequest.CacheError(err))); + + try { + await get(opts); + } catch (err) { + if (opts.automaticFailover && !madeRequest) { + makeRequest(opts); + } + ee.emit('error', new CacheableRequest.CacheError(err)); + } + })(); + + return ee; + }; + } +} + +function urlObjectToRequestOptions(url) { + const options = { ...url }; + options.path = `${url.pathname || '/'}${url.search || ''}`; + delete options.pathname; + delete options.search; + return options; +} + +function normalizeUrlObject(url) { + // If url was parsed by url.parse or new URL: + // - hostname will be set + // - host will be hostname[:port] + // - port will be set if it was explicit in the parsed string + // Otherwise, url was from request options: + // - hostname or host may be set + // - host shall not have port encoded + return { + protocol: url.protocol, + auth: url.auth, + hostname: url.hostname || url.host || 'localhost', + port: url.port, + pathname: url.pathname, + search: url.search + }; +} + +CacheableRequest.RequestError = class extends Error { + constructor(err) { + super(err.message); + this.name = 'RequestError'; + Object.assign(this, err); + } +}; + +CacheableRequest.CacheError = class extends Error { + constructor(err) { + super(err.message); + this.name = 'CacheError'; + Object.assign(this, err); + } +}; + +module.exports = CacheableRequest; + + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// TODO: Use the `URL` global when targeting Node.js 10 +const URLParser = typeof URL === 'undefined' ? __webpack_require__(52).URL : URL; + +const testParameter = (name, filters) => { + return filters.some(filter => filter instanceof RegExp ? filter.test(name) : filter === name); +}; + +module.exports = (urlString, opts) => { + opts = Object.assign({ + defaultProtocol: 'http:', + normalizeProtocol: true, + forceHttp: false, + forceHttps: false, + stripHash: true, + stripWWW: true, + removeQueryParameters: [/^utm_\w+/i], + removeTrailingSlash: true, + removeDirectoryIndex: false, + sortQueryParameters: true + }, opts); + + // Backwards compatibility + if (Reflect.has(opts, 'normalizeHttps')) { + opts.forceHttp = opts.normalizeHttps; + } + + if (Reflect.has(opts, 'normalizeHttp')) { + opts.forceHttps = opts.normalizeHttp; + } + + if (Reflect.has(opts, 'stripFragment')) { + opts.stripHash = opts.stripFragment; + } + + urlString = urlString.trim(); + + const hasRelativeProtocol = urlString.startsWith('//'); + const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString); + + // Prepend protocol + if (!isRelativeUrl) { + urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, opts.defaultProtocol); + } + + const urlObj = new URLParser(urlString); + + if (opts.forceHttp && opts.forceHttps) { + throw new Error('The `forceHttp` and `forceHttps` options cannot be used together'); + } + + if (opts.forceHttp && urlObj.protocol === 'https:') { + urlObj.protocol = 'http:'; + } + + if (opts.forceHttps && urlObj.protocol === 'http:') { + urlObj.protocol = 'https:'; + } + + // Remove hash + if (opts.stripHash) { + urlObj.hash = ''; + } + + // Remove duplicate slashes if not preceded by a protocol + if (urlObj.pathname) { + // TODO: Use the following instead when targeting Node.js 10 + // `urlObj.pathname = urlObj.pathname.replace(/(? { + if (/^(?!\/)/g.test(p1)) { + return `${p1}/`; + } + return '/'; + }); + } + + // Decode URI octets + if (urlObj.pathname) { + urlObj.pathname = decodeURI(urlObj.pathname); + } + + // Remove directory index + if (opts.removeDirectoryIndex === true) { + opts.removeDirectoryIndex = [/^index\.[a-z]+$/]; + } + + if (Array.isArray(opts.removeDirectoryIndex) && opts.removeDirectoryIndex.length > 0) { + let pathComponents = urlObj.pathname.split('/'); + const lastComponent = pathComponents[pathComponents.length - 1]; + + if (testParameter(lastComponent, opts.removeDirectoryIndex)) { + pathComponents = pathComponents.slice(0, pathComponents.length - 1); + urlObj.pathname = pathComponents.slice(1).join('/') + '/'; + } + } + + if (urlObj.hostname) { + // Remove trailing dot + urlObj.hostname = urlObj.hostname.replace(/\.$/, ''); + + // Remove `www.` + // eslint-disable-next-line no-useless-escape + if (opts.stripWWW && /^www\.([a-z\-\d]{2,63})\.([a-z\.]{2,5})$/.test(urlObj.hostname)) { + // Each label should be max 63 at length (min: 2). + // The extension should be max 5 at length (min: 2). + // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names + urlObj.hostname = urlObj.hostname.replace(/^www\./, ''); + } + } + + // Remove query unwanted parameters + if (Array.isArray(opts.removeQueryParameters)) { + for (const key of [...urlObj.searchParams.keys()]) { + if (testParameter(key, opts.removeQueryParameters)) { + urlObj.searchParams.delete(key); + } + } + } + + // Sort query parameters + if (opts.sortQueryParameters) { + urlObj.searchParams.sort(); + } + + // Take advantage of many of the Node `url` normalizations + urlString = urlObj.toString(); + + // Remove ending `/` + if (opts.removeTrailingSlash || urlObj.pathname === '/') { + urlString = urlString.replace(/\/$/, ''); + } + + // Restore relative protocol, if applicable + if (hasRelativeProtocol && !opts.normalizeProtocol) { + urlString = urlString.replace(/^http:\/\//, '//'); + } + + return urlString; +}; + + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const pump = __webpack_require__(62); +const bufferStream = __webpack_require__(66); + +class MaxBufferError extends Error { + constructor() { + super('maxBuffer exceeded'); + this.name = 'MaxBufferError'; + } +} + +function getStream(inputStream, options) { + if (!inputStream) { + return Promise.reject(new Error('Expected a stream')); + } + + options = Object.assign({maxBuffer: Infinity}, options); + + const {maxBuffer} = options; + + let stream; + return new Promise((resolve, reject) => { + const rejectPromise = error => { + if (error) { // A null check + error.bufferedData = stream.getBufferedValue(); + } + reject(error); + }; + + stream = pump(inputStream, bufferStream(options), error => { + if (error) { + rejectPromise(error); + return; + } + + resolve(); + }); + + stream.on('data', () => { + if (stream.getBufferedLength() > maxBuffer) { + rejectPromise(new MaxBufferError()); + } + }); + }).then(() => stream.getBufferedValue()); +} + +module.exports = getStream; +module.exports.buffer = (stream, options) => getStream(stream, Object.assign({}, options, {encoding: 'buffer'})); +module.exports.array = (stream, options) => getStream(stream, Object.assign({}, options, {array: true})); +module.exports.MaxBufferError = MaxBufferError; + + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + +var once = __webpack_require__(63) +var eos = __webpack_require__(65) +var fs = __webpack_require__(5) // we only need fs to get the ReadStream and WriteStream prototypes + +var noop = function () {} +var ancient = /^v?\.0/.test(process.version) + +var isFn = function (fn) { + return typeof fn === 'function' +} + +var isFS = function (stream) { + if (!ancient) return false // newer node version do not need to care about fs is a special way + if (!fs) return false // browser + return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close) +} + +var isRequest = function (stream) { + return stream.setHeader && isFn(stream.abort) +} + +var destroyer = function (stream, reading, writing, callback) { + callback = once(callback) + + var closed = false + stream.on('close', function () { + closed = true + }) + + eos(stream, {readable: reading, writable: writing}, function (err) { + if (err) return callback(err) + closed = true + callback() + }) + + var destroyed = false + return function (err) { + if (closed) return + if (destroyed) return + destroyed = true + + if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks + if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want + + if (isFn(stream.destroy)) return stream.destroy() + + callback(err || new Error('stream was destroyed')) + } +} + +var call = function (fn) { + fn() +} + +var pipe = function (from, to) { + return from.pipe(to) +} + +var pump = function () { + var streams = Array.prototype.slice.call(arguments) + var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop + + if (Array.isArray(streams[0])) streams = streams[0] + if (streams.length < 2) throw new Error('pump requires two streams per minimum') + + var error + var destroys = streams.map(function (stream, i) { + var reading = i < streams.length - 1 + var writing = i > 0 + return destroyer(stream, reading, writing, function (err) { + if (!error) error = err + if (err) destroys.forEach(call) + if (reading) return + destroys.forEach(call) + callback(error) + }) + }) + + return streams.reduce(pipe) +} + +module.exports = pump + + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + +var wrappy = __webpack_require__(64) +module.exports = wrappy(once) + +once.proto = once(function () { + Object.defineProperty(Function.prototype, 'once', { + value: function () { + return once(this) + }, + configurable: true + }) +}) + +function once (fn) { + var f = function () { + if (f.called) return f.value + f.called = true + return f.value = fn.apply(this, arguments) + } + f.called = false + return f +} + + +/***/ }), +/* 64 */ +/***/ (function(module, exports) { + +// Returns a wrapper function that returns a wrapped callback +// The wrapper function should do some stuff, and return a +// presumably different callback function. +// This makes sure that own properties are retained, so that +// decorations and such are not lost along the way. +module.exports = wrappy +function wrappy (fn, cb) { + if (fn && cb) return wrappy(fn)(cb) + + if (typeof fn !== 'function') + throw new TypeError('need wrapper function') + + Object.keys(fn).forEach(function (k) { + wrapper[k] = fn[k] + }) + + return wrapper + + function wrapper() { + var args = new Array(arguments.length) + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i] + } + var ret = fn.apply(this, args) + var cb = args[args.length-1] + if (typeof ret === 'function' && ret !== cb) { + Object.keys(cb).forEach(function (k) { + ret[k] = cb[k] + }) + } + return ret + } +} + + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + +var once = __webpack_require__(63); + +var noop = function() {}; + +var isRequest = function(stream) { + return stream.setHeader && typeof stream.abort === 'function'; +}; + +var isChildProcess = function(stream) { + return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3 +}; + +var eos = function(stream, opts, callback) { + if (typeof opts === 'function') return eos(stream, null, opts); + if (!opts) opts = {}; + + callback = once(callback || noop); + + var ws = stream._writableState; + var rs = stream._readableState; + var readable = opts.readable || (opts.readable !== false && stream.readable); + var writable = opts.writable || (opts.writable !== false && stream.writable); + + var onlegacyfinish = function() { + if (!stream.writable) onfinish(); + }; + + var onfinish = function() { + writable = false; + if (!readable) callback(); + }; + + var onend = function() { + readable = false; + if (!writable) callback(); + }; + + var onexit = function(exitCode) { + callback(exitCode ? new Error('exited with error code: ' + exitCode) : null); + }; + + var onclose = function() { + if (readable && !(rs && rs.ended)) return callback(new Error('premature close')); + if (writable && !(ws && ws.ended)) return callback(new Error('premature close')); + }; + + var onrequest = function() { + stream.req.on('finish', onfinish); + }; + + if (isRequest(stream)) { + stream.on('complete', onfinish); + stream.on('abort', onclose); + if (stream.req) onrequest(); + else stream.on('request', onrequest); + } else if (writable && !ws) { // legacy streams + stream.on('end', onlegacyfinish); + stream.on('close', onlegacyfinish); + } + + if (isChildProcess(stream)) stream.on('exit', onexit); + + stream.on('end', onend); + stream.on('finish', onfinish); + if (opts.error !== false) stream.on('error', callback); + stream.on('close', onclose); + + return function() { + stream.removeListener('complete', onfinish); + stream.removeListener('abort', onclose); + stream.removeListener('request', onrequest); + if (stream.req) stream.req.removeListener('finish', onfinish); + stream.removeListener('end', onlegacyfinish); + stream.removeListener('close', onlegacyfinish); + stream.removeListener('finish', onfinish); + stream.removeListener('exit', onexit); + stream.removeListener('end', onend); + stream.removeListener('error', callback); + stream.removeListener('close', onclose); + }; +}; + +module.exports = eos; + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const {PassThrough} = __webpack_require__(17); + +module.exports = options => { + options = Object.assign({}, options); + + const {array} = options; + let {encoding} = options; + const buffer = encoding === 'buffer'; + let objectMode = false; + + if (array) { + objectMode = !(encoding || buffer); + } else { + encoding = encoding || 'utf8'; + } + + if (buffer) { + encoding = null; + } + + let len = 0; + const ret = []; + const stream = new PassThrough({objectMode}); + + if (encoding) { + stream.setEncoding(encoding); + } + + stream.on('data', chunk => { + ret.push(chunk); + + if (objectMode) { + len = ret.length; + } else { + len += chunk.length; + } + }); + + stream.getBufferedValue = () => { + if (array) { + return ret; + } + + return buffer ? Buffer.concat(ret, len) : ret.join(''); + }; + + stream.getBufferedLength = () => len; + + return stream; +}; + + +/***/ }), +/* 67 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// rfc7231 6.1 +const statusCodeCacheableByDefault = [200, 203, 204, 206, 300, 301, 404, 405, 410, 414, 501]; + +// This implementation does not understand partial responses (206) +const understoodStatuses = [200, 203, 204, 300, 301, 302, 303, 307, 308, 404, 405, 410, 414, 501]; + +const hopByHopHeaders = { + 'date': true, // included, because we add Age update Date + 'connection':true, 'keep-alive':true, 'proxy-authenticate':true, 'proxy-authorization':true, 'te':true, 'trailer':true, 'transfer-encoding':true, 'upgrade':true +}; +const excludedFromRevalidationUpdate = { + // Since the old body is reused, it doesn't make sense to change properties of the body + 'content-length': true, 'content-encoding': true, 'transfer-encoding': true, + 'content-range': true, +}; + +function parseCacheControl(header) { + const cc = {}; + if (!header) return cc; + + // TODO: When there is more than one value present for a given directive (e.g., two Expires header fields, multiple Cache-Control: max-age directives), + // the directive's value is considered invalid. Caches are encouraged to consider responses that have invalid freshness information to be stale + const parts = header.trim().split(/\s*,\s*/); // TODO: lame parsing + for(const part of parts) { + const [k,v] = part.split(/\s*=\s*/, 2); + cc[k] = (v === undefined) ? true : v.replace(/^"|"$/g, ''); // TODO: lame unquoting + } + + return cc; +} + +function formatCacheControl(cc) { + let parts = []; + for(const k in cc) { + const v = cc[k]; + parts.push(v === true ? k : k + '=' + v); + } + if (!parts.length) { + return undefined; + } + return parts.join(', '); +} + +module.exports = class CachePolicy { + constructor(req, res, {shared, cacheHeuristic, immutableMinTimeToLive, ignoreCargoCult, trustServerDate, _fromObject} = {}) { + if (_fromObject) { + this._fromObject(_fromObject); + return; + } + + if (!res || !res.headers) { + throw Error("Response headers missing"); + } + this._assertRequestHasHeaders(req); + + this._responseTime = this.now(); + this._isShared = shared !== false; + this._trustServerDate = undefined !== trustServerDate ? trustServerDate : true; + this._cacheHeuristic = undefined !== cacheHeuristic ? cacheHeuristic : 0.1; // 10% matches IE + this._immutableMinTtl = undefined !== immutableMinTimeToLive ? immutableMinTimeToLive : 24*3600*1000; + + this._status = 'status' in res ? res.status : 200; + this._resHeaders = res.headers; + this._rescc = parseCacheControl(res.headers['cache-control']); + this._method = 'method' in req ? req.method : 'GET'; + this._url = req.url; + this._host = req.headers.host; + this._noAuthorization = !req.headers.authorization; + this._reqHeaders = res.headers.vary ? req.headers : null; // Don't keep all request headers if they won't be used + this._reqcc = parseCacheControl(req.headers['cache-control']); + + // Assume that if someone uses legacy, non-standard uncecessary options they don't understand caching, + // so there's no point stricly adhering to the blindly copy&pasted directives. + if (ignoreCargoCult && "pre-check" in this._rescc && "post-check" in this._rescc) { + delete this._rescc['pre-check']; + delete this._rescc['post-check']; + delete this._rescc['no-cache']; + delete this._rescc['no-store']; + delete this._rescc['must-revalidate']; + this._resHeaders = Object.assign({}, this._resHeaders, {'cache-control': formatCacheControl(this._rescc)}); + delete this._resHeaders.expires; + delete this._resHeaders.pragma; + } + + // When the Cache-Control header field is not present in a request, caches MUST consider the no-cache request pragma-directive + // as having the same effect as if "Cache-Control: no-cache" were present (see Section 5.2.1). + if (!res.headers['cache-control'] && /no-cache/.test(res.headers.pragma)) { + this._rescc['no-cache'] = true; + } + } + + now() { + return Date.now(); + } + + storable() { + // The "no-store" request directive indicates that a cache MUST NOT store any part of either this request or any response to it. + return !!(!this._reqcc['no-store'] && + // A cache MUST NOT store a response to any request, unless: + // The request method is understood by the cache and defined as being cacheable, and + ('GET' === this._method || 'HEAD' === this._method || ('POST' === this._method && this._hasExplicitExpiration())) && + // the response status code is understood by the cache, and + understoodStatuses.indexOf(this._status) !== -1 && + // the "no-store" cache directive does not appear in request or response header fields, and + !this._rescc['no-store'] && + // the "private" response directive does not appear in the response, if the cache is shared, and + (!this._isShared || !this._rescc.private) && + // the Authorization header field does not appear in the request, if the cache is shared, + (!this._isShared || this._noAuthorization || this._allowsStoringAuthenticated()) && + // the response either: + ( + // contains an Expires header field, or + this._resHeaders.expires || + // contains a max-age response directive, or + // contains a s-maxage response directive and the cache is shared, or + // contains a public response directive. + this._rescc.public || this._rescc['max-age'] || this._rescc['s-maxage'] || + // has a status code that is defined as cacheable by default + statusCodeCacheableByDefault.indexOf(this._status) !== -1 + )); + } + + _hasExplicitExpiration() { + // 4.2.1 Calculating Freshness Lifetime + return (this._isShared && this._rescc['s-maxage']) || + this._rescc['max-age'] || + this._resHeaders.expires; + } + + _assertRequestHasHeaders(req) { + if (!req || !req.headers) { + throw Error("Request headers missing"); + } + } + + satisfiesWithoutRevalidation(req) { + this._assertRequestHasHeaders(req); + + // When presented with a request, a cache MUST NOT reuse a stored response, unless: + // the presented request does not contain the no-cache pragma (Section 5.4), nor the no-cache cache directive, + // unless the stored response is successfully validated (Section 4.3), and + const requestCC = parseCacheControl(req.headers['cache-control']); + if (requestCC['no-cache'] || /no-cache/.test(req.headers.pragma)) { + return false; + } + + if (requestCC['max-age'] && this.age() > requestCC['max-age']) { + return false; + } + + if (requestCC['min-fresh'] && this.timeToLive() < 1000*requestCC['min-fresh']) { + return false; + } + + // the stored response is either: + // fresh, or allowed to be served stale + if (this.stale()) { + const allowsStale = requestCC['max-stale'] && !this._rescc['must-revalidate'] && (true === requestCC['max-stale'] || requestCC['max-stale'] > this.age() - this.maxAge()); + if (!allowsStale) { + return false; + } + } + + return this._requestMatches(req, false); + } + + _requestMatches(req, allowHeadMethod) { + // The presented effective request URI and that of the stored response match, and + return (!this._url || this._url === req.url) && + (this._host === req.headers.host) && + // the request method associated with the stored response allows it to be used for the presented request, and + (!req.method || this._method === req.method || (allowHeadMethod && 'HEAD' === req.method)) && + // selecting header fields nominated by the stored response (if any) match those presented, and + this._varyMatches(req); + } + + _allowsStoringAuthenticated() { + // following Cache-Control response directives (Section 5.2.2) have such an effect: must-revalidate, public, and s-maxage. + return this._rescc['must-revalidate'] || this._rescc.public || this._rescc['s-maxage']; + } + + _varyMatches(req) { + if (!this._resHeaders.vary) { + return true; + } + + // A Vary header field-value of "*" always fails to match + if (this._resHeaders.vary === '*') { + return false; + } + + const fields = this._resHeaders.vary.trim().toLowerCase().split(/\s*,\s*/); + for(const name of fields) { + if (req.headers[name] !== this._reqHeaders[name]) return false; + } + return true; + } + + _copyWithoutHopByHopHeaders(inHeaders) { + const headers = {}; + for(const name in inHeaders) { + if (hopByHopHeaders[name]) continue; + headers[name] = inHeaders[name]; + } + // 9.1. Connection + if (inHeaders.connection) { + const tokens = inHeaders.connection.trim().split(/\s*,\s*/); + for(const name of tokens) { + delete headers[name]; + } + } + if (headers.warning) { + const warnings = headers.warning.split(/,/).filter(warning => { + return !/^\s*1[0-9][0-9]/.test(warning); + }); + if (!warnings.length) { + delete headers.warning; + } else { + headers.warning = warnings.join(',').trim(); + } + } + return headers; + } + + responseHeaders() { + const headers = this._copyWithoutHopByHopHeaders(this._resHeaders); + const age = this.age(); + + // A cache SHOULD generate 113 warning if it heuristically chose a freshness + // lifetime greater than 24 hours and the response's age is greater than 24 hours. + if (age > 3600*24 && !this._hasExplicitExpiration() && this.maxAge() > 3600*24) { + headers.warning = (headers.warning ? `${headers.warning}, ` : '') + '113 - "rfc7234 5.5.4"'; + } + headers.age = `${Math.round(age)}`; + headers.date = new Date(this.now()).toUTCString(); + return headers; + } + + /** + * Value of the Date response header or current time if Date was demed invalid + * @return timestamp + */ + date() { + if (this._trustServerDate) { + return this._serverDate(); + } + return this._responseTime; + } + + _serverDate() { + const dateValue = Date.parse(this._resHeaders.date) + if (isFinite(dateValue)) { + const maxClockDrift = 8*3600*1000; + const clockDrift = Math.abs(this._responseTime - dateValue); + if (clockDrift < maxClockDrift) { + return dateValue; + } + } + return this._responseTime; + } + + /** + * Value of the Age header, in seconds, updated for the current time. + * May be fractional. + * + * @return Number + */ + age() { + let age = Math.max(0, (this._responseTime - this.date())/1000); + if (this._resHeaders.age) { + let ageValue = this._ageValue(); + if (ageValue > age) age = ageValue; + } + + const residentTime = (this.now() - this._responseTime)/1000; + return age + residentTime; + } + + _ageValue() { + const ageValue = parseInt(this._resHeaders.age); + return isFinite(ageValue) ? ageValue : 0; + } + + /** + * Value of applicable max-age (or heuristic equivalent) in seconds. This counts since response's `Date`. + * + * For an up-to-date value, see `timeToLive()`. + * + * @return Number + */ + maxAge() { + if (!this.storable() || this._rescc['no-cache']) { + return 0; + } + + // Shared responses with cookies are cacheable according to the RFC, but IMHO it'd be unwise to do so by default + // so this implementation requires explicit opt-in via public header + if (this._isShared && (this._resHeaders['set-cookie'] && !this._rescc.public && !this._rescc.immutable)) { + return 0; + } + + if (this._resHeaders.vary === '*') { + return 0; + } + + if (this._isShared) { + if (this._rescc['proxy-revalidate']) { + return 0; + } + // if a response includes the s-maxage directive, a shared cache recipient MUST ignore the Expires field. + if (this._rescc['s-maxage']) { + return parseInt(this._rescc['s-maxage'], 10); + } + } + + // If a response includes a Cache-Control field with the max-age directive, a recipient MUST ignore the Expires field. + if (this._rescc['max-age']) { + return parseInt(this._rescc['max-age'], 10); + } + + const defaultMinTtl = this._rescc.immutable ? this._immutableMinTtl : 0; + + const dateValue = this._serverDate(); + if (this._resHeaders.expires) { + const expires = Date.parse(this._resHeaders.expires); + // A cache recipient MUST interpret invalid date formats, especially the value "0", as representing a time in the past (i.e., "already expired"). + if (Number.isNaN(expires) || expires < dateValue) { + return 0; + } + return Math.max(defaultMinTtl, (expires - dateValue)/1000); + } + + if (this._resHeaders['last-modified']) { + const lastModified = Date.parse(this._resHeaders['last-modified']); + if (isFinite(lastModified) && dateValue > lastModified) { + return Math.max(defaultMinTtl, (dateValue - lastModified)/1000 * this._cacheHeuristic); + } + } + + return defaultMinTtl; + } + + timeToLive() { + return Math.max(0, this.maxAge() - this.age())*1000; + } + + stale() { + return this.maxAge() <= this.age(); + } + + static fromObject(obj) { + return new this(undefined, undefined, {_fromObject:obj}); + } + + _fromObject(obj) { + if (this._responseTime) throw Error("Reinitialized"); + if (!obj || obj.v !== 1) throw Error("Invalid serialization"); + + this._responseTime = obj.t; + this._isShared = obj.sh; + this._cacheHeuristic = obj.ch; + this._immutableMinTtl = obj.imm !== undefined ? obj.imm : 24*3600*1000; + this._status = obj.st; + this._resHeaders = obj.resh; + this._rescc = obj.rescc; + this._method = obj.m; + this._url = obj.u; + this._host = obj.h; + this._noAuthorization = obj.a; + this._reqHeaders = obj.reqh; + this._reqcc = obj.reqcc; + } + + toObject() { + return { + v:1, + t: this._responseTime, + sh: this._isShared, + ch: this._cacheHeuristic, + imm: this._immutableMinTtl, + st: this._status, + resh: this._resHeaders, + rescc: this._rescc, + m: this._method, + u: this._url, + h: this._host, + a: this._noAuthorization, + reqh: this._reqHeaders, + reqcc: this._reqcc, + }; + } + + /** + * Headers for sending to the origin server to revalidate stale response. + * Allows server to return 304 to allow reuse of the previous response. + * + * Hop by hop headers are always stripped. + * Revalidation headers may be added or removed, depending on request. + */ + revalidationHeaders(incomingReq) { + this._assertRequestHasHeaders(incomingReq); + const headers = this._copyWithoutHopByHopHeaders(incomingReq.headers); + + // This implementation does not understand range requests + delete headers['if-range']; + + if (!this._requestMatches(incomingReq, true) || !this.storable()) { // revalidation allowed via HEAD + // not for the same resource, or wasn't allowed to be cached anyway + delete headers['if-none-match']; + delete headers['if-modified-since']; + return headers; + } + + /* MUST send that entity-tag in any cache validation request (using If-Match or If-None-Match) if an entity-tag has been provided by the origin server. */ + if (this._resHeaders.etag) { + headers['if-none-match'] = headers['if-none-match'] ? `${headers['if-none-match']}, ${this._resHeaders.etag}` : this._resHeaders.etag; + } + + // Clients MAY issue simple (non-subrange) GET requests with either weak validators or strong validators. Clients MUST NOT use weak validators in other forms of request. + const forbidsWeakValidators = headers['accept-ranges'] || headers['if-match'] || headers['if-unmodified-since'] || (this._method && this._method != 'GET'); + + /* SHOULD send the Last-Modified value in non-subrange cache validation requests (using If-Modified-Since) if only a Last-Modified value has been provided by the origin server. + Note: This implementation does not understand partial responses (206) */ + if (forbidsWeakValidators) { + delete headers['if-modified-since']; + + if (headers['if-none-match']) { + const etags = headers['if-none-match'].split(/,/).filter(etag => { + return !/^\s*W\//.test(etag); + }); + if (!etags.length) { + delete headers['if-none-match']; + } else { + headers['if-none-match'] = etags.join(',').trim(); + } + } + } else if (this._resHeaders['last-modified'] && !headers['if-modified-since']) { + headers['if-modified-since'] = this._resHeaders['last-modified']; + } + + return headers; + } + + /** + * Creates new CachePolicy with information combined from the previews response, + * and the new revalidation response. + * + * Returns {policy, modified} where modified is a boolean indicating + * whether the response body has been modified, and old cached body can't be used. + * + * @return {Object} {policy: CachePolicy, modified: Boolean} + */ + revalidatedPolicy(request, response) { + this._assertRequestHasHeaders(request); + if (!response || !response.headers) { + throw Error("Response headers missing"); + } + + // These aren't going to be supported exactly, since one CachePolicy object + // doesn't know about all the other cached objects. + let matches = false; + if (response.status !== undefined && response.status != 304) { + matches = false; + } else if (response.headers.etag && !/^\s*W\//.test(response.headers.etag)) { + // "All of the stored responses with the same strong validator are selected. + // If none of the stored responses contain the same strong validator, + // then the cache MUST NOT use the new response to update any stored responses." + matches = this._resHeaders.etag && this._resHeaders.etag.replace(/^\s*W\//,'') === response.headers.etag; + } else if (this._resHeaders.etag && response.headers.etag) { + // "If the new response contains a weak validator and that validator corresponds + // to one of the cache's stored responses, + // then the most recent of those matching stored responses is selected for update." + matches = this._resHeaders.etag.replace(/^\s*W\//,'') === response.headers.etag.replace(/^\s*W\//,''); + } else if (this._resHeaders['last-modified']) { + matches = this._resHeaders['last-modified'] === response.headers['last-modified']; + } else { + // If the new response does not include any form of validator (such as in the case where + // a client generates an If-Modified-Since request from a source other than the Last-Modified + // response header field), and there is only one stored response, and that stored response also + // lacks a validator, then that stored response is selected for update. + if (!this._resHeaders.etag && !this._resHeaders['last-modified'] && + !response.headers.etag && !response.headers['last-modified']) { + matches = true; + } + } + + if (!matches) { + return { + policy: new this.constructor(request, response), + // Client receiving 304 without body, even if it's invalid/mismatched has no option + // but to reuse a cached body. We don't have a good way to tell clients to do + // error recovery in such case. + modified: response.status != 304, + matches: false, + } + } + + // use other header fields provided in the 304 (Not Modified) response to replace all instances + // of the corresponding header fields in the stored response. + const headers = {}; + for(const k in this._resHeaders) { + headers[k] = k in response.headers && !excludedFromRevalidationUpdate[k] ? response.headers[k] : this._resHeaders[k]; + } + + const newResponse = Object.assign({}, response, { + status: this._status, + method: this._method, + headers, + }); + return { + policy: new this.constructor(request, newResponse, {shared: this._isShared, cacheHeuristic: this._cacheHeuristic, immutableMinTimeToLive: this._immutableMinTtl, trustServerDate: this._trustServerDate}), + modified: false, + matches: true, + }; + } +}; + + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const Readable = __webpack_require__(17).Readable; +const lowercaseKeys = __webpack_require__(69); + +class Response extends Readable { + constructor(statusCode, headers, body, url) { + if (typeof statusCode !== 'number') { + throw new TypeError('Argument `statusCode` should be a number'); + } + if (typeof headers !== 'object') { + throw new TypeError('Argument `headers` should be an object'); + } + if (!(body instanceof Buffer)) { + throw new TypeError('Argument `body` should be a buffer'); + } + if (typeof url !== 'string') { + throw new TypeError('Argument `url` should be a string'); + } + + super(); + this.statusCode = statusCode; + this.headers = lowercaseKeys(headers); + this.body = body; + this.url = url; + } + + _read() { + this.push(this.body); + this.push(null); + } +} + +module.exports = Response; + + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = function (obj) { + var ret = {}; + var keys = Object.keys(Object(obj)); + + for (var i = 0; i < keys.length; i++) { + ret[keys[i].toLowerCase()] = obj[keys[i]]; + } + + return ret; +}; + + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const PassThrough = __webpack_require__(17).PassThrough; +const mimicResponse = __webpack_require__(71); + +const cloneResponse = response => { + if (!(response && response.pipe)) { + throw new TypeError('Parameter `response` must be a response stream.'); + } + + const clone = new PassThrough(); + mimicResponse(response, clone); + + return response.pipe(clone); +}; + +module.exports = cloneResponse; + + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// We define these manually to ensure they're always copied +// even if they would move up the prototype chain +// https://nodejs.org/api/http.html#http_class_http_incomingmessage +const knownProps = [ + 'destroy', + 'setTimeout', + 'socket', + 'headers', + 'trailers', + 'rawHeaders', + 'statusCode', + 'httpVersion', + 'httpVersionMinor', + 'httpVersionMajor', + 'rawTrailers', + 'statusMessage' +]; + +module.exports = (fromStream, toStream) => { + const fromProps = new Set(Object.keys(fromStream).concat(knownProps)); + + for (const prop of fromProps) { + // Don't overwrite existing properties + if (prop in toStream) { + continue; + } + + toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop]; + } +}; + + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const EventEmitter = __webpack_require__(58); +const JSONB = __webpack_require__(73); + +const loadStore = opts => { + const adapters = { + redis: '@keyv/redis', + mongodb: '@keyv/mongo', + mongo: '@keyv/mongo', + sqlite: '@keyv/sqlite', + postgresql: '@keyv/postgres', + postgres: '@keyv/postgres', + mysql: '@keyv/mysql' + }; + if (opts.adapter || opts.uri) { + const adapter = opts.adapter || /^[^:]*/.exec(opts.uri)[0]; + return new (__webpack_require__(74)(adapters[adapter]))(opts); + } + return new Map(); +}; + +class Keyv extends EventEmitter { + constructor(uri, opts) { + super(); + this.opts = Object.assign( + { + namespace: 'keyv', + serialize: JSONB.stringify, + deserialize: JSONB.parse + }, + (typeof uri === 'string') ? { uri } : uri, + opts + ); + + if (!this.opts.store) { + const adapterOpts = Object.assign({}, this.opts); + this.opts.store = loadStore(adapterOpts); + } + + if (typeof this.opts.store.on === 'function') { + this.opts.store.on('error', err => this.emit('error', err)); + } + + this.opts.store.namespace = this.opts.namespace; + } + + _getKeyPrefix(key) { + return `${this.opts.namespace}:${key}`; + } + + get(key) { + key = this._getKeyPrefix(key); + const store = this.opts.store; + return Promise.resolve() + .then(() => store.get(key)) + .then(data => { + data = (typeof data === 'string') ? this.opts.deserialize(data) : data; + if (data === undefined) { + return undefined; + } + if (typeof data.expires === 'number' && Date.now() > data.expires) { + this.delete(key); + return undefined; + } + return data.value; + }); + } + + set(key, value, ttl) { + key = this._getKeyPrefix(key); + if (typeof ttl === 'undefined') { + ttl = this.opts.ttl; + } + if (ttl === 0) { + ttl = undefined; + } + const store = this.opts.store; + + return Promise.resolve() + .then(() => { + const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null; + value = { value, expires }; + return store.set(key, this.opts.serialize(value), ttl); + }) + .then(() => true); + } + + delete(key) { + key = this._getKeyPrefix(key); + const store = this.opts.store; + return Promise.resolve() + .then(() => store.delete(key)); + } + + clear() { + const store = this.opts.store; + return Promise.resolve() + .then(() => store.clear()); + } +} + +module.exports = Keyv; + + +/***/ }), +/* 73 */ +/***/ (function(module, exports) { + +//TODO: handle reviver/dehydrate function like normal +//and handle indentation, like normal. +//if anyone needs this... please send pull request. + +exports.stringify = function stringify (o) { + if('undefined' == typeof o) return o + + if(o && Buffer.isBuffer(o)) + return JSON.stringify(':base64:' + o.toString('base64')) + + if(o && o.toJSON) + o = o.toJSON() + + if(o && 'object' === typeof o) { + var s = '' + var array = Array.isArray(o) + s = array ? '[' : '{' + var first = true + + for(var k in o) { + var ignore = 'function' == typeof o[k] || (!array && 'undefined' === typeof o[k]) + if(Object.hasOwnProperty.call(o, k) && !ignore) { + if(!first) + s += ',' + first = false + if (array) { + if(o[k] == undefined) + s += 'null' + else + s += stringify(o[k]) + } else if (o[k] !== void(0)) { + s += stringify(k) + ':' + stringify(o[k]) + } + } + } + + s += array ? ']' : '}' + + return s + } else if ('string' === typeof o) { + return JSON.stringify(/^:/.test(o) ? ':' + o : o) + } else if ('undefined' === typeof o) { + return 'null'; + } else + return JSON.stringify(o) +} + +exports.parse = function (s) { + return JSON.parse(s, function (key, value) { + if('string' === typeof value) { + if(/^:base64:/.test(value)) + return new Buffer(value.substring(8), 'base64') + else + return /^:/.test(value) ? value.substring(1) : value + } + return value + }) +} + + +/***/ }), +/* 74 */ +/***/ (function(module, exports) { + +function webpackEmptyContext(req) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +} +webpackEmptyContext.keys = function() { return []; }; +webpackEmptyContext.resolve = webpackEmptyContext; +module.exports = webpackEmptyContext; +webpackEmptyContext.id = 74; + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const {Readable} = __webpack_require__(17); + +module.exports = input => ( + new Readable({ + read() { + this.push(input); + this.push(null); + } + }) +); + + +/***/ }), +/* 76 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const deferToConnect = __webpack_require__(77); + +module.exports = request => { + const timings = { + start: Date.now(), + socket: null, + lookup: null, + connect: null, + upload: null, + response: null, + end: null, + error: null, + phases: { + wait: null, + dns: null, + tcp: null, + request: null, + firstByte: null, + download: null, + total: null + } + }; + + const handleError = origin => { + const emit = origin.emit.bind(origin); + origin.emit = (event, ...args) => { + // Catches the `error` event + if (event === 'error') { + timings.error = Date.now(); + timings.phases.total = timings.error - timings.start; + + origin.emit = emit; + } + + // Saves the original behavior + return emit(event, ...args); + }; + }; + + let uploadFinished = false; + const onUpload = () => { + timings.upload = Date.now(); + timings.phases.request = timings.upload - timings.connect; + }; + + handleError(request); + + request.once('socket', socket => { + timings.socket = Date.now(); + timings.phases.wait = timings.socket - timings.start; + + const lookupListener = () => { + timings.lookup = Date.now(); + timings.phases.dns = timings.lookup - timings.socket; + }; + + socket.once('lookup', lookupListener); + + deferToConnect(socket, () => { + timings.connect = Date.now(); + + if (timings.lookup === null) { + socket.removeListener('lookup', lookupListener); + timings.lookup = timings.connect; + timings.phases.dns = timings.lookup - timings.socket; + } + + timings.phases.tcp = timings.connect - timings.lookup; + + if (uploadFinished && !timings.upload) { + onUpload(); + } + }); + }); + + request.once('finish', () => { + uploadFinished = true; + + if (timings.connect) { + onUpload(); + } + }); + + request.once('response', response => { + timings.response = Date.now(); + timings.phases.firstByte = timings.response - timings.upload; + + handleError(response); + + response.once('end', () => { + timings.end = Date.now(); + timings.phases.download = timings.end - timings.response; + timings.phases.total = timings.end - timings.start; + }); + }); + + return timings; +}; + + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Inspired by https://github.com/nodejs/node/blob/949e8851484c016c07f6cc9e5889f0f2e56baf2a/lib/_http_client.js#L706 +module.exports = (socket, method, ...args) => { + let call; + if (typeof method === 'function') { + call = method; + } else { + call = () => socket[method](...args); + } + + if (socket.writable && !socket.connecting) { + call(); + } else { + socket.once('connect', call); + } +}; + + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const net = __webpack_require__(79); + +class TimeoutError extends Error { + constructor(threshold, event) { + super(`Timeout awaiting '${event}' for ${threshold}ms`); + this.name = 'TimeoutError'; + this.code = 'ETIMEDOUT'; + this.event = event; + } +} + +const reentry = Symbol('reentry'); + +const noop = () => {}; + +module.exports = (request, delays, options) => { + /* istanbul ignore next: this makes sure timed-out isn't called twice */ + if (request[reentry]) { + return; + } + + request[reentry] = true; + + let stopNewTimeouts = false; + + const addTimeout = (delay, callback, ...args) => { + // An error had been thrown before. Going further would result in uncaught errors. + // See https://github.com/sindresorhus/got/issues/631#issuecomment-435675051 + if (stopNewTimeouts) { + return noop; + } + + // Event loop order is timers, poll, immediates. + // The timed event may emit during the current tick poll phase, so + // defer calling the handler until the poll phase completes. + let immediate; + const timeout = setTimeout(() => { + immediate = setImmediate(callback, delay, ...args); + /* istanbul ignore next: added in node v9.7.0 */ + if (immediate.unref) { + immediate.unref(); + } + }, delay); + + /* istanbul ignore next: in order to support electron renderer */ + if (timeout.unref) { + timeout.unref(); + } + + const cancel = () => { + clearTimeout(timeout); + clearImmediate(immediate); + }; + + cancelers.push(cancel); + + return cancel; + }; + + const {host, hostname} = options; + const timeoutHandler = (delay, event) => { + request.emit('error', new TimeoutError(delay, event)); + request.once('error', () => {}); // Ignore the `socket hung up` error made by request.abort() + + request.abort(); + }; + + const cancelers = []; + const cancelTimeouts = () => { + stopNewTimeouts = true; + cancelers.forEach(cancelTimeout => cancelTimeout()); + }; + + request.once('error', cancelTimeouts); + request.once('response', response => { + response.once('end', cancelTimeouts); + }); + + if (delays.request !== undefined) { + addTimeout(delays.request, timeoutHandler, 'request'); + } + + if (delays.socket !== undefined) { + const socketTimeoutHandler = () => { + timeoutHandler(delays.socket, 'socket'); + }; + + request.setTimeout(delays.socket, socketTimeoutHandler); + + // `request.setTimeout(0)` causes a memory leak. + // We can just remove the listener and forget about the timer - it's unreffed. + // See https://github.com/sindresorhus/got/issues/690 + cancelers.push(() => request.removeListener('timeout', socketTimeoutHandler)); + } + + if (delays.lookup !== undefined && !request.socketPath && !net.isIP(hostname || host)) { + request.once('socket', socket => { + /* istanbul ignore next: hard to test */ + if (socket.connecting) { + const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup'); + socket.once('lookup', cancelTimeout); + } + }); + } + + if (delays.connect !== undefined) { + request.once('socket', socket => { + /* istanbul ignore next: hard to test */ + if (socket.connecting) { + const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect'); + + if (request.socketPath || net.isIP(hostname || host)) { + socket.once('connect', timeConnect()); + } else { + socket.once('lookup', error => { + if (error === null) { + socket.once('connect', timeConnect()); + } + }); + } + } + }); + } + + if (delays.secureConnect !== undefined && options.protocol === 'https:') { + request.once('socket', socket => { + /* istanbul ignore next: hard to test */ + if (socket.connecting) { + socket.once('connect', () => { + const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect'); + socket.once('secureConnect', cancelTimeout); + }); + } + }); + } + + if (delays.send !== undefined) { + request.once('socket', socket => { + const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send'); + /* istanbul ignore next: hard to test */ + if (socket.connecting) { + socket.once('connect', () => { + request.once('upload-complete', timeRequest()); + }); + } else { + request.once('upload-complete', timeRequest()); + } + }); + } + + if (delays.response !== undefined) { + request.once('upload-complete', () => { + const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response'); + request.once('response', cancelTimeout); + }); + } +}; + +module.exports.TimeoutError = TimeoutError; + + +/***/ }), +/* 79 */ +/***/ (function(module, exports) { + +module.exports = require("net"); + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const fs = __webpack_require__(5); +const util = __webpack_require__(18); +const is = __webpack_require__(54); +const isFormData = __webpack_require__(81); + +module.exports = async options => { + const {body} = options; + + if (options.headers['content-length']) { + return Number(options.headers['content-length']); + } + + if (!body && !options.stream) { + return 0; + } + + if (is.string(body)) { + return Buffer.byteLength(body); + } + + if (isFormData(body)) { + return util.promisify(body.getLength.bind(body))(); + } + + if (body instanceof fs.ReadStream) { + const {size} = await util.promisify(fs.stat)(body.path); + return size; + } + + return null; +}; + + +/***/ }), +/* 81 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const is = __webpack_require__(54); + +module.exports = body => is.nodeStream(body) && is.function(body.getBoundary); + + +/***/ }), +/* 82 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const decompressResponse = __webpack_require__(83); +const is = __webpack_require__(54); +const mimicResponse = __webpack_require__(71); +const progress = __webpack_require__(85); + +module.exports = (response, options, emitter) => { + const downloadBodySize = Number(response.headers['content-length']) || null; + + const progressStream = progress.download(response, emitter, downloadBodySize); + + mimicResponse(response, progressStream); + + const newResponse = options.decompress === true && + is.function(decompressResponse) && + options.method !== 'HEAD' ? decompressResponse(progressStream) : progressStream; + + if (!options.decompress && ['gzip', 'deflate'].includes(response.headers['content-encoding'])) { + options.encoding = null; + } + + emitter.emit('response', newResponse); + + emitter.emit('downloadProgress', { + percent: 0, + transferred: 0, + total: downloadBodySize + }); + + response.pipe(progressStream); +}; + + +/***/ }), +/* 83 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const PassThrough = __webpack_require__(17).PassThrough; +const zlib = __webpack_require__(84); +const mimicResponse = __webpack_require__(71); + +module.exports = response => { + // TODO: Use Array#includes when targeting Node.js 6 + if (['gzip', 'deflate'].indexOf(response.headers['content-encoding']) === -1) { + return response; + } + + const unzip = zlib.createUnzip(); + const stream = new PassThrough(); + + mimicResponse(response, stream); + + unzip.on('error', err => { + if (err.code === 'Z_BUF_ERROR') { + stream.end(); + return; + } + + stream.emit('error', err); + }); + + response.pipe(unzip).pipe(stream); + + return stream; +}; + + +/***/ }), +/* 84 */ +/***/ (function(module, exports) { + +module.exports = require("zlib"); + +/***/ }), +/* 85 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const {Transform} = __webpack_require__(17); + +module.exports = { + download(response, emitter, downloadBodySize) { + let downloaded = 0; + + return new Transform({ + transform(chunk, encoding, callback) { + downloaded += chunk.length; + + const percent = downloadBodySize ? downloaded / downloadBodySize : 0; + + // Let `flush()` be responsible for emitting the last event + if (percent < 1) { + emitter.emit('downloadProgress', { + percent, + transferred: downloaded, + total: downloadBodySize + }); + } + + callback(null, chunk); + }, + + flush(callback) { + emitter.emit('downloadProgress', { + percent: 1, + transferred: downloaded, + total: downloadBodySize + }); + + callback(); + } + }); + }, + + upload(request, emitter, uploadBodySize) { + const uploadEventFrequency = 150; + let uploaded = 0; + let progressInterval; + + emitter.emit('uploadProgress', { + percent: 0, + transferred: 0, + total: uploadBodySize + }); + + request.once('error', () => { + clearInterval(progressInterval); + }); + + request.once('response', () => { + clearInterval(progressInterval); + + emitter.emit('uploadProgress', { + percent: 1, + transferred: uploaded, + total: uploadBodySize + }); + }); + + request.once('socket', socket => { + const onSocketConnect = () => { + progressInterval = setInterval(() => { + const lastUploaded = uploaded; + /* istanbul ignore next: see #490 (occurs randomly!) */ + const headersSize = request._header ? Buffer.byteLength(request._header) : 0; + uploaded = socket.bytesWritten - headersSize; + + // Don't emit events with unchanged progress and + // prevent last event from being emitted, because + // it's emitted when `response` is emitted + if (uploaded === lastUploaded || uploaded === uploadBodySize) { + return; + } + + emitter.emit('uploadProgress', { + percent: uploadBodySize ? uploaded / uploadBodySize : 0, + transferred: uploaded, + total: uploadBodySize + }); + }, uploadEventFrequency); + }; + + /* istanbul ignore next: hard to test */ + if (socket.connecting) { + socket.once('connect', onSocketConnect); + } else if (socket.writable) { + // The socket is being reused from pool, + // so the connect event will not be emitted + onSocketConnect(); + } + }); + } +}; + + +/***/ }), +/* 86 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const is = __webpack_require__(54); + +module.exports = url => { + const options = { + protocol: url.protocol, + hostname: url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname, + hash: url.hash, + search: url.search, + pathname: url.pathname, + href: url.href + }; + + if (is.string(url.port) && url.port.length > 0) { + options.port = Number(url.port); + } + + if (url.username || url.password) { + options.auth = `${url.username}:${url.password}`; + } + + options.path = is.null(url.search) ? url.pathname : `${url.pathname}${url.search}`; + + return options; +}; + + +/***/ }), +/* 87 */ +/***/ (function(module, exports) { + +function webpackEmptyContext(req) { + var e = new Error("Cannot find module '" + req + "'"); + e.code = 'MODULE_NOT_FOUND'; + throw e; +} +webpackEmptyContext.keys = function() { return []; }; +webpackEmptyContext.resolve = webpackEmptyContext; +module.exports = webpackEmptyContext; +webpackEmptyContext.id = 87; + +/***/ }), +/* 88 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const EventEmitter = __webpack_require__(58); +const getStream = __webpack_require__(61); +const is = __webpack_require__(54); +const PCancelable = __webpack_require__(53); +const requestAsEventEmitter = __webpack_require__(57); +const {HTTPError, ParseError, ReadError} = __webpack_require__(51); +const {options: mergeOptions} = __webpack_require__(89); +const {reNormalize} = __webpack_require__(91); + +const asPromise = options => { + const proxy = new EventEmitter(); + + const promise = new PCancelable((resolve, reject, onCancel) => { + const emitter = requestAsEventEmitter(options); + + onCancel(emitter.abort); + + emitter.on('response', async response => { + proxy.emit('response', response); + + const stream = is.null(options.encoding) ? getStream.buffer(response) : getStream(response, options); + + let data; + try { + data = await stream; + } catch (error) { + reject(new ReadError(error, options)); + return; + } + + const limitStatusCode = options.followRedirect ? 299 : 399; + + response.body = data; + + try { + for (const [index, hook] of Object.entries(options.hooks.afterResponse)) { + // eslint-disable-next-line no-await-in-loop + response = await hook(response, updatedOptions => { + updatedOptions = reNormalize(mergeOptions(options, { + ...updatedOptions, + retry: 0, + throwHttpErrors: false + })); + + // Remove any further hooks for that request, because we we'll call them anyway. + // The loop continues. We don't want duplicates (asPromise recursion). + updatedOptions.hooks.afterResponse = options.hooks.afterResponse.slice(0, index); + + return asPromise(updatedOptions); + }); + } + } catch (error) { + reject(error); + return; + } + + const {statusCode} = response; + + if (options.json && response.body) { + try { + response.body = JSON.parse(response.body); + } catch (error) { + if (statusCode >= 200 && statusCode < 300) { + const parseError = new ParseError(error, statusCode, options, data); + Object.defineProperty(parseError, 'response', {value: response}); + reject(parseError); + return; + } + } + } + + if (statusCode !== 304 && (statusCode < 200 || statusCode > limitStatusCode)) { + const error = new HTTPError(response, options); + Object.defineProperty(error, 'response', {value: response}); + if (emitter.retry(error) === false) { + if (options.throwHttpErrors) { + reject(error); + return; + } + + resolve(response); + } + + return; + } + + resolve(response); + }); + + emitter.once('error', reject); + [ + 'request', + 'redirect', + 'uploadProgress', + 'downloadProgress' + ].forEach(event => emitter.on(event, (...args) => proxy.emit(event, ...args))); + }); + + promise.on = (name, fn) => { + proxy.on(name, fn); + return promise; + }; + + return promise; +}; + +module.exports = asPromise; + + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const {URL} = __webpack_require__(52); +const is = __webpack_require__(54); +const knownHookEvents = __webpack_require__(90); + +const merge = (target, ...sources) => { + for (const source of sources) { + for (const [key, sourceValue] of Object.entries(source)) { + if (is.undefined(sourceValue)) { + continue; + } + + const targetValue = target[key]; + if (is.urlInstance(targetValue) && (is.urlInstance(sourceValue) || is.string(sourceValue))) { + target[key] = new URL(sourceValue, targetValue); + } else if (is.plainObject(sourceValue)) { + if (is.plainObject(targetValue)) { + target[key] = merge({}, targetValue, sourceValue); + } else { + target[key] = merge({}, sourceValue); + } + } else if (is.array(sourceValue)) { + target[key] = merge([], sourceValue); + } else { + target[key] = sourceValue; + } + } + } + + return target; +}; + +const mergeOptions = (...sources) => { + sources = sources.map(source => source || {}); + const merged = merge({}, ...sources); + + const hooks = {}; + for (const hook of knownHookEvents) { + hooks[hook] = []; + } + + for (const source of sources) { + if (source.hooks) { + for (const hook of knownHookEvents) { + hooks[hook] = hooks[hook].concat(source.hooks[hook]); + } + } + } + + merged.hooks = hooks; + + return merged; +}; + +const mergeInstances = (instances, methods) => { + const handlers = instances.map(instance => instance.defaults.handler); + const size = instances.length - 1; + + return { + methods, + options: mergeOptions(...instances.map(instance => instance.defaults.options)), + handler: (options, next) => { + let iteration = -1; + const iterate = options => handlers[++iteration](options, iteration === size ? next : iterate); + + return iterate(options); + } + }; +}; + +module.exports = merge; +module.exports.options = mergeOptions; +module.exports.instances = mergeInstances; + + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = [ + 'beforeError', + 'init', + 'beforeRequest', + 'beforeRedirect', + 'beforeRetry', + 'afterResponse' +]; + + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const {URL, URLSearchParams} = __webpack_require__(52); // TODO: Use the `URL` global when targeting Node.js 10 +const urlLib = __webpack_require__(52); +const is = __webpack_require__(54); +const urlParseLax = __webpack_require__(92); +const lowercaseKeys = __webpack_require__(69); +const urlToOptions = __webpack_require__(86); +const isFormData = __webpack_require__(81); +const merge = __webpack_require__(89); +const knownHookEvents = __webpack_require__(90); + +const retryAfterStatusCodes = new Set([413, 429, 503]); + +// `preNormalize` handles static options (e.g. headers). +// For example, when you create a custom instance and make a request +// with no static changes, they won't be normalized again. +// +// `normalize` operates on dynamic options - they cannot be saved. +// For example, `body` is everytime different per request. +// When it's done normalizing the new options, it performs merge() +// on the prenormalized options and the normalized ones. + +const preNormalize = (options, defaults) => { + if (is.nullOrUndefined(options.headers)) { + options.headers = {}; + } else { + options.headers = lowercaseKeys(options.headers); + } + + if (options.baseUrl && !options.baseUrl.toString().endsWith('/')) { + options.baseUrl += '/'; + } + + if (options.stream) { + options.json = false; + } + + if (is.nullOrUndefined(options.hooks)) { + options.hooks = {}; + } else if (!is.object(options.hooks)) { + throw new TypeError(`Parameter \`hooks\` must be an object, not ${is(options.hooks)}`); + } + + for (const event of knownHookEvents) { + if (is.nullOrUndefined(options.hooks[event])) { + if (defaults) { + options.hooks[event] = [...defaults.hooks[event]]; + } else { + options.hooks[event] = []; + } + } + } + + if (is.number(options.timeout)) { + options.gotTimeout = {request: options.timeout}; + } else if (is.object(options.timeout)) { + options.gotTimeout = options.timeout; + } + + delete options.timeout; + + const {retry} = options; + options.retry = { + retries: 0, + methods: [], + statusCodes: [], + errorCodes: [] + }; + + if (is.nonEmptyObject(defaults) && retry !== false) { + options.retry = {...defaults.retry}; + } + + if (retry !== false) { + if (is.number(retry)) { + options.retry.retries = retry; + } else { + options.retry = {...options.retry, ...retry}; + } + } + + if (options.gotTimeout) { + options.retry.maxRetryAfter = Math.min(...[options.gotTimeout.request, options.gotTimeout.connection].filter(n => !is.nullOrUndefined(n))); + } + + if (is.array(options.retry.methods)) { + options.retry.methods = new Set(options.retry.methods.map(method => method.toUpperCase())); + } + + if (is.array(options.retry.statusCodes)) { + options.retry.statusCodes = new Set(options.retry.statusCodes); + } + + if (is.array(options.retry.errorCodes)) { + options.retry.errorCodes = new Set(options.retry.errorCodes); + } + + return options; +}; + +const normalize = (url, options, defaults) => { + if (is.plainObject(url)) { + options = {...url, ...options}; + url = options.url || {}; + delete options.url; + } + + if (defaults) { + options = merge({}, defaults.options, options ? preNormalize(options, defaults.options) : {}); + } else { + options = merge({}, preNormalize(options)); + } + + if (!is.string(url) && !is.object(url)) { + throw new TypeError(`Parameter \`url\` must be a string or object, not ${is(url)}`); + } + + if (is.string(url)) { + if (options.baseUrl) { + if (url.toString().startsWith('/')) { + url = url.toString().slice(1); + } + + url = urlToOptions(new URL(url, options.baseUrl)); + } else { + url = url.replace(/^unix:/, 'http://$&'); + url = urlParseLax(url); + } + } else if (is(url) === 'URL') { + url = urlToOptions(url); + } + + // Override both null/undefined with default protocol + options = merge({path: ''}, url, {protocol: url.protocol || 'https:'}, options); + + for (const hook of options.hooks.init) { + const called = hook(options); + + if (is.promise(called)) { + throw new TypeError('The `init` hook must be a synchronous function'); + } + } + + const {baseUrl} = options; + Object.defineProperty(options, 'baseUrl', { + set: () => { + throw new Error('Failed to set baseUrl. Options are normalized already.'); + }, + get: () => baseUrl + }); + + const {query} = options; + if (is.nonEmptyString(query) || is.nonEmptyObject(query) || query instanceof URLSearchParams) { + if (!is.string(query)) { + options.query = (new URLSearchParams(query)).toString(); + } + + options.path = `${options.path.split('?')[0]}?${options.query}`; + delete options.query; + } + + if (options.hostname === 'unix') { + const matches = /(.+?):(.+)/.exec(options.path); + + if (matches) { + const [, socketPath, path] = matches; + options = { + ...options, + socketPath, + path, + host: null + }; + } + } + + const {headers} = options; + for (const [key, value] of Object.entries(headers)) { + if (is.nullOrUndefined(value)) { + delete headers[key]; + } + } + + if (options.json && is.undefined(headers.accept)) { + headers.accept = 'application/json'; + } + + if (options.decompress && is.undefined(headers['accept-encoding'])) { + headers['accept-encoding'] = 'gzip, deflate'; + } + + const {body} = options; + if (is.nullOrUndefined(body)) { + options.method = options.method ? options.method.toUpperCase() : 'GET'; + } else { + const isObject = is.object(body) && !is.buffer(body) && !is.nodeStream(body); + if (!is.nodeStream(body) && !is.string(body) && !is.buffer(body) && !(options.form || options.json)) { + throw new TypeError('The `body` option must be a stream.Readable, string or Buffer'); + } + + if (options.json && !(isObject || is.array(body))) { + throw new TypeError('The `body` option must be an Object or Array when the `json` option is used'); + } + + if (options.form && !isObject) { + throw new TypeError('The `body` option must be an Object when the `form` option is used'); + } + + if (isFormData(body)) { + // Special case for https://github.com/form-data/form-data + headers['content-type'] = headers['content-type'] || `multipart/form-data; boundary=${body.getBoundary()}`; + } else if (options.form) { + headers['content-type'] = headers['content-type'] || 'application/x-www-form-urlencoded'; + options.body = (new URLSearchParams(body)).toString(); + } else if (options.json) { + headers['content-type'] = headers['content-type'] || 'application/json'; + options.body = JSON.stringify(body); + } + + options.method = options.method ? options.method.toUpperCase() : 'POST'; + } + + if (!is.function(options.retry.retries)) { + const {retries} = options.retry; + + options.retry.retries = (iteration, error) => { + if (iteration > retries) { + return 0; + } + + if ((!error || !options.retry.errorCodes.has(error.code)) && (!options.retry.methods.has(error.method) || !options.retry.statusCodes.has(error.statusCode))) { + return 0; + } + + if (Reflect.has(error, 'headers') && Reflect.has(error.headers, 'retry-after') && retryAfterStatusCodes.has(error.statusCode)) { + let after = Number(error.headers['retry-after']); + if (is.nan(after)) { + after = Date.parse(error.headers['retry-after']) - Date.now(); + } else { + after *= 1000; + } + + if (after > options.retry.maxRetryAfter) { + return 0; + } + + return after; + } + + if (error.statusCode === 413) { + return 0; + } + + const noise = Math.random() * 100; + return ((2 ** (iteration - 1)) * 1000) + noise; + }; + } + + return options; +}; + +const reNormalize = options => normalize(urlLib.format(options), options); + +module.exports = normalize; +module.exports.preNormalize = preNormalize; +module.exports.reNormalize = reNormalize; + + +/***/ }), +/* 92 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const url = __webpack_require__(52); +const prependHttp = __webpack_require__(93); + +module.exports = (input, options) => { + if (typeof input !== 'string') { + throw new TypeError(`Expected \`url\` to be of type \`string\`, got \`${typeof input}\` instead.`); + } + + const finalUrl = prependHttp(input, Object.assign({https: true}, options)); + return url.parse(finalUrl); +}; + + +/***/ }), +/* 93 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = (url, opts) => { + if (typeof url !== 'string') { + throw new TypeError(`Expected \`url\` to be of type \`string\`, got \`${typeof url}\``); + } + + url = url.trim(); + opts = Object.assign({https: false}, opts); + + if (/^\.*\/|^(?!localhost)\w+:/.test(url)) { + return url; + } + + return url.replace(/^(?!(?:\w+:)?\/\/)/, opts.https ? 'https://' : 'http://'); +}; + + +/***/ }), +/* 94 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const is = __webpack_require__(54); + +module.exports = function deepFreeze(object) { + for (const [key, value] of Object.entries(object)) { + if (is.plainObject(value) || is.array(value)) { + deepFreeze(object[key]); + } + } + + return Object.freeze(object); +}; + + +/***/ }), +/* 95 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(96); + + +/***/ }), +/* 96 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var net = __webpack_require__(79); +var tls = __webpack_require__(97); +var http = __webpack_require__(39); +var https = __webpack_require__(47); +var events = __webpack_require__(58); +var assert = __webpack_require__(98); +var util = __webpack_require__(18); + + +exports.httpOverHttp = httpOverHttp; +exports.httpsOverHttp = httpsOverHttp; +exports.httpOverHttps = httpOverHttps; +exports.httpsOverHttps = httpsOverHttps; + + +function httpOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + return agent; +} + +function httpsOverHttp(options) { + var agent = new TunnelingAgent(options); + agent.request = http.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + +function httpOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + return agent; +} + +function httpsOverHttps(options) { + var agent = new TunnelingAgent(options); + agent.request = https.request; + agent.createSocket = createSecureSocket; + agent.defaultPort = 443; + return agent; +} + + +function TunnelingAgent(options) { + var self = this; + self.options = options || {}; + self.proxyOptions = self.options.proxy || {}; + self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets; + self.requests = []; + self.sockets = []; + + self.on('free', function onFree(socket, host, port, localAddress) { + var options = toOptions(host, port, localAddress); + for (var i = 0, len = self.requests.length; i < len; ++i) { + var pending = self.requests[i]; + if (pending.host === options.host && pending.port === options.port) { + // Detect the request to connect same origin server, + // reuse the connection. + self.requests.splice(i, 1); + pending.request.onSocket(socket); + return; + } + } + socket.destroy(); + self.removeSocket(socket); + }); +} +util.inherits(TunnelingAgent, events.EventEmitter); + +TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) { + var self = this; + var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress)); + + if (self.sockets.length >= this.maxSockets) { + // We are over limit so we'll add it to the queue. + self.requests.push(options); + return; + } + + // If we are under maxSockets create a new one. + self.createSocket(options, function(socket) { + socket.on('free', onFree); + socket.on('close', onCloseOrRemove); + socket.on('agentRemove', onCloseOrRemove); + req.onSocket(socket); + + function onFree() { + self.emit('free', socket, options); + } + + function onCloseOrRemove(err) { + self.removeSocket(socket); + socket.removeListener('free', onFree); + socket.removeListener('close', onCloseOrRemove); + socket.removeListener('agentRemove', onCloseOrRemove); + } + }); +}; + +TunnelingAgent.prototype.createSocket = function createSocket(options, cb) { + var self = this; + var placeholder = {}; + self.sockets.push(placeholder); + + var connectOptions = mergeOptions({}, self.proxyOptions, { + method: 'CONNECT', + path: options.host + ':' + options.port, + agent: false, + headers: { + host: options.host + ':' + options.port + } + }); + if (options.localAddress) { + connectOptions.localAddress = options.localAddress; + } + if (connectOptions.proxyAuth) { + connectOptions.headers = connectOptions.headers || {}; + connectOptions.headers['Proxy-Authorization'] = 'Basic ' + + new Buffer(connectOptions.proxyAuth).toString('base64'); + } + + debug('making CONNECT request'); + var connectReq = self.request(connectOptions); + connectReq.useChunkedEncodingByDefault = false; // for v0.6 + connectReq.once('response', onResponse); // for v0.6 + connectReq.once('upgrade', onUpgrade); // for v0.6 + connectReq.once('connect', onConnect); // for v0.7 or later + connectReq.once('error', onError); + connectReq.end(); + + function onResponse(res) { + // Very hacky. This is necessary to avoid http-parser leaks. + res.upgrade = true; + } + + function onUpgrade(res, socket, head) { + // Hacky. + process.nextTick(function() { + onConnect(res, socket, head); + }); + } + + function onConnect(res, socket, head) { + connectReq.removeAllListeners(); + socket.removeAllListeners(); + + if (res.statusCode !== 200) { + debug('tunneling socket could not be established, statusCode=%d', + res.statusCode); + socket.destroy(); + var error = new Error('tunneling socket could not be established, ' + + 'statusCode=' + res.statusCode); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; + } + if (head.length > 0) { + debug('got illegal response body from proxy'); + socket.destroy(); + var error = new Error('got illegal response body from proxy'); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + return; + } + debug('tunneling connection has established'); + self.sockets[self.sockets.indexOf(placeholder)] = socket; + return cb(socket); + } + + function onError(cause) { + connectReq.removeAllListeners(); + + debug('tunneling socket could not be established, cause=%s\n', + cause.message, cause.stack); + var error = new Error('tunneling socket could not be established, ' + + 'cause=' + cause.message); + error.code = 'ECONNRESET'; + options.request.emit('error', error); + self.removeSocket(placeholder); + } +}; + +TunnelingAgent.prototype.removeSocket = function removeSocket(socket) { + var pos = this.sockets.indexOf(socket) + if (pos === -1) { + return; + } + this.sockets.splice(pos, 1); + + var pending = this.requests.shift(); + if (pending) { + // If we have pending requests and a socket gets closed a new one + // needs to be created to take over in the pool for the one that closed. + this.createSocket(pending, function(socket) { + pending.request.onSocket(socket); + }); + } +}; + +function createSecureSocket(options, cb) { + var self = this; + TunnelingAgent.prototype.createSocket.call(self, options, function(socket) { + var hostHeader = options.request.getHeader('host'); + var tlsOptions = mergeOptions({}, self.options, { + socket: socket, + servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host + }); + + // 0 is dummy port for v0.6 + var secureSocket = tls.connect(0, tlsOptions); + self.sockets[self.sockets.indexOf(socket)] = secureSocket; + cb(secureSocket); + }); +} + + +function toOptions(host, port, localAddress) { + if (typeof host === 'string') { // since v0.10 + return { + host: host, + port: port, + localAddress: localAddress + }; + } + return host; // for v0.11 or later +} + +function mergeOptions(target) { + for (var i = 1, len = arguments.length; i < len; ++i) { + var overrides = arguments[i]; + if (typeof overrides === 'object') { + var keys = Object.keys(overrides); + for (var j = 0, keyLen = keys.length; j < keyLen; ++j) { + var k = keys[j]; + if (overrides[k] !== undefined) { + target[k] = overrides[k]; + } + } + } + } + return target; +} + + +var debug; +if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) { + debug = function() { + var args = Array.prototype.slice.call(arguments); + if (typeof args[0] === 'string') { + args[0] = 'TUNNEL: ' + args[0]; + } else { + args.unshift('TUNNEL:'); + } + console.error.apply(console, args); + } +} else { + debug = function() {}; +} +exports.debug = debug; // for test + + +/***/ }), +/* 97 */ +/***/ (function(module, exports) { + +module.exports = require("tls"); + +/***/ }), +/* 98 */ +/***/ (function(module, exports) { + +module.exports = require("assert"); + +/***/ }), +/* 99 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// Executes a chunk of code and calls a cleanup function once it returns (even +// if it throws an exception) +Object.defineProperty(exports, "__esModule", { value: true }); +async function releaseAfterUseAsync(fn, cleanup) { + if (!cleanup) + return await fn(); + try { + return await fn(); + } + finally { + await cleanup(); + } +} +exports.releaseAfterUseAsync = releaseAfterUseAsync; +// Executes a chunk of code but slightly modify its exception message if it +// throws something +async function prettifyAsyncErrors(fn, update) { + try { + return await fn(); + } + catch (error) { + error.message = update(error.message); + throw error; + } +} +exports.prettifyAsyncErrors = prettifyAsyncErrors; +// Same thing but synchronous +function prettifySyncErrors(fn, update) { + try { + return fn(); + } + catch (error) { + error.message = update(error.message); + throw error; + } +} +exports.prettifySyncErrors = prettifySyncErrors; +// Webpack has this annoying tendency to replace dynamic requires by a stub +// code that simply throws when called. It's all fine and dandy in the context +// of a web application, but is quite annoying when working with Node projects! +function dynamicRequire(path) { + // @ts-ignore + if (true) { + // @ts-ignore + return require(path); + } + else {} +} +exports.dynamicRequire = dynamicRequire; +// This function transforms an iterable into an array and sorts it according to +// the mapper functions provided as parameter. The mappers are expected to take +// each element from the iterable and generate a string from it, that will then +// be used to compare the entries. +// +// Using sortMap is more efficient than kinda reimplementing the logic in a sort +// predicate because sortMap caches the result of the mappers in such a way that +// they are guaranteed to be executed exactly once for each element. +function sortMap(values, mappers) { + const asArray = Array.from(values); + if (!Array.isArray(mappers)) + mappers = [mappers]; + const stringified = []; + for (const mapper of mappers) + stringified.push(asArray.map(value => mapper(value))); + const indices = asArray.map((_, index) => index); + indices.sort((a, b) => { + for (const layer of stringified) { + const comparison = layer[a] < layer[b] ? -1 : layer[a] > layer[b] ? +1 : 0; + if (comparison !== 0) { + return comparison; + } + } + return 0; + }); + return indices.map(index => { + return asArray[index]; + }); +} +exports.sortMap = sortMap; + + +/***/ }), +/* 100 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const shell_1 = __webpack_require__(101); +const path_1 = __webpack_require__(6); +const stream_1 = __webpack_require__(17); +const tmp_1 = __webpack_require__(110); +const Manifest_1 = __webpack_require__(112); +const StreamReport_1 = __webpack_require__(115); +const execUtils = __importStar(__webpack_require__(2)); +const structUtils = __importStar(__webpack_require__(113)); +async function makePathWrapper(location, name, argv0, args = []) { + if (process.platform === `win32`) { + await fslib_1.xfs.writeFilePromise(`${location}/${name}.cmd`, `@"${argv0}" ${args.join(` `)} %*\n`); + } + else { + await fslib_1.xfs.writeFilePromise(`${location}/${name}`, `#!/usr/bin/env bash\nexec "${argv0}" ${args.map(arg => `'${arg.replace(/'/g, `'"'"'`)}'`).join(` `)} "$@"\n`); + await fslib_1.xfs.chmodPromise(`${location}/${name}`, 0o755); + } +} +async function makeScriptEnv(project) { + const scriptEnv = {}; + for (const [key, value] of Object.entries(process.env)) + if (typeof value !== `undefined`) + scriptEnv[key.toLowerCase() !== `path` ? key : `PATH`] = value; + const binFolder = scriptEnv.BERRY_BIN_FOLDER = tmp_1.dirSync().name; + // Register some binaries that must be made available in all subprocesses + // spawned by Yarn (we thus ensure that they always use the right version) + await makePathWrapper(binFolder, `run`, process.execPath, [process.argv[1], `run`]); + await makePathWrapper(binFolder, `yarn`, process.execPath, [process.argv[1]]); + await makePathWrapper(binFolder, `yarnpkg`, process.execPath, [process.argv[1]]); + await makePathWrapper(binFolder, `node`, process.execPath); + await makePathWrapper(binFolder, `node-gyp`, process.execPath, [process.argv[1], `run`, `--top-level`, `node-gyp`]); + scriptEnv.PATH = scriptEnv.PATH + ? `${binFolder}${path_1.delimiter}${scriptEnv.PATH}` + : `${binFolder}`; + scriptEnv.npm_execpath = `${binFolder}/yarn`; + scriptEnv.npm_node_execpath = `${binFolder}/node`; + await project.configuration.triggerHook(hook => hook.setupScriptEnvironment, project, scriptEnv, async (name, argv0, args) => { + return await makePathWrapper(binFolder, name, argv0, args); + }); + return scriptEnv; +} +exports.makeScriptEnv = makeScriptEnv; +async function hasPackageScript(locator, scriptName, { project }) { + const pkg = project.storedPackages.get(locator.locatorHash); + if (!pkg) + throw new Error(`Package for ${structUtils.prettyLocator(project.configuration, locator)} not found in the project`); + return await fslib_1.ZipOpenFS.openPromise(async (zipOpenFs) => { + const configuration = project.configuration; + const linkers = project.configuration.getLinkers(); + const linkerOptions = { project, report: new StreamReport_1.StreamReport({ stdout: new stream_1.PassThrough(), configuration }) }; + const linker = linkers.find(linker => linker.supportsPackage(pkg, linkerOptions)); + if (!linker) + throw new Error(`The package ${structUtils.prettyLocator(project.configuration, pkg)} isn't supported by any of the available linkers`); + const packageLocation = await linker.findPackageLocation(pkg, linkerOptions); + const packageFs = new fslib_1.CwdFS(packageLocation, { baseFs: zipOpenFs }); + const manifest = await Manifest_1.Manifest.find(`.`, { baseFs: packageFs }); + return manifest.scripts.has(scriptName); + }); +} +exports.hasPackageScript = hasPackageScript; +async function executePackageScript(locator, scriptName, args, { cwd, project, stdin, stdout, stderr }) { + const { manifest, binFolder, env, cwd: realCwd } = await initializePackageEnvironment(locator, { project, cwd }); + const script = manifest.scripts.get(scriptName); + if (!script) + return; + try { + return await shell_1.execute(script, args, { cwd: realCwd, env, stdin, stdout, stderr }); + } + finally { + await fslib_1.xfs.removePromise(binFolder); + } +} +exports.executePackageScript = executePackageScript; +async function executePackageShellcode(locator, command, args, { cwd, project, stdin, stdout, stderr }) { + const { binFolder, env, cwd: realCwd } = await initializePackageEnvironment(locator, { project, cwd }); + try { + return await shell_1.execute(command, args, { cwd: realCwd, env, stdin, stdout, stderr }); + } + finally { + await fslib_1.xfs.removePromise(binFolder); + } +} +exports.executePackageShellcode = executePackageShellcode; +async function initializePackageEnvironment(locator, { project, cwd }) { + const pkg = project.storedPackages.get(locator.locatorHash); + if (!pkg) + throw new Error(`Package for ${structUtils.prettyLocator(project.configuration, locator)} not found in the project`); + return await fslib_1.ZipOpenFS.openPromise(async (zipOpenFs) => { + const configuration = project.configuration; + const linkers = project.configuration.getLinkers(); + const linkerOptions = { project, report: new StreamReport_1.StreamReport({ stdout: new stream_1.PassThrough(), configuration }) }; + const linker = linkers.find(linker => linker.supportsPackage(pkg, linkerOptions)); + if (!linker) + throw new Error(`The package ${structUtils.prettyLocator(project.configuration, pkg)} isn't supported by any of the available linkers`); + const env = await makeScriptEnv(project); + const binFolder = env.BERRY_BIN_FOLDER; + for (const [binaryName, [pkg, binaryPath]] of await getPackageAccessibleBinaries(locator, { project })) + await makePathWrapper(binFolder, binaryName, process.execPath, [binaryPath]); + const packageLocation = await linker.findPackageLocation(pkg, linkerOptions); + const packageFs = new fslib_1.CwdFS(packageLocation, { baseFs: zipOpenFs }); + const manifest = await Manifest_1.Manifest.find(`.`, { baseFs: packageFs }); + if (typeof cwd === `undefined`) + cwd = packageLocation; + return { manifest, binFolder, env, cwd }; + }); +} +async function executeWorkspaceScript(workspace, scriptName, args, { cwd, stdin, stdout, stderr }) { + return await executePackageScript(workspace.anchoredLocator, scriptName, args, { cwd, project: workspace.project, stdin, stdout, stderr }); +} +exports.executeWorkspaceScript = executeWorkspaceScript; +/** + * Return the binaries that can be accessed by the specified package + * + * @param locator The queried package + * @param project The project owning the package + */ +async function getPackageAccessibleBinaries(locator, { project }) { + const pkg = project.storedPackages.get(locator.locatorHash); + if (!pkg) + throw new Error(`Package for ${structUtils.prettyLocator(project.configuration, locator)} not found in the project`); + return await fslib_1.ZipOpenFS.openPromise(async (zipOpenFs) => { + const configuration = project.configuration; + const stdout = new stream_1.Writable(); + const linkers = project.configuration.getLinkers(); + const linkerOptions = { project, report: new StreamReport_1.StreamReport({ configuration, stdout }) }; + const binaries = new Map(); + const descriptors = [ + ...pkg.dependencies.values(), + ...pkg.peerDependencies.values(), + ]; + for (const descriptor of descriptors) { + const resolution = project.storedResolutions.get(descriptor.descriptorHash); + if (!resolution) + continue; + const pkg = project.storedPackages.get(resolution); + if (!pkg) + continue; + const linker = linkers.find(linker => linker.supportsPackage(pkg, linkerOptions)); + if (!linker) + continue; + const packageLocation = await linker.findPackageLocation(pkg, linkerOptions); + const packageFs = new fslib_1.CwdFS(packageLocation, { baseFs: zipOpenFs }); + const manifest = await Manifest_1.Manifest.find(`.`, { baseFs: packageFs }); + for (const [binName, file] of manifest.bin.entries()) { + const physicalPath = fslib_1.NodeFS.fromPortablePath(path_1.posix.resolve(packageLocation, file)); + binaries.set(binName, [pkg, physicalPath]); + } + } + return binaries; + }); +} +exports.getPackageAccessibleBinaries = getPackageAccessibleBinaries; +/** + * Return the binaries that can be accessed by the specified workspace + * + * @param workspace The queried workspace + */ +async function getWorkspaceAccessibleBinaries(workspace) { + return await getPackageAccessibleBinaries(workspace.anchoredLocator, { project: workspace.project }); +} +exports.getWorkspaceAccessibleBinaries = getWorkspaceAccessibleBinaries; +/** + * Execute a binary from the specified package. + * + * Note that "binary" in this sense means "a Javascript file". Actual native + * binaries cannot be executed this way, because we use Node in order to + * transparently read from the archives. + * + * @param locator The queried package + * @param binaryName The name of the binary file to execute + * @param args The arguments to pass to the file + */ +async function executePackageAccessibleBinary(locator, binaryName, args, { cwd, project, stdin, stdout, stderr }) { + const packageAccessibleBinaries = await getPackageAccessibleBinaries(locator, { project }); + const binary = packageAccessibleBinaries.get(binaryName); + if (!binary) + throw new Error(`Binary not found (${binaryName}) for ${structUtils.prettyLocator(project.configuration, locator)}`); + const [pkg, binaryPath] = binary; + const env = await makeScriptEnv(project); + for (const [binaryName, [pkg, binaryPath]] of packageAccessibleBinaries) + await makePathWrapper(env.BERRY_BIN_FOLDER, binaryName, process.execPath, [binaryPath]); + let result; + try { + result = await execUtils.pipevp(process.execPath, [binaryPath, ...args], { cwd, env, stdin, stdout, stderr }); + } + finally { + await fslib_1.xfs.removePromise(env.BERRY_BIN_FOLDER); + } + return result.code; +} +exports.executePackageAccessibleBinary = executePackageAccessibleBinary; +/** + * Execute a binary from the specified workspace + * + * @param workspace The queried package + * @param binaryName The name of the binary file to execute + * @param args The arguments to pass to the file + */ +async function executeWorkspaceAccessibleBinary(workspace, binaryName, args, { cwd, stdin, stdout, stderr }) { + return await executePackageAccessibleBinary(workspace.anchoredLocator, binaryName, args, { project: workspace.project, cwd, stdin, stdout, stderr }); +} +exports.executeWorkspaceAccessibleBinary = executeWorkspaceAccessibleBinary; + + +/***/ }), +/* 101 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const parsers_1 = __webpack_require__(102); +const path_1 = __webpack_require__(6); +const stream_1 = __webpack_require__(17); +const pipe_1 = __webpack_require__(109); +function cloneState(state, mergeWith = {}) { + const newState = Object.assign({}, state, mergeWith); + newState.environment = Object.assign({}, state.environment, mergeWith.environment); + newState.variables = Object.assign({}, state.variables, mergeWith.variables); + return newState; +} +const BUILTINS = new Map([ + [`cd`, async ([target, ...rest], opts, state) => { + const resolvedTarget = path_1.posix.resolve(state.cwd, fslib_1.NodeFS.toPortablePath(target)); + const stat = await fslib_1.xfs.statPromise(resolvedTarget); + if (!stat.isDirectory()) { + state.stderr.write(`cd: not a directory\n`); + return 1; + } + else { + state.cwd = target; + return 0; + } + }], + [`pwd`, async (args, opts, state) => { + state.stdout.write(`${fslib_1.NodeFS.fromPortablePath(state.cwd)}\n`); + return 0; + }], + [`true`, async (args, opts, state) => { + return 0; + }], + [`false`, async (args, opts, state) => { + return 1; + }], + [`exit`, async ([code, ...rest], opts, state) => { + return state.exitCode = parseInt(code, 10); + }], + [`echo`, async (args, opts, state) => { + state.stdout.write(`${args.join(` `)}\n`); + return 0; + }], +]); +async function executeBufferedSubshell(ast, opts, state) { + const chunks = []; + const stdout = new stream_1.PassThrough(); + stdout.on(`data`, chunk => chunks.push(chunk)); + await executeShellLine(ast, opts, cloneState(state, { stdout })); + return Buffer.concat(chunks).toString().replace(/[\r\n]+$/, ``); +} +async function interpolateArguments(commandArgs, opts, state) { + const interpolated = []; + let interpolatedSegments = []; + const split = (raw) => { + return raw.match(/[^ \r\n\t]+/g) || []; + }; + const push = (segment) => { + interpolatedSegments.push(segment); + }; + const close = () => { + if (interpolatedSegments.length > 0) + interpolated.push(interpolatedSegments.join(``)); + interpolatedSegments = []; + }; + const pushAndClose = (segment) => { + push(segment); + close(); + }; + for (const commandArg of commandArgs) { + for (const segment of commandArg) { + if (typeof segment === 'string') { + push(segment); + } + else { + switch (segment.type) { + case `shell`: + { + const raw = await executeBufferedSubshell(segment.shell, opts, state); + if (segment.quoted) { + push(raw); + } + else { + for (const part of split(raw)) { + pushAndClose(part); + } + } + } + break; + case `variable`: + { + switch (segment.name) { + case `#`: + { + push(String(opts.args.length)); + } + break; + case `@`: + { + if (segment.quoted) { + for (const raw of opts.args) { + pushAndClose(raw); + } + } + else { + for (const raw of opts.args) { + for (const part of split(raw)) { + pushAndClose(part); + } + } + } + } + break; + case `*`: + { + const raw = opts.args.join(` `); + if (segment.quoted) { + push(raw); + } + else { + for (const part of split(raw)) { + pushAndClose(part); + } + } + } + break; + default: + { + const argIndex = parseInt(segment.name, 10); + if (Number.isFinite(argIndex)) { + if (!(argIndex >= 0 && argIndex < opts.args.length)) { + throw new Error(`Unbound argument #${argIndex}`); + } + else { + push(opts.args[argIndex]); + } + } + else { + if (!(segment.name in state.variables)) { + throw new Error(`Unbound variable "${segment.name}"`); + } + else { + push(state.variables[segment.name]); + } + } + } + break; + } + } + break; + } + } + } + close(); + } + return interpolated; +} +/** + * Executes a command chain. A command chain is a list of commands linked + * together thanks to the use of either of the `|` or `|&` operators: + * + * $ cat hello | grep world | grep -v foobar + */ +function makeCommandAction(args, opts, state) { + if (!opts.builtins.has(args[0])) + args = [`command`, ...args]; + const [name, ...rest] = args; + if (name === `command`) { + return pipe_1.makeProcess(rest[0], rest.slice(1), { + cwd: fslib_1.NodeFS.fromPortablePath(state.cwd), + env: state.environment, + }); + } + const builtin = opts.builtins.get(name); + if (typeof builtin === `undefined`) + throw new Error(`Assertion failed: A builtin should exist for "${name}"`); + return pipe_1.makeBuiltin(async ({ stdin, stdout, stderr }) => { + state.stdin = stdin; + state.stdout = stdout; + state.stderr = stderr; + return await builtin(rest, opts, state); + }); +} +function makeSubshellAction(ast, opts, state) { + return (stdio) => { + const stdin = new stream_1.PassThrough(); + const promise = executeShellLine(ast, opts, cloneState(state, { stdin })); + return { stdin, promise }; + }; +} +async function executeCommandChain(node, opts, state) { + const parts = []; + let current = node; + let pipeType = null; + let execution = null; + while (current) { + // Only the final segment is allowed to modify the shell state; all the + // other ones are isolated + const activeState = current.then + ? Object.assign({}, state) : state; + let action; + switch (current.type) { + case `command`: + { + action = makeCommandAction(await interpolateArguments(current.args, opts, state), opts, activeState); + } + break; + case `subshell`: + { + // We don't interpolate the subshell because it will be recursively + // interpolated within its own context + action = makeSubshellAction(current.subshell, opts, activeState); + } + break; + } + if (typeof action === `undefined`) + throw new Error(`Assertion failed: An action should have been generated`); + if (pipeType === null) { + // If we're processing the left-most segment of the command, we start a + // new execution pipeline + execution = pipe_1.start(action, { + stdin: new pipe_1.ProtectedStream(activeState.stdin), + stdout: new pipe_1.ProtectedStream(activeState.stdout), + stderr: new pipe_1.ProtectedStream(activeState.stderr), + }); + } + else { + if (execution === null) + throw new Error(`The execution pipeline should have been setup`); + // Otherwise, depending on the exaxct pipe type, we either pipe stdout + // only or stdout and stderr + switch (pipeType) { + case `|`: + { + execution = execution.pipeTo(action); + } + break; + case `|&`: + { + execution = execution.pipeTo(action); + } + break; + } + } + if (current.then) { + pipeType = current.then.type; + current = current.then.chain; + } + else { + current = null; + } + } + if (execution === null) + throw new Error(`Assertion failed: The execution pipeline should have been setup`); + return await execution.run(); +} +/** + * Execute a command line. A command line is a list of command shells linked + * together thanks to the use of either of the `||` or `&&` operators. + */ +async function executeCommandLine(node, opts, state) { + if (!node.then) + return await executeCommandChain(node.chain, opts, state); + const code = await executeCommandChain(node.chain, opts, state); + // If the execution aborted (usually through "exit"), we must bailout + if (state.exitCode !== null) + return state.exitCode; + // We must update $?, which always contains the exit code from + // the right-most command + state.variables[`?`] = String(code); + switch (node.then.type) { + case `&&`: + { + if (code === 0) { + return await executeCommandLine(node.then.line, opts, state); + } + else { + return code; + } + } + break; + case `||`: + { + if (code !== 0) { + return await executeCommandLine(node.then.line, opts, state); + } + else { + return code; + } + } + break; + default: + { + throw new Error(`Unsupported command type: "${node.then.type}"`); + } + break; + } +} +async function executeShellLine(node, opts, state) { + let rightMostExitCode = 0; + for (const command of node) { + rightMostExitCode = await executeCommandLine(command, opts, state); + // If the execution aborted (usually through "exit"), we must bailout + if (state.exitCode !== null) + return state.exitCode; + // We must update $?, which always contains the exit code from + // the right-most command + state.variables[`?`] = String(rightMostExitCode); + } + return rightMostExitCode; +} +function locateArgsVariable(node) { + return node.some(command => { + while (command) { + let chain = command.chain; + while (chain) { + let hasArgs; + switch (chain.type) { + case `subshell`: + { + hasArgs = locateArgsVariable(chain.subshell); + } + break; + case `command`: + { + hasArgs = chain.args.some(arg => { + return arg.some(segment => { + if (typeof segment === 'string') + return false; + switch (segment.type) { + case `variable`: + { + return segment.name === `@` || segment.name === `#` || segment.name === `*` || Number.isFinite(parseInt(segment.name, 10)); + } + break; + case `shell`: + { + return locateArgsVariable(segment.shell); + } + break; + default: + { + return false; + } + break; + } + }); + }); + } + break; + } + if (hasArgs) + return true; + if (!chain.then) + break; + chain = chain.then.chain; + } + if (!command.then) + break; + command = command.then.line; + } + return false; + }); +} +async function execute(command, args = [], { builtins = {}, cwd = process.cwd(), env = process.env, stdin = process.stdin, stdout = process.stdout, stderr = process.stderr, variables = {}, } = {}) { + const normalizedEnv = {}; + for (const [key, value] of Object.entries(env)) + if (typeof value !== `undefined`) + normalizedEnv[key] = value; + const normalizedBuiltins = new Map(BUILTINS); + for (const [key, builtin] of Object.entries(builtins)) + normalizedBuiltins.set(key, builtin); + // This is meant to be the equivalent of /dev/null + if (stdin === null) { + stdin = new stream_1.PassThrough(); + stdin.end(); + } + const ast = parsers_1.parseShell(command); + // If the shell line doesn't use the args, inject it at the end of the + // right-most command + if (!locateArgsVariable(ast) && ast.length > 0) { + let command = ast[ast.length - 1]; + while (command.then) + command = command.then.line; + let chain = command.chain; + while (chain.then) + chain = chain.then.chain; + if (chain.type === `command`) { + chain.args = chain.args.concat(args.map(arg => { + return [arg]; + })); + } + } + return await executeShellLine(ast, { + args, + builtins: normalizedBuiltins, + initialStdin: stdin, + initialStdout: stdout, + initialStderr: stderr, + }, { + cwd, + environment: normalizedEnv, + exitCode: null, + stdin, + stdout, + stderr, + variables: Object.assign(Object.create(variables), { + [`?`]: 0, + }), + }); +} +exports.execute = execute; + + +/***/ }), +/* 102 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var shell_1 = __webpack_require__(103); +exports.parseShell = shell_1.parseShell; +var resolution_1 = __webpack_require__(105); +exports.parseResolution = resolution_1.parseResolution; +var syml_1 = __webpack_require__(107); +exports.parseSyml = syml_1.parseSyml; +exports.stringifySyml = syml_1.stringifySyml; + + +/***/ }), +/* 103 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const shell_1 = __webpack_require__(104); +function parseShell(source) { + try { + return shell_1.parse(source); + } + catch (error) { + if (error.location) + error.message = error.message.replace(/(\.)?$/, ` (line ${error.location.start.line}, column ${error.location.start.column})$1`); + throw error; + } +} +exports.parseShell = parseShell; + + +/***/ }), +/* 104 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + + + +function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); +} + +function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } +} + +peg$subclass(peg$SyntaxError, Error); + +peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + return "end of input"; + }, + + other: function(expectation) { + return expectation.description; + } + }; + + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + + function literalEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function classEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/\]/g, '\\]') + .replace(/\^/g, '\\^') + .replace(/-/g, '\\-') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + + function describeExpected(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + descriptions.sort(); + + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + + switch (descriptions.length) { + case 1: + return descriptions[0]; + + case 2: + return descriptions[0] + " or " + descriptions[1]; + + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + + function describeFound(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; +}; + +function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { Start: peg$parseStart }, + peg$startRuleFunction = peg$parseStart, + + peg$c0 = function(line) { return line ? line : [] }, + peg$c1 = function(main, then) { return [ main ].concat(then || []) }, + peg$c2 = ";", + peg$c3 = peg$literalExpectation(";", false), + peg$c4 = function(then) { return then }, + peg$c5 = function(chain, then) { return then ? { chain, then } : { chain } }, + peg$c6 = function(type, then) { return { type, line: then } }, + peg$c7 = "&&", + peg$c8 = peg$literalExpectation("&&", false), + peg$c9 = "||", + peg$c10 = peg$literalExpectation("||", false), + peg$c11 = function(main, then) { return then ? { ...main, then } : main }, + peg$c12 = function(type, then) { return { type, chain: then } }, + peg$c13 = "|&", + peg$c14 = peg$literalExpectation("|&", false), + peg$c15 = "|", + peg$c16 = peg$literalExpectation("|", false), + peg$c17 = "(", + peg$c18 = peg$literalExpectation("(", false), + peg$c19 = ")", + peg$c20 = peg$literalExpectation(")", false), + peg$c21 = function(subshell) { return { type: `subshell`, subshell } }, + peg$c22 = function(args) { return { type: `command`, args } }, + peg$c23 = function(segments) { return [].concat(... segments) }, + peg$c24 = function(string) { return string }, + peg$c25 = "'", + peg$c26 = peg$literalExpectation("'", false), + peg$c27 = function(text) { return [ text ] }, + peg$c28 = "\"", + peg$c29 = peg$literalExpectation("\"", false), + peg$c30 = function(segments) { return [ ... segments ] }, + peg$c31 = function(segments) { return segments }, + peg$c32 = function(shell) { return { type: `shell`, shell, quoted: true } }, + peg$c33 = function(name) { return { type: `variable`, name, quoted: true } }, + peg$c34 = function(shell) { return { type: `shell`, shell, quoted: false } }, + peg$c35 = function(name) { return { type: `variable`, name, quoted: false } }, + peg$c36 = "\\", + peg$c37 = peg$literalExpectation("\\", false), + peg$c38 = peg$anyExpectation(), + peg$c39 = function(c) { return c }, + peg$c40 = /^[^']/, + peg$c41 = peg$classExpectation(["'"], true, false), + peg$c42 = function(chars) { return chars.join(``) }, + peg$c43 = /^[^$"]/, + peg$c44 = peg$classExpectation(["$", "\""], true, false), + peg$c45 = "$(", + peg$c46 = peg$literalExpectation("$(", false), + peg$c47 = function(command) { return command }, + peg$c48 = "${", + peg$c49 = peg$literalExpectation("${", false), + peg$c50 = "}", + peg$c51 = peg$literalExpectation("}", false), + peg$c52 = function(name) { return name }, + peg$c53 = "$", + peg$c54 = peg$literalExpectation("$", false), + peg$c55 = /^[@*?#a-zA-Z0-9_\-]/, + peg$c56 = peg$classExpectation(["@", "*", "?", "#", ["a", "z"], ["A", "Z"], ["0", "9"], "_", "-"], false, false), + peg$c57 = function() { return text() }, + peg$c58 = /^[()$|<>&; \t"']/, + peg$c59 = peg$classExpectation(["(", ")", "$", "|", "<", ">", "&", ";", " ", "\t", "\"", "'"], false, false), + peg$c60 = /^[ \t]/, + peg$c61 = peg$classExpectation([" ", "\t"], false, false), + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + + function expected(description, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location + ); + } + + function error(message, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildSimpleError(message, location); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$anyExpectation() { + return { type: "any" }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], p; + + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + + p++; + } + + peg$posDetailsCache[pos] = details; + return details; + } + } + + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildSimpleError(message, location) { + return new peg$SyntaxError(message, null, null, location); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseStart() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseShellLine(); + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c0(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseShellLine() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseCommandLine(); + if (s1 !== peg$FAILED) { + s2 = peg$parseShellLineThen(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c1(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseShellLineThen() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 59) { + s2 = peg$c2; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c3); } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseShellLine(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseS(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseS(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c4(s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommandLine() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseCommandChain(); + if (s1 !== peg$FAILED) { + s2 = peg$parseCommandLineThen(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c5(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommandLineThen() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parseCommandLineType(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseCommandLine(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseS(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseS(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c6(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommandLineType() { + var s0; + + if (input.substr(peg$currPos, 2) === peg$c7) { + s0 = peg$c7; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c8); } + } + if (s0 === peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c9) { + s0 = peg$c9; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + } + + return s0; + } + + function peg$parseCommandChain() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = peg$parseCommand(); + if (s1 !== peg$FAILED) { + s2 = peg$parseCommandChainThen(); + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c11(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommandChainThen() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parseCommandChainType(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseCommandChain(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseS(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseS(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c12(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseCommandChainType() { + var s0; + + if (input.substr(peg$currPos, 2) === peg$c13) { + s0 = peg$c13; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c14); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 124) { + s0 = peg$c15; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c16); } + } + } + + return s0; + } + + function peg$parseCommand() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 40) { + s2 = peg$c17; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseShellLine(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseS(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseS(); + } + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s6 = peg$c19; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s6 !== peg$FAILED) { + s7 = []; + s8 = peg$parseS(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parseS(); + } + if (s7 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c21(s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseArgument(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseArgument(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c22(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseArgument() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseArgumentSegment(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseArgumentSegment(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c23(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseArgumentSegment() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseSglQuoteString(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c24(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseDblQuoteString(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c24(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsePlainString(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c24(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parseSglQuoteString() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 39) { + s1 = peg$c25; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c26); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseSglQuoteStringText(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 39) { + s3 = peg$c25; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c26); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c27(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseDblQuoteString() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c28; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c29); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseDblQuoteStringSegment(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseDblQuoteStringSegment(); + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c28; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c29); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c30(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsePlainString() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsePlainStringSegment(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsePlainStringSegment(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c31(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseDblQuoteStringSegment() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseSubshell(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c32(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseVariable(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c33(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parseDblQuoteStringText(); + } + } + + return s0; + } + + function peg$parsePlainStringSegment() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseSubshell(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c34(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseVariable(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c35(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$parsePlainStringText(); + } + } + + return s0; + } + + function peg$parseSglQuoteStringText() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s3 = peg$c36; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + if (peg$c40.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c41); } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s3 = peg$c36; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + if (peg$c40.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c41); } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c42(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseDblQuoteStringText() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s3 = peg$c36; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + if (peg$c43.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c44); } + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s3 = peg$c36; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + if (peg$c43.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c44); } + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c42(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsePlainStringText() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = []; + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s3 = peg$c36; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseSpecialShellChars(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 92) { + s3 = peg$c36; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = peg$currPos; + s3 = peg$currPos; + peg$silentFails++; + s4 = peg$parseSpecialShellChars(); + peg$silentFails--; + if (s4 === peg$FAILED) { + s3 = void 0; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + if (input.length > peg$currPos) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s2; + s3 = peg$c39(s4); + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c42(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseSubshell() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c45) { + s1 = peg$c45; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c46); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseShellLine(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 41) { + s3 = peg$c19; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c47(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseVariable() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c48) { + s1 = peg$c48; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseIdentifier(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 125) { + s3 = peg$c50; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c51); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 36) { + s1 = peg$c53; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c54); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseIdentifier(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + + return s0; + } + + function peg$parseIdentifier() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c55.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c56); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c55.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c56); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c57(); + } + s0 = s1; + + return s0; + } + + function peg$parseSpecialShellChars() { + var s0; + + if (peg$c58.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c59); } + } + + return s0; + } + + function peg$parseS() { + var s0, s1; + + s0 = []; + if (peg$c60.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c61); } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c60.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c61); } + } + } + } else { + s0 = peg$FAILED; + } + + return s0; + } + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } +} + +module.exports = { + SyntaxError: peg$SyntaxError, + parse: peg$parse +}; + + +/***/ }), +/* 105 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const resolution_1 = __webpack_require__(106); +function parseResolution(source) { + try { + return resolution_1.parse(source); + } + catch (error) { + if (error.location) + error.message = error.message.replace(/(\.)?$/, ` (line ${error.location.start.line}, column ${error.location.start.column})$1`); + throw error; + } +} +exports.parseResolution = parseResolution; + + +/***/ }), +/* 106 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + + + +function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); +} + +function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } +} + +peg$subclass(peg$SyntaxError, Error); + +peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + return "end of input"; + }, + + other: function(expectation) { + return expectation.description; + } + }; + + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + + function literalEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function classEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/\]/g, '\\]') + .replace(/\^/g, '\\^') + .replace(/-/g, '\\-') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + + function describeExpected(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + descriptions.sort(); + + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + + switch (descriptions.length) { + case 1: + return descriptions[0]; + + case 2: + return descriptions[0] + " or " + descriptions[1]; + + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + + function describeFound(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; +}; + +function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { resolution: peg$parseresolution }, + peg$startRuleFunction = peg$parseresolution, + + peg$c0 = "/", + peg$c1 = peg$literalExpectation("/", false), + peg$c2 = function(from, descriptor) { return { from, descriptor } }, + peg$c3 = function(descriptor) { return { descriptor } }, + peg$c4 = "@", + peg$c5 = peg$literalExpectation("@", false), + peg$c6 = function(fullName, description) { return { fullName, description } }, + peg$c7 = function(fullName) { return { fullName } }, + peg$c8 = function() { return text() }, + peg$c9 = /^[^\/@]/, + peg$c10 = peg$classExpectation(["/", "@"], true, false), + peg$c11 = /^[^\/]/, + peg$c12 = peg$classExpectation(["/"], true, false), + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + + function expected(description, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location + ); + } + + function error(message, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildSimpleError(message, location); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$anyExpectation() { + return { type: "any" }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], p; + + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + + p++; + } + + peg$posDetailsCache[pos] = details; + return details; + } + } + + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildSimpleError(message, location) { + return new peg$SyntaxError(message, null, null, location); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseresolution() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsespecifier(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s2 = peg$c0; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsespecifier(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c2(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsespecifier(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c3(s1); + } + s0 = s1; + } + + return s0; + } + + function peg$parsespecifier() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + s1 = peg$parsefullName(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 64) { + s2 = peg$c4; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c5); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parsedescription(); + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c6(s1, s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parsefullName(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c7(s1); + } + s0 = s1; + } + + return s0; + } + + function peg$parsefullName() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 64) { + s1 = peg$c4; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c5); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseident(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 47) { + s3 = peg$c0; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c1); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parseident(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c8(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseident(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c8(); + } + s0 = s1; + } + + return s0; + } + + function peg$parseident() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c9.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c9.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c8(); + } + s0 = s1; + + return s0; + } + + function peg$parsedescription() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (peg$c11.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + if (peg$c11.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c8(); + } + s0 = s1; + + return s0; + } + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } +} + +module.exports = { + SyntaxError: peg$SyntaxError, + parse: peg$parse +}; + + +/***/ }), +/* 107 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const syml_1 = __webpack_require__(108); +const simpleStringPattern = /^(?![-?:,\][{}#&*!|>'"%@` \t\r\n]).([ \t]*(?![,\][{}:# \t\r\n]).)*$/; +// The following keys will always be stored at the top of the object, in the +// specified order. It's not fair but life isn't fair either. +const specialObjectKeys = [`__metadata`, `version`, `resolution`, `dependencies`, `peerDependencies`, `dependenciesMeta`, `peerDependenciesMeta`]; +function stringifyString(value) { + if (value.match(simpleStringPattern)) { + return value; + } + else { + return JSON.stringify(value); + } +} +function stringifyValue(value, indentLevel) { + if (value === null) { + if (indentLevel === 0) { + throw new Error(`Null is not a valid top-level value`); + } + else { + return ` null`; + } + } + if (typeof value === `number` || typeof value === `boolean`) { + if (indentLevel === 0) { + return `${value.toString()}\n`; + } + else { + return ` ${value.toString()}`; + } + } + if (typeof value === `string`) { + if (indentLevel === 0) { + return `${stringifyString(value)}\n`; + } + else { + return ` ${stringifyString(value)}`; + } + } + if (Array.isArray(value)) { + const indent = ` `.repeat(indentLevel); + return value.map(sub => { + return `\n${indent}-${stringifyValue(sub, indentLevel + 1)}`; + }).join(``); + } + if (typeof value === `object` && value) { + const indent = ` `.repeat(indentLevel); + const keys = Object.keys(value).sort((a, b) => { + const aIndex = specialObjectKeys.indexOf(a); + const bIndex = specialObjectKeys.indexOf(b); + if (aIndex === -1 && bIndex === -1) + return a < b ? -1 : a > b ? +1 : 0; + if (aIndex !== -1 && bIndex === -1) + return -1; + if (aIndex === -1 && bIndex !== -1) + return +1; + return aIndex - bIndex; + }); + const fields = keys.filter(key => { + return value[key] !== undefined; + }).map(key => { + return `${indent}${stringifyString(key)}:${stringifyValue(value[key], indentLevel + 1)}`; + }).join(indentLevel === 0 ? `\n\n` : `\n`); + if (indentLevel === 0) { + return fields ? `${fields}\n` : ``; + } + else { + return `\n${fields}`; + } + } + throw new Error(`Unsupported value type (${value})`); +} +function stringifySyml(value) { + return stringifyValue(value, 0); +} +exports.stringifySyml = stringifySyml; +function parseSyml(source) { + try { + return syml_1.parse(source.endsWith(`\n`) ? source : `${source}\n`); + } + catch (error) { + if (error.location) + error.message = error.message.replace(/(\.)?$/, ` (line ${error.location.start.line}, column ${error.location.start.column})$1`); + throw error; + } +} +exports.parseSyml = parseSyml; + + +/***/ }), +/* 108 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + + + +function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); +} + +function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } +} + +peg$subclass(peg$SyntaxError, Error); + +peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + return "end of input"; + }, + + other: function(expectation) { + return expectation.description; + } + }; + + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + + function literalEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function classEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/\]/g, '\\]') + .replace(/\^/g, '\\^') + .replace(/-/g, '\\-') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + + function describeExpected(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + descriptions.sort(); + + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + + switch (descriptions.length) { + case 1: + return descriptions[0]; + + case 2: + return descriptions[0] + " or " + descriptions[1]; + + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + + function describeFound(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; +}; + +function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { Start: peg$parseStart }, + peg$startRuleFunction = peg$parseStart, + + peg$c0 = function(statements) { return [].concat(... statements) }, + peg$c1 = "-", + peg$c2 = peg$literalExpectation("-", false), + peg$c3 = function(value) { return value }, + peg$c4 = function(statements) { return Object.assign({}, ... statements) }, + peg$c5 = "#", + peg$c6 = peg$literalExpectation("#", false), + peg$c7 = peg$anyExpectation(), + peg$c8 = function() { return {} }, + peg$c9 = ":", + peg$c10 = peg$literalExpectation(":", false), + peg$c11 = function(property, value) { return {[property]: value} }, + peg$c12 = ",", + peg$c13 = peg$literalExpectation(",", false), + peg$c14 = function(property, other) { return other }, + peg$c15 = function(property, others, value) { return Object.assign({}, ... [property].concat(others).map(property => ({[property]: value}))) }, + peg$c16 = function(statements) { return statements }, + peg$c17 = function(expression) { return expression }, + peg$c18 = peg$otherExpectation("correct indentation"), + peg$c19 = " ", + peg$c20 = peg$literalExpectation(" ", false), + peg$c21 = function(spaces) { return spaces.length === indentLevel * INDENT_STEP }, + peg$c22 = function(spaces) { return spaces.length === (indentLevel + 1) * INDENT_STEP }, + peg$c23 = function() { indentLevel++; return true }, + peg$c24 = function() { indentLevel--; return true }, + peg$c25 = function() { return text() }, + peg$c26 = peg$otherExpectation("pseudostring"), + peg$c27 = /^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/, + peg$c28 = peg$classExpectation(["\r", "\n", "\t", " ", "?", ":", ",", "]", "[", "{", "}", "#", "&", "*", "!", "|", ">", "'", "\"", "%", "@", "`", "-"], true, false), + peg$c29 = /^[^\r\n\t ,\][{}:#"']/, + peg$c30 = peg$classExpectation(["\r", "\n", "\t", " ", ",", "]", "[", "{", "}", ":", "#", "\"", "'"], true, false), + peg$c31 = function() { return text().replace(/^ *| *$/g, '') }, + peg$c32 = "--", + peg$c33 = peg$literalExpectation("--", false), + peg$c34 = /^[a-zA-Z\/0-9]/, + peg$c35 = peg$classExpectation([["a", "z"], ["A", "Z"], "/", ["0", "9"]], false, false), + peg$c36 = /^[^\r\n\t :,]/, + peg$c37 = peg$classExpectation(["\r", "\n", "\t", " ", ":", ","], true, false), + peg$c38 = "null", + peg$c39 = peg$literalExpectation("null", false), + peg$c40 = function() { return null }, + peg$c41 = "true", + peg$c42 = peg$literalExpectation("true", false), + peg$c43 = function() { return true }, + peg$c44 = "false", + peg$c45 = peg$literalExpectation("false", false), + peg$c46 = function() { return false }, + peg$c47 = peg$otherExpectation("string"), + peg$c48 = "\"", + peg$c49 = peg$literalExpectation("\"", false), + peg$c50 = function() { return "" }, + peg$c51 = function(chars) { return chars }, + peg$c52 = function(chars) { return chars.join(``) }, + peg$c53 = /^[^"\\\0-\x1F\x7F]/, + peg$c54 = peg$classExpectation(["\"", "\\", ["\0", "\x1F"], "\x7F"], true, false), + peg$c55 = "\\\"", + peg$c56 = peg$literalExpectation("\\\"", false), + peg$c57 = function() { return `"` }, + peg$c58 = "\\\\", + peg$c59 = peg$literalExpectation("\\\\", false), + peg$c60 = function() { return `\\` }, + peg$c61 = "\\/", + peg$c62 = peg$literalExpectation("\\/", false), + peg$c63 = function() { return `/` }, + peg$c64 = "\\b", + peg$c65 = peg$literalExpectation("\\b", false), + peg$c66 = function() { return `\b` }, + peg$c67 = "\\f", + peg$c68 = peg$literalExpectation("\\f", false), + peg$c69 = function() { return `\f` }, + peg$c70 = "\\n", + peg$c71 = peg$literalExpectation("\\n", false), + peg$c72 = function() { return `\n` }, + peg$c73 = "\\r", + peg$c74 = peg$literalExpectation("\\r", false), + peg$c75 = function() { return `\r` }, + peg$c76 = "\\t", + peg$c77 = peg$literalExpectation("\\t", false), + peg$c78 = function() { return `\t` }, + peg$c79 = "\\u", + peg$c80 = peg$literalExpectation("\\u", false), + peg$c81 = function(h1, h2, h3, h4) { + return String.fromCharCode(parseInt(`0x${h1}${h2}${h3}${h4}`)); + }, + peg$c82 = /^[0-9a-fA-F]/, + peg$c83 = peg$classExpectation([["0", "9"], ["a", "f"], ["A", "F"]], false, false), + peg$c84 = peg$otherExpectation("blank space"), + peg$c85 = /^[ \t]/, + peg$c86 = peg$classExpectation([" ", "\t"], false, false), + peg$c87 = peg$otherExpectation("white space"), + peg$c88 = /^[ \t\n\r]/, + peg$c89 = peg$classExpectation([" ", "\t", "\n", "\r"], false, false), + peg$c90 = "\r\n", + peg$c91 = peg$literalExpectation("\r\n", false), + peg$c92 = "\n", + peg$c93 = peg$literalExpectation("\n", false), + peg$c94 = "\r", + peg$c95 = peg$literalExpectation("\r", false), + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + + function expected(description, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location + ); + } + + function error(message, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildSimpleError(message, location); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$anyExpectation() { + return { type: "any" }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], p; + + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + + p++; + } + + peg$posDetailsCache[pos] = details; + return details; + } + } + + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildSimpleError(message, location) { + return new peg$SyntaxError(message, null, null, location); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parseStart() { + var s0; + + s0 = peg$parsePropertyStatements(); + + return s0; + } + + function peg$parseItemStatements() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseItemStatement(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseItemStatement(); + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c0(s1); + } + s0 = s1; + + return s0; + } + + function peg$parseItemStatement() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + s1 = peg$parseSamedent(); + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s2 = peg$c1; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s2 !== peg$FAILED) { + s3 = peg$parseB(); + if (s3 !== peg$FAILED) { + s4 = peg$parseExpression(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c3(s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsePropertyStatements() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsePropertyStatement(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsePropertyStatement(); + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c4(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsePropertyStatement() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = peg$parseB(); + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + s2 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 35) { + s3 = peg$c5; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c6); } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseEOL(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + s6 = peg$currPos; + peg$silentFails++; + s7 = peg$parseEOL(); + peg$silentFails--; + if (s7 === peg$FAILED) { + s6 = void 0; + } else { + peg$currPos = s6; + s6 = peg$FAILED; + } + if (s6 !== peg$FAILED) { + if (input.length > peg$currPos) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c7); } + } + if (s7 !== peg$FAILED) { + s6 = [s6, s7]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s3 = [s3, s4]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + if (s2 === peg$FAILED) { + s2 = null; + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseEOL_ANY(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseEOL_ANY(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c8(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseSamedent(); + if (s1 !== peg$FAILED) { + s2 = peg$parseName(); + if (s2 !== peg$FAILED) { + s3 = peg$parseB(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c9; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseB(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + s6 = peg$parseExpression(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c11(s2, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseSamedent(); + if (s1 !== peg$FAILED) { + s2 = peg$parseLegacyName(); + if (s2 !== peg$FAILED) { + s3 = peg$parseB(); + if (s3 === peg$FAILED) { + s3 = null; + } + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s4 = peg$c9; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + if (s4 !== peg$FAILED) { + s5 = peg$parseB(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + s6 = peg$parseExpression(); + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c11(s2, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseSamedent(); + if (s1 !== peg$FAILED) { + s2 = peg$parseLegacyName(); + if (s2 !== peg$FAILED) { + s3 = peg$parseB(); + if (s3 !== peg$FAILED) { + s4 = peg$parseLegacyLiteral(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseEOL_ANY(); + if (s6 !== peg$FAILED) { + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseEOL_ANY(); + } + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c11(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseSamedent(); + if (s1 !== peg$FAILED) { + s2 = peg$parseLegacyName(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + s5 = peg$parseB(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s6 = peg$c12; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c13); } + } + if (s6 !== peg$FAILED) { + s7 = peg$parseB(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parseLegacyName(); + if (s8 !== peg$FAILED) { + peg$savedPos = s4; + s5 = peg$c14(s2, s8); + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + s5 = peg$parseB(); + if (s5 === peg$FAILED) { + s5 = null; + } + if (s5 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 44) { + s6 = peg$c12; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c13); } + } + if (s6 !== peg$FAILED) { + s7 = peg$parseB(); + if (s7 === peg$FAILED) { + s7 = null; + } + if (s7 !== peg$FAILED) { + s8 = peg$parseLegacyName(); + if (s8 !== peg$FAILED) { + peg$savedPos = s4; + s5 = peg$c14(s2, s8); + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseB(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 58) { + s5 = peg$c9; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseB(); + if (s6 === peg$FAILED) { + s6 = null; + } + if (s6 !== peg$FAILED) { + s7 = peg$parseExpression(); + if (s7 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c15(s2, s3, s7); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + + return s0; + } + + function peg$parseExpression() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = peg$currPos; + peg$silentFails++; + s2 = peg$currPos; + s3 = peg$parseEOL(); + if (s3 !== peg$FAILED) { + s4 = peg$parseExtradent(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 45) { + s5 = peg$c1; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c2); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parseB(); + if (s6 !== peg$FAILED) { + s3 = [s3, s4, s5, s6]; + s2 = s3; + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + } else { + peg$currPos = s2; + s2 = peg$FAILED; + } + peg$silentFails--; + if (s2 !== peg$FAILED) { + peg$currPos = s1; + s1 = void 0; + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + s2 = peg$parseEOL_ANY(); + if (s2 !== peg$FAILED) { + s3 = peg$parseIndent(); + if (s3 !== peg$FAILED) { + s4 = peg$parseItemStatements(); + if (s4 !== peg$FAILED) { + s5 = peg$parseDedent(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c16(s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s2 = peg$parseIndent(); + if (s2 !== peg$FAILED) { + s3 = peg$parsePropertyStatements(); + if (s3 !== peg$FAILED) { + s4 = peg$parseDedent(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c16(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseLiteral(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseEOL_ANY(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseEOL_ANY(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c17(s1); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseSamedent() { + var s0, s1, s2; + + peg$silentFails++; + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 32) { + s2 = peg$c19; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 32) { + s2 = peg$c19; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c21(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c18); } + } + + return s0; + } + + function peg$parseExtradent() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + if (input.charCodeAt(peg$currPos) === 32) { + s2 = peg$c19; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + while (s2 !== peg$FAILED) { + s1.push(s2); + if (input.charCodeAt(peg$currPos) === 32) { + s2 = peg$c19; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c20); } + } + } + if (s1 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s2 = peg$c22(s1); + if (s2) { + s2 = void 0; + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseIndent() { + var s0; + + peg$savedPos = peg$currPos; + s0 = peg$c23(); + if (s0) { + s0 = void 0; + } else { + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseDedent() { + var s0; + + peg$savedPos = peg$currPos; + s0 = peg$c24(); + if (s0) { + s0 = void 0; + } else { + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseName() { + var s0; + + s0 = peg$parsestring(); + if (s0 === peg$FAILED) { + s0 = peg$parsepseudostring(); + } + + return s0; + } + + function peg$parseLegacyName() { + var s0, s1, s2; + + s0 = peg$parsestring(); + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = []; + s2 = peg$parsepseudostringLegacy(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsepseudostringLegacy(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c25(); + } + s0 = s1; + } + + return s0; + } + + function peg$parseLiteral() { + var s0; + + s0 = peg$parsenull(); + if (s0 === peg$FAILED) { + s0 = peg$parseboolean(); + if (s0 === peg$FAILED) { + s0 = peg$parsestring(); + if (s0 === peg$FAILED) { + s0 = peg$parsepseudostring(); + } + } + } + + return s0; + } + + function peg$parseLegacyLiteral() { + var s0; + + s0 = peg$parsenull(); + if (s0 === peg$FAILED) { + s0 = peg$parsestring(); + if (s0 === peg$FAILED) { + s0 = peg$parsepseudostringLegacy(); + } + } + + return s0; + } + + function peg$parsepseudostring() { + var s0, s1, s2, s3, s4, s5; + + peg$silentFails++; + s0 = peg$currPos; + if (peg$c27.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c28); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parseB(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + if (peg$c29.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c30); } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parseB(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + if (peg$c29.test(input.charAt(peg$currPos))) { + s5 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c30); } + } + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c31(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c26); } + } + + return s0; + } + + function peg$parsepseudostringLegacy() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c32) { + s1 = peg$c32; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c33); } + } + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + if (peg$c34.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c35); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c36.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c36.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c37); } + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c31(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsenull() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c38) { + s1 = peg$c38; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c39); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c40(); + } + s0 = s1; + + return s0; + } + + function peg$parseboolean() { + var s0, s1; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c41) { + s1 = peg$c41; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c42); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c43(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 5) === peg$c44) { + s1 = peg$c44; + peg$currPos += 5; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c45); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c46(); + } + s0 = s1; + } + + return s0; + } + + function peg$parsestring() { + var s0, s1, s2, s3; + + peg$silentFails++; + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s2 = peg$c48; + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c50(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 34) { + s1 = peg$c48; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsechars(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 34) { + s3 = peg$c48; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c51(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c47); } + } + + return s0; + } + + function peg$parsechars() { + var s0, s1, s2; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parsechar(); + if (s2 !== peg$FAILED) { + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parsechar(); + } + } else { + s1 = peg$FAILED; + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c52(s1); + } + s0 = s1; + + return s0; + } + + function peg$parsechar() { + var s0, s1, s2, s3, s4, s5; + + if (peg$c53.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c54); } + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c55) { + s1 = peg$c55; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c56); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c57(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c58) { + s1 = peg$c58; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c59); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c60(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c61) { + s1 = peg$c61; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c63(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c64) { + s1 = peg$c64; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c65); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c66(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c67) { + s1 = peg$c67; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c68); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c69(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c70) { + s1 = peg$c70; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c72(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c73) { + s1 = peg$c73; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c74); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c75(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c76) { + s1 = peg$c76; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c77); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c78(); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c79) { + s1 = peg$c79; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c80); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parsehexDigit(); + if (s2 !== peg$FAILED) { + s3 = peg$parsehexDigit(); + if (s3 !== peg$FAILED) { + s4 = peg$parsehexDigit(); + if (s4 !== peg$FAILED) { + s5 = peg$parsehexDigit(); + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c81(s2, s3, s4, s5); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + } + } + } + } + } + + return s0; + } + + function peg$parsehexDigit() { + var s0; + + if (peg$c82.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c83); } + } + + return s0; + } + + function peg$parseB() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c85.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c86); } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c85.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c86); } + } + } + } else { + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c84); } + } + + return s0; + } + + function peg$parseS() { + var s0, s1; + + peg$silentFails++; + s0 = []; + if (peg$c88.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + if (s1 !== peg$FAILED) { + while (s1 !== peg$FAILED) { + s0.push(s1); + if (peg$c88.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c89); } + } + } + } else { + s0 = peg$FAILED; + } + peg$silentFails--; + if (s0 === peg$FAILED) { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c87); } + } + + return s0; + } + + function peg$parseEOL_ANY() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parseEOL(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = peg$parseB(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseEOL(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = peg$parseB(); + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseEOL(); + if (s5 !== peg$FAILED) { + s4 = [s4, s5]; + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + s1 = [s1, s2]; + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseEOL() { + var s0; + + if (input.substr(peg$currPos, 2) === peg$c90) { + s0 = peg$c90; + peg$currPos += 2; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c91); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 10) { + s0 = peg$c92; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c93); } + } + if (s0 === peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 13) { + s0 = peg$c94; + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c95); } + } + } + } + + return s0; + } + + + const INDENT_STEP = 2; + + let indentLevel = 0; + + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } +} + +module.exports = { + SyntaxError: peg$SyntaxError, + parse: peg$parse +}; + + +/***/ }), +/* 109 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cross_spawn_1 = __importDefault(__webpack_require__(20)); +const stream_1 = __webpack_require__(17); +var Pipe; +(function (Pipe) { + Pipe[Pipe["STDOUT"] = 1] = "STDOUT"; + Pipe[Pipe["STDERR"] = 2] = "STDERR"; +})(Pipe || (Pipe = {})); +; +function nextTick() { + return new Promise(resolve => { + process.nextTick(resolve); + }); +} +function makeProcess(name, args, opts) { + return (stdio) => { + const stdin = stdio[0] instanceof stream_1.PassThrough + ? `pipe` + : stdio[0]; + const stdout = stdio[1] instanceof stream_1.PassThrough + ? `pipe` + : stdio[1]; + const stderr = stdio[2] instanceof stream_1.PassThrough + ? `pipe` + : stdio[2]; + const child = cross_spawn_1.default(name, args, Object.assign({}, opts, { stdio: [ + stdin, + stdout, + stderr, + ] })); + if (stdio[0] instanceof stream_1.PassThrough) + stdio[0].pipe(child.stdin); + if (stdio[1] instanceof stream_1.PassThrough) + child.stdout.pipe(stdio[1]); + if (stdio[2] instanceof stream_1.PassThrough) + child.stderr.pipe(stdio[2]); + return { + stdin: child.stdin, + promise: new Promise(resolve => { + child.on(`error`, error => { + // @ts-ignore + switch (error.code) { + case `ENOENT`: + { + stdio[2].write(`command not found: ${name}\n`); + resolve(127); + } + break; + case `EACCESS`: + { + stdio[2].write(`permission denied: ${name}\n`); + resolve(128); + } + break; + default: + { + stdio[2].write(`uncaught error: ${error.message}\n`); + resolve(1); + } + break; + } + }); + child.on(`exit`, code => { + if (code !== null) { + resolve(code); + } + else { + resolve(129); + } + }); + }), + }; + }; +} +exports.makeProcess = makeProcess; +function makeBuiltin(builtin) { + return (stdio) => { + const stdin = stdio[0] === `pipe` + ? new stream_1.PassThrough() + : stdio[0]; + return { + stdin, + promise: nextTick().then(() => builtin({ + stdin, + stdout: stdio[1], + stderr: stdio[2], + })), + }; + }; +} +exports.makeBuiltin = makeBuiltin; +class ProtectedStream { + constructor(stream) { + this.stream = stream; + } + close() { + // Ignore close request + } + get() { + return this.stream; + } +} +exports.ProtectedStream = ProtectedStream; +class PipeStream { + constructor() { + this.stream = null; + } + close() { + if (this.stream === null) { + throw new Error(`Assertion failed: No stream attached`); + } + else { + this.stream.end(); + } + } + attach(stream) { + this.stream = stream; + } + get() { + if (this.stream === null) { + throw new Error(`Assertion failed: No stream attached`); + } + else { + return this.stream; + } + } +} +class Handle { + constructor(ancestor, implementation) { + this.stdin = null; + this.stdout = null; + this.stderr = null; + this.pipe = null; + this.ancestor = ancestor; + this.implementation = implementation; + } + static start(implementation, { stdin, stdout, stderr }) { + const chain = new Handle(null, implementation); + chain.stdin = stdin; + chain.stdout = stdout; + chain.stderr = stderr; + return chain; + } + pipeTo(implementation, source = Pipe.STDOUT) { + const next = new Handle(this, implementation); + const pipe = new PipeStream(); + next.pipe = pipe; + next.stdout = this.stdout; + next.stderr = this.stderr; + if ((source & Pipe.STDOUT) === Pipe.STDOUT) + this.stdout = pipe; + else if (this.ancestor !== null) + this.stderr = this.ancestor.stdout; + if ((source & Pipe.STDERR) === Pipe.STDERR) + this.stderr = pipe; + else if (this.ancestor !== null) + this.stderr = this.ancestor.stderr; + return next; + } + async exec() { + const stdio = [ + `ignore`, + `ignore`, + `ignore`, + ]; + if (this.pipe) { + stdio[0] = `pipe`; + } + else { + if (this.stdin === null) { + throw new Error(`Assertion failed: No input stream registered`); + } + else { + stdio[0] = this.stdin.get(); + } + } + let stdoutLock; + if (this.stdout === null) { + throw new Error(`Assertion failed: No output stream registered`); + } + else { + stdoutLock = this.stdout; + stdio[1] = stdoutLock.get(); + } + let stderrLock; + if (this.stderr === null) { + throw new Error(`Assertion failed: No error stream registered`); + } + else { + stderrLock = this.stderr; + stdio[2] = stderrLock.get(); + } + const child = this.implementation(stdio); + if (this.pipe) + this.pipe.attach(child.stdin); + return await child.promise.then(code => { + stdoutLock.close(); + stderrLock.close(); + return code; + }); + } + async run() { + const promises = []; + for (let handle = this; handle; handle = handle.ancestor) + promises.push(handle.exec()); + const exitCodes = await Promise.all(promises); + return exitCodes[0]; + } +} +exports.Handle = Handle; +function start(p, opts) { + return Handle.start(p, opts); +} +exports.start = start; + + +/***/ }), +/* 110 */ +/***/ (function(module, exports, __webpack_require__) { + +/*! + * Tmp + * + * Copyright (c) 2011-2017 KARASZI Istvan + * + * MIT Licensed + */ + +/* + * Module dependencies. + */ +const fs = __webpack_require__(5); +const path = __webpack_require__(6); +const crypto = __webpack_require__(16); +const osTmpDir = __webpack_require__(111); +const _c = process.binding('constants'); + +/* + * The working inner variables. + */ +const + /** + * The temporary directory. + * @type {string} + */ + tmpDir = osTmpDir(), + + // the random characters to choose from + RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', + + TEMPLATE_PATTERN = /XXXXXX/, + + DEFAULT_TRIES = 3, + + CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR), + + EBADF = _c.EBADF || _c.os.errno.EBADF, + ENOENT = _c.ENOENT || _c.os.errno.ENOENT, + + DIR_MODE = 448 /* 0o700 */, + FILE_MODE = 384 /* 0o600 */, + + // this will hold the objects need to be removed on exit + _removeObjects = []; + +var + _gracefulCleanup = false, + _uncaughtException = false; + +/** + * Random name generator based on crypto. + * Adapted from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript + * + * @param {number} howMany + * @returns {string} the generated random name + * @private + */ +function _randomChars(howMany) { + var + value = [], + rnd = null; + + // make sure that we do not fail because we ran out of entropy + try { + rnd = crypto.randomBytes(howMany); + } catch (e) { + rnd = crypto.pseudoRandomBytes(howMany); + } + + for (var i = 0; i < howMany; i++) { + value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]); + } + + return value.join(''); +} + +/** + * Checks whether the `obj` parameter is defined or not. + * + * @param {Object} obj + * @returns {boolean} true if the object is undefined + * @private + */ +function _isUndefined(obj) { + return typeof obj === 'undefined'; +} + +/** + * Parses the function arguments. + * + * This function helps to have optional arguments. + * + * @param {(Options|Function)} options + * @param {Function} callback + * @returns {Array} parsed arguments + * @private + */ +function _parseArguments(options, callback) { + if (typeof options == 'function') { + return [callback || {}, options]; + } + + if (_isUndefined(options)) { + return [{}, callback]; + } + + return [options, callback]; +} + +/** + * Generates a new temporary name. + * + * @param {Object} opts + * @returns {string} the new random name according to opts + * @private + */ +function _generateTmpName(opts) { + if (opts.name) { + return path.join(opts.dir || tmpDir, opts.name); + } + + // mkstemps like template + if (opts.template) { + return opts.template.replace(TEMPLATE_PATTERN, _randomChars(6)); + } + + // prefix and postfix + const name = [ + opts.prefix || 'tmp-', + process.pid, + _randomChars(12), + opts.postfix || '' + ].join(''); + + return path.join(opts.dir || tmpDir, name); +} + +/** + * Gets a temporary file name. + * + * @param {(Options|tmpNameCallback)} options options or callback + * @param {?tmpNameCallback} callback the callback function + */ +function tmpName(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1], + tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES; + + if (isNaN(tries) || tries < 0) + return cb(new Error('Invalid tries')); + + if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) + return cb(new Error('Invalid template provided')); + + (function _getUniqueName() { + const name = _generateTmpName(opts); + + // check whether the path exists then retry if needed + fs.stat(name, function (err) { + if (!err) { + if (tries-- > 0) return _getUniqueName(); + + return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name)); + } + + cb(null, name); + }); + }()); +} + +/** + * Synchronous version of tmpName. + * + * @param {Object} options + * @returns {string} the generated random name + * @throws {Error} if the options are invalid or could not generate a filename + */ +function tmpNameSync(options) { + var + args = _parseArguments(options), + opts = args[0], + tries = opts.name ? 1 : opts.tries || DEFAULT_TRIES; + + if (isNaN(tries) || tries < 0) + throw new Error('Invalid tries'); + + if (opts.template && !opts.template.match(TEMPLATE_PATTERN)) + throw new Error('Invalid template provided'); + + do { + const name = _generateTmpName(opts); + try { + fs.statSync(name); + } catch (e) { + return name; + } + } while (tries-- > 0); + + throw new Error('Could not get a unique tmp filename, max tries reached'); +} + +/** + * Creates and opens a temporary file. + * + * @param {(Options|fileCallback)} options the config options or the callback function + * @param {?fileCallback} callback + */ +function file(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + opts.postfix = (_isUndefined(opts.postfix)) ? '.tmp' : opts.postfix; + + // gets a temporary filename + tmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create and open the file + fs.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err, fd) { + if (err) return cb(err); + + if (opts.discardDescriptor) { + return fs.close(fd, function _discardCallback(err) { + if (err) { + // Low probability, and the file exists, so this could be + // ignored. If it isn't we certainly need to unlink the + // file, and if that fails too its error is more + // important. + try { + fs.unlinkSync(name); + } catch (e) { + if (!isENOENT(e)) { + err = e; + } + } + return cb(err); + } + cb(null, name, undefined, _prepareTmpFileRemoveCallback(name, -1, opts)); + }); + } + if (opts.detachDescriptor) { + return cb(null, name, fd, _prepareTmpFileRemoveCallback(name, -1, opts)); + } + cb(null, name, fd, _prepareTmpFileRemoveCallback(name, fd, opts)); + }); + }); +} + +/** + * Synchronous version of file. + * + * @param {Options} options + * @returns {FileSyncObject} object consists of name, fd and removeCallback + * @throws {Error} if cannot create a file + */ +function fileSync(options) { + var + args = _parseArguments(options), + opts = args[0]; + + opts.postfix = opts.postfix || '.tmp'; + + const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor; + const name = tmpNameSync(opts); + var fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE); + if (opts.discardDescriptor) { + fs.closeSync(fd); + fd = undefined; + } + + return { + name: name, + fd: fd, + removeCallback: _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts) + }; +} + +/** + * Removes files and folders in a directory recursively. + * + * @param {string} root + * @private + */ +function _rmdirRecursiveSync(root) { + const dirs = [root]; + + do { + var + dir = dirs.pop(), + deferred = false, + files = fs.readdirSync(dir); + + for (var i = 0, length = files.length; i < length; i++) { + var + file = path.join(dir, files[i]), + stat = fs.lstatSync(file); // lstat so we don't recurse into symlinked directories + + if (stat.isDirectory()) { + if (!deferred) { + deferred = true; + dirs.push(dir); + } + dirs.push(file); + } else { + fs.unlinkSync(file); + } + } + + if (!deferred) { + fs.rmdirSync(dir); + } + } while (dirs.length !== 0); +} + +/** + * Creates a temporary directory. + * + * @param {(Options|dirCallback)} options the options or the callback function + * @param {?dirCallback} callback + */ +function dir(options, callback) { + var + args = _parseArguments(options, callback), + opts = args[0], + cb = args[1]; + + // gets a temporary filename + tmpName(opts, function _tmpNameCreated(err, name) { + if (err) return cb(err); + + // create the directory + fs.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err) { + if (err) return cb(err); + + cb(null, name, _prepareTmpDirRemoveCallback(name, opts)); + }); + }); +} + +/** + * Synchronous version of dir. + * + * @param {Options} options + * @returns {DirSyncObject} object consists of name and removeCallback + * @throws {Error} if it cannot create a directory + */ +function dirSync(options) { + var + args = _parseArguments(options), + opts = args[0]; + + const name = tmpNameSync(opts); + fs.mkdirSync(name, opts.mode || DIR_MODE); + + return { + name: name, + removeCallback: _prepareTmpDirRemoveCallback(name, opts) + }; +} + +/** + * Prepares the callback for removal of the temporary file. + * + * @param {string} name the path of the file + * @param {number} fd file descriptor + * @param {Object} opts + * @returns {fileCallback} + * @private + */ +function _prepareTmpFileRemoveCallback(name, fd, opts) { + const removeCallback = _prepareRemoveCallback(function _removeCallback(fdPath) { + try { + if (0 <= fdPath[0]) { + fs.closeSync(fdPath[0]); + } + } + catch (e) { + // under some node/windows related circumstances, a temporary file + // may have not be created as expected or the file was already closed + // by the user, in which case we will simply ignore the error + if (!isEBADF(e) && !isENOENT(e)) { + // reraise any unanticipated error + throw e; + } + } + try { + fs.unlinkSync(fdPath[1]); + } + catch (e) { + if (!isENOENT(e)) { + // reraise any unanticipated error + throw e; + } + } + }, [fd, name]); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + return removeCallback; +} + +/** + * Prepares the callback for removal of the temporary directory. + * + * @param {string} name + * @param {Object} opts + * @returns {Function} the callback + * @private + */ +function _prepareTmpDirRemoveCallback(name, opts) { + const removeFunction = opts.unsafeCleanup ? _rmdirRecursiveSync : fs.rmdirSync.bind(fs); + const removeCallback = _prepareRemoveCallback(removeFunction, name); + + if (!opts.keep) { + _removeObjects.unshift(removeCallback); + } + + return removeCallback; +} + +/** + * Creates a guarded function wrapping the removeFunction call. + * + * @param {Function} removeFunction + * @param {Object} arg + * @returns {Function} + * @private + */ +function _prepareRemoveCallback(removeFunction, arg) { + var called = false; + + return function _cleanupCallback(next) { + if (!called) { + const index = _removeObjects.indexOf(_cleanupCallback); + if (index >= 0) { + _removeObjects.splice(index, 1); + } + + called = true; + removeFunction(arg); + } + + if (next) next(null); + }; +} + +/** + * The garbage collector. + * + * @private + */ +function _garbageCollector() { + if (_uncaughtException && !_gracefulCleanup) { + return; + } + + // the function being called removes itself from _removeObjects, + // loop until _removeObjects is empty + while (_removeObjects.length) { + try { + _removeObjects[0].call(null); + } catch (e) { + // already removed? + } + } +} + +/** + * Helper for testing against EBADF to compensate changes made to Node 7.x under Windows. + */ +function isEBADF(error) { + return isExpectedError(error, -EBADF, 'EBADF'); +} + +/** + * Helper for testing against ENOENT to compensate changes made to Node 7.x under Windows. + */ +function isENOENT(error) { + return isExpectedError(error, -ENOENT, 'ENOENT'); +} + +/** + * Helper to determine whether the expected error code matches the actual code and errno, + * which will differ between the supported node versions. + * + * - Node >= 7.0: + * error.code {String} + * error.errno {String|Number} any numerical value will be negated + * + * - Node >= 6.0 < 7.0: + * error.code {String} + * error.errno {Number} negated + * + * - Node >= 4.0 < 6.0: introduces SystemError + * error.code {String} + * error.errno {Number} negated + * + * - Node >= 0.10 < 4.0: + * error.code {Number} negated + * error.errno n/a + */ +function isExpectedError(error, code, errno) { + return error.code == code || error.code == errno; +} + +/** + * Sets the graceful cleanup. + * + * Also removes the created files and directories when an uncaught exception occurs. + */ +function setGracefulCleanup() { + _gracefulCleanup = true; +} + +const version = process.versions.node.split('.').map(function (value) { + return parseInt(value, 10); +}); + +if (version[0] === 0 && (version[1] < 9 || version[1] === 9 && version[2] < 5)) { + process.addListener('uncaughtException', function _uncaughtExceptionThrown(err) { + _uncaughtException = true; + _garbageCollector(); + + throw err; + }); +} + +process.addListener('exit', function _exit(code) { + if (code) _uncaughtException = true; + _garbageCollector(); +}); + +/** + * Configuration options. + * + * @typedef {Object} Options + * @property {?number} tries the number of tries before give up the name generation + * @property {?string} template the "mkstemp" like filename template + * @property {?string} name fix name + * @property {?string} dir the tmp directory to use + * @property {?string} prefix prefix for the generated name + * @property {?string} postfix postfix for the generated name + */ + +/** + * @typedef {Object} FileSyncObject + * @property {string} name the name of the file + * @property {string} fd the file descriptor + * @property {fileCallback} removeCallback the callback function to remove the file + */ + +/** + * @typedef {Object} DirSyncObject + * @property {string} name the name of the directory + * @property {fileCallback} removeCallback the callback function to remove the directory + */ + +/** + * @callback tmpNameCallback + * @param {?Error} err the error object if anything goes wrong + * @param {string} name the temporary file name + */ + +/** + * @callback fileCallback + * @param {?Error} err the error object if anything goes wrong + * @param {string} name the temporary file name + * @param {number} fd the file descriptor + * @param {cleanupCallback} fn the cleanup callback function + */ + +/** + * @callback dirCallback + * @param {?Error} err the error object if anything goes wrong + * @param {string} name the temporary file name + * @param {cleanupCallback} fn the cleanup callback function + */ + +/** + * Removes the temporary created file or directory. + * + * @callback cleanupCallback + * @param {simpleCallback} [next] function to call after entry was removed + */ + +/** + * Callback function for function composition. + * @see {@link https://github.com/raszi/node-tmp/issues/57|raszi/node-tmp#57} + * + * @callback simpleCallback + */ + +// exporting all the needed methods +module.exports.tmpdir = tmpDir; + +module.exports.dir = dir; +module.exports.dirSync = dirSync; + +module.exports.file = file; +module.exports.fileSync = fileSync; + +module.exports.tmpName = tmpName; +module.exports.tmpNameSync = tmpNameSync; + +module.exports.setGracefulCleanup = setGracefulCleanup; + + +/***/ }), +/* 111 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var isWindows = process.platform === 'win32'; +var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/; + +// https://github.com/nodejs/node/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43 +module.exports = function () { + var path; + + if (isWindows) { + path = process.env.TEMP || + process.env.TMP || + (process.env.SystemRoot || process.env.windir) + '\\temp'; + } else { + path = process.env.TMPDIR || + process.env.TMP || + process.env.TEMP || + '/tmp'; + } + + if (trailingSlashRe.test(path)) { + path = path.slice(0, -1); + } + + return path; +}; + + +/***/ }), +/* 112 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const parsers_1 = __webpack_require__(102); +const path_1 = __webpack_require__(6); +const semver_1 = __importDefault(__webpack_require__(34)); +const miscUtils = __importStar(__webpack_require__(99)); +const structUtils = __importStar(__webpack_require__(113)); +; +; +; +class Manifest { + constructor() { + this.name = null; + this.version = null; + this["private"] = false; + this.license = null; + this.languageName = null; + this.bin = new Map(); + this.scripts = new Map(); + this.dependencies = new Map(); + this.devDependencies = new Map(); + this.peerDependencies = new Map(); + this.workspaceDefinitions = []; + this.dependenciesMeta = new Map(); + this.peerDependenciesMeta = new Map(); + this.resolutions = []; + this.files = new Set(); + this.raw = null; + } + static async find(path, { baseFs = new fslib_1.NodeFS() } = {}) { + return await Manifest.fromFile(path_1.posix.join(path, `package.json`), { baseFs }); + } + static async fromFile(path, { baseFs = new fslib_1.NodeFS() } = {}) { + const manifest = new Manifest(); + await manifest.loadFile(path, { baseFs }); + return manifest; + } + async loadFile(path, { baseFs = new fslib_1.NodeFS() }) { + const content = await baseFs.readFilePromise(path, `utf8`); + let data; + try { + data = JSON.parse(content || `{}`); + } + catch (error) { + error.message += ` (when parsing ${path})`; + throw error; + } + this.load(data); + } + load(data) { + if (typeof data !== `object` || data === null) + throw new Error(`Utterly invalid manifest data (${data})`); + this.raw = data; + const errors = []; + if (typeof data.name === `string`) { + try { + this.name = structUtils.parseIdent(data.name); + } + catch (error) { + errors.push(new Error(`Parsing failed for the 'name' field`)); + } + } + if (typeof data.version === `string`) + this.version = data.version; + if (typeof data.private === `boolean`) + this.private = data.private; + if (typeof data.license === `string`) + this.license = data.license; + if (typeof data.languageName === `string`) + this.languageName = data.languageName; + if (typeof data.bin === `string`) { + if (this.name !== null) { + this.bin = new Map([[structUtils.stringifyIdent(this.name), data.bin]]); + } + else { + errors.push(new Error(`String bin field, but no attached package name`)); + } + } + else if (typeof data.bin === `object` && data.bin !== null) { + for (const [key, value] of Object.entries(data.bin)) { + if (typeof value !== `string`) { + errors.push(new Error(`Invalid bin definition for '${key}'`)); + continue; + } + this.bin.set(key, value); + } + } + if (typeof data.scripts === `object` && data.scripts !== null) { + for (const [key, value] of Object.entries(data.scripts)) { + if (typeof value !== `string`) { + errors.push(new Error(`Invalid script definition for '${key}'`)); + continue; + } + this.scripts.set(key, value); + } + } + if (typeof data.dependencies === `object` && data.dependencies !== null) { + for (const [name, range] of Object.entries(data.dependencies)) { + if (typeof range !== 'string') { + errors.push(new Error(`Invalid dependency range for '${name}'`)); + continue; + } + let ident; + try { + ident = structUtils.parseIdent(name); + } + catch (error) { + errors.push(new Error(`Parsing failed for the dependency name '${name}'`)); + continue; + } + const descriptor = structUtils.makeDescriptor(ident, range); + this.dependencies.set(descriptor.identHash, descriptor); + } + } + if (typeof data.devDependencies === `object` && data.devDependencies !== null) { + for (const [name, range] of Object.entries(data.devDependencies)) { + if (typeof range !== 'string') { + errors.push(new Error(`Invalid dependency range for '${name}'`)); + continue; + } + let ident; + try { + ident = structUtils.parseIdent(name); + } + catch (error) { + errors.push(new Error(`Parsing failed for the dependency name '${name}'`)); + continue; + } + const descriptor = structUtils.makeDescriptor(ident, range); + this.devDependencies.set(descriptor.identHash, descriptor); + } + } + if (typeof data.peerDependencies === `object` && data.peerDependencies !== null) { + for (const [name, range] of Object.entries(data.peerDependencies)) { + if (typeof range !== 'string') { + errors.push(new Error(`Invalid dependency range for '${name}'`)); + continue; + } + let ident; + try { + ident = structUtils.parseIdent(name); + } + catch (error) { + errors.push(new Error(`Parsing failed for the dependency name '${name}'`)); + continue; + } + const descriptor = structUtils.makeDescriptor(ident, range); + this.peerDependencies.set(descriptor.identHash, descriptor); + } + } + const workspaces = Array.isArray(data.workspaces) + ? data.workspaces + : typeof data.workspaces === `object` && data.workspaces !== null && Array.isArray(data.workspaces.packages) + ? data.workspaces.packages + : []; + for (const entry of workspaces) { + if (typeof entry !== `string`) { + errors.push(new Error(`Invalid workspace definition for '${entry}'`)); + continue; + } + this.workspaceDefinitions.push({ + pattern: entry, + }); + } + if (typeof data.dependenciesMeta === `object` && data.dependenciesMeta !== null) { + for (const [pattern, meta] of Object.entries(data.dependenciesMeta)) { + if (typeof meta !== `object` || meta === null) { + errors.push(new Error(`Invalid meta field for '${pattern}`)); + continue; + } + const descriptor = structUtils.parseDescriptor(pattern); + const dependencyMeta = this.ensureDependencyMeta(descriptor); + Object.assign(dependencyMeta, meta); + } + } + if (typeof data.peerDependenciesMeta === `object` && data.peerDependenciesMeta !== null) { + for (const [pattern, meta] of Object.entries(data.peerDependenciesMeta)) { + if (typeof meta !== `object` || meta === null) { + errors.push(new Error(`Invalid meta field for '${pattern}`)); + continue; + } + const descriptor = structUtils.parseDescriptor(pattern); + const peerDependencyMeta = this.ensurePeerDependencyMeta(descriptor); + Object.assign(peerDependencyMeta, meta); + } + } + if (typeof data.resolutions === `object` && data.resolutions !== null) { + for (const [pattern, reference] of Object.entries(data.resolutions)) { + if (typeof reference !== `string`) { + errors.push(new Error(`Invalid resolution entry for '${pattern}'`)); + continue; + } + try { + this.resolutions.push({ pattern: parsers_1.parseResolution(pattern), reference }); + } + catch (error) { + errors.push(error); + continue; + } + } + } + if (Array.isArray(data.files) && data.files.length !== 0) { + for (const filename of data.files) { + if (typeof filename !== `string`) { + errors.push(new Error(`Invalid files entry for '${filename}'`)); + continue; + } + this.files.add(filename); + } + } + return errors; + } + getForScope(type) { + switch (type) { + case `dependencies`: + return this.dependencies; + case `devDependencies`: + return this.devDependencies; + case `peerDependencies`: + return this.peerDependencies; + default: { + throw new Error(`Unsupported value ("${type}")`); + } + } + } + ensureDependencyMeta(descriptor) { + if (descriptor.range !== `unknown` && !semver_1.default.valid(descriptor.range)) + throw new Error(`Invalid meta field range for '${structUtils.stringifyDescriptor(descriptor)}'`); + const identString = structUtils.stringifyIdent(descriptor); + const range = descriptor.range !== `unknown` ? descriptor.range : null; + let dependencyMetaSet = this.dependenciesMeta.get(identString); + if (!dependencyMetaSet) + this.dependenciesMeta.set(identString, dependencyMetaSet = new Map()); + let dependencyMeta = dependencyMetaSet.get(range); + if (!dependencyMeta) + dependencyMetaSet.set(range, dependencyMeta = {}); + return dependencyMeta; + } + ensurePeerDependencyMeta(descriptor) { + if (descriptor.range !== `unknown`) + throw new Error(`Invalid meta field range for '${structUtils.stringifyDescriptor(descriptor)}'`); + const identString = structUtils.stringifyIdent(descriptor); + let peerDependencyMeta = this.peerDependenciesMeta.get(identString); + if (!peerDependencyMeta) + this.peerDependenciesMeta.set(identString, peerDependencyMeta = {}); + return peerDependencyMeta; + } + exportTo(data) { + if (this.name !== null) + data.name = structUtils.stringifyIdent(this.name); + else + delete data.name; + if (this.version !== null) + data.version = this.version; + else + delete data.version; + if (this.private) + data.private = true; + else + delete data.private; + if (this.license !== null) + data.license = this.license; + else + delete data.license; + if (this.languageName !== null) + data.languageName = this.languageName; + else + delete data.languageName; + data.dependencies = this.dependencies.size === 0 ? undefined : Object.assign({}, ...structUtils.sortDescriptors(this.dependencies.values()).map(dependency => { + return { [structUtils.stringifyIdent(dependency)]: dependency.range }; + })); + data.devDependencies = this.devDependencies.size === 0 ? undefined : Object.assign({}, ...structUtils.sortDescriptors(this.devDependencies.values()).map(dependency => { + return { [structUtils.stringifyIdent(dependency)]: dependency.range }; + })); + data.peerDependencies = this.peerDependencies.size === 0 ? undefined : Object.assign({}, ...structUtils.sortDescriptors(this.peerDependencies.values()).map(dependency => { + return { [structUtils.stringifyIdent(dependency)]: dependency.range }; + })); + data.dependenciesMeta = {}; + for (const [identString, dependencyMetaSet] of miscUtils.sortMap(this.dependenciesMeta.entries(), ([identString, dependencyMetaSet]) => identString)) { + for (const [range, meta] of miscUtils.sortMap(dependencyMetaSet.entries(), ([range, meta]) => range !== null ? `0${range}` : `1`)) { + const key = range !== null + ? structUtils.stringifyDescriptor(structUtils.makeDescriptor(structUtils.parseIdent(identString), range)) + : identString; + data.dependenciesMeta[key] = meta; + } + } + if (Object.keys(data.dependenciesMeta).length === 0) + data.dependenciesMeta = undefined; + data.peerDependenciesMeta = this.peerDependenciesMeta.size === 0 ? undefined : Object.assign({}, ...miscUtils.sortMap(this.peerDependenciesMeta.entries(), ([identString, meta]) => identString).map(([identString, meta]) => { + return { [identString]: meta }; + })); + if (this.files.size === 0) { + data.files = undefined; + } + else { + data.files = Array.from(this.files); + } + } +} +exports.Manifest = Manifest; +; + + +/***/ }), +/* 113 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const semver_1 = __importDefault(__webpack_require__(34)); +const hashUtils = __importStar(__webpack_require__(114)); +const miscUtils = __importStar(__webpack_require__(99)); +const VIRTUAL_PROTOCOL = `virtual:`; +const VIRTUAL_ABBREVIATE = 12; +function makeIdent(scope, name) { + return { identHash: hashUtils.makeHash(scope, name), scope, name }; +} +exports.makeIdent = makeIdent; +function makeDescriptor(ident, range) { + return { identHash: ident.identHash, scope: ident.scope, name: ident.name, descriptorHash: hashUtils.makeHash(ident.identHash, range), range }; +} +exports.makeDescriptor = makeDescriptor; +function makeLocator(ident, reference) { + return { identHash: ident.identHash, scope: ident.scope, name: ident.name, locatorHash: hashUtils.makeHash(ident.identHash, reference), reference }; +} +exports.makeLocator = makeLocator; +function convertToIdent(source) { + return { identHash: source.identHash, scope: source.scope, name: source.name }; +} +exports.convertToIdent = convertToIdent; +function convertDescriptorToLocator(descriptor) { + return { identHash: descriptor.identHash, scope: descriptor.scope, name: descriptor.name, locatorHash: descriptor.descriptorHash, reference: descriptor.range }; +} +exports.convertDescriptorToLocator = convertDescriptorToLocator; +function convertLocatorToDescriptor(locator) { + return { identHash: locator.identHash, scope: locator.scope, name: locator.name, descriptorHash: locator.locatorHash, range: locator.reference }; +} +exports.convertLocatorToDescriptor = convertLocatorToDescriptor; +function convertPackageToLocator(pkg) { + return { identHash: pkg.identHash, scope: pkg.scope, name: pkg.name, locatorHash: pkg.locatorHash, reference: pkg.reference }; +} +exports.convertPackageToLocator = convertPackageToLocator; +function renamePackage(pkg, locator) { + return Object.assign({}, locator, { version: pkg.version, languageName: pkg.languageName, linkType: pkg.linkType, dependencies: new Map(pkg.dependencies), peerDependencies: new Map(pkg.peerDependencies), dependenciesMeta: new Map(pkg.dependenciesMeta), peerDependenciesMeta: new Map(pkg.peerDependenciesMeta) }); +} +exports.renamePackage = renamePackage; +function virtualizeDescriptor(descriptor, entropy) { + if (entropy.includes(`#`)) + throw new Error(`Invalid entropy`); + return makeDescriptor(descriptor, `virtual:${entropy}#${descriptor.range}`); +} +exports.virtualizeDescriptor = virtualizeDescriptor; +function virtualizePackage(pkg, entropy) { + if (entropy.includes(`#`)) + throw new Error(`Invalid entropy`); + return renamePackage(pkg, makeLocator(pkg, `virtual:${entropy}#${pkg.reference}`)); +} +exports.virtualizePackage = virtualizePackage; +function isVirtualDescriptor(descriptor) { + return descriptor.range.startsWith(VIRTUAL_PROTOCOL); +} +exports.isVirtualDescriptor = isVirtualDescriptor; +function isVirtualLocator(locator) { + return locator.reference.startsWith(VIRTUAL_PROTOCOL); +} +exports.isVirtualLocator = isVirtualLocator; +function devirtualizeDescriptor(descriptor) { + if (!isVirtualDescriptor(descriptor)) + throw new Error(`Not a virtual descriptor`); + return makeDescriptor(descriptor, descriptor.range.replace(/^.*#/, ``)); +} +exports.devirtualizeDescriptor = devirtualizeDescriptor; +function devirtualizeLocator(locator) { + if (!isVirtualLocator(locator)) + throw new Error(`Not a virtual descriptor`); + return makeLocator(locator, locator.reference.replace(/^.*#/, ``)); +} +exports.devirtualizeLocator = devirtualizeLocator; +function areIdentsEqual(a, b) { + return a.identHash === b.identHash; +} +exports.areIdentsEqual = areIdentsEqual; +function areDescriptorsEqual(a, b) { + return a.descriptorHash === b.descriptorHash; +} +exports.areDescriptorsEqual = areDescriptorsEqual; +function areLocatorsEqual(a, b) { + return a.locatorHash === b.locatorHash; +} +exports.areLocatorsEqual = areLocatorsEqual; +function parseIdent(string) { + const match = string.match(/^(?:@([^\/]+?)\/)?([^\/]+)$/); + if (!match) + throw new Error(`Invalid ident (${string})`); + const [, scope, name] = match; + return makeIdent(scope, name); +} +exports.parseIdent = parseIdent; +function parseDescriptor(string, strict = false) { + const descriptor = tryParseDescriptor(string, strict); + if (!descriptor) + throw new Error(`Invalid descriptor (${string})`); + return descriptor; +} +exports.parseDescriptor = parseDescriptor; +function tryParseDescriptor(string, strict = false) { + const match = strict + ? string.match(/^(?:@([^\/]+?)\/)?([^\/]+?)(?:@(.+))$/) + : string.match(/^(?:@([^\/]+?)\/)?([^\/]+?)(?:@(.+))?$/); + if (!match) + return null; + let [, scope, name, range] = match; + if (range === `unknown`) + throw new Error(`Invalid range (${string})`); + if (!range) + range = `unknown`; + return makeDescriptor(makeIdent(scope, name), range); +} +exports.tryParseDescriptor = tryParseDescriptor; +function parseLocator(string, strict = false) { + const locator = tryParseLocator(string, strict); + if (!locator) + throw new Error(`Invalid locator (${string})`); + return locator; +} +exports.parseLocator = parseLocator; +function tryParseLocator(string, strict = false) { + const match = strict + ? string.match(/^(?:@([^\/]+?)\/)?([^\/]+?)(?:@(.+))$/) + : string.match(/^(?:@([^\/]+?)\/)?([^\/]+?)(?:@(.+))?$/); + if (!match) + return null; + let [, scope, name, reference] = match; + if (reference === `unknown`) + throw new Error(`Invalid reference (${string})`); + if (!reference) + reference = `unknown`; + return makeLocator(makeIdent(scope, name), reference); +} +exports.tryParseLocator = tryParseLocator; +function parseRange(range) { + const protocolIndex = range.indexOf(`:`); + const protocol = protocolIndex !== -1 ? range.slice(0, protocolIndex + 1) : null; + const protocolRest = protocolIndex !== -1 ? range.slice(protocolIndex + 1) : range; + const hashIndex = protocolRest.indexOf(`#`); + const source = hashIndex !== -1 ? protocolRest.slice(0, hashIndex) : null; + const selector = hashIndex !== -1 ? protocolRest.slice(hashIndex + 1) : protocolRest; + return { protocol, source, selector }; +} +exports.parseRange = parseRange; +function makeRange({ protocol, source, selector }) { + let range = ``; + if (protocol !== null) + range += `${protocol}`; + if (source !== null) + range += `${source}#`; + return range + selector; +} +exports.makeRange = makeRange; +function requirableIdent(ident) { + if (ident.scope) { + return `@${ident.scope}/${ident.name}`; + } + else { + return `${ident.name}`; + } +} +exports.requirableIdent = requirableIdent; +function stringifyIdent(ident) { + if (ident.scope) { + return `@${ident.scope}/${ident.name}`; + } + else { + return `${ident.name}`; + } +} +exports.stringifyIdent = stringifyIdent; +function stringifyDescriptor(descriptor) { + if (descriptor.scope) { + return `@${descriptor.scope}/${descriptor.name}@${descriptor.range}`; + } + else { + return `${descriptor.name}@${descriptor.range}`; + } +} +exports.stringifyDescriptor = stringifyDescriptor; +function stringifyLocator(locator) { + if (locator.scope) { + return `@${locator.scope}/${locator.name}@${locator.reference}`; + } + else { + return `${locator.name}@${locator.reference}`; + } +} +exports.stringifyLocator = stringifyLocator; +function slugifyLocator(locator) { + const protocolIndex = locator.reference.indexOf(`:`); + const protocol = protocolIndex !== -1 + ? locator.reference.slice(0, protocolIndex) + : `exotic`; + const version = protocolIndex !== -1 + ? semver_1.default.valid(locator.reference.slice(protocolIndex + 1)) + : null; + const humanReference = version !== null + ? `${protocol}-${version}` + : protocol; + // eCryptfs limits the filename size to less than the usual (255); they recommend 140 characters max + // https://unix.stackexchange.com/a/32834/24106 + const hashTruncate = 128 / 2; + const slug = locator.scope + ? `@${locator.scope}-${locator.name}-${humanReference}-${locator.locatorHash.slice(0, hashTruncate)}` + : `${locator.name}-${humanReference}-${locator.locatorHash.slice(0, hashTruncate)}`; + return slug; +} +exports.slugifyLocator = slugifyLocator; +function prettyIdent(configuration, ident) { + if (ident.scope) { + return `${configuration.format(`@${ident.scope}/`, `#d75f00`)}${configuration.format(ident.name, `#d7875f`)}`; + } + else { + return `${configuration.format(ident.name, `#d7875f`)}`; + } +} +exports.prettyIdent = prettyIdent; +function prettyRangeNoColor(range) { + if (range.startsWith(VIRTUAL_PROTOCOL)) { + const nested = prettyRangeNoColor(range.substr(range.indexOf(`#`) + 1)); + const abbrev = range.substr(VIRTUAL_PROTOCOL.length, VIRTUAL_ABBREVIATE); + // I'm not satisfied of how the virtual packages appear in the output + return false ? undefined : nested; + } + else { + return range.replace(/\?.*/, `?[...]`); + } +} +function prettyRange(configuration, range) { + return `${configuration.format(prettyRangeNoColor(range), `#00afaf`)}`; +} +exports.prettyRange = prettyRange; +function prettyDescriptor(configuration, descriptor) { + return `${prettyIdent(configuration, descriptor)}${configuration.format(`@`, `#00afaf`)}${prettyRange(configuration, descriptor.range)}`; +} +exports.prettyDescriptor = prettyDescriptor; +function prettyReference(configuration, reference) { + return `${configuration.format(prettyRangeNoColor(reference), `#87afff`)}`; +} +exports.prettyReference = prettyReference; +function prettyLocator(configuration, locator) { + return `${prettyIdent(configuration, locator)}${configuration.format(`@`, `#87afff`)}${prettyReference(configuration, locator.reference)}`; +} +exports.prettyLocator = prettyLocator; +function sortDescriptors(descriptors) { + return miscUtils.sortMap(descriptors, [ + descriptor => stringifyIdent(descriptor), + descriptor => descriptor.range, + ]); +} +exports.sortDescriptors = sortDescriptors; +function prettyWorkspace(configuration, workspace) { + const byIdent = workspace.project.workspacesByIdent.get(workspace.locator.identHash); + if (!byIdent || byIdent.length <= 1) { + return prettyIdent(configuration, workspace.locator); + } + else { + return prettyLocator(configuration, workspace.anchoredLocator); + } +} +exports.prettyWorkspace = prettyWorkspace; + + +/***/ }), +/* 114 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const crypto_1 = __webpack_require__(16); +function makeHash(...args) { + const hmac = crypto_1.createHmac(`sha512`, `berry`); + for (const arg of args) + hmac.update(arg ? arg : ``); + return hmac.digest(`hex`); +} +exports.makeHash = makeHash; +function checksumFile(path) { + return new Promise((resolve, reject) => { + const fs = new fslib_1.NodeFS(); + const hmac = crypto_1.createHmac(`sha512`, `berry`); + const stream = fs.createReadStream(path, {}); + stream.on(`data`, chunk => { + hmac.update(chunk); + }); + stream.on(`error`, error => { + reject(error); + }); + stream.on(`end`, () => { + resolve(hmac.digest(`hex`)); + }); + }); +} +exports.checksumFile = checksumFile; + + +/***/ }), +/* 115 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const Report_1 = __webpack_require__(116); +class StreamReport extends Report_1.Report { + constructor({ configuration, stdout, json = false }) { + super(); + this.cacheHitCount = 0; + this.cacheMissCount = 0; + this.warningCount = 0; + this.errorCount = 0; + this.startTime = Date.now(); + this.indent = 0; + this.configuration = configuration; + this.json = json; + this.stdout = stdout; + } + static async start(opts, cb) { + const report = new this(opts); + try { + await cb(report); + } + catch (error) { + report.reportExceptionOnce(error); + } + finally { + await report.finalize(); + } + return report; + } + hasErrors() { + return this.errorCount > 0; + } + exitCode() { + return this.hasErrors() ? 1 : 0; + } + reportCacheHit(locator) { + this.cacheHitCount += 1; + } + reportCacheMiss(locator) { + this.cacheMissCount += 1; + } + startTimerSync(what, cb) { + this.reportInfo(Report_1.MessageName.UNNAMED, `┌ ${what}`); + const before = Date.now(); + this.indent += 1; + try { + return cb(); + } + catch (error) { + this.reportExceptionOnce(error); + throw error; + } + finally { + const after = Date.now(); + this.indent -= 1; + if (this.configuration.get(`enableTimers`)) { + this.reportInfo(Report_1.MessageName.UNNAMED, `└ Completed in ${this.formatTiming(after - before)}`); + } + else { + this.reportInfo(Report_1.MessageName.UNNAMED, `└ Completed`); + } + } + } + async startTimerPromise(what, cb) { + this.reportInfo(Report_1.MessageName.UNNAMED, `┌ ${what}`); + const before = Date.now(); + this.indent += 1; + try { + return await cb(); + } + catch (error) { + this.reportExceptionOnce(error); + throw error; + } + finally { + const after = Date.now(); + this.indent -= 1; + if (this.configuration.get(`enableTimers`)) { + this.reportInfo(Report_1.MessageName.UNNAMED, `└ Completed in ${this.formatTiming(after - before)}`); + } + else { + this.reportInfo(Report_1.MessageName.UNNAMED, `└ Completed`); + } + } + } + reportInfo(name, text) { + if (!this.json) { + this.stdout.write(`${this.configuration.format(`➤`, `blueBright`)} ${this.formatName(name)}: ${this.formatIndent()}${text}\n`); + } + } + reportWarning(name, text) { + this.warningCount += 1; + if (!this.json) { + this.stdout.write(`${this.configuration.format(`➤`, `yellowBright`)} ${this.formatName(name)}: ${this.formatIndent()}${text}\n`); + } + } + reportError(name, text) { + this.errorCount += 1; + this.stdout.write(`${this.configuration.format(`➤`, `redBright`)} ${this.formatName(name)}: ${this.formatIndent()}${text}\n`); + } + reportJson(data) { + if (this.json) { + this.stdout.write(`${JSON.stringify(data)}\n`); + } + } + async finalize() { + let installStatus = ``; + if (this.errorCount > 0) + installStatus = `Failed with errors`; + else if (this.warningCount > 0) + installStatus = `Done with warnings`; + else + installStatus = `Done`; + let fetchStatus = ``; + if (this.cacheHitCount > 1) + fetchStatus += ` - ${this.cacheHitCount} packages were already cached`; + else if (this.cacheHitCount === 1) + fetchStatus += ` - one package was already cached`; + if (this.cacheHitCount > 0) { + if (this.cacheMissCount > 1) { + fetchStatus += `, ${this.cacheMissCount} had to be fetched`; + } + else if (this.cacheMissCount === 1) { + fetchStatus += `, one had to be fetched`; + } + } + else { + if (this.cacheMissCount > 1) { + fetchStatus += ` - ${this.cacheMissCount} packages had to be fetched`; + } + else if (this.cacheMissCount === 1) { + fetchStatus += ` - one package had to be fetched`; + } + } + const timing = this.formatTiming(Date.now() - this.startTime); + const message = this.configuration.get(`enableTimers`) + ? `${installStatus} in ${timing}${fetchStatus}` + : installStatus; + if (this.errorCount > 0) { + this.reportError(Report_1.MessageName.UNNAMED, message); + } + else if (this.warningCount > 0) { + this.reportWarning(Report_1.MessageName.UNNAMED, message); + } + else { + this.reportInfo(Report_1.MessageName.UNNAMED, message); + } + } + formatTiming(timing) { + return timing < 60 * 1000 + ? `${Math.round(timing / 10) / 100}s` + : `${Math.round(timing / 600) / 100}m`; + } + formatName(name) { + const label = `YN` + name.toString(10).padStart(4, `0`); + if (name === Report_1.MessageName.UNNAMED) { + return this.configuration.format(label, `grey`); + } + else { + return label; + } + } + formatIndent() { + return `│ `.repeat(this.indent); + } +} +exports.StreamReport = StreamReport; + + +/***/ }), +/* 116 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +// The values in this enum should never be reassigned, even if some are removed +// over time (it would mess up the search results, which are the whole point of +// having this system) +var MessageName; +(function (MessageName) { + MessageName[MessageName["UNNAMED"] = 0] = "UNNAMED"; + MessageName[MessageName["EXCEPTION"] = 1] = "EXCEPTION"; + MessageName[MessageName["MISSING_PEER_DEPENDENCY"] = 2] = "MISSING_PEER_DEPENDENCY"; + MessageName[MessageName["CYCLIC_DEPENDENCIES"] = 3] = "CYCLIC_DEPENDENCIES"; + MessageName[MessageName["DISABLED_BUILD_SCRIPTS"] = 4] = "DISABLED_BUILD_SCRIPTS"; + MessageName[MessageName["BUILD_DISABLED"] = 5] = "BUILD_DISABLED"; + MessageName[MessageName["SOFT_LINK_BUILD"] = 6] = "SOFT_LINK_BUILD"; + MessageName[MessageName["MUST_BUILD"] = 7] = "MUST_BUILD"; + MessageName[MessageName["MUST_REBUILD"] = 8] = "MUST_REBUILD"; + MessageName[MessageName["BUILD_FAILED"] = 9] = "BUILD_FAILED"; + MessageName[MessageName["RESOLVER_NOT_FOUND"] = 10] = "RESOLVER_NOT_FOUND"; + MessageName[MessageName["FETCHER_NOT_FOUND"] = 11] = "FETCHER_NOT_FOUND"; + MessageName[MessageName["LINKER_NOT_FOUND"] = 12] = "LINKER_NOT_FOUND"; + MessageName[MessageName["FETCH_NOT_CACHED"] = 13] = "FETCH_NOT_CACHED"; + MessageName[MessageName["YARN_IMPORT_FAILED"] = 14] = "YARN_IMPORT_FAILED"; + MessageName[MessageName["REMOTE_INVALID"] = 15] = "REMOTE_INVALID"; + MessageName[MessageName["REMOTE_NOT_FOUND"] = 16] = "REMOTE_NOT_FOUND"; + MessageName[MessageName["RESOLUTION_PACK"] = 17] = "RESOLUTION_PACK"; + MessageName[MessageName["CACHE_CHECKSUM_MISMATCH"] = 18] = "CACHE_CHECKSUM_MISMATCH"; + MessageName[MessageName["UNUSED_CACHE_ENTRY"] = 19] = "UNUSED_CACHE_ENTRY"; + MessageName[MessageName["MISSING_LOCKFILE_ENTRY"] = 20] = "MISSING_LOCKFILE_ENTRY"; + MessageName[MessageName["WORKSPACE_NOT_FOUND"] = 21] = "WORKSPACE_NOT_FOUND"; + MessageName[MessageName["TOO_MANY_MATCHING_WORKSPACES"] = 22] = "TOO_MANY_MATCHING_WORKSPACES"; + MessageName[MessageName["CONSTRAINTS_MISSING_DEPENDENCY"] = 23] = "CONSTRAINTS_MISSING_DEPENDENCY"; + MessageName[MessageName["CONSTRAINTS_INCOMPATIBLE_DEPENDENCY"] = 24] = "CONSTRAINTS_INCOMPATIBLE_DEPENDENCY"; + MessageName[MessageName["CONSTRAINTS_EXTRANEOUS_DEPENDENCY"] = 25] = "CONSTRAINTS_EXTRANEOUS_DEPENDENCY"; + MessageName[MessageName["CONSTRAINTS_INVALID_DEPENDENCY"] = 26] = "CONSTRAINTS_INVALID_DEPENDENCY"; + MessageName[MessageName["CANT_SUGGEST_RESOLUTIONS"] = 27] = "CANT_SUGGEST_RESOLUTIONS"; + MessageName[MessageName["FROZEN_LOCKFILE_EXCEPTION"] = 28] = "FROZEN_LOCKFILE_EXCEPTION"; + MessageName[MessageName["CROSS_DRIVE_VIRTUAL_LOCAL"] = 29] = "CROSS_DRIVE_VIRTUAL_LOCAL"; + MessageName[MessageName["FETCH_FAILED"] = 30] = "FETCH_FAILED"; + MessageName[MessageName["DANGEROUS_NODE_MODULES"] = 31] = "DANGEROUS_NODE_MODULES"; + MessageName[MessageName["NODE_GYP_INJECTED"] = 32] = "NODE_GYP_INJECTED"; +})(MessageName = exports.MessageName || (exports.MessageName = {})); +class ReportError extends Error { + constructor(code, message) { + super(message); + this.reportCode = code; + } +} +exports.ReportError = ReportError; +function isReportError(error) { + return typeof error.reportCode !== `undefined`; +} +exports.isReportError = isReportError; +class Report { + constructor() { + this.reportedInfos = new Set(); + this.reportedWarnings = new Set(); + this.reportedErrors = new Set(); + } + reportInfoOnce(name, text, opts) { + const key = opts && opts.key ? opts.key : text; + if (!this.reportedInfos.has(key)) { + this.reportedInfos.add(key); + this.reportInfo(name, text); + } + } + reportWarningOnce(name, text, opts) { + const key = opts && opts.key ? opts.key : text; + if (!this.reportedWarnings.has(key)) { + this.reportedWarnings.add(key); + this.reportWarning(name, text); + } + } + reportErrorOnce(name, text, opts) { + const key = opts && opts.key ? opts.key : text; + if (!this.reportedErrors.has(key)) { + this.reportedErrors.add(key); + this.reportError(name, text); + } + } + reportExceptionOnce(error) { + if (isReportError(error)) { + this.reportErrorOnce(error.reportCode, error.message, { key: error }); + } + else { + this.reportErrorOnce(MessageName.EXCEPTION, error.stack || error.message, { key: error }); + } + } +} +exports.Report = Report; + + +/***/ }), +/* 117 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const path_1 = __webpack_require__(6); +const tar_1 = __webpack_require__(118); +const tmp_1 = __webpack_require__(110); +; +async function makeArchiveFromDirectory(source, { baseFs = new fslib_1.NodeFS(), prefixPath = `/` } = {}) { + const zipFs = new fslib_1.ZipFS(tmp_1.tmpNameSync(), { create: true }); + const target = path_1.posix.resolve(`/`, prefixPath); + await zipFs.copyPromise(target, source, { baseFs }); + return zipFs; +} +exports.makeArchiveFromDirectory = makeArchiveFromDirectory; +; +async function makeArchive(tgz, { stripComponents = 0, prefixPath = `.` } = {}) { + const zipFs = new fslib_1.ZipFS(tmp_1.tmpNameSync(), { create: true }); + // 1980-01-01, like Fedora + const defaultTime = 315532800; + // @ts-ignore: Typescript doesn't want me to use new + const parser = new tar_1.Parse(); + function ignore(entry) { + // Disallow absolute paths; might be malicious (ex: /etc/passwd) + if (entry[0] === `/`) + return true; + const parts = entry.path.split(/\//g); + // We also ignore paths that could lead to escaping outside the archive + if (parts.some((part) => part === `..`)) + return true; + if (parts.length <= stripComponents) + return true; + return false; + } + parser.on(`entry`, (entry) => { + if (ignore(entry)) { + entry.resume(); + return; + } + const parts = entry.path.split(/\//g); + const mappedPath = path_1.posix.join(prefixPath, parts.slice(stripComponents).join(`/`)); + const chunks = []; + let mode = 0o644; + // If a single executable bit is set, normalize so that all are + if (entry.type === `Directory` || (entry.mode & 0o111) !== 0) + mode |= 0o111; + entry.on(`data`, (chunk) => { + chunks.push(chunk); + }); + entry.on(`end`, () => { + switch (entry.type) { + case `Directory`: + { + zipFs.mkdirpSync(path_1.posix.dirname(mappedPath), { chmod: 0o755, utimes: [defaultTime, defaultTime] }); + zipFs.mkdirSync(mappedPath); + zipFs.chmodSync(mappedPath, mode); + zipFs.utimesSync(mappedPath, defaultTime, defaultTime); + } + break; + case `OldFile`: + case `File`: + { + zipFs.mkdirpSync(path_1.posix.dirname(mappedPath), { chmod: 0o755, utimes: [defaultTime, defaultTime] }); + zipFs.writeFileSync(mappedPath, Buffer.concat(chunks)); + zipFs.chmodSync(mappedPath, mode); + zipFs.utimesSync(mappedPath, defaultTime, defaultTime); + } + break; + case `SymbolicLink`: + { + zipFs.mkdirpSync(path_1.posix.dirname(mappedPath), { chmod: 0o755, utimes: [defaultTime, defaultTime] }); + zipFs.symlinkSync(entry.linkpath, mappedPath); + zipFs.lutimesSync(mappedPath, defaultTime, defaultTime); + } + break; + } + }); + }); + return await new Promise((resolve, reject) => { + parser.on(`error`, (error) => { + reject(error); + }); + parser.on(`close`, () => { + resolve(zipFs); + }); + parser.end(tgz); + }); +} +exports.makeArchive = makeArchive; + + +/***/ }), +/* 118 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// high-level commands +exports.c = exports.create = __webpack_require__(119) +exports.r = exports.replace = __webpack_require__(143) +exports.t = exports.list = __webpack_require__(141) +exports.u = exports.update = __webpack_require__(144) +exports.x = exports.extract = __webpack_require__(145) + +// classes +exports.Pack = __webpack_require__(121) +exports.Unpack = __webpack_require__(146) +exports.Parse = __webpack_require__(142) +exports.ReadEntry = __webpack_require__(131) +exports.WriteEntry = __webpack_require__(133) +exports.Header = __webpack_require__(135) +exports.Pax = __webpack_require__(134) +exports.types = __webpack_require__(132) + + +/***/ }), +/* 119 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// tar -c +const hlo = __webpack_require__(120) + +const Pack = __webpack_require__(121) +const fs = __webpack_require__(5) +const fsm = __webpack_require__(140) +const t = __webpack_require__(141) +const path = __webpack_require__(6) + +const c = module.exports = (opt_, files, cb) => { + if (typeof files === 'function') + cb = files + + if (Array.isArray(opt_)) + files = opt_, opt_ = {} + + if (!files || !Array.isArray(files) || !files.length) + throw new TypeError('no files or directories specified') + + files = Array.from(files) + + const opt = hlo(opt_) + + if (opt.sync && typeof cb === 'function') + throw new TypeError('callback not supported for sync tar functions') + + if (!opt.file && typeof cb === 'function') + throw new TypeError('callback only supported with file option') + + return opt.file && opt.sync ? createFileSync(opt, files) + : opt.file ? createFile(opt, files, cb) + : opt.sync ? createSync(opt, files) + : create(opt, files) +} + +const createFileSync = (opt, files) => { + const p = new Pack.Sync(opt) + const stream = new fsm.WriteStreamSync(opt.file, { + mode: opt.mode || 0o666 + }) + p.pipe(stream) + addFilesSync(p, files) +} + +const createFile = (opt, files, cb) => { + const p = new Pack(opt) + const stream = new fsm.WriteStream(opt.file, { + mode: opt.mode || 0o666 + }) + p.pipe(stream) + + const promise = new Promise((res, rej) => { + stream.on('error', rej) + stream.on('close', res) + p.on('error', rej) + }) + + addFilesAsync(p, files) + + return cb ? promise.then(cb, cb) : promise +} + +const addFilesSync = (p, files) => { + files.forEach(file => { + if (file.charAt(0) === '@') + t({ + file: path.resolve(p.cwd, file.substr(1)), + sync: true, + noResume: true, + onentry: entry => p.add(entry) + }) + else + p.add(file) + }) + p.end() +} + +const addFilesAsync = (p, files) => { + while (files.length) { + const file = files.shift() + if (file.charAt(0) === '@') + return t({ + file: path.resolve(p.cwd, file.substr(1)), + noResume: true, + onentry: entry => p.add(entry) + }).then(_ => addFilesAsync(p, files)) + else + p.add(file) + } + p.end() +} + +const createSync = (opt, files) => { + const p = new Pack.Sync(opt) + addFilesSync(p, files) + return p +} + +const create = (opt, files) => { + const p = new Pack(opt) + addFilesAsync(p, files) + return p +} + + +/***/ }), +/* 120 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// turn tar(1) style args like `C` into the more verbose things like `cwd` + +const argmap = new Map([ + ['C', 'cwd'], + ['f', 'file'], + ['z', 'gzip'], + ['P', 'preservePaths'], + ['U', 'unlink'], + ['strip-components', 'strip'], + ['stripComponents', 'strip'], + ['keep-newer', 'newer'], + ['keepNewer', 'newer'], + ['keep-newer-files', 'newer'], + ['keepNewerFiles', 'newer'], + ['k', 'keep'], + ['keep-existing', 'keep'], + ['keepExisting', 'keep'], + ['m', 'noMtime'], + ['no-mtime', 'noMtime'], + ['p', 'preserveOwner'], + ['L', 'follow'], + ['h', 'follow'] +]) + +const parse = module.exports = opt => opt ? Object.keys(opt).map(k => [ + argmap.has(k) ? argmap.get(k) : k, opt[k] +]).reduce((set, kv) => (set[kv[0]] = kv[1], set), Object.create(null)) : {} + + +/***/ }), +/* 121 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const Buffer = __webpack_require__(122) + +// A readable tar stream creator +// Technically, this is a transform stream that you write paths into, +// and tar format comes out of. +// The `add()` method is like `write()` but returns this, +// and end() return `this` as well, so you can +// do `new Pack(opt).add('files').add('dir').end().pipe(output) +// You could also do something like: +// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar')) + +class PackJob { + constructor (path, absolute) { + this.path = path || './' + this.absolute = absolute + this.entry = null + this.stat = null + this.readdir = null + this.pending = false + this.ignore = false + this.piped = false + } +} + +const MiniPass = __webpack_require__(125) +const zlib = __webpack_require__(129) +const ReadEntry = __webpack_require__(131) +const WriteEntry = __webpack_require__(133) +const WriteEntrySync = WriteEntry.Sync +const WriteEntryTar = WriteEntry.Tar +const Yallist = __webpack_require__(126) +const EOF = Buffer.alloc(1024) +const ONSTAT = Symbol('onStat') +const ENDED = Symbol('ended') +const QUEUE = Symbol('queue') +const CURRENT = Symbol('current') +const PROCESS = Symbol('process') +const PROCESSING = Symbol('processing') +const PROCESSJOB = Symbol('processJob') +const JOBS = Symbol('jobs') +const JOBDONE = Symbol('jobDone') +const ADDFSENTRY = Symbol('addFSEntry') +const ADDTARENTRY = Symbol('addTarEntry') +const STAT = Symbol('stat') +const READDIR = Symbol('readdir') +const ONREADDIR = Symbol('onreaddir') +const PIPE = Symbol('pipe') +const ENTRY = Symbol('entry') +const ENTRYOPT = Symbol('entryOpt') +const WRITEENTRYCLASS = Symbol('writeEntryClass') +const WRITE = Symbol('write') +const ONDRAIN = Symbol('ondrain') + +const fs = __webpack_require__(5) +const path = __webpack_require__(6) +const warner = __webpack_require__(137) + +const Pack = warner(class Pack extends MiniPass { + constructor (opt) { + super(opt) + opt = opt || Object.create(null) + this.opt = opt + this.cwd = opt.cwd || process.cwd() + this.maxReadSize = opt.maxReadSize + this.preservePaths = !!opt.preservePaths + this.strict = !!opt.strict + this.noPax = !!opt.noPax + this.prefix = (opt.prefix || '').replace(/(\\|\/)+$/, '') + this.linkCache = opt.linkCache || new Map() + this.statCache = opt.statCache || new Map() + this.readdirCache = opt.readdirCache || new Map() + + this[WRITEENTRYCLASS] = WriteEntry + if (typeof opt.onwarn === 'function') + this.on('warn', opt.onwarn) + + this.zip = null + if (opt.gzip) { + if (typeof opt.gzip !== 'object') + opt.gzip = {} + this.zip = new zlib.Gzip(opt.gzip) + this.zip.on('data', chunk => super.write(chunk)) + this.zip.on('end', _ => super.end()) + this.zip.on('drain', _ => this[ONDRAIN]()) + this.on('resume', _ => this.zip.resume()) + } else + this.on('drain', this[ONDRAIN]) + + this.portable = !!opt.portable + this.noDirRecurse = !!opt.noDirRecurse + this.follow = !!opt.follow + this.noMtime = !!opt.noMtime + this.mtime = opt.mtime || null + + this.filter = typeof opt.filter === 'function' ? opt.filter : _ => true + + this[QUEUE] = new Yallist + this[JOBS] = 0 + this.jobs = +opt.jobs || 4 + this[PROCESSING] = false + this[ENDED] = false + } + + [WRITE] (chunk) { + return super.write(chunk) + } + + add (path) { + this.write(path) + return this + } + + end (path) { + if (path) + this.write(path) + this[ENDED] = true + this[PROCESS]() + return this + } + + write (path) { + if (this[ENDED]) + throw new Error('write after end') + + if (path instanceof ReadEntry) + this[ADDTARENTRY](path) + else + this[ADDFSENTRY](path) + return this.flowing + } + + [ADDTARENTRY] (p) { + const absolute = path.resolve(this.cwd, p.path) + if (this.prefix) + p.path = this.prefix + '/' + p.path.replace(/^\.(\/+|$)/, '') + + // in this case, we don't have to wait for the stat + if (!this.filter(p.path, p)) + p.resume() + else { + const job = new PackJob(p.path, absolute, false) + job.entry = new WriteEntryTar(p, this[ENTRYOPT](job)) + job.entry.on('end', _ => this[JOBDONE](job)) + this[JOBS] += 1 + this[QUEUE].push(job) + } + + this[PROCESS]() + } + + [ADDFSENTRY] (p) { + const absolute = path.resolve(this.cwd, p) + if (this.prefix) + p = this.prefix + '/' + p.replace(/^\.(\/+|$)/, '') + + this[QUEUE].push(new PackJob(p, absolute)) + this[PROCESS]() + } + + [STAT] (job) { + job.pending = true + this[JOBS] += 1 + const stat = this.follow ? 'stat' : 'lstat' + fs[stat](job.absolute, (er, stat) => { + job.pending = false + this[JOBS] -= 1 + if (er) + this.emit('error', er) + else + this[ONSTAT](job, stat) + }) + } + + [ONSTAT] (job, stat) { + this.statCache.set(job.absolute, stat) + job.stat = stat + + // now we have the stat, we can filter it. + if (!this.filter(job.path, stat)) + job.ignore = true + + this[PROCESS]() + } + + [READDIR] (job) { + job.pending = true + this[JOBS] += 1 + fs.readdir(job.absolute, (er, entries) => { + job.pending = false + this[JOBS] -= 1 + if (er) + return this.emit('error', er) + this[ONREADDIR](job, entries) + }) + } + + [ONREADDIR] (job, entries) { + this.readdirCache.set(job.absolute, entries) + job.readdir = entries + this[PROCESS]() + } + + [PROCESS] () { + if (this[PROCESSING]) + return + + this[PROCESSING] = true + for (let w = this[QUEUE].head; + w !== null && this[JOBS] < this.jobs; + w = w.next) { + this[PROCESSJOB](w.value) + if (w.value.ignore) { + const p = w.next + this[QUEUE].removeNode(w) + w.next = p + } + } + + this[PROCESSING] = false + + if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) { + if (this.zip) + this.zip.end(EOF) + else { + super.write(EOF) + super.end() + } + } + } + + get [CURRENT] () { + return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value + } + + [JOBDONE] (job) { + this[QUEUE].shift() + this[JOBS] -= 1 + this[PROCESS]() + } + + [PROCESSJOB] (job) { + if (job.pending) + return + + if (job.entry) { + if (job === this[CURRENT] && !job.piped) + this[PIPE](job) + return + } + + if (!job.stat) { + if (this.statCache.has(job.absolute)) + this[ONSTAT](job, this.statCache.get(job.absolute)) + else + this[STAT](job) + } + if (!job.stat) + return + + // filtered out! + if (job.ignore) + return + + if (!this.noDirRecurse && job.stat.isDirectory() && !job.readdir) { + if (this.readdirCache.has(job.absolute)) + this[ONREADDIR](job, this.readdirCache.get(job.absolute)) + else + this[READDIR](job) + if (!job.readdir) + return + } + + // we know it doesn't have an entry, because that got checked above + job.entry = this[ENTRY](job) + if (!job.entry) { + job.ignore = true + return + } + + if (job === this[CURRENT] && !job.piped) + this[PIPE](job) + } + + [ENTRYOPT] (job) { + return { + onwarn: (msg, data) => { + this.warn(msg, data) + }, + noPax: this.noPax, + cwd: this.cwd, + absolute: job.absolute, + preservePaths: this.preservePaths, + maxReadSize: this.maxReadSize, + strict: this.strict, + portable: this.portable, + linkCache: this.linkCache, + statCache: this.statCache, + noMtime: this.noMtime, + mtime: this.mtime + } + } + + [ENTRY] (job) { + this[JOBS] += 1 + try { + return new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job)) + .on('end', () => this[JOBDONE](job)) + .on('error', er => this.emit('error', er)) + } catch (er) { + this.emit('error', er) + } + } + + [ONDRAIN] () { + if (this[CURRENT] && this[CURRENT].entry) + this[CURRENT].entry.resume() + } + + // like .pipe() but using super, because our write() is special + [PIPE] (job) { + job.piped = true + + if (job.readdir) + job.readdir.forEach(entry => { + const p = this.prefix ? + job.path.slice(this.prefix.length + 1) || './' + : job.path + + const base = p === './' ? '' : p.replace(/\/*$/, '/') + this[ADDFSENTRY](base + entry) + }) + + const source = job.entry + const zip = this.zip + + if (zip) + source.on('data', chunk => { + if (!zip.write(chunk)) + source.pause() + }) + else + source.on('data', chunk => { + if (!super.write(chunk)) + source.pause() + }) + } + + pause () { + if (this.zip) + this.zip.pause() + return super.pause() + } +}) + +class PackSync extends Pack { + constructor (opt) { + super(opt) + this[WRITEENTRYCLASS] = WriteEntrySync + } + + // pause/resume are no-ops in sync streams. + pause () {} + resume () {} + + [STAT] (job) { + const stat = this.follow ? 'statSync' : 'lstatSync' + this[ONSTAT](job, fs[stat](job.absolute)) + } + + [READDIR] (job, stat) { + this[ONREADDIR](job, fs.readdirSync(job.absolute)) + } + + // gotta get it all in this tick + [PIPE] (job) { + const source = job.entry + const zip = this.zip + + if (job.readdir) + job.readdir.forEach(entry => { + const p = this.prefix ? + job.path.slice(this.prefix.length + 1) || './' + : job.path + + const base = p === './' ? '' : p.replace(/\/*$/, '/') + this[ADDFSENTRY](base + entry) + }) + + if (zip) + source.on('data', chunk => { + zip.write(chunk) + }) + else + source.on('data', chunk => { + super[WRITE](chunk) + }) + } +} + +Pack.Sync = PackSync + +module.exports = Pack + + +/***/ }), +/* 122 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// Buffer in node 4.x < 4.5.0 doesn't have working Buffer.from +// or Buffer.alloc, and Buffer in node 10 deprecated the ctor. +// .M, this is fine .\^/M.. +let B = Buffer +/* istanbul ignore next */ +if (!B.alloc) { + B = __webpack_require__(123).Buffer +} +module.exports = B + + +/***/ }), +/* 123 */ +/***/ (function(module, exports, __webpack_require__) { + +/* eslint-disable node/no-deprecated-api */ +var buffer = __webpack_require__(124) +var Buffer = buffer.Buffer + +// alternative to using Object.keys for old browsers +function copyProps (src, dst) { + for (var key in src) { + dst[key] = src[key] + } +} +if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { + module.exports = buffer +} else { + // Copy properties from require('buffer') + copyProps(buffer, exports) + exports.Buffer = SafeBuffer +} + +function SafeBuffer (arg, encodingOrOffset, length) { + return Buffer(arg, encodingOrOffset, length) +} + +// Copy static methods from Buffer +copyProps(Buffer, SafeBuffer) + +SafeBuffer.from = function (arg, encodingOrOffset, length) { + if (typeof arg === 'number') { + throw new TypeError('Argument must not be a number') + } + return Buffer(arg, encodingOrOffset, length) +} + +SafeBuffer.alloc = function (size, fill, encoding) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + var buf = Buffer(size) + if (fill !== undefined) { + if (typeof encoding === 'string') { + buf.fill(fill, encoding) + } else { + buf.fill(fill) + } + } else { + buf.fill(0) + } + return buf +} + +SafeBuffer.allocUnsafe = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return Buffer(size) +} + +SafeBuffer.allocUnsafeSlow = function (size) { + if (typeof size !== 'number') { + throw new TypeError('Argument must be a number') + } + return buffer.SlowBuffer(size) +} + + +/***/ }), +/* 124 */ +/***/ (function(module, exports) { + +module.exports = require("buffer"); + +/***/ }), +/* 125 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const EE = __webpack_require__(58) +const Yallist = __webpack_require__(126) +const EOF = Symbol('EOF') +const MAYBE_EMIT_END = Symbol('maybeEmitEnd') +const EMITTED_END = Symbol('emittedEnd') +const CLOSED = Symbol('closed') +const READ = Symbol('read') +const FLUSH = Symbol('flush') +const doIter = process.env._MP_NO_ITERATOR_SYMBOLS_ !== '1' +const ASYNCITERATOR = doIter && Symbol.asyncIterator || Symbol('asyncIterator not implemented') +const ITERATOR = doIter && Symbol.iterator || Symbol('iterator not implemented') +const FLUSHCHUNK = Symbol('flushChunk') +const SD = __webpack_require__(128).StringDecoder +const ENCODING = Symbol('encoding') +const DECODER = Symbol('decoder') +const FLOWING = Symbol('flowing') +const RESUME = Symbol('resume') +const BUFFERLENGTH = Symbol('bufferLength') +const BUFFERPUSH = Symbol('bufferPush') +const BUFFERSHIFT = Symbol('bufferShift') +const OBJECTMODE = Symbol('objectMode') + +// Buffer in node 4.x < 4.5.0 doesn't have working Buffer.from +// or Buffer.alloc, and Buffer in node 10 deprecated the ctor. +// .M, this is fine .\^/M.. +let B = Buffer +/* istanbul ignore next */ +if (!B.alloc) { + B = __webpack_require__(123).Buffer +} + +module.exports = class MiniPass extends EE { + constructor (options) { + super() + this[FLOWING] = false + this.pipes = new Yallist() + this.buffer = new Yallist() + this[OBJECTMODE] = options && options.objectMode || false + if (this[OBJECTMODE]) + this[ENCODING] = null + else + this[ENCODING] = options && options.encoding || null + if (this[ENCODING] === 'buffer') + this[ENCODING] = null + this[DECODER] = this[ENCODING] ? new SD(this[ENCODING]) : null + this[EOF] = false + this[EMITTED_END] = false + this[CLOSED] = false + this.writable = true + this.readable = true + this[BUFFERLENGTH] = 0 + } + + get bufferLength () { return this[BUFFERLENGTH] } + + get encoding () { return this[ENCODING] } + set encoding (enc) { + if (this[OBJECTMODE]) + throw new Error('cannot set encoding in objectMode') + + if (this[ENCODING] && enc !== this[ENCODING] && + (this[DECODER] && this[DECODER].lastNeed || this[BUFFERLENGTH])) + throw new Error('cannot change encoding') + + if (this[ENCODING] !== enc) { + this[DECODER] = enc ? new SD(enc) : null + if (this.buffer.length) + this.buffer = this.buffer.map(chunk => this[DECODER].write(chunk)) + } + + this[ENCODING] = enc + } + + setEncoding (enc) { + this.encoding = enc + } + + write (chunk, encoding, cb) { + if (this[EOF]) + throw new Error('write after end') + + if (typeof encoding === 'function') + cb = encoding, encoding = 'utf8' + + if (!encoding) + encoding = 'utf8' + + // fast-path writing strings of same encoding to a stream with + // an empty buffer, skipping the buffer/decoder dance + if (typeof chunk === 'string' && !this[OBJECTMODE] && + // unless it is a string already ready for us to use + !(encoding === this[ENCODING] && !this[DECODER].lastNeed)) { + chunk = B.from(chunk, encoding) + } + + if (B.isBuffer(chunk) && this[ENCODING]) + chunk = this[DECODER].write(chunk) + + try { + return this.flowing + ? (this.emit('data', chunk), this.flowing) + : (this[BUFFERPUSH](chunk), false) + } finally { + this.emit('readable') + if (cb) + cb() + } + } + + read (n) { + try { + if (this[BUFFERLENGTH] === 0 || n === 0 || n > this[BUFFERLENGTH]) + return null + + if (this[OBJECTMODE]) + n = null + + if (this.buffer.length > 1 && !this[OBJECTMODE]) { + if (this.encoding) + this.buffer = new Yallist([ + Array.from(this.buffer).join('') + ]) + else + this.buffer = new Yallist([ + B.concat(Array.from(this.buffer), this[BUFFERLENGTH]) + ]) + } + + return this[READ](n || null, this.buffer.head.value) + } finally { + this[MAYBE_EMIT_END]() + } + } + + [READ] (n, chunk) { + if (n === chunk.length || n === null) + this[BUFFERSHIFT]() + else { + this.buffer.head.value = chunk.slice(n) + chunk = chunk.slice(0, n) + this[BUFFERLENGTH] -= n + } + + this.emit('data', chunk) + + if (!this.buffer.length && !this[EOF]) + this.emit('drain') + + return chunk + } + + end (chunk, encoding, cb) { + if (typeof chunk === 'function') + cb = chunk, chunk = null + if (typeof encoding === 'function') + cb = encoding, encoding = 'utf8' + if (chunk) + this.write(chunk, encoding) + if (cb) + this.once('end', cb) + this[EOF] = true + this.writable = false + if (this.flowing) + this[MAYBE_EMIT_END]() + } + + // don't let the internal resume be overwritten + [RESUME] () { + this[FLOWING] = true + this.emit('resume') + if (this.buffer.length) + this[FLUSH]() + else if (this[EOF]) + this[MAYBE_EMIT_END]() + else + this.emit('drain') + } + + resume () { + return this[RESUME]() + } + + pause () { + this[FLOWING] = false + } + + get flowing () { + return this[FLOWING] + } + + [BUFFERPUSH] (chunk) { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] += 1 + else + this[BUFFERLENGTH] += chunk.length + return this.buffer.push(chunk) + } + + [BUFFERSHIFT] () { + if (this.buffer.length) { + if (this[OBJECTMODE]) + this[BUFFERLENGTH] -= 1 + else + this[BUFFERLENGTH] -= this.buffer.head.value.length + } + return this.buffer.shift() + } + + [FLUSH] () { + do {} while (this[FLUSHCHUNK](this[BUFFERSHIFT]())) + + if (!this.buffer.length && !this[EOF]) + this.emit('drain') + } + + [FLUSHCHUNK] (chunk) { + return chunk ? (this.emit('data', chunk), this.flowing) : false + } + + pipe (dest, opts) { + if (dest === process.stdout || dest === process.stderr) + (opts = opts || {}).end = false + const p = { dest: dest, opts: opts, ondrain: _ => this[RESUME]() } + this.pipes.push(p) + + dest.on('drain', p.ondrain) + this[RESUME]() + return dest + } + + addListener (ev, fn) { + return this.on(ev, fn) + } + + on (ev, fn) { + try { + return super.on(ev, fn) + } finally { + if (ev === 'data' && !this.pipes.length && !this.flowing) + this[RESUME]() + else if (ev === 'end' && this[EMITTED_END]) { + super.emit('end') + this.removeAllListeners('end') + } + } + } + + get emittedEnd () { + return this[EMITTED_END] + } + + [MAYBE_EMIT_END] () { + if (!this[EMITTED_END] && this.buffer.length === 0 && this[EOF]) { + this.emit('end') + this.emit('prefinish') + this.emit('finish') + if (this[CLOSED]) + this.emit('close') + } + } + + emit (ev, data) { + if (ev === 'data') { + if (!data) + return + + if (this.pipes.length) + this.pipes.forEach(p => p.dest.write(data) || this.pause()) + } else if (ev === 'end') { + if (this[EMITTED_END] === true) + return + + this[EMITTED_END] = true + this.readable = false + + if (this[DECODER]) { + data = this[DECODER].end() + if (data) { + this.pipes.forEach(p => p.dest.write(data)) + super.emit('data', data) + } + } + + this.pipes.forEach(p => { + p.dest.removeListener('drain', p.ondrain) + if (!p.opts || p.opts.end !== false) + p.dest.end() + }) + } else if (ev === 'close') { + this[CLOSED] = true + // don't emit close before 'end' and 'finish' + if (!this[EMITTED_END]) + return + } + + const args = new Array(arguments.length) + args[0] = ev + args[1] = data + if (arguments.length > 2) { + for (let i = 2; i < arguments.length; i++) { + args[i] = arguments[i] + } + } + + try { + return super.emit.apply(this, args) + } finally { + if (ev !== 'end') + this[MAYBE_EMIT_END]() + else + this.removeAllListeners('end') + } + } + + // const all = await stream.collect() + collect () { + return new Promise((resolve, reject) => { + const buf = [] + this.on('data', c => buf.push(c)) + this.on('end', () => resolve(buf)) + this.on('error', reject) + }) + } + + // for await (let chunk of stream) + [ASYNCITERATOR] () { + const next = () => { + const res = this.read() + if (res !== null) + return Promise.resolve({ done: false, value: res }) + + if (this[EOF]) + return Promise.resolve({ done: true }) + + let resolve = null + let reject = null + const onerr = er => { + this.removeListener('data', ondata) + this.removeListener('end', onend) + reject(er) + } + const ondata = value => { + this.removeListener('error', onerr) + this.removeListener('end', onend) + this.pause() + resolve({ value: value, done: !!this[EOF] }) + } + const onend = () => { + this.removeListener('error', onerr) + this.removeListener('data', ondata) + resolve({ done: true }) + } + return new Promise((res, rej) => { + reject = rej + resolve = res + this.once('error', onerr) + this.once('end', onend) + this.once('data', ondata) + }) + } + + return { next } + } + + // for (let chunk of stream) + [ITERATOR] () { + const next = () => { + const value = this.read() + const done = value === null + return { value, done } + } + return { next } + } +} + + +/***/ }), +/* 126 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = Yallist + +Yallist.Node = Node +Yallist.create = Yallist + +function Yallist (list) { + var self = this + if (!(self instanceof Yallist)) { + self = new Yallist() + } + + self.tail = null + self.head = null + self.length = 0 + + if (list && typeof list.forEach === 'function') { + list.forEach(function (item) { + self.push(item) + }) + } else if (arguments.length > 0) { + for (var i = 0, l = arguments.length; i < l; i++) { + self.push(arguments[i]) + } + } + + return self +} + +Yallist.prototype.removeNode = function (node) { + if (node.list !== this) { + throw new Error('removing node which does not belong to this list') + } + + var next = node.next + var prev = node.prev + + if (next) { + next.prev = prev + } + + if (prev) { + prev.next = next + } + + if (node === this.head) { + this.head = next + } + if (node === this.tail) { + this.tail = prev + } + + node.list.length-- + node.next = null + node.prev = null + node.list = null +} + +Yallist.prototype.unshiftNode = function (node) { + if (node === this.head) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var head = this.head + node.list = this + node.next = head + if (head) { + head.prev = node + } + + this.head = node + if (!this.tail) { + this.tail = node + } + this.length++ +} + +Yallist.prototype.pushNode = function (node) { + if (node === this.tail) { + return + } + + if (node.list) { + node.list.removeNode(node) + } + + var tail = this.tail + node.list = this + node.prev = tail + if (tail) { + tail.next = node + } + + this.tail = node + if (!this.head) { + this.head = node + } + this.length++ +} + +Yallist.prototype.push = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + push(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.unshift = function () { + for (var i = 0, l = arguments.length; i < l; i++) { + unshift(this, arguments[i]) + } + return this.length +} + +Yallist.prototype.pop = function () { + if (!this.tail) { + return undefined + } + + var res = this.tail.value + this.tail = this.tail.prev + if (this.tail) { + this.tail.next = null + } else { + this.head = null + } + this.length-- + return res +} + +Yallist.prototype.shift = function () { + if (!this.head) { + return undefined + } + + var res = this.head.value + this.head = this.head.next + if (this.head) { + this.head.prev = null + } else { + this.tail = null + } + this.length-- + return res +} + +Yallist.prototype.forEach = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.head, i = 0; walker !== null; i++) { + fn.call(thisp, walker.value, i, this) + walker = walker.next + } +} + +Yallist.prototype.forEachReverse = function (fn, thisp) { + thisp = thisp || this + for (var walker = this.tail, i = this.length - 1; walker !== null; i--) { + fn.call(thisp, walker.value, i, this) + walker = walker.prev + } +} + +Yallist.prototype.get = function (n) { + for (var i = 0, walker = this.head; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.next + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.getReverse = function (n) { + for (var i = 0, walker = this.tail; walker !== null && i < n; i++) { + // abort out of the list early if we hit a cycle + walker = walker.prev + } + if (i === n && walker !== null) { + return walker.value + } +} + +Yallist.prototype.map = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.head; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.next + } + return res +} + +Yallist.prototype.mapReverse = function (fn, thisp) { + thisp = thisp || this + var res = new Yallist() + for (var walker = this.tail; walker !== null;) { + res.push(fn.call(thisp, walker.value, this)) + walker = walker.prev + } + return res +} + +Yallist.prototype.reduce = function (fn, initial) { + var acc + var walker = this.head + if (arguments.length > 1) { + acc = initial + } else if (this.head) { + walker = this.head.next + acc = this.head.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = 0; walker !== null; i++) { + acc = fn(acc, walker.value, i) + walker = walker.next + } + + return acc +} + +Yallist.prototype.reduceReverse = function (fn, initial) { + var acc + var walker = this.tail + if (arguments.length > 1) { + acc = initial + } else if (this.tail) { + walker = this.tail.prev + acc = this.tail.value + } else { + throw new TypeError('Reduce of empty list with no initial value') + } + + for (var i = this.length - 1; walker !== null; i--) { + acc = fn(acc, walker.value, i) + walker = walker.prev + } + + return acc +} + +Yallist.prototype.toArray = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.head; walker !== null; i++) { + arr[i] = walker.value + walker = walker.next + } + return arr +} + +Yallist.prototype.toArrayReverse = function () { + var arr = new Array(this.length) + for (var i = 0, walker = this.tail; walker !== null; i++) { + arr[i] = walker.value + walker = walker.prev + } + return arr +} + +Yallist.prototype.slice = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = 0, walker = this.head; walker !== null && i < from; i++) { + walker = walker.next + } + for (; walker !== null && i < to; i++, walker = walker.next) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.sliceReverse = function (from, to) { + to = to || this.length + if (to < 0) { + to += this.length + } + from = from || 0 + if (from < 0) { + from += this.length + } + var ret = new Yallist() + if (to < from || to < 0) { + return ret + } + if (from < 0) { + from = 0 + } + if (to > this.length) { + to = this.length + } + for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) { + walker = walker.prev + } + for (; walker !== null && i > from; i--, walker = walker.prev) { + ret.push(walker.value) + } + return ret +} + +Yallist.prototype.reverse = function () { + var head = this.head + var tail = this.tail + for (var walker = head; walker !== null; walker = walker.prev) { + var p = walker.prev + walker.prev = walker.next + walker.next = p + } + this.head = tail + this.tail = head + return this +} + +function push (self, item) { + self.tail = new Node(item, self.tail, null, self) + if (!self.head) { + self.head = self.tail + } + self.length++ +} + +function unshift (self, item) { + self.head = new Node(item, null, self.head, self) + if (!self.tail) { + self.tail = self.head + } + self.length++ +} + +function Node (value, prev, next, list) { + if (!(this instanceof Node)) { + return new Node(value, prev, next, list) + } + + this.list = list + this.value = value + + if (prev) { + prev.next = this + this.prev = prev + } else { + this.prev = null + } + + if (next) { + next.prev = this + this.next = next + } else { + this.next = null + } +} + +try { + // add if support for Symbol.iterator is present + __webpack_require__(127)(Yallist) +} catch (er) {} + + +/***/ }), +/* 127 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = function (Yallist) { + Yallist.prototype[Symbol.iterator] = function* () { + for (let walker = this.head; walker; walker = walker.next) { + yield walker.value + } + } +} + + +/***/ }), +/* 128 */ +/***/ (function(module, exports) { + +module.exports = require("string_decoder"); + +/***/ }), +/* 129 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const assert = __webpack_require__(98) +const Buffer = __webpack_require__(124).Buffer +const realZlib = __webpack_require__(84) + +const constants = exports.constants = __webpack_require__(130) +const MiniPass = __webpack_require__(125) + +const OriginalBufferConcat = Buffer.concat + +class ZlibError extends Error { + constructor (msg, errno) { + super('zlib: ' + msg) + this.errno = errno + this.code = codes.get(errno) + } + + get name () { + return 'ZlibError' + } +} + +// translation table for return codes. +const codes = new Map([ + [constants.Z_OK, 'Z_OK'], + [constants.Z_STREAM_END, 'Z_STREAM_END'], + [constants.Z_NEED_DICT, 'Z_NEED_DICT'], + [constants.Z_ERRNO, 'Z_ERRNO'], + [constants.Z_STREAM_ERROR, 'Z_STREAM_ERROR'], + [constants.Z_DATA_ERROR, 'Z_DATA_ERROR'], + [constants.Z_MEM_ERROR, 'Z_MEM_ERROR'], + [constants.Z_BUF_ERROR, 'Z_BUF_ERROR'], + [constants.Z_VERSION_ERROR, 'Z_VERSION_ERROR'] +]) + +const validFlushFlags = new Set([ + constants.Z_NO_FLUSH, + constants.Z_PARTIAL_FLUSH, + constants.Z_SYNC_FLUSH, + constants.Z_FULL_FLUSH, + constants.Z_FINISH, + constants.Z_BLOCK +]) + +const strategies = new Set([ + constants.Z_FILTERED, + constants.Z_HUFFMAN_ONLY, + constants.Z_RLE, + constants.Z_FIXED, + constants.Z_DEFAULT_STRATEGY +]) + +// the Zlib class they all inherit from +// This thing manages the queue of requests, and returns +// true or false if there is anything in the queue when +// you call the .write() method. +const _opts = Symbol('opts') +const _flushFlag = Symbol('flushFlag') +const _finishFlush = Symbol('finishFlush') +const _handle = Symbol('handle') +const _onError = Symbol('onError') +const _level = Symbol('level') +const _strategy = Symbol('strategy') +const _ended = Symbol('ended') + +class Zlib extends MiniPass { + constructor (opts, mode) { + super(opts) + this[_ended] = false + this[_opts] = opts = opts || {} + if (opts.flush && !validFlushFlags.has(opts.flush)) { + throw new TypeError('Invalid flush flag: ' + opts.flush) + } + if (opts.finishFlush && !validFlushFlags.has(opts.finishFlush)) { + throw new TypeError('Invalid flush flag: ' + opts.finishFlush) + } + + this[_flushFlag] = opts.flush || constants.Z_NO_FLUSH + this[_finishFlush] = typeof opts.finishFlush !== 'undefined' ? + opts.finishFlush : constants.Z_FINISH + + if (opts.chunkSize) { + if (opts.chunkSize < constants.Z_MIN_CHUNK) { + throw new RangeError('Invalid chunk size: ' + opts.chunkSize) + } + } + + if (opts.windowBits) { + if (opts.windowBits < constants.Z_MIN_WINDOWBITS || + opts.windowBits > constants.Z_MAX_WINDOWBITS) { + throw new RangeError('Invalid windowBits: ' + opts.windowBits) + } + } + + if (opts.level) { + if (opts.level < constants.Z_MIN_LEVEL || + opts.level > constants.Z_MAX_LEVEL) { + throw new RangeError('Invalid compression level: ' + opts.level) + } + } + + if (opts.memLevel) { + if (opts.memLevel < constants.Z_MIN_MEMLEVEL || + opts.memLevel > constants.Z_MAX_MEMLEVEL) { + throw new RangeError('Invalid memLevel: ' + opts.memLevel) + } + } + + if (opts.strategy && !(strategies.has(opts.strategy))) + throw new TypeError('Invalid strategy: ' + opts.strategy) + + if (opts.dictionary) { + if (!(opts.dictionary instanceof Buffer)) { + throw new TypeError('Invalid dictionary: it should be a Buffer instance') + } + } + + this[_handle] = new realZlib[mode](opts) + + this[_onError] = (err) => { + // there is no way to cleanly recover. + // continuing only obscures problems. + this.close() + + const error = new ZlibError(err.message, err.errno) + this.emit('error', error) + } + this[_handle].on('error', this[_onError]) + + const level = typeof opts.level === 'number' ? opts.level + : constants.Z_DEFAULT_COMPRESSION + + var strategy = typeof opts.strategy === 'number' ? opts.strategy + : constants.Z_DEFAULT_STRATEGY + + // API changed in node v9 + /* istanbul ignore next */ + + this[_level] = level + this[_strategy] = strategy + + this.once('end', this.close) + } + + close () { + if (this[_handle]) { + this[_handle].close() + this[_handle] = null + this.emit('close') + } + } + + params (level, strategy) { + if (!this[_handle]) + throw new Error('cannot switch params when binding is closed') + + // no way to test this without also not supporting params at all + /* istanbul ignore if */ + if (!this[_handle].params) + throw new Error('not supported in this implementation') + + if (level < constants.Z_MIN_LEVEL || + level > constants.Z_MAX_LEVEL) { + throw new RangeError('Invalid compression level: ' + level) + } + + if (!(strategies.has(strategy))) + throw new TypeError('Invalid strategy: ' + strategy) + + if (this[_level] !== level || this[_strategy] !== strategy) { + this.flush(constants.Z_SYNC_FLUSH) + assert(this[_handle], 'zlib binding closed') + // .params() calls .flush(), but the latter is always async in the + // core zlib. We override .flush() temporarily to intercept that and + // flush synchronously. + const origFlush = this[_handle].flush + this[_handle].flush = (flushFlag, cb) => { + this[_handle].flush = origFlush + this.flush(flushFlag) + cb() + } + this[_handle].params(level, strategy) + /* istanbul ignore else */ + if (this[_handle]) { + this[_level] = level + this[_strategy] = strategy + } + } + } + + reset () { + assert(this[_handle], 'zlib binding closed') + return this[_handle].reset() + } + + flush (kind) { + if (kind === undefined) + kind = constants.Z_FULL_FLUSH + + if (this.ended) + return + + const flushFlag = this[_flushFlag] + this[_flushFlag] = kind + this.write(Buffer.alloc(0)) + this[_flushFlag] = flushFlag + } + + end (chunk, encoding, cb) { + if (chunk) + this.write(chunk, encoding) + this.flush(this[_finishFlush]) + this[_ended] = true + return super.end(null, null, cb) + } + + get ended () { + return this[_ended] + } + + write (chunk, encoding, cb) { + // process the chunk using the sync process + // then super.write() all the outputted chunks + if (typeof encoding === 'function') + cb = encoding, encoding = 'utf8' + + if (typeof chunk === 'string') + chunk = Buffer.from(chunk, encoding) + + assert(this[_handle], 'zlib binding closed') + + // _processChunk tries to .close() the native handle after it's done, so we + // intercept that by temporarily making it a no-op. + const nativeHandle = this[_handle]._handle + const originalNativeClose = nativeHandle.close + nativeHandle.close = () => {} + const originalClose = this[_handle].close + this[_handle].close = () => {} + // It also calls `Buffer.concat()` at the end, which may be convenient + // for some, but which we are not interested in as it slows us down. + Buffer.concat = (args) => args + let result + try { + result = this[_handle]._processChunk(chunk, this[_flushFlag]) + } catch (err) { + this[_onError](err) + } finally { + Buffer.concat = OriginalBufferConcat + if (this[_handle]) { + // Core zlib resets `_handle` to null after attempting to close the + // native handle. Our no-op handler prevented actual closure, but we + // need to restore the `._handle` property. + this[_handle]._handle = nativeHandle + nativeHandle.close = originalNativeClose + this[_handle].close = originalClose + // `_processChunk()` adds an 'error' listener. If we don't remove it + // after each call, these handlers start piling up. + this[_handle].removeAllListeners('error') + } + } + + let writeReturn + if (result) { + if (Array.isArray(result) && result.length > 0) { + // The first buffer is always `handle._outBuffer`, which would be + // re-used for later invocations; so, we always have to copy that one. + writeReturn = super.write(Buffer.from(result[0])) + for (let i = 1; i < result.length; i++) { + writeReturn = super.write(result[i]) + } + } else { + writeReturn = super.write(Buffer.from(result)) + } + } + + if (cb) + cb() + return writeReturn + } +} + +// minimal 2-byte header +class Deflate extends Zlib { + constructor (opts) { + super(opts, 'Deflate') + } +} + +class Inflate extends Zlib { + constructor (opts) { + super(opts, 'Inflate') + } +} + +// gzip - bigger header, same deflate compression +class Gzip extends Zlib { + constructor (opts) { + super(opts, 'Gzip') + } +} + +class Gunzip extends Zlib { + constructor (opts) { + super(opts, 'Gunzip') + } +} + +// raw - no header +class DeflateRaw extends Zlib { + constructor (opts) { + super(opts, 'DeflateRaw') + } +} + +class InflateRaw extends Zlib { + constructor (opts) { + super(opts, 'InflateRaw') + } +} + +// auto-detect header. +class Unzip extends Zlib { + constructor (opts) { + super(opts, 'Unzip') + } +} + +exports.Deflate = Deflate +exports.Inflate = Inflate +exports.Gzip = Gzip +exports.Gunzip = Gunzip +exports.DeflateRaw = DeflateRaw +exports.InflateRaw = InflateRaw +exports.Unzip = Unzip + + +/***/ }), +/* 130 */ +/***/ (function(module, exports) { + +module.exports = Object.freeze({ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + Z_VERSION_ERROR: -6, + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + ZLIB_VERNUM: 4736, + DEFLATE: 1, + INFLATE: 2, + GZIP: 3, + GUNZIP: 4, + DEFLATERAW: 5, + INFLATERAW: 6, + UNZIP: 7, + Z_MIN_WINDOWBITS: 8, + Z_MAX_WINDOWBITS: 15, + Z_DEFAULT_WINDOWBITS: 15, + Z_MIN_CHUNK: 64, + Z_MAX_CHUNK: Infinity, + Z_DEFAULT_CHUNK: 16384, + Z_MIN_MEMLEVEL: 1, + Z_MAX_MEMLEVEL: 9, + Z_DEFAULT_MEMLEVEL: 8, + Z_MIN_LEVEL: -1, + Z_MAX_LEVEL: 9, + Z_DEFAULT_LEVEL: -1 +}) + + +/***/ }), +/* 131 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const types = __webpack_require__(132) +const MiniPass = __webpack_require__(125) + +const SLURP = Symbol('slurp') +module.exports = class ReadEntry extends MiniPass { + constructor (header, ex, gex) { + super() + this.extended = ex + this.globalExtended = gex + this.header = header + this.startBlockSize = 512 * Math.ceil(header.size / 512) + this.blockRemain = this.startBlockSize + this.remain = header.size + this.type = header.type + this.meta = false + this.ignore = false + switch (this.type) { + case 'File': + case 'OldFile': + case 'Link': + case 'SymbolicLink': + case 'CharacterDevice': + case 'BlockDevice': + case 'Directory': + case 'FIFO': + case 'ContiguousFile': + case 'GNUDumpDir': + break + + case 'NextFileHasLongLinkpath': + case 'NextFileHasLongPath': + case 'OldGnuLongPath': + case 'GlobalExtendedHeader': + case 'ExtendedHeader': + case 'OldExtendedHeader': + this.meta = true + break + + // NOTE: gnutar and bsdtar treat unrecognized types as 'File' + // it may be worth doing the same, but with a warning. + default: + this.ignore = true + } + + this.path = header.path + this.mode = header.mode + if (this.mode) + this.mode = this.mode & 0o7777 + this.uid = header.uid + this.gid = header.gid + this.uname = header.uname + this.gname = header.gname + this.size = header.size + this.mtime = header.mtime + this.atime = header.atime + this.ctime = header.ctime + this.linkpath = header.linkpath + this.uname = header.uname + this.gname = header.gname + + if (ex) this[SLURP](ex) + if (gex) this[SLURP](gex, true) + } + + write (data) { + const writeLen = data.length + if (writeLen > this.blockRemain) + throw new Error('writing more to entry than is appropriate') + + const r = this.remain + const br = this.blockRemain + this.remain = Math.max(0, r - writeLen) + this.blockRemain = Math.max(0, br - writeLen) + if (this.ignore) + return true + + if (r >= writeLen) + return super.write(data) + + // r < writeLen + return super.write(data.slice(0, r)) + } + + [SLURP] (ex, global) { + for (let k in ex) { + // we slurp in everything except for the path attribute in + // a global extended header, because that's weird. + if (ex[k] !== null && ex[k] !== undefined && + !(global && k === 'path')) + this[k] = ex[k] + } + } +} + + +/***/ }), +/* 132 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// map types from key to human-friendly name +exports.name = new Map([ + ['0', 'File'], + // same as File + ['', 'OldFile'], + ['1', 'Link'], + ['2', 'SymbolicLink'], + // Devices and FIFOs aren't fully supported + // they are parsed, but skipped when unpacking + ['3', 'CharacterDevice'], + ['4', 'BlockDevice'], + ['5', 'Directory'], + ['6', 'FIFO'], + // same as File + ['7', 'ContiguousFile'], + // pax headers + ['g', 'GlobalExtendedHeader'], + ['x', 'ExtendedHeader'], + // vendor-specific stuff + // skip + ['A', 'SolarisACL'], + // like 5, but with data, which should be skipped + ['D', 'GNUDumpDir'], + // metadata only, skip + ['I', 'Inode'], + // data = link path of next file + ['K', 'NextFileHasLongLinkpath'], + // data = path of next file + ['L', 'NextFileHasLongPath'], + // skip + ['M', 'ContinuationFile'], + // like L + ['N', 'OldGnuLongPath'], + // skip + ['S', 'SparseFile'], + // skip + ['V', 'TapeVolumeHeader'], + // like x + ['X', 'OldExtendedHeader'] +]) + +// map the other direction +exports.code = new Map(Array.from(exports.name).map(kv => [kv[1], kv[0]])) + + +/***/ }), +/* 133 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const Buffer = __webpack_require__(122) +const MiniPass = __webpack_require__(125) +const Pax = __webpack_require__(134) +const Header = __webpack_require__(135) +const ReadEntry = __webpack_require__(131) +const fs = __webpack_require__(5) +const path = __webpack_require__(6) + +const types = __webpack_require__(132) +const maxReadSize = 16 * 1024 * 1024 +const PROCESS = Symbol('process') +const FILE = Symbol('file') +const DIRECTORY = Symbol('directory') +const SYMLINK = Symbol('symlink') +const HARDLINK = Symbol('hardlink') +const HEADER = Symbol('header') +const READ = Symbol('read') +const LSTAT = Symbol('lstat') +const ONLSTAT = Symbol('onlstat') +const ONREAD = Symbol('onread') +const ONREADLINK = Symbol('onreadlink') +const OPENFILE = Symbol('openfile') +const ONOPENFILE = Symbol('onopenfile') +const CLOSE = Symbol('close') +const MODE = Symbol('mode') +const warner = __webpack_require__(137) +const winchars = __webpack_require__(138) + +const modeFix = __webpack_require__(139) + +const WriteEntry = warner(class WriteEntry extends MiniPass { + constructor (p, opt) { + opt = opt || {} + super(opt) + if (typeof p !== 'string') + throw new TypeError('path is required') + this.path = p + // suppress atime, ctime, uid, gid, uname, gname + this.portable = !!opt.portable + // until node has builtin pwnam functions, this'll have to do + this.myuid = process.getuid && process.getuid() + this.myuser = process.env.USER || '' + this.maxReadSize = opt.maxReadSize || maxReadSize + this.linkCache = opt.linkCache || new Map() + this.statCache = opt.statCache || new Map() + this.preservePaths = !!opt.preservePaths + this.cwd = opt.cwd || process.cwd() + this.strict = !!opt.strict + this.noPax = !!opt.noPax + this.noMtime = !!opt.noMtime + this.mtime = opt.mtime || null + + if (typeof opt.onwarn === 'function') + this.on('warn', opt.onwarn) + + if (!this.preservePaths && path.win32.isAbsolute(p)) { + // absolutes on posix are also absolutes on win32 + // so we only need to test this one to get both + const parsed = path.win32.parse(p) + this.warn('stripping ' + parsed.root + ' from absolute path', p) + this.path = p.substr(parsed.root.length) + } + + this.win32 = !!opt.win32 || process.platform === 'win32' + if (this.win32) { + this.path = winchars.decode(this.path.replace(/\\/g, '/')) + p = p.replace(/\\/g, '/') + } + + this.absolute = opt.absolute || path.resolve(this.cwd, p) + + if (this.path === '') + this.path = './' + + if (this.statCache.has(this.absolute)) + this[ONLSTAT](this.statCache.get(this.absolute)) + else + this[LSTAT]() + } + + [LSTAT] () { + fs.lstat(this.absolute, (er, stat) => { + if (er) + return this.emit('error', er) + this[ONLSTAT](stat) + }) + } + + [ONLSTAT] (stat) { + this.statCache.set(this.absolute, stat) + this.stat = stat + if (!stat.isFile()) + stat.size = 0 + this.type = getType(stat) + this.emit('stat', stat) + this[PROCESS]() + } + + [PROCESS] () { + switch (this.type) { + case 'File': return this[FILE]() + case 'Directory': return this[DIRECTORY]() + case 'SymbolicLink': return this[SYMLINK]() + // unsupported types are ignored. + default: return this.end() + } + } + + [MODE] (mode) { + return modeFix(mode, this.type === 'Directory') + } + + [HEADER] () { + if (this.type === 'Directory' && this.portable) + this.noMtime = true + + this.header = new Header({ + path: this.path, + linkpath: this.linkpath, + // only the permissions and setuid/setgid/sticky bitflags + // not the higher-order bits that specify file type + mode: this[MODE](this.stat.mode), + uid: this.portable ? null : this.stat.uid, + gid: this.portable ? null : this.stat.gid, + size: this.stat.size, + mtime: this.noMtime ? null : this.mtime || this.stat.mtime, + type: this.type, + uname: this.portable ? null : + this.stat.uid === this.myuid ? this.myuser : '', + atime: this.portable ? null : this.stat.atime, + ctime: this.portable ? null : this.stat.ctime + }) + + if (this.header.encode() && !this.noPax) + this.write(new Pax({ + atime: this.portable ? null : this.header.atime, + ctime: this.portable ? null : this.header.ctime, + gid: this.portable ? null : this.header.gid, + mtime: this.noMtime ? null : this.mtime || this.header.mtime, + path: this.path, + linkpath: this.linkpath, + size: this.header.size, + uid: this.portable ? null : this.header.uid, + uname: this.portable ? null : this.header.uname, + dev: this.portable ? null : this.stat.dev, + ino: this.portable ? null : this.stat.ino, + nlink: this.portable ? null : this.stat.nlink + }).encode()) + this.write(this.header.block) + } + + [DIRECTORY] () { + if (this.path.substr(-1) !== '/') + this.path += '/' + this.stat.size = 0 + this[HEADER]() + this.end() + } + + [SYMLINK] () { + fs.readlink(this.absolute, (er, linkpath) => { + if (er) + return this.emit('error', er) + this[ONREADLINK](linkpath) + }) + } + + [ONREADLINK] (linkpath) { + this.linkpath = linkpath + this[HEADER]() + this.end() + } + + [HARDLINK] (linkpath) { + this.type = 'Link' + this.linkpath = path.relative(this.cwd, linkpath) + this.stat.size = 0 + this[HEADER]() + this.end() + } + + [FILE] () { + if (this.stat.nlink > 1) { + const linkKey = this.stat.dev + ':' + this.stat.ino + if (this.linkCache.has(linkKey)) { + const linkpath = this.linkCache.get(linkKey) + if (linkpath.indexOf(this.cwd) === 0) + return this[HARDLINK](linkpath) + } + this.linkCache.set(linkKey, this.absolute) + } + + this[HEADER]() + if (this.stat.size === 0) + return this.end() + + this[OPENFILE]() + } + + [OPENFILE] () { + fs.open(this.absolute, 'r', (er, fd) => { + if (er) + return this.emit('error', er) + this[ONOPENFILE](fd) + }) + } + + [ONOPENFILE] (fd) { + const blockLen = 512 * Math.ceil(this.stat.size / 512) + const bufLen = Math.min(blockLen, this.maxReadSize) + const buf = Buffer.allocUnsafe(bufLen) + this[READ](fd, buf, 0, buf.length, 0, this.stat.size, blockLen) + } + + [READ] (fd, buf, offset, length, pos, remain, blockRemain) { + fs.read(fd, buf, offset, length, pos, (er, bytesRead) => { + if (er) + return this[CLOSE](fd, _ => this.emit('error', er)) + this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead) + }) + } + + [CLOSE] (fd, cb) { + fs.close(fd, cb) + } + + [ONREAD] (fd, buf, offset, length, pos, remain, blockRemain, bytesRead) { + if (bytesRead <= 0 && remain > 0) { + const er = new Error('encountered unexpected EOF') + er.path = this.absolute + er.syscall = 'read' + er.code = 'EOF' + this[CLOSE](fd) + return this.emit('error', er) + } + + if (bytesRead > remain) { + const er = new Error('did not encounter expected EOF') + er.path = this.absolute + er.syscall = 'read' + er.code = 'EOF' + this[CLOSE](fd) + return this.emit('error', er) + } + + // null out the rest of the buffer, if we could fit the block padding + if (bytesRead === remain) { + for (let i = bytesRead; i < length && bytesRead < blockRemain; i++) { + buf[i + offset] = 0 + bytesRead ++ + remain ++ + } + } + + const writeBuf = offset === 0 && bytesRead === buf.length ? + buf : buf.slice(offset, offset + bytesRead) + remain -= bytesRead + blockRemain -= bytesRead + pos += bytesRead + offset += bytesRead + + this.write(writeBuf) + + if (!remain) { + if (blockRemain) + this.write(Buffer.alloc(blockRemain)) + this.end() + this[CLOSE](fd, _ => _) + return + } + + if (offset >= length) { + buf = Buffer.allocUnsafe(length) + offset = 0 + } + length = buf.length - offset + this[READ](fd, buf, offset, length, pos, remain, blockRemain) + } +}) + +class WriteEntrySync extends WriteEntry { + constructor (path, opt) { + super(path, opt) + } + + [LSTAT] () { + this[ONLSTAT](fs.lstatSync(this.absolute)) + } + + [SYMLINK] () { + this[ONREADLINK](fs.readlinkSync(this.absolute)) + } + + [OPENFILE] () { + this[ONOPENFILE](fs.openSync(this.absolute, 'r')) + } + + [READ] (fd, buf, offset, length, pos, remain, blockRemain) { + let threw = true + try { + const bytesRead = fs.readSync(fd, buf, offset, length, pos) + this[ONREAD](fd, buf, offset, length, pos, remain, blockRemain, bytesRead) + threw = false + } finally { + if (threw) + try { this[CLOSE](fd) } catch (er) {} + } + } + + [CLOSE] (fd) { + fs.closeSync(fd) + } +} + +const WriteEntryTar = warner(class WriteEntryTar extends MiniPass { + constructor (readEntry, opt) { + opt = opt || {} + super(opt) + this.preservePaths = !!opt.preservePaths + this.portable = !!opt.portable + this.strict = !!opt.strict + this.noPax = !!opt.noPax + this.noMtime = !!opt.noMtime + + this.readEntry = readEntry + this.type = readEntry.type + if (this.type === 'Directory' && this.portable) + this.noMtime = true + + this.path = readEntry.path + this.mode = this[MODE](readEntry.mode) + this.uid = this.portable ? null : readEntry.uid + this.gid = this.portable ? null : readEntry.gid + this.uname = this.portable ? null : readEntry.uname + this.gname = this.portable ? null : readEntry.gname + this.size = readEntry.size + this.mtime = this.noMtime ? null : opt.mtime || readEntry.mtime + this.atime = this.portable ? null : readEntry.atime + this.ctime = this.portable ? null : readEntry.ctime + this.linkpath = readEntry.linkpath + + if (typeof opt.onwarn === 'function') + this.on('warn', opt.onwarn) + + if (path.isAbsolute(this.path) && !this.preservePaths) { + const parsed = path.parse(this.path) + this.warn( + 'stripping ' + parsed.root + ' from absolute path', + this.path + ) + this.path = this.path.substr(parsed.root.length) + } + + this.remain = readEntry.size + this.blockRemain = readEntry.startBlockSize + + this.header = new Header({ + path: this.path, + linkpath: this.linkpath, + // only the permissions and setuid/setgid/sticky bitflags + // not the higher-order bits that specify file type + mode: this.mode, + uid: this.portable ? null : this.uid, + gid: this.portable ? null : this.gid, + size: this.size, + mtime: this.noMtime ? null : this.mtime, + type: this.type, + uname: this.portable ? null : this.uname, + atime: this.portable ? null : this.atime, + ctime: this.portable ? null : this.ctime + }) + + if (this.header.encode() && !this.noPax) + super.write(new Pax({ + atime: this.portable ? null : this.atime, + ctime: this.portable ? null : this.ctime, + gid: this.portable ? null : this.gid, + mtime: this.noMtime ? null : this.mtime, + path: this.path, + linkpath: this.linkpath, + size: this.size, + uid: this.portable ? null : this.uid, + uname: this.portable ? null : this.uname, + dev: this.portable ? null : this.readEntry.dev, + ino: this.portable ? null : this.readEntry.ino, + nlink: this.portable ? null : this.readEntry.nlink + }).encode()) + + super.write(this.header.block) + readEntry.pipe(this) + } + + [MODE] (mode) { + return modeFix(mode, this.type === 'Directory') + } + + write (data) { + const writeLen = data.length + if (writeLen > this.blockRemain) + throw new Error('writing more to entry than is appropriate') + this.blockRemain -= writeLen + return super.write(data) + } + + end () { + if (this.blockRemain) + this.write(Buffer.alloc(this.blockRemain)) + return super.end() + } +}) + +WriteEntry.Sync = WriteEntrySync +WriteEntry.Tar = WriteEntryTar + +const getType = stat => + stat.isFile() ? 'File' + : stat.isDirectory() ? 'Directory' + : stat.isSymbolicLink() ? 'SymbolicLink' + : 'Unsupported' + +module.exports = WriteEntry + + +/***/ }), +/* 134 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const Buffer = __webpack_require__(122) +const Header = __webpack_require__(135) +const path = __webpack_require__(6) + +class Pax { + constructor (obj, global) { + this.atime = obj.atime || null + this.charset = obj.charset || null + this.comment = obj.comment || null + this.ctime = obj.ctime || null + this.gid = obj.gid || null + this.gname = obj.gname || null + this.linkpath = obj.linkpath || null + this.mtime = obj.mtime || null + this.path = obj.path || null + this.size = obj.size || null + this.uid = obj.uid || null + this.uname = obj.uname || null + this.dev = obj.dev || null + this.ino = obj.ino || null + this.nlink = obj.nlink || null + this.global = global || false + } + + encode () { + const body = this.encodeBody() + if (body === '') + return null + + const bodyLen = Buffer.byteLength(body) + // round up to 512 bytes + // add 512 for header + const bufLen = 512 * Math.ceil(1 + bodyLen / 512) + const buf = Buffer.allocUnsafe(bufLen) + + // 0-fill the header section, it might not hit every field + for (let i = 0; i < 512; i++) { + buf[i] = 0 + } + + new Header({ + // XXX split the path + // then the path should be PaxHeader + basename, but less than 99, + // prepend with the dirname + path: ('PaxHeader/' + path.basename(this.path)).slice(0, 99), + mode: this.mode || 0o644, + uid: this.uid || null, + gid: this.gid || null, + size: bodyLen, + mtime: this.mtime || null, + type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader', + linkpath: '', + uname: this.uname || '', + gname: this.gname || '', + devmaj: 0, + devmin: 0, + atime: this.atime || null, + ctime: this.ctime || null + }).encode(buf) + + buf.write(body, 512, bodyLen, 'utf8') + + // null pad after the body + for (let i = bodyLen + 512; i < buf.length; i++) { + buf[i] = 0 + } + + return buf + } + + encodeBody () { + return ( + this.encodeField('path') + + this.encodeField('ctime') + + this.encodeField('atime') + + this.encodeField('dev') + + this.encodeField('ino') + + this.encodeField('nlink') + + this.encodeField('charset') + + this.encodeField('comment') + + this.encodeField('gid') + + this.encodeField('gname') + + this.encodeField('linkpath') + + this.encodeField('mtime') + + this.encodeField('size') + + this.encodeField('uid') + + this.encodeField('uname') + ) + } + + encodeField (field) { + if (this[field] === null || this[field] === undefined) + return '' + const v = this[field] instanceof Date ? this[field].getTime() / 1000 + : this[field] + const s = ' ' + + (field === 'dev' || field === 'ino' || field === 'nlink' + ? 'SCHILY.' : '') + + field + '=' + v + '\n' + const byteLen = Buffer.byteLength(s) + // the digits includes the length of the digits in ascii base-10 + // so if it's 9 characters, then adding 1 for the 9 makes it 10 + // which makes it 11 chars. + let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1 + if (byteLen + digits >= Math.pow(10, digits)) + digits += 1 + const len = digits + byteLen + return len + s + } +} + +Pax.parse = (string, ex, g) => new Pax(merge(parseKV(string), ex), g) + +const merge = (a, b) => + b ? Object.keys(a).reduce((s, k) => (s[k] = a[k], s), b) : a + +const parseKV = string => + string + .replace(/\n$/, '') + .split('\n') + .reduce(parseKVLine, Object.create(null)) + +const parseKVLine = (set, line) => { + const n = parseInt(line, 10) + + // XXX Values with \n in them will fail this. + // Refactor to not be a naive line-by-line parse. + if (n !== Buffer.byteLength(line) + 1) + return set + + line = line.substr((n + ' ').length) + const kv = line.split('=') + const k = kv.shift().replace(/^SCHILY\.(dev|ino|nlink)/, '$1') + if (!k) + return set + + const v = kv.join('=') + set[k] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) + ? new Date(v * 1000) + : /^[0-9]+$/.test(v) ? +v + : v + return set +} + +module.exports = Pax + + +/***/ }), +/* 135 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// parse a 512-byte header block to a data object, or vice-versa +// encode returns `true` if a pax extended header is needed, because +// the data could not be faithfully encoded in a simple header. +// (Also, check header.needPax to see if it needs a pax header.) + +const Buffer = __webpack_require__(122) +const types = __webpack_require__(132) +const pathModule = __webpack_require__(6).posix +const large = __webpack_require__(136) + +const SLURP = Symbol('slurp') +const TYPE = Symbol('type') + +class Header { + constructor (data, off, ex, gex) { + this.cksumValid = false + this.needPax = false + this.nullBlock = false + + this.block = null + this.path = null + this.mode = null + this.uid = null + this.gid = null + this.size = null + this.mtime = null + this.cksum = null + this[TYPE] = '0' + this.linkpath = null + this.uname = null + this.gname = null + this.devmaj = 0 + this.devmin = 0 + this.atime = null + this.ctime = null + + if (Buffer.isBuffer(data)) + this.decode(data, off || 0, ex, gex) + else if (data) + this.set(data) + } + + decode (buf, off, ex, gex) { + if (!off) + off = 0 + + if (!buf || !(buf.length >= off + 512)) + throw new Error('need 512 bytes for header') + + this.path = decString(buf, off, 100) + this.mode = decNumber(buf, off + 100, 8) + this.uid = decNumber(buf, off + 108, 8) + this.gid = decNumber(buf, off + 116, 8) + this.size = decNumber(buf, off + 124, 12) + this.mtime = decDate(buf, off + 136, 12) + this.cksum = decNumber(buf, off + 148, 12) + + // if we have extended or global extended headers, apply them now + // See https://github.com/npm/node-tar/pull/187 + this[SLURP](ex) + this[SLURP](gex, true) + + // old tar versions marked dirs as a file with a trailing / + this[TYPE] = decString(buf, off + 156, 1) + if (this[TYPE] === '') + this[TYPE] = '0' + if (this[TYPE] === '0' && this.path.substr(-1) === '/') + this[TYPE] = '5' + + // tar implementations sometimes incorrectly put the stat(dir).size + // as the size in the tarball, even though Directory entries are + // not able to have any body at all. In the very rare chance that + // it actually DOES have a body, we weren't going to do anything with + // it anyway, and it'll just be a warning about an invalid header. + if (this[TYPE] === '5') + this.size = 0 + + this.linkpath = decString(buf, off + 157, 100) + if (buf.slice(off + 257, off + 265).toString() === 'ustar\u000000') { + this.uname = decString(buf, off + 265, 32) + this.gname = decString(buf, off + 297, 32) + this.devmaj = decNumber(buf, off + 329, 8) + this.devmin = decNumber(buf, off + 337, 8) + if (buf[off + 475] !== 0) { + // definitely a prefix, definitely >130 chars. + const prefix = decString(buf, off + 345, 155) + this.path = prefix + '/' + this.path + } else { + const prefix = decString(buf, off + 345, 130) + if (prefix) + this.path = prefix + '/' + this.path + this.atime = decDate(buf, off + 476, 12) + this.ctime = decDate(buf, off + 488, 12) + } + } + + let sum = 8 * 0x20 + for (let i = off; i < off + 148; i++) { + sum += buf[i] + } + for (let i = off + 156; i < off + 512; i++) { + sum += buf[i] + } + this.cksumValid = sum === this.cksum + if (this.cksum === null && sum === 8 * 0x20) + this.nullBlock = true + } + + [SLURP] (ex, global) { + for (let k in ex) { + // we slurp in everything except for the path attribute in + // a global extended header, because that's weird. + if (ex[k] !== null && ex[k] !== undefined && + !(global && k === 'path')) + this[k] = ex[k] + } + } + + encode (buf, off) { + if (!buf) { + buf = this.block = Buffer.alloc(512) + off = 0 + } + + if (!off) + off = 0 + + if (!(buf.length >= off + 512)) + throw new Error('need 512 bytes for header') + + const prefixSize = this.ctime || this.atime ? 130 : 155 + const split = splitPrefix(this.path || '', prefixSize) + const path = split[0] + const prefix = split[1] + this.needPax = split[2] + + this.needPax = encString(buf, off, 100, path) || this.needPax + this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax + this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax + this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax + this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax + this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax + buf[off + 156] = this[TYPE].charCodeAt(0) + this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax + buf.write('ustar\u000000', off + 257, 8) + this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax + this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax + this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax + this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax + this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax + if (buf[off + 475] !== 0) + this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax + else { + this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax + this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax + this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax + } + + let sum = 8 * 0x20 + for (let i = off; i < off + 148; i++) { + sum += buf[i] + } + for (let i = off + 156; i < off + 512; i++) { + sum += buf[i] + } + this.cksum = sum + encNumber(buf, off + 148, 8, this.cksum) + this.cksumValid = true + + return this.needPax + } + + set (data) { + for (let i in data) { + if (data[i] !== null && data[i] !== undefined) + this[i] = data[i] + } + } + + get type () { + return types.name.get(this[TYPE]) || this[TYPE] + } + + get typeKey () { + return this[TYPE] + } + + set type (type) { + if (types.code.has(type)) + this[TYPE] = types.code.get(type) + else + this[TYPE] = type + } +} + +const splitPrefix = (p, prefixSize) => { + const pathSize = 100 + let pp = p + let prefix = '' + let ret + const root = pathModule.parse(p).root || '.' + + if (Buffer.byteLength(pp) < pathSize) + ret = [pp, prefix, false] + else { + // first set prefix to the dir, and path to the base + prefix = pathModule.dirname(pp) + pp = pathModule.basename(pp) + + do { + // both fit! + if (Buffer.byteLength(pp) <= pathSize && + Buffer.byteLength(prefix) <= prefixSize) + ret = [pp, prefix, false] + + // prefix fits in prefix, but path doesn't fit in path + else if (Buffer.byteLength(pp) > pathSize && + Buffer.byteLength(prefix) <= prefixSize) + ret = [pp.substr(0, pathSize - 1), prefix, true] + + else { + // make path take a bit from prefix + pp = pathModule.join(pathModule.basename(prefix), pp) + prefix = pathModule.dirname(prefix) + } + } while (prefix !== root && !ret) + + // at this point, found no resolution, just truncate + if (!ret) + ret = [p.substr(0, pathSize - 1), '', true] + } + return ret +} + +const decString = (buf, off, size) => + buf.slice(off, off + size).toString('utf8').replace(/\0.*/, '') + +const decDate = (buf, off, size) => + numToDate(decNumber(buf, off, size)) + +const numToDate = num => num === null ? null : new Date(num * 1000) + +const decNumber = (buf, off, size) => + buf[off] & 0x80 ? large.parse(buf.slice(off, off + size)) + : decSmallNumber(buf, off, size) + +const nanNull = value => isNaN(value) ? null : value + +const decSmallNumber = (buf, off, size) => + nanNull(parseInt( + buf.slice(off, off + size) + .toString('utf8').replace(/\0.*$/, '').trim(), 8)) + +// the maximum encodable as a null-terminated octal, by field size +const MAXNUM = { + 12: 0o77777777777, + 8 : 0o7777777 +} + +const encNumber = (buf, off, size, number) => + number === null ? false : + number > MAXNUM[size] || number < 0 + ? (large.encode(number, buf.slice(off, off + size)), true) + : (encSmallNumber(buf, off, size, number), false) + +const encSmallNumber = (buf, off, size, number) => + buf.write(octalString(number, size), off, size, 'ascii') + +const octalString = (number, size) => + padOctal(Math.floor(number).toString(8), size) + +const padOctal = (string, size) => + (string.length === size - 1 ? string + : new Array(size - string.length - 1).join('0') + string + ' ') + '\0' + +const encDate = (buf, off, size, date) => + date === null ? false : + encNumber(buf, off, size, date.getTime() / 1000) + +// enough to fill the longest string we've got +const NULLS = new Array(156).join('\0') +// pad with nulls, return true if it's longer or non-ascii +const encString = (buf, off, size, string) => + string === null ? false : + (buf.write(string + NULLS, off, size, 'utf8'), + string.length !== Buffer.byteLength(string) || string.length > size) + +module.exports = Header + + +/***/ }), +/* 136 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// Tar can encode large and negative numbers using a leading byte of +// 0xff for negative, and 0x80 for positive. The trailing byte in the +// section will always be 0x20, or in some implementations 0x00. +// this module encodes and decodes these things. + +const encode = exports.encode = (num, buf) => { + buf[buf.length - 1] = 0x20 + if (num < 0) + encodeNegative(num, buf) + else + encodePositive(num, buf) + return buf +} + +const encodePositive = (num, buf) => { + buf[0] = 0x80 + for (var i = buf.length - 2; i > 0; i--) { + if (num === 0) + buf[i] = 0 + else { + buf[i] = num % 0x100 + num = Math.floor(num / 0x100) + } + } +} + +const encodeNegative = (num, buf) => { + buf[0] = 0xff + var flipped = false + num = num * -1 + for (var i = buf.length - 2; i > 0; i--) { + var byte + if (num === 0) + byte = 0 + else { + byte = num % 0x100 + num = Math.floor(num / 0x100) + } + if (flipped) + buf[i] = onesComp(byte) + else if (byte === 0) + buf[i] = 0 + else { + flipped = true + buf[i] = twosComp(byte) + } + } +} + +const parse = exports.parse = (buf) => { + var post = buf[buf.length - 1] + var pre = buf[0] + return pre === 0x80 ? pos(buf.slice(1, buf.length - 1)) + : twos(buf.slice(1, buf.length - 1)) +} + +const twos = (buf) => { + var len = buf.length + var sum = 0 + var flipped = false + for (var i = len - 1; i > -1; i--) { + var byte = buf[i] + var f + if (flipped) + f = onesComp(byte) + else if (byte === 0) + f = byte + else { + flipped = true + f = twosComp(byte) + } + if (f !== 0) + sum += f * Math.pow(256, len - i - 1) + } + return sum * -1 +} + +const pos = (buf) => { + var len = buf.length + var sum = 0 + for (var i = len - 1; i > -1; i--) { + var byte = buf[i] + if (byte !== 0) + sum += byte * Math.pow(256, len - i - 1) + } + return sum +} + +const onesComp = byte => (0xff ^ byte) & 0xff + +const twosComp = byte => ((0xff ^ byte) + 1) & 0xff + + +/***/ }), +/* 137 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = Base => class extends Base { + warn (msg, data) { + if (!this.strict) + this.emit('warn', msg, data) + else if (data instanceof Error) + this.emit('error', data) + else { + const er = new Error(msg) + er.data = data + this.emit('error', er) + } + } +} + + +/***/ }), +/* 138 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// When writing files on Windows, translate the characters to their +// 0xf000 higher-encoded versions. + +const raw = [ + '|', + '<', + '>', + '?', + ':' +] + +const win = raw.map(char => + String.fromCharCode(0xf000 + char.charCodeAt(0))) + +const toWin = new Map(raw.map((char, i) => [char, win[i]])) +const toRaw = new Map(win.map((char, i) => [char, raw[i]])) + +module.exports = { + encode: s => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s), + decode: s => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s) +} + + +/***/ }), +/* 139 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = (mode, isDir) => { + mode &= 0o7777 + // if dirs are readable, then they should be listable + if (isDir) { + if (mode & 0o400) + mode |= 0o100 + if (mode & 0o40) + mode |= 0o10 + if (mode & 0o4) + mode |= 0o1 + } + return mode +} + + +/***/ }), +/* 140 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const MiniPass = __webpack_require__(125) +const EE = __webpack_require__(58).EventEmitter +const fs = __webpack_require__(5) + +// for writev +const binding = process.binding('fs') +const writeBuffers = binding.writeBuffers +const FSReqWrap = binding.FSReqWrap + +const _autoClose = Symbol('_autoClose') +const _close = Symbol('_close') +const _ended = Symbol('_ended') +const _fd = Symbol('_fd') +const _finished = Symbol('_finished') +const _flags = Symbol('_flags') +const _flush = Symbol('_flush') +const _handleChunk = Symbol('_handleChunk') +const _makeBuf = Symbol('_makeBuf') +const _mode = Symbol('_mode') +const _needDrain = Symbol('_needDrain') +const _onerror = Symbol('_onerror') +const _onopen = Symbol('_onopen') +const _onread = Symbol('_onread') +const _onwrite = Symbol('_onwrite') +const _open = Symbol('_open') +const _path = Symbol('_path') +const _pos = Symbol('_pos') +const _queue = Symbol('_queue') +const _read = Symbol('_read') +const _readSize = Symbol('_readSize') +const _reading = Symbol('_reading') +const _remain = Symbol('_remain') +const _size = Symbol('_size') +const _write = Symbol('_write') +const _writing = Symbol('_writing') +const _defaultFlag = Symbol('_defaultFlag') + +class ReadStream extends MiniPass { + constructor (path, opt) { + opt = opt || {} + super(opt) + + this.writable = false + + if (typeof path !== 'string') + throw new TypeError('path must be a string') + + this[_fd] = typeof opt.fd === 'number' ? opt.fd : null + this[_path] = path + this[_readSize] = opt.readSize || 16*1024*1024 + this[_reading] = false + this[_size] = typeof opt.size === 'number' ? opt.size : Infinity + this[_remain] = this[_size] + this[_autoClose] = typeof opt.autoClose === 'boolean' ? + opt.autoClose : true + + if (typeof this[_fd] === 'number') + this[_read]() + else + this[_open]() + } + + get fd () { return this[_fd] } + get path () { return this[_path] } + + write () { + throw new TypeError('this is a readable stream') + } + + end () { + throw new TypeError('this is a readable stream') + } + + [_open] () { + fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd)) + } + + [_onopen] (er, fd) { + if (er) + this[_onerror](er) + else { + this[_fd] = fd + this.emit('open', fd) + this[_read]() + } + } + + [_makeBuf] () { + return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain])) + } + + [_read] () { + if (!this[_reading]) { + this[_reading] = true + const buf = this[_makeBuf]() + /* istanbul ignore if */ + if (buf.length === 0) return process.nextTick(() => this[_onread](null, 0, buf)) + fs.read(this[_fd], buf, 0, buf.length, null, (er, br, buf) => + this[_onread](er, br, buf)) + } + } + + [_onread] (er, br, buf) { + this[_reading] = false + if (er) + this[_onerror](er) + else if (this[_handleChunk](br, buf)) + this[_read]() + } + + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + fs.close(this[_fd], _ => this.emit('close')) + this[_fd] = null + } + } + + [_onerror] (er) { + this[_reading] = true + this[_close]() + this.emit('error', er) + } + + [_handleChunk] (br, buf) { + let ret = false + // no effect if infinite + this[_remain] -= br + if (br > 0) + ret = super.write(br < buf.length ? buf.slice(0, br) : buf) + + if (br === 0 || this[_remain] <= 0) { + ret = false + this[_close]() + super.end() + } + + return ret + } + + emit (ev, data) { + switch (ev) { + case 'prefinish': + case 'finish': + break + + case 'drain': + if (typeof this[_fd] === 'number') + this[_read]() + break + + default: + return super.emit(ev, data) + } + } +} + +class ReadStreamSync extends ReadStream { + [_open] () { + let threw = true + try { + this[_onopen](null, fs.openSync(this[_path], 'r')) + threw = false + } finally { + if (threw) + this[_close]() + } + } + + [_read] () { + let threw = true + try { + if (!this[_reading]) { + this[_reading] = true + do { + const buf = this[_makeBuf]() + /* istanbul ignore next */ + const br = buf.length === 0 ? 0 : fs.readSync(this[_fd], buf, 0, buf.length, null) + if (!this[_handleChunk](br, buf)) + break + } while (true) + this[_reading] = false + } + threw = false + } finally { + if (threw) + this[_close]() + } + } + + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + try { + fs.closeSync(this[_fd]) + } catch (er) {} + this[_fd] = null + this.emit('close') + } + } +} + +class WriteStream extends EE { + constructor (path, opt) { + opt = opt || {} + super(opt) + this.readable = false + this[_writing] = false + this[_ended] = false + this[_needDrain] = false + this[_queue] = [] + this[_path] = path + this[_fd] = typeof opt.fd === 'number' ? opt.fd : null + this[_mode] = opt.mode === undefined ? 0o666 : opt.mode + this[_pos] = typeof opt.start === 'number' ? opt.start : null + this[_autoClose] = typeof opt.autoClose === 'boolean' ? + opt.autoClose : true + + // truncating makes no sense when writing into the middle + const defaultFlag = this[_pos] !== null ? 'r+' : 'w' + this[_defaultFlag] = opt.flags === undefined + this[_flags] = this[_defaultFlag] ? defaultFlag : opt.flags + + if (this[_fd] === null) + this[_open]() + } + + get fd () { return this[_fd] } + get path () { return this[_path] } + + [_onerror] (er) { + this[_close]() + this[_writing] = true + this.emit('error', er) + } + + [_open] () { + fs.open(this[_path], this[_flags], this[_mode], + (er, fd) => this[_onopen](er, fd)) + } + + [_onopen] (er, fd) { + if (this[_defaultFlag] && + this[_flags] === 'r+' && + er && er.code === 'ENOENT') { + this[_flags] = 'w' + this[_open]() + } else if (er) + this[_onerror](er) + else { + this[_fd] = fd + this.emit('open', fd) + this[_flush]() + } + } + + end (buf, enc) { + if (buf) + this.write(buf, enc) + + this[_ended] = true + + // synthetic after-write logic, where drain/finish live + if (!this[_writing] && !this[_queue].length && + typeof this[_fd] === 'number') + this[_onwrite](null, 0) + } + + write (buf, enc) { + if (typeof buf === 'string') + buf = new Buffer(buf, enc) + + if (this[_ended]) { + this.emit('error', new Error('write() after end()')) + return false + } + + if (this[_fd] === null || this[_writing] || this[_queue].length) { + this[_queue].push(buf) + this[_needDrain] = true + return false + } + + this[_writing] = true + this[_write](buf) + return true + } + + [_write] (buf) { + fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => + this[_onwrite](er, bw)) + } + + [_onwrite] (er, bw) { + if (er) + this[_onerror](er) + else { + if (this[_pos] !== null) + this[_pos] += bw + if (this[_queue].length) + this[_flush]() + else { + this[_writing] = false + + if (this[_ended] && !this[_finished]) { + this[_finished] = true + this[_close]() + this.emit('finish') + } else if (this[_needDrain]) { + this[_needDrain] = false + this.emit('drain') + } + } + } + } + + [_flush] () { + if (this[_queue].length === 0) { + if (this[_ended]) + this[_onwrite](null, 0) + } else if (this[_queue].length === 1) + this[_write](this[_queue].pop()) + else { + const iovec = this[_queue] + this[_queue] = [] + writev(this[_fd], iovec, this[_pos], + (er, bw) => this[_onwrite](er, bw)) + } + } + + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + fs.close(this[_fd], _ => this.emit('close')) + this[_fd] = null + } + } +} + +class WriteStreamSync extends WriteStream { + [_open] () { + let fd + try { + fd = fs.openSync(this[_path], this[_flags], this[_mode]) + } catch (er) { + if (this[_defaultFlag] && + this[_flags] === 'r+' && + er && er.code === 'ENOENT') { + this[_flags] = 'w' + return this[_open]() + } else + throw er + } + this[_onopen](null, fd) + } + + [_close] () { + if (this[_autoClose] && typeof this[_fd] === 'number') { + try { + fs.closeSync(this[_fd]) + } catch (er) {} + this[_fd] = null + this.emit('close') + } + } + + [_write] (buf) { + try { + this[_onwrite](null, + fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos])) + } catch (er) { + this[_onwrite](er, 0) + } + } +} + +const writev = (fd, iovec, pos, cb) => { + const done = (er, bw) => cb(er, bw, iovec) + const req = new FSReqWrap() + req.oncomplete = done + binding.writeBuffers(fd, iovec, pos, req) +} + +exports.ReadStream = ReadStream +exports.ReadStreamSync = ReadStreamSync + +exports.WriteStream = WriteStream +exports.WriteStreamSync = WriteStreamSync + + +/***/ }), +/* 141 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const Buffer = __webpack_require__(122) + +// XXX: This shares a lot in common with extract.js +// maybe some DRY opportunity here? + +// tar -t +const hlo = __webpack_require__(120) +const Parser = __webpack_require__(142) +const fs = __webpack_require__(5) +const fsm = __webpack_require__(140) +const path = __webpack_require__(6) + +const t = module.exports = (opt_, files, cb) => { + if (typeof opt_ === 'function') + cb = opt_, files = null, opt_ = {} + else if (Array.isArray(opt_)) + files = opt_, opt_ = {} + + if (typeof files === 'function') + cb = files, files = null + + if (!files) + files = [] + else + files = Array.from(files) + + const opt = hlo(opt_) + + if (opt.sync && typeof cb === 'function') + throw new TypeError('callback not supported for sync tar functions') + + if (!opt.file && typeof cb === 'function') + throw new TypeError('callback only supported with file option') + + if (files.length) + filesFilter(opt, files) + + if (!opt.noResume) + onentryFunction(opt) + + return opt.file && opt.sync ? listFileSync(opt) + : opt.file ? listFile(opt, cb) + : list(opt) +} + +const onentryFunction = opt => { + const onentry = opt.onentry + opt.onentry = onentry ? e => { + onentry(e) + e.resume() + } : e => e.resume() +} + +// construct a filter that limits the file entries listed +// include child entries if a dir is included +const filesFilter = (opt, files) => { + const map = new Map(files.map(f => [f.replace(/\/+$/, ''), true])) + const filter = opt.filter + + const mapHas = (file, r) => { + const root = r || path.parse(file).root || '.' + const ret = file === root ? false + : map.has(file) ? map.get(file) + : mapHas(path.dirname(file), root) + + map.set(file, ret) + return ret + } + + opt.filter = filter + ? (file, entry) => filter(file, entry) && mapHas(file.replace(/\/+$/, '')) + : file => mapHas(file.replace(/\/+$/, '')) +} + +const listFileSync = opt => { + const p = list(opt) + const file = opt.file + let threw = true + let fd + try { + const stat = fs.statSync(file) + const readSize = opt.maxReadSize || 16*1024*1024 + if (stat.size < readSize) { + p.end(fs.readFileSync(file)) + } else { + let pos = 0 + const buf = Buffer.allocUnsafe(readSize) + fd = fs.openSync(file, 'r') + while (pos < stat.size) { + let bytesRead = fs.readSync(fd, buf, 0, readSize, pos) + pos += bytesRead + p.write(buf.slice(0, bytesRead)) + } + p.end() + } + threw = false + } finally { + if (threw && fd) + try { fs.closeSync(fd) } catch (er) {} + } +} + +const listFile = (opt, cb) => { + const parse = new Parser(opt) + const readSize = opt.maxReadSize || 16*1024*1024 + + const file = opt.file + const p = new Promise((resolve, reject) => { + parse.on('error', reject) + parse.on('end', resolve) + + fs.stat(file, (er, stat) => { + if (er) + reject(er) + else { + const stream = new fsm.ReadStream(file, { + readSize: readSize, + size: stat.size + }) + stream.on('error', reject) + stream.pipe(parse) + } + }) + }) + return cb ? p.then(cb, cb) : p +} + +const list = opt => new Parser(opt) + + +/***/ }), +/* 142 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// this[BUFFER] is the remainder of a chunk if we're waiting for +// the full 512 bytes of a header to come in. We will Buffer.concat() +// it to the next write(), which is a mem copy, but a small one. +// +// this[QUEUE] is a Yallist of entries that haven't been emitted +// yet this can only get filled up if the user keeps write()ing after +// a write() returns false, or does a write() with more than one entry +// +// We don't buffer chunks, we always parse them and either create an +// entry, or push it into the active entry. The ReadEntry class knows +// to throw data away if .ignore=true +// +// Shift entry off the buffer when it emits 'end', and emit 'entry' for +// the next one in the list. +// +// At any time, we're pushing body chunks into the entry at WRITEENTRY, +// and waiting for 'end' on the entry at READENTRY +// +// ignored entries get .resume() called on them straight away + +const warner = __webpack_require__(137) +const path = __webpack_require__(6) +const Header = __webpack_require__(135) +const EE = __webpack_require__(58) +const Yallist = __webpack_require__(126) +const maxMetaEntrySize = 1024 * 1024 +const Entry = __webpack_require__(131) +const Pax = __webpack_require__(134) +const zlib = __webpack_require__(129) +const Buffer = __webpack_require__(122) + +const gzipHeader = Buffer.from([0x1f, 0x8b]) +const STATE = Symbol('state') +const WRITEENTRY = Symbol('writeEntry') +const READENTRY = Symbol('readEntry') +const NEXTENTRY = Symbol('nextEntry') +const PROCESSENTRY = Symbol('processEntry') +const EX = Symbol('extendedHeader') +const GEX = Symbol('globalExtendedHeader') +const META = Symbol('meta') +const EMITMETA = Symbol('emitMeta') +const BUFFER = Symbol('buffer') +const QUEUE = Symbol('queue') +const ENDED = Symbol('ended') +const EMITTEDEND = Symbol('emittedEnd') +const EMIT = Symbol('emit') +const UNZIP = Symbol('unzip') +const CONSUMECHUNK = Symbol('consumeChunk') +const CONSUMECHUNKSUB = Symbol('consumeChunkSub') +const CONSUMEBODY = Symbol('consumeBody') +const CONSUMEMETA = Symbol('consumeMeta') +const CONSUMEHEADER = Symbol('consumeHeader') +const CONSUMING = Symbol('consuming') +const BUFFERCONCAT = Symbol('bufferConcat') +const MAYBEEND = Symbol('maybeEnd') +const WRITING = Symbol('writing') +const ABORTED = Symbol('aborted') +const DONE = Symbol('onDone') + +const noop = _ => true + +module.exports = warner(class Parser extends EE { + constructor (opt) { + opt = opt || {} + super(opt) + + if (opt.ondone) + this.on(DONE, opt.ondone) + else + this.on(DONE, _ => { + this.emit('prefinish') + this.emit('finish') + this.emit('end') + this.emit('close') + }) + + this.strict = !!opt.strict + this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize + this.filter = typeof opt.filter === 'function' ? opt.filter : noop + + // have to set this so that streams are ok piping into it + this.writable = true + this.readable = false + + this[QUEUE] = new Yallist() + this[BUFFER] = null + this[READENTRY] = null + this[WRITEENTRY] = null + this[STATE] = 'begin' + this[META] = '' + this[EX] = null + this[GEX] = null + this[ENDED] = false + this[UNZIP] = null + this[ABORTED] = false + if (typeof opt.onwarn === 'function') + this.on('warn', opt.onwarn) + if (typeof opt.onentry === 'function') + this.on('entry', opt.onentry) + } + + [CONSUMEHEADER] (chunk, position) { + const header = new Header(chunk, position, this[EX], this[GEX]) + + if (header.nullBlock) + this[EMIT]('nullBlock') + else if (!header.cksumValid) + this.warn('invalid entry', header) + else if (!header.path) + this.warn('invalid: path is required', header) + else { + const type = header.type + if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) + this.warn('invalid: linkpath required', header) + else if (!/^(Symbolic)?Link$/.test(type) && header.linkpath) + this.warn('invalid: linkpath forbidden', header) + else { + const entry = this[WRITEENTRY] = new Entry(header, this[EX], this[GEX]) + + if (entry.meta) { + if (entry.size > this.maxMetaEntrySize) { + entry.ignore = true + this[EMIT]('ignoredEntry', entry) + this[STATE] = 'ignore' + } else if (entry.size > 0) { + this[META] = '' + entry.on('data', c => this[META] += c) + this[STATE] = 'meta' + } + } else { + + this[EX] = null + entry.ignore = entry.ignore || !this.filter(entry.path, entry) + if (entry.ignore) { + this[EMIT]('ignoredEntry', entry) + this[STATE] = entry.remain ? 'ignore' : 'begin' + } else { + if (entry.remain) + this[STATE] = 'body' + else { + this[STATE] = 'begin' + entry.end() + } + + if (!this[READENTRY]) { + this[QUEUE].push(entry) + this[NEXTENTRY]() + } else + this[QUEUE].push(entry) + } + } + } + } + } + + [PROCESSENTRY] (entry) { + let go = true + + if (!entry) { + this[READENTRY] = null + go = false + } else if (Array.isArray(entry)) + this.emit.apply(this, entry) + else { + this[READENTRY] = entry + this.emit('entry', entry) + if (!entry.emittedEnd) { + entry.on('end', _ => this[NEXTENTRY]()) + go = false + } + } + + return go + } + + [NEXTENTRY] () { + do {} while (this[PROCESSENTRY](this[QUEUE].shift())) + + if (!this[QUEUE].length) { + // At this point, there's nothing in the queue, but we may have an + // entry which is being consumed (readEntry). + // If we don't, then we definitely can handle more data. + // If we do, and either it's flowing, or it has never had any data + // written to it, then it needs more. + // The only other possibility is that it has returned false from a + // write() call, so we wait for the next drain to continue. + const re = this[READENTRY] + const drainNow = !re || re.flowing || re.size === re.remain + if (drainNow) { + if (!this[WRITING]) + this.emit('drain') + } else + re.once('drain', _ => this.emit('drain')) + } + } + + [CONSUMEBODY] (chunk, position) { + // write up to but no more than writeEntry.blockRemain + const entry = this[WRITEENTRY] + const br = entry.blockRemain + const c = (br >= chunk.length && position === 0) ? chunk + : chunk.slice(position, position + br) + + entry.write(c) + + if (!entry.blockRemain) { + this[STATE] = 'begin' + this[WRITEENTRY] = null + entry.end() + } + + return c.length + } + + [CONSUMEMETA] (chunk, position) { + const entry = this[WRITEENTRY] + const ret = this[CONSUMEBODY](chunk, position) + + // if we finished, then the entry is reset + if (!this[WRITEENTRY]) + this[EMITMETA](entry) + + return ret + } + + [EMIT] (ev, data, extra) { + if (!this[QUEUE].length && !this[READENTRY]) + this.emit(ev, data, extra) + else + this[QUEUE].push([ev, data, extra]) + } + + [EMITMETA] (entry) { + this[EMIT]('meta', this[META]) + switch (entry.type) { + case 'ExtendedHeader': + case 'OldExtendedHeader': + this[EX] = Pax.parse(this[META], this[EX], false) + break + + case 'GlobalExtendedHeader': + this[GEX] = Pax.parse(this[META], this[GEX], true) + break + + case 'NextFileHasLongPath': + case 'OldGnuLongPath': + this[EX] = this[EX] || Object.create(null) + this[EX].path = this[META].replace(/\0.*/, '') + break + + case 'NextFileHasLongLinkpath': + this[EX] = this[EX] || Object.create(null) + this[EX].linkpath = this[META].replace(/\0.*/, '') + break + + /* istanbul ignore next */ + default: throw new Error('unknown meta: ' + entry.type) + } + } + + abort (msg, error) { + this[ABORTED] = true + this.warn(msg, error) + this.emit('abort', error) + this.emit('error', error) + } + + write (chunk) { + if (this[ABORTED]) + return + + // first write, might be gzipped + if (this[UNZIP] === null && chunk) { + if (this[BUFFER]) { + chunk = Buffer.concat([this[BUFFER], chunk]) + this[BUFFER] = null + } + if (chunk.length < gzipHeader.length) { + this[BUFFER] = chunk + return true + } + for (let i = 0; this[UNZIP] === null && i < gzipHeader.length; i++) { + if (chunk[i] !== gzipHeader[i]) + this[UNZIP] = false + } + if (this[UNZIP] === null) { + const ended = this[ENDED] + this[ENDED] = false + this[UNZIP] = new zlib.Unzip() + this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk)) + this[UNZIP].on('error', er => + this.abort(er.message, er)) + this[UNZIP].on('end', _ => { + this[ENDED] = true + this[CONSUMECHUNK]() + }) + this[WRITING] = true + const ret = this[UNZIP][ended ? 'end' : 'write' ](chunk) + this[WRITING] = false + return ret + } + } + + this[WRITING] = true + if (this[UNZIP]) + this[UNZIP].write(chunk) + else + this[CONSUMECHUNK](chunk) + this[WRITING] = false + + // return false if there's a queue, or if the current entry isn't flowing + const ret = + this[QUEUE].length ? false : + this[READENTRY] ? this[READENTRY].flowing : + true + + // if we have no queue, then that means a clogged READENTRY + if (!ret && !this[QUEUE].length) + this[READENTRY].once('drain', _ => this.emit('drain')) + + return ret + } + + [BUFFERCONCAT] (c) { + if (c && !this[ABORTED]) + this[BUFFER] = this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c + } + + [MAYBEEND] () { + if (this[ENDED] && + !this[EMITTEDEND] && + !this[ABORTED] && + !this[CONSUMING]) { + this[EMITTEDEND] = true + const entry = this[WRITEENTRY] + if (entry && entry.blockRemain) { + const have = this[BUFFER] ? this[BUFFER].length : 0 + this.warn('Truncated input (needed ' + entry.blockRemain + + ' more bytes, only ' + have + ' available)', entry) + if (this[BUFFER]) + entry.write(this[BUFFER]) + entry.end() + } + this[EMIT](DONE) + } + } + + [CONSUMECHUNK] (chunk) { + if (this[CONSUMING]) { + this[BUFFERCONCAT](chunk) + } else if (!chunk && !this[BUFFER]) { + this[MAYBEEND]() + } else { + this[CONSUMING] = true + if (this[BUFFER]) { + this[BUFFERCONCAT](chunk) + const c = this[BUFFER] + this[BUFFER] = null + this[CONSUMECHUNKSUB](c) + } else { + this[CONSUMECHUNKSUB](chunk) + } + + while (this[BUFFER] && this[BUFFER].length >= 512 && !this[ABORTED]) { + const c = this[BUFFER] + this[BUFFER] = null + this[CONSUMECHUNKSUB](c) + } + this[CONSUMING] = false + } + + if (!this[BUFFER] || this[ENDED]) + this[MAYBEEND]() + } + + [CONSUMECHUNKSUB] (chunk) { + // we know that we are in CONSUMING mode, so anything written goes into + // the buffer. Advance the position and put any remainder in the buffer. + let position = 0 + let length = chunk.length + while (position + 512 <= length && !this[ABORTED]) { + switch (this[STATE]) { + case 'begin': + this[CONSUMEHEADER](chunk, position) + position += 512 + break + + case 'ignore': + case 'body': + position += this[CONSUMEBODY](chunk, position) + break + + case 'meta': + position += this[CONSUMEMETA](chunk, position) + break + + /* istanbul ignore next */ + default: + throw new Error('invalid state: ' + this[STATE]) + } + } + + if (position < length) { + if (this[BUFFER]) + this[BUFFER] = Buffer.concat([chunk.slice(position), this[BUFFER]]) + else + this[BUFFER] = chunk.slice(position) + } + } + + end (chunk) { + if (!this[ABORTED]) { + if (this[UNZIP]) + this[UNZIP].end(chunk) + else { + this[ENDED] = true + this.write(chunk) + } + } + } +}) + + +/***/ }), +/* 143 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const Buffer = __webpack_require__(122) + +// tar -r +const hlo = __webpack_require__(120) +const Pack = __webpack_require__(121) +const Parse = __webpack_require__(142) +const fs = __webpack_require__(5) +const fsm = __webpack_require__(140) +const t = __webpack_require__(141) +const path = __webpack_require__(6) + +// starting at the head of the file, read a Header +// If the checksum is invalid, that's our position to start writing +// If it is, jump forward by the specified size (round up to 512) +// and try again. +// Write the new Pack stream starting there. + +const Header = __webpack_require__(135) + +const r = module.exports = (opt_, files, cb) => { + const opt = hlo(opt_) + + if (!opt.file) + throw new TypeError('file is required') + + if (opt.gzip) + throw new TypeError('cannot append to compressed archives') + + if (!files || !Array.isArray(files) || !files.length) + throw new TypeError('no files or directories specified') + + files = Array.from(files) + + return opt.sync ? replaceSync(opt, files) + : replace(opt, files, cb) +} + +const replaceSync = (opt, files) => { + const p = new Pack.Sync(opt) + + let threw = true + let fd + let position + + try { + try { + fd = fs.openSync(opt.file, 'r+') + } catch (er) { + if (er.code === 'ENOENT') + fd = fs.openSync(opt.file, 'w+') + else + throw er + } + + const st = fs.fstatSync(fd) + const headBuf = Buffer.alloc(512) + + POSITION: for (position = 0; position < st.size; position += 512) { + for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) { + bytes = fs.readSync( + fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos + ) + + if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) + throw new Error('cannot append to compressed archives') + + if (!bytes) + break POSITION + } + + let h = new Header(headBuf) + if (!h.cksumValid) + break + let entryBlockSize = 512 * Math.ceil(h.size / 512) + if (position + entryBlockSize + 512 > st.size) + break + // the 512 for the header we just parsed will be added as well + // also jump ahead all the blocks for the body + position += entryBlockSize + if (opt.mtimeCache) + opt.mtimeCache.set(h.path, h.mtime) + } + threw = false + + streamSync(opt, p, position, fd, files) + } finally { + if (threw) + try { fs.closeSync(fd) } catch (er) {} + } +} + +const streamSync = (opt, p, position, fd, files) => { + const stream = new fsm.WriteStreamSync(opt.file, { + fd: fd, + start: position + }) + p.pipe(stream) + addFilesSync(p, files) +} + +const replace = (opt, files, cb) => { + files = Array.from(files) + const p = new Pack(opt) + + const getPos = (fd, size, cb_) => { + const cb = (er, pos) => { + if (er) + fs.close(fd, _ => cb_(er)) + else + cb_(null, pos) + } + + let position = 0 + if (size === 0) + return cb(null, 0) + + let bufPos = 0 + const headBuf = Buffer.alloc(512) + const onread = (er, bytes) => { + if (er) + return cb(er) + bufPos += bytes + if (bufPos < 512 && bytes) + return fs.read( + fd, headBuf, bufPos, headBuf.length - bufPos, + position + bufPos, onread + ) + + if (position === 0 && headBuf[0] === 0x1f && headBuf[1] === 0x8b) + return cb(new Error('cannot append to compressed archives')) + + // truncated header + if (bufPos < 512) + return cb(null, position) + + const h = new Header(headBuf) + if (!h.cksumValid) + return cb(null, position) + + const entryBlockSize = 512 * Math.ceil(h.size / 512) + if (position + entryBlockSize + 512 > size) + return cb(null, position) + + position += entryBlockSize + 512 + if (position >= size) + return cb(null, position) + + if (opt.mtimeCache) + opt.mtimeCache.set(h.path, h.mtime) + bufPos = 0 + fs.read(fd, headBuf, 0, 512, position, onread) + } + fs.read(fd, headBuf, 0, 512, position, onread) + } + + const promise = new Promise((resolve, reject) => { + p.on('error', reject) + let flag = 'r+' + const onopen = (er, fd) => { + if (er && er.code === 'ENOENT' && flag === 'r+') { + flag = 'w+' + return fs.open(opt.file, flag, onopen) + } + + if (er) + return reject(er) + + fs.fstat(fd, (er, st) => { + if (er) + return reject(er) + getPos(fd, st.size, (er, position) => { + if (er) + return reject(er) + const stream = new fsm.WriteStream(opt.file, { + fd: fd, + start: position + }) + p.pipe(stream) + stream.on('error', reject) + stream.on('close', resolve) + addFilesAsync(p, files) + }) + }) + } + fs.open(opt.file, flag, onopen) + }) + + return cb ? promise.then(cb, cb) : promise +} + +const addFilesSync = (p, files) => { + files.forEach(file => { + if (file.charAt(0) === '@') + t({ + file: path.resolve(p.cwd, file.substr(1)), + sync: true, + noResume: true, + onentry: entry => p.add(entry) + }) + else + p.add(file) + }) + p.end() +} + +const addFilesAsync = (p, files) => { + while (files.length) { + const file = files.shift() + if (file.charAt(0) === '@') + return t({ + file: path.resolve(p.cwd, file.substr(1)), + noResume: true, + onentry: entry => p.add(entry) + }).then(_ => addFilesAsync(p, files)) + else + p.add(file) + } + p.end() +} + + +/***/ }), +/* 144 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// tar -u + +const hlo = __webpack_require__(120) +const r = __webpack_require__(143) +// just call tar.r with the filter and mtimeCache + +const u = module.exports = (opt_, files, cb) => { + const opt = hlo(opt_) + + if (!opt.file) + throw new TypeError('file is required') + + if (opt.gzip) + throw new TypeError('cannot append to compressed archives') + + if (!files || !Array.isArray(files) || !files.length) + throw new TypeError('no files or directories specified') + + files = Array.from(files) + + mtimeFilter(opt) + return r(opt, files, cb) +} + +const mtimeFilter = opt => { + const filter = opt.filter + + if (!opt.mtimeCache) + opt.mtimeCache = new Map() + + opt.filter = filter ? (path, stat) => + filter(path, stat) && !(opt.mtimeCache.get(path) > stat.mtime) + : (path, stat) => !(opt.mtimeCache.get(path) > stat.mtime) +} + + +/***/ }), +/* 145 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// tar -x +const hlo = __webpack_require__(120) +const Unpack = __webpack_require__(146) +const fs = __webpack_require__(5) +const fsm = __webpack_require__(140) +const path = __webpack_require__(6) + +const x = module.exports = (opt_, files, cb) => { + if (typeof opt_ === 'function') + cb = opt_, files = null, opt_ = {} + else if (Array.isArray(opt_)) + files = opt_, opt_ = {} + + if (typeof files === 'function') + cb = files, files = null + + if (!files) + files = [] + else + files = Array.from(files) + + const opt = hlo(opt_) + + if (opt.sync && typeof cb === 'function') + throw new TypeError('callback not supported for sync tar functions') + + if (!opt.file && typeof cb === 'function') + throw new TypeError('callback only supported with file option') + + if (files.length) + filesFilter(opt, files) + + return opt.file && opt.sync ? extractFileSync(opt) + : opt.file ? extractFile(opt, cb) + : opt.sync ? extractSync(opt) + : extract(opt) +} + +// construct a filter that limits the file entries listed +// include child entries if a dir is included +const filesFilter = (opt, files) => { + const map = new Map(files.map(f => [f.replace(/\/+$/, ''), true])) + const filter = opt.filter + + const mapHas = (file, r) => { + const root = r || path.parse(file).root || '.' + const ret = file === root ? false + : map.has(file) ? map.get(file) + : mapHas(path.dirname(file), root) + + map.set(file, ret) + return ret + } + + opt.filter = filter + ? (file, entry) => filter(file, entry) && mapHas(file.replace(/\/+$/, '')) + : file => mapHas(file.replace(/\/+$/, '')) +} + +const extractFileSync = opt => { + const u = new Unpack.Sync(opt) + + const file = opt.file + let threw = true + let fd + const stat = fs.statSync(file) + // This trades a zero-byte read() syscall for a stat + // However, it will usually result in less memory allocation + const readSize = opt.maxReadSize || 16*1024*1024 + const stream = new fsm.ReadStreamSync(file, { + readSize: readSize, + size: stat.size + }) + stream.pipe(u) +} + +const extractFile = (opt, cb) => { + const u = new Unpack(opt) + const readSize = opt.maxReadSize || 16*1024*1024 + + const file = opt.file + const p = new Promise((resolve, reject) => { + u.on('error', reject) + u.on('close', resolve) + + // This trades a zero-byte read() syscall for a stat + // However, it will usually result in less memory allocation + fs.stat(file, (er, stat) => { + if (er) + reject(er) + else { + const stream = new fsm.ReadStream(file, { + readSize: readSize, + size: stat.size + }) + stream.on('error', reject) + stream.pipe(u) + } + }) + }) + return cb ? p.then(cb, cb) : p +} + +const extractSync = opt => { + return new Unpack.Sync(opt) +} + +const extract = opt => { + return new Unpack(opt) +} + + +/***/ }), +/* 146 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const assert = __webpack_require__(98) +const EE = __webpack_require__(58).EventEmitter +const Parser = __webpack_require__(142) +const fs = __webpack_require__(5) +const fsm = __webpack_require__(140) +const path = __webpack_require__(6) +const mkdir = __webpack_require__(147) +const mkdirSync = mkdir.sync +const wc = __webpack_require__(138) + +const ONENTRY = Symbol('onEntry') +const CHECKFS = Symbol('checkFs') +const ISREUSABLE = Symbol('isReusable') +const MAKEFS = Symbol('makeFs') +const FILE = Symbol('file') +const DIRECTORY = Symbol('directory') +const LINK = Symbol('link') +const SYMLINK = Symbol('symlink') +const HARDLINK = Symbol('hardlink') +const UNSUPPORTED = Symbol('unsupported') +const UNKNOWN = Symbol('unknown') +const CHECKPATH = Symbol('checkPath') +const MKDIR = Symbol('mkdir') +const ONERROR = Symbol('onError') +const PENDING = Symbol('pending') +const PEND = Symbol('pend') +const UNPEND = Symbol('unpend') +const ENDED = Symbol('ended') +const MAYBECLOSE = Symbol('maybeClose') +const SKIP = Symbol('skip') +const DOCHOWN = Symbol('doChown') +const UID = Symbol('uid') +const GID = Symbol('gid') +const crypto = __webpack_require__(16) + +// Unlinks on Windows are not atomic. +// +// This means that if you have a file entry, followed by another +// file entry with an identical name, and you cannot re-use the file +// (because it's a hardlink, or because unlink:true is set, or it's +// Windows, which does not have useful nlink values), then the unlink +// will be committed to the disk AFTER the new file has been written +// over the old one, deleting the new file. +// +// To work around this, on Windows systems, we rename the file and then +// delete the renamed file. It's a sloppy kludge, but frankly, I do not +// know of a better way to do this, given windows' non-atomic unlink +// semantics. +// +// See: https://github.com/npm/node-tar/issues/183 +/* istanbul ignore next */ +const unlinkFile = (path, cb) => { + if (process.platform !== 'win32') + return fs.unlink(path, cb) + + const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') + fs.rename(path, name, er => { + if (er) + return cb(er) + fs.unlink(name, cb) + }) +} + +/* istanbul ignore next */ +const unlinkFileSync = path => { + if (process.platform !== 'win32') + return fs.unlinkSync(path) + + const name = path + '.DELETE.' + crypto.randomBytes(16).toString('hex') + fs.renameSync(path, name) + fs.unlinkSync(name) +} + +// this.gid, entry.gid, this.processUid +const uint32 = (a, b, c) => + a === a >>> 0 ? a + : b === b >>> 0 ? b + : c + +class Unpack extends Parser { + constructor (opt) { + if (!opt) + opt = {} + + opt.ondone = _ => { + this[ENDED] = true + this[MAYBECLOSE]() + } + + super(opt) + + this.transform = typeof opt.transform === 'function' ? opt.transform : null + + this.writable = true + this.readable = false + + this[PENDING] = 0 + this[ENDED] = false + + this.dirCache = opt.dirCache || new Map() + + if (typeof opt.uid === 'number' || typeof opt.gid === 'number') { + // need both or neither + if (typeof opt.uid !== 'number' || typeof opt.gid !== 'number') + throw new TypeError('cannot set owner without number uid and gid') + if (opt.preserveOwner) + throw new TypeError( + 'cannot preserve owner in archive and also set owner explicitly') + this.uid = opt.uid + this.gid = opt.gid + this.setOwner = true + } else { + this.uid = null + this.gid = null + this.setOwner = false + } + + // default true for root + if (opt.preserveOwner === undefined && typeof opt.uid !== 'number') + this.preserveOwner = process.getuid && process.getuid() === 0 + else + this.preserveOwner = !!opt.preserveOwner + + this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ? + process.getuid() : null + this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ? + process.getgid() : null + + // mostly just for testing, but useful in some cases. + // Forcibly trigger a chown on every entry, no matter what + this.forceChown = opt.forceChown === true + + // turn > this[ONENTRY](entry)) + } + + [MAYBECLOSE] () { + if (this[ENDED] && this[PENDING] === 0) { + this.emit('prefinish') + this.emit('finish') + this.emit('end') + this.emit('close') + } + } + + [CHECKPATH] (entry) { + if (this.strip) { + const parts = entry.path.split(/\/|\\/) + if (parts.length < this.strip) + return false + entry.path = parts.slice(this.strip).join('/') + + if (entry.type === 'Link') { + const linkparts = entry.linkpath.split(/\/|\\/) + if (linkparts.length >= this.strip) + entry.linkpath = linkparts.slice(this.strip).join('/') + } + } + + if (!this.preservePaths) { + const p = entry.path + if (p.match(/(^|\/|\\)\.\.(\\|\/|$)/)) { + this.warn('path contains \'..\'', p) + return false + } + + // absolutes on posix are also absolutes on win32 + // so we only need to test this one to get both + if (path.win32.isAbsolute(p)) { + const parsed = path.win32.parse(p) + this.warn('stripping ' + parsed.root + ' from absolute path', p) + entry.path = p.substr(parsed.root.length) + } + } + + // only encode : chars that aren't drive letter indicators + if (this.win32) { + const parsed = path.win32.parse(entry.path) + entry.path = parsed.root === '' ? wc.encode(entry.path) + : parsed.root + wc.encode(entry.path.substr(parsed.root.length)) + } + + if (path.isAbsolute(entry.path)) + entry.absolute = entry.path + else + entry.absolute = path.resolve(this.cwd, entry.path) + + return true + } + + [ONENTRY] (entry) { + if (!this[CHECKPATH](entry)) + return entry.resume() + + assert.equal(typeof entry.absolute, 'string') + + switch (entry.type) { + case 'Directory': + case 'GNUDumpDir': + if (entry.mode) + entry.mode = entry.mode | 0o700 + + case 'File': + case 'OldFile': + case 'ContiguousFile': + case 'Link': + case 'SymbolicLink': + return this[CHECKFS](entry) + + case 'CharacterDevice': + case 'BlockDevice': + case 'FIFO': + return this[UNSUPPORTED](entry) + } + } + + [ONERROR] (er, entry) { + // Cwd has to exist, or else nothing works. That's serious. + // Other errors are warnings, which raise the error in strict + // mode, but otherwise continue on. + if (er.name === 'CwdError') + this.emit('error', er) + else { + this.warn(er.message, er) + this[UNPEND]() + entry.resume() + } + } + + [MKDIR] (dir, mode, cb) { + mkdir(dir, { + uid: this.uid, + gid: this.gid, + processUid: this.processUid, + processGid: this.processGid, + umask: this.processUmask, + preserve: this.preservePaths, + unlink: this.unlink, + cache: this.dirCache, + cwd: this.cwd, + mode: mode + }, cb) + } + + [DOCHOWN] (entry) { + // in preserve owner mode, chown if the entry doesn't match process + // in set owner mode, chown if setting doesn't match process + return this.forceChown || + this.preserveOwner && + ( typeof entry.uid === 'number' && entry.uid !== this.processUid || + typeof entry.gid === 'number' && entry.gid !== this.processGid ) + || + ( typeof this.uid === 'number' && this.uid !== this.processUid || + typeof this.gid === 'number' && this.gid !== this.processGid ) + } + + [UID] (entry) { + return uint32(this.uid, entry.uid, this.processUid) + } + + [GID] (entry) { + return uint32(this.gid, entry.gid, this.processGid) + } + + [FILE] (entry) { + const mode = entry.mode & 0o7777 || this.fmode + const stream = new fsm.WriteStream(entry.absolute, { + mode: mode, + autoClose: false + }) + stream.on('error', er => this[ONERROR](er, entry)) + + let actions = 1 + const done = er => { + if (er) + return this[ONERROR](er, entry) + + if (--actions === 0) + fs.close(stream.fd, _ => this[UNPEND]()) + } + + stream.on('finish', _ => { + // if futimes fails, try utimes + // if utimes fails, fail with the original error + // same for fchown/chown + const abs = entry.absolute + const fd = stream.fd + + if (entry.mtime && !this.noMtime) { + actions++ + const atime = entry.atime || new Date() + const mtime = entry.mtime + fs.futimes(fd, atime, mtime, er => + er ? fs.utimes(abs, atime, mtime, er2 => done(er2 && er)) + : done()) + } + + if (this[DOCHOWN](entry)) { + actions++ + const uid = this[UID](entry) + const gid = this[GID](entry) + fs.fchown(fd, uid, gid, er => + er ? fs.chown(abs, uid, gid, er2 => done(er2 && er)) + : done()) + } + + done() + }) + + const tx = this.transform ? this.transform(entry) || entry : entry + if (tx !== entry) { + tx.on('error', er => this[ONERROR](er, entry)) + entry.pipe(tx) + } + tx.pipe(stream) + } + + [DIRECTORY] (entry) { + const mode = entry.mode & 0o7777 || this.dmode + this[MKDIR](entry.absolute, mode, er => { + if (er) + return this[ONERROR](er, entry) + + let actions = 1 + const done = _ => { + if (--actions === 0) { + this[UNPEND]() + entry.resume() + } + } + + if (entry.mtime && !this.noMtime) { + actions++ + fs.utimes(entry.absolute, entry.atime || new Date(), entry.mtime, done) + } + + if (this[DOCHOWN](entry)) { + actions++ + fs.chown(entry.absolute, this[UID](entry), this[GID](entry), done) + } + + done() + }) + } + + [UNSUPPORTED] (entry) { + this.warn('unsupported entry type: ' + entry.type, entry) + entry.resume() + } + + [SYMLINK] (entry) { + this[LINK](entry, entry.linkpath, 'symlink') + } + + [HARDLINK] (entry) { + this[LINK](entry, path.resolve(this.cwd, entry.linkpath), 'link') + } + + [PEND] () { + this[PENDING]++ + } + + [UNPEND] () { + this[PENDING]-- + this[MAYBECLOSE]() + } + + [SKIP] (entry) { + this[UNPEND]() + entry.resume() + } + + // Check if we can reuse an existing filesystem entry safely and + // overwrite it, rather than unlinking and recreating + // Windows doesn't report a useful nlink, so we just never reuse entries + [ISREUSABLE] (entry, st) { + return entry.type === 'File' && + !this.unlink && + st.isFile() && + st.nlink <= 1 && + process.platform !== 'win32' + } + + // check if a thing is there, and if so, try to clobber it + [CHECKFS] (entry) { + this[PEND]() + this[MKDIR](path.dirname(entry.absolute), this.dmode, er => { + if (er) + return this[ONERROR](er, entry) + fs.lstat(entry.absolute, (er, st) => { + if (st && (this.keep || this.newer && st.mtime > entry.mtime)) + this[SKIP](entry) + else if (er || this[ISREUSABLE](entry, st)) + this[MAKEFS](null, entry) + else if (st.isDirectory()) { + if (entry.type === 'Directory') { + if (!entry.mode || (st.mode & 0o7777) === entry.mode) + this[MAKEFS](null, entry) + else + fs.chmod(entry.absolute, entry.mode, er => this[MAKEFS](er, entry)) + } else + fs.rmdir(entry.absolute, er => this[MAKEFS](er, entry)) + } else + unlinkFile(entry.absolute, er => this[MAKEFS](er, entry)) + }) + }) + } + + [MAKEFS] (er, entry) { + if (er) + return this[ONERROR](er, entry) + + switch (entry.type) { + case 'File': + case 'OldFile': + case 'ContiguousFile': + return this[FILE](entry) + + case 'Link': + return this[HARDLINK](entry) + + case 'SymbolicLink': + return this[SYMLINK](entry) + + case 'Directory': + case 'GNUDumpDir': + return this[DIRECTORY](entry) + } + } + + [LINK] (entry, linkpath, link) { + // XXX: get the type ('file' or 'dir') for windows + fs[link](linkpath, entry.absolute, er => { + if (er) + return this[ONERROR](er, entry) + this[UNPEND]() + entry.resume() + }) + } +} + +class UnpackSync extends Unpack { + constructor (opt) { + super(opt) + } + + [CHECKFS] (entry) { + const er = this[MKDIR](path.dirname(entry.absolute), this.dmode) + if (er) + return this[ONERROR](er, entry) + try { + const st = fs.lstatSync(entry.absolute) + if (this.keep || this.newer && st.mtime > entry.mtime) + return this[SKIP](entry) + else if (this[ISREUSABLE](entry, st)) + return this[MAKEFS](null, entry) + else { + try { + if (st.isDirectory()) { + if (entry.type === 'Directory') { + if (entry.mode && (st.mode & 0o7777) !== entry.mode) + fs.chmodSync(entry.absolute, entry.mode) + } else + fs.rmdirSync(entry.absolute) + } else + unlinkFileSync(entry.absolute) + return this[MAKEFS](null, entry) + } catch (er) { + return this[ONERROR](er, entry) + } + } + } catch (er) { + return this[MAKEFS](null, entry) + } + } + + [FILE] (entry) { + const mode = entry.mode & 0o7777 || this.fmode + + const oner = er => { + try { fs.closeSync(fd) } catch (_) {} + if (er) + this[ONERROR](er, entry) + } + + let stream + let fd + try { + fd = fs.openSync(entry.absolute, 'w', mode) + } catch (er) { + return oner(er) + } + const tx = this.transform ? this.transform(entry) || entry : entry + if (tx !== entry) { + tx.on('error', er => this[ONERROR](er, entry)) + entry.pipe(tx) + } + + tx.on('data', chunk => { + try { + fs.writeSync(fd, chunk, 0, chunk.length) + } catch (er) { + oner(er) + } + }) + + tx.on('end', _ => { + let er = null + // try both, falling futimes back to utimes + // if either fails, handle the first error + if (entry.mtime && !this.noMtime) { + const atime = entry.atime || new Date() + const mtime = entry.mtime + try { + fs.futimesSync(fd, atime, mtime) + } catch (futimeser) { + try { + fs.utimesSync(entry.absolute, atime, mtime) + } catch (utimeser) { + er = futimeser + } + } + } + + if (this[DOCHOWN](entry)) { + const uid = this[UID](entry) + const gid = this[GID](entry) + + try { + fs.fchownSync(fd, uid, gid) + } catch (fchowner) { + try { + fs.chownSync(entry.absolute, uid, gid) + } catch (chowner) { + er = er || fchowner + } + } + } + + oner(er) + }) + } + + [DIRECTORY] (entry) { + const mode = entry.mode & 0o7777 || this.dmode + const er = this[MKDIR](entry.absolute, mode) + if (er) + return this[ONERROR](er, entry) + if (entry.mtime && !this.noMtime) { + try { + fs.utimesSync(entry.absolute, entry.atime || new Date(), entry.mtime) + } catch (er) {} + } + if (this[DOCHOWN](entry)) { + try { + fs.chownSync(entry.absolute, this[UID](entry), this[GID](entry)) + } catch (er) {} + } + entry.resume() + } + + [MKDIR] (dir, mode) { + try { + return mkdir.sync(dir, { + uid: this.uid, + gid: this.gid, + processUid: this.processUid, + processGid: this.processGid, + umask: this.processUmask, + preserve: this.preservePaths, + unlink: this.unlink, + cache: this.dirCache, + cwd: this.cwd, + mode: mode + }) + } catch (er) { + return er + } + } + + [LINK] (entry, linkpath, link) { + try { + fs[link + 'Sync'](linkpath, entry.absolute) + entry.resume() + } catch (er) { + return this[ONERROR](er, entry) + } + } +} + +Unpack.Sync = UnpackSync +module.exports = Unpack + + +/***/ }), +/* 147 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +// wrapper around mkdirp for tar's needs. + +// TODO: This should probably be a class, not functionally +// passing around state in a gazillion args. + +const mkdirp = __webpack_require__(148) +const fs = __webpack_require__(5) +const path = __webpack_require__(6) +const chownr = __webpack_require__(149) + +class SymlinkError extends Error { + constructor (symlink, path) { + super('Cannot extract through symbolic link') + this.path = path + this.symlink = symlink + } + + get name () { + return 'SylinkError' + } +} + +class CwdError extends Error { + constructor (path, code) { + super(code + ': Cannot cd into \'' + path + '\'') + this.path = path + this.code = code + } + + get name () { + return 'CwdError' + } +} + +const mkdir = module.exports = (dir, opt, cb) => { + // if there's any overlap between mask and mode, + // then we'll need an explicit chmod + const umask = opt.umask + const mode = opt.mode | 0o0700 + const needChmod = (mode & umask) !== 0 + + const uid = opt.uid + const gid = opt.gid + const doChown = typeof uid === 'number' && + typeof gid === 'number' && + ( uid !== opt.processUid || gid !== opt.processGid ) + + const preserve = opt.preserve + const unlink = opt.unlink + const cache = opt.cache + const cwd = opt.cwd + + const done = (er, created) => { + if (er) + cb(er) + else { + cache.set(dir, true) + if (created && doChown) + chownr(created, uid, gid, er => done(er)) + else if (needChmod) + fs.chmod(dir, mode, cb) + else + cb() + } + } + + if (cache && cache.get(dir) === true) + return done() + + if (dir === cwd) + return fs.lstat(dir, (er, st) => { + if (er || !st.isDirectory()) + er = new CwdError(dir, er && er.code || 'ENOTDIR') + done(er) + }) + + if (preserve) + return mkdirp(dir, mode, done) + + const sub = path.relative(cwd, dir) + const parts = sub.split(/\/|\\/) + mkdir_(cwd, parts, mode, cache, unlink, cwd, null, done) +} + +const mkdir_ = (base, parts, mode, cache, unlink, cwd, created, cb) => { + if (!parts.length) + return cb(null, created) + const p = parts.shift() + const part = base + '/' + p + if (cache.get(part)) + return mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) + fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) +} + +const onmkdir = (part, parts, mode, cache, unlink, cwd, created, cb) => er => { + if (er) { + if (er.path && path.dirname(er.path) === cwd && + (er.code === 'ENOTDIR' || er.code === 'ENOENT')) + return cb(new CwdError(cwd, er.code)) + + fs.lstat(part, (statEr, st) => { + if (statEr) + cb(statEr) + else if (st.isDirectory()) + mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) + else if (unlink) + fs.unlink(part, er => { + if (er) + return cb(er) + fs.mkdir(part, mode, onmkdir(part, parts, mode, cache, unlink, cwd, created, cb)) + }) + else if (st.isSymbolicLink()) + return cb(new SymlinkError(part, part + '/' + parts.join('/'))) + else + cb(er) + }) + } else { + created = created || part + mkdir_(part, parts, mode, cache, unlink, cwd, created, cb) + } +} + +const mkdirSync = module.exports.sync = (dir, opt) => { + // if there's any overlap between mask and mode, + // then we'll need an explicit chmod + const umask = opt.umask + const mode = opt.mode | 0o0700 + const needChmod = (mode & umask) !== 0 + + const uid = opt.uid + const gid = opt.gid + const doChown = typeof uid === 'number' && + typeof gid === 'number' && + ( uid !== opt.processUid || gid !== opt.processGid ) + + const preserve = opt.preserve + const unlink = opt.unlink + const cache = opt.cache + const cwd = opt.cwd + + const done = (created) => { + cache.set(dir, true) + if (created && doChown) + chownr.sync(created, uid, gid) + if (needChmod) + fs.chmodSync(dir, mode) + } + + if (cache && cache.get(dir) === true) + return done() + + if (dir === cwd) { + let ok = false + let code = 'ENOTDIR' + try { + ok = fs.lstatSync(dir).isDirectory() + } catch (er) { + code = er.code + } finally { + if (!ok) + throw new CwdError(dir, code) + } + done() + return + } + + if (preserve) + return done(mkdirp.sync(dir, mode)) + + const sub = path.relative(cwd, dir) + const parts = sub.split(/\/|\\/) + let created = null + for (let p = parts.shift(), part = cwd; + p && (part += '/' + p); + p = parts.shift()) { + + if (cache.get(part)) + continue + + try { + fs.mkdirSync(part, mode) + created = created || part + cache.set(part, true) + } catch (er) { + if (er.path && path.dirname(er.path) === cwd && + (er.code === 'ENOTDIR' || er.code === 'ENOENT')) + return new CwdError(cwd, er.code) + + const st = fs.lstatSync(part) + if (st.isDirectory()) { + cache.set(part, true) + continue + } else if (unlink) { + fs.unlinkSync(part) + fs.mkdirSync(part, mode) + created = created || part + cache.set(part, true) + continue + } else if (st.isSymbolicLink()) + return new SymlinkError(part, part + '/' + parts.join('/')) + } + } + + return done(created) +} + + +/***/ }), +/* 148 */ +/***/ (function(module, exports, __webpack_require__) { + +var path = __webpack_require__(6); +var fs = __webpack_require__(5); +var _0777 = parseInt('0777', 8); + +module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; + +function mkdirP (p, opts, f, made) { + if (typeof opts === 'function') { + f = opts; + opts = {}; + } + else if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + var cb = f || function () {}; + p = path.resolve(p); + + xfs.mkdir(p, mode, function (er) { + if (!er) { + made = made || p; + return cb(null, made); + } + switch (er.code) { + case 'ENOENT': + mkdirP(path.dirname(p), opts, function (er, made) { + if (er) cb(er, made); + else mkdirP(p, opts, cb, made); + }); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + xfs.stat(p, function (er2, stat) { + // if the stat fails, then that's super weird. + // let the original error be the failure reason. + if (er2 || !stat.isDirectory()) cb(er, made) + else cb(null, made); + }); + break; + } + }); +} + +mkdirP.sync = function sync (p, opts, made) { + if (!opts || typeof opts !== 'object') { + opts = { mode: opts }; + } + + var mode = opts.mode; + var xfs = opts.fs || fs; + + if (mode === undefined) { + mode = _0777 & (~process.umask()); + } + if (!made) made = null; + + p = path.resolve(p); + + try { + xfs.mkdirSync(p, mode); + made = made || p; + } + catch (err0) { + switch (err0.code) { + case 'ENOENT' : + made = sync(path.dirname(p), opts, made); + sync(p, opts, made); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + var stat; + try { + stat = xfs.statSync(p); + } + catch (err1) { + throw err0; + } + if (!stat.isDirectory()) throw err0; + break; + } + } + + return made; +}; + + +/***/ }), +/* 149 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const fs = __webpack_require__(5) +const path = __webpack_require__(6) + +/* istanbul ignore next */ +const LCHOWN = fs.lchown ? 'lchown' : 'chown' +/* istanbul ignore next */ +const LCHOWNSYNC = fs.lchownSync ? 'lchownSync' : 'chownSync' + +// fs.readdir could only accept an options object as of node v6 +const nodeVersion = process.version +let readdir = (path, options, cb) => fs.readdir(path, options, cb) +let readdirSync = (path, options) => fs.readdirSync(path, options) +/* istanbul ignore next */ +if (/^v4\./.test(nodeVersion)) + readdir = (path, options, cb) => fs.readdir(path, cb) + +const chownrKid = (p, child, uid, gid, cb) => { + if (typeof child === 'string') + return fs.lstat(path.resolve(p, child), (er, stats) => { + if (er) + return cb(er) + stats.name = child + chownrKid(p, stats, uid, gid, cb) + }) + + if (child.isDirectory()) { + chownr(path.resolve(p, child.name), uid, gid, er => { + if (er) + return cb(er) + fs[LCHOWN](path.resolve(p, child.name), uid, gid, cb) + }) + } else + fs[LCHOWN](path.resolve(p, child.name), uid, gid, cb) +} + + +const chownr = (p, uid, gid, cb) => { + readdir(p, { withFileTypes: true }, (er, children) => { + // any error other than ENOTDIR or ENOTSUP means it's not readable, + // or doesn't exist. give up. + if (er && er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP') + return cb(er) + if (er || !children.length) return fs[LCHOWN](p, uid, gid, cb) + + let len = children.length + let errState = null + const then = er => { + if (errState) return + if (er) return cb(errState = er) + if (-- len === 0) return fs[LCHOWN](p, uid, gid, cb) + } + + children.forEach(child => chownrKid(p, child, uid, gid, then)) + }) +} + +const chownrKidSync = (p, child, uid, gid) => { + if (typeof child === 'string') { + const stats = fs.lstatSync(path.resolve(p, child)) + stats.name = child + child = stats + } + + if (child.isDirectory()) + chownrSync(path.resolve(p, child.name), uid, gid) + + fs[LCHOWNSYNC](path.resolve(p, child.name), uid, gid) +} + +const chownrSync = (p, uid, gid) => { + let children + try { + children = readdirSync(p, { withFileTypes: true }) + } catch (er) { + if (er && er.code === 'ENOTDIR' && er.code !== 'ENOTSUP') + return fs[LCHOWNSYNC](p, uid, gid) + throw er + } + + if (children.length) + children.forEach(child => chownrKidSync(p, child, uid, gid)) + + return fs[LCHOWNSYNC](p, uid, gid) +} + +module.exports = chownr +chownr.sync = chownrSync + + +/***/ }), +/* 150 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const lockfile_1 = __webpack_require__(151); +const path_1 = __webpack_require__(6); +const util_1 = __webpack_require__(18); +const Report_1 = __webpack_require__(116); +const hashUtils = __importStar(__webpack_require__(114)); +const structUtils = __importStar(__webpack_require__(113)); +const lockP = util_1.promisify(lockfile_1.lock); +const unlockP = util_1.promisify(lockfile_1.unlock); +class Cache { + constructor(cacheCwd, { configuration }) { + this.mutexes = new Map(); + this.configuration = configuration; + this.cwd = cacheCwd; + } + static async find(configuration) { + const cache = new Cache(configuration.get(`cacheFolder`), { configuration }); + await cache.setup(); + return cache; + } + getLocatorFilename(locator) { + return `${structUtils.slugifyLocator(locator)}.zip`; + } + getLocatorPath(locator) { + return path_1.posix.resolve(this.cwd, this.getLocatorFilename(locator)); + } + async setup() { + await fslib_1.xfs.mkdirpPromise(this.cwd); + await this.writeFileIntoCache(path_1.posix.resolve(this.cwd, `.gitignore`), async (file) => { + await fslib_1.xfs.writeFilePromise(file, `/.gitignore\n*.lock\n`); + }); + } + async fetchPackageFromCache(locator, expectedChecksum, loader) { + const cachePath = this.getLocatorPath(locator); + const baseFs = new fslib_1.NodeFS(); + const validateFile = async (path) => { + const actualChecksum = await hashUtils.checksumFile(path); + if (expectedChecksum !== null && actualChecksum !== expectedChecksum) { + switch (this.configuration.get(`checksumBehavior`)) { + case `ignore`: + return expectedChecksum; + case `update`: + return actualChecksum; + default: + case `throw`: + { + throw new Report_1.ReportError(Report_1.MessageName.CACHE_CHECKSUM_MISMATCH, `${structUtils.prettyLocator(this.configuration, locator)} doesn't resolve to an archive that matches the expected checksum`); + } + break; + } + } + return actualChecksum; + }; + const loadPackage = async () => { + if (!loader) + throw new Error(`Cache entry required but missing for ${structUtils.prettyLocator(this.configuration, locator)}`); + return await this.writeFileIntoCache(cachePath, async () => { + const zipFs = await loader(); + const originalPath = zipFs.getRealPath(); + zipFs.saveAndClose(); + await fslib_1.xfs.chmodPromise(originalPath, 0o644); + // Do this before moving the file so that we don't pollute the cache with corrupted archives + const checksum = await validateFile(originalPath); + // Doing a move is important to ensure atomic writes (todo: cross-drive?) + await fslib_1.xfs.movePromise(originalPath, cachePath); + return checksum; + }); + }; + const loadPackageThroughMutex = async () => { + const mutex = loadPackage(); + this.mutexes.set(locator.locatorHash, mutex); + try { + return await mutex; + } + finally { + this.mutexes.delete(locator.locatorHash); + } + }; + for (let mutex; mutex = this.mutexes.get(locator.locatorHash);) + await mutex; + const checksum = baseFs.existsSync(cachePath) + ? await validateFile(cachePath) + : await loadPackageThroughMutex(); + let zipFs = null; + const lazyFs = new fslib_1.LazyFS(() => { + try { + return zipFs = new fslib_1.ZipFS(cachePath, { readOnly: true, baseFs }); + } + catch (error) { + error.message = `Failed to open the cache entry for ${structUtils.prettyLocator(this.configuration, locator)}: ${error.message}`; + throw error; + } + }); + const releaseFs = () => { + if (zipFs !== null) { + zipFs.discardAndClose(); + } + }; + return [lazyFs, releaseFs, checksum]; + } + async writeFileIntoCache(file, generator) { + const lock = fslib_1.NodeFS.fromPortablePath(`${file}.lock`); + try { + await lockP(lock); + } + catch (error) { + throw new Error(`Couldn't obtain a lock on ${file} (${error.message})`); + } + try { + return await generator(file); + } + finally { + await unlockP(lock); + } + } +} +exports.Cache = Cache; + + +/***/ }), +/* 151 */ +/***/ (function(module, exports, __webpack_require__) { + +var fs = __webpack_require__(5) + +var wx = 'wx' +if (process.version.match(/^v0\.[0-6]/)) { + var c = __webpack_require__(152) + wx = c.O_TRUNC | c.O_CREAT | c.O_WRONLY | c.O_EXCL +} + +var os = __webpack_require__(153) +exports.filetime = 'ctime' +if (os.platform() == "win32") { + exports.filetime = 'mtime' +} + +var debug +var util = __webpack_require__(18) +if (util.debuglog) + debug = util.debuglog('LOCKFILE') +else if (/\blockfile\b/i.test(process.env.NODE_DEBUG)) + debug = function() { + var msg = util.format.apply(util, arguments) + console.error('LOCKFILE %d %s', process.pid, msg) + } +else + debug = function() {} + +var locks = {} + +function hasOwnProperty (obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop) +} + +var onExit = __webpack_require__(154) +onExit(function () { + debug('exit listener') + // cleanup + Object.keys(locks).forEach(exports.unlockSync) +}) + +// XXX https://github.com/joyent/node/issues/3555 +// Remove when node 0.8 is deprecated. +if (/^v0\.[0-8]\./.test(process.version)) { + debug('uncaughtException, version = %s', process.version) + process.on('uncaughtException', function H (er) { + debug('uncaughtException') + var l = process.listeners('uncaughtException').filter(function (h) { + return h !== H + }) + if (!l.length) { + // cleanup + try { Object.keys(locks).forEach(exports.unlockSync) } catch (e) {} + process.removeListener('uncaughtException', H) + throw er + } + }) +} + +exports.unlock = function (path, cb) { + debug('unlock', path) + // best-effort. unlocking an already-unlocked lock is a noop + delete locks[path] + fs.unlink(path, function (unlinkEr) { cb && cb() }) +} + +exports.unlockSync = function (path) { + debug('unlockSync', path) + // best-effort. unlocking an already-unlocked lock is a noop + try { fs.unlinkSync(path) } catch (er) {} + delete locks[path] +} + + +// if the file can be opened in readonly mode, then it's there. +// if the error is something other than ENOENT, then it's not. +exports.check = function (path, opts, cb) { + if (typeof opts === 'function') cb = opts, opts = {} + debug('check', path, opts) + fs.open(path, 'r', function (er, fd) { + if (er) { + if (er.code !== 'ENOENT') return cb(er) + return cb(null, false) + } + + if (!opts.stale) { + return fs.close(fd, function (er) { + return cb(er, true) + }) + } + + fs.fstat(fd, function (er, st) { + if (er) return fs.close(fd, function (er2) { + return cb(er) + }) + + fs.close(fd, function (er) { + var age = Date.now() - st[exports.filetime].getTime() + return cb(er, age <= opts.stale) + }) + }) + }) +} + +exports.checkSync = function (path, opts) { + opts = opts || {} + debug('checkSync', path, opts) + if (opts.wait) { + throw new Error('opts.wait not supported sync for obvious reasons') + } + + try { + var fd = fs.openSync(path, 'r') + } catch (er) { + if (er.code !== 'ENOENT') throw er + return false + } + + if (!opts.stale) { + try { fs.closeSync(fd) } catch (er) {} + return true + } + + // file exists. however, might be stale + if (opts.stale) { + try { + var st = fs.fstatSync(fd) + } finally { + fs.closeSync(fd) + } + var age = Date.now() - st[exports.filetime].getTime() + return (age <= opts.stale) + } +} + + + +var req = 1 +exports.lock = function (path, opts, cb) { + if (typeof opts === 'function') cb = opts, opts = {} + opts.req = opts.req || req++ + debug('lock', path, opts) + opts.start = opts.start || Date.now() + + if (typeof opts.retries === 'number' && opts.retries > 0) { + debug('has retries', opts.retries) + var retries = opts.retries + opts.retries = 0 + cb = (function (orig) { return function cb (er, fd) { + debug('retry-mutated callback') + retries -= 1 + if (!er || retries < 0) return orig(er, fd) + + debug('lock retry', path, opts) + + if (opts.retryWait) setTimeout(retry, opts.retryWait) + else retry() + + function retry () { + opts.start = Date.now() + debug('retrying', opts.start) + exports.lock(path, opts, cb) + } + }})(cb) + } + + // try to engage the lock. + // if this succeeds, then we're in business. + fs.open(path, wx, function (er, fd) { + if (!er) { + debug('locked', path, fd) + locks[path] = fd + return fs.close(fd, function () { + return cb() + }) + } + + debug('failed to acquire lock', er) + + // something other than "currently locked" + // maybe eperm or something. + if (er.code !== 'EEXIST') { + debug('not EEXIST error', er) + return cb(er) + } + + // someone's got this one. see if it's valid. + if (!opts.stale) return notStale(er, path, opts, cb) + + return maybeStale(er, path, opts, false, cb) + }) + debug('lock return') +} + + +// Staleness checking algorithm +// 1. acquire $lock, fail +// 2. stat $lock, find that it is stale +// 3. acquire $lock.STALE +// 4. stat $lock, assert that it is still stale +// 5. unlink $lock +// 6. link $lock.STALE $lock +// 7. unlink $lock.STALE +// On any failure, clean up whatever we've done, and raise the error. +function maybeStale (originalEr, path, opts, hasStaleLock, cb) { + fs.stat(path, function (statEr, st) { + if (statEr) { + if (statEr.code === 'ENOENT') { + // expired already! + opts.stale = false + debug('lock stale enoent retry', path, opts) + exports.lock(path, opts, cb) + return + } + return cb(statEr) + } + + var age = Date.now() - st[exports.filetime].getTime() + if (age <= opts.stale) return notStale(originalEr, path, opts, cb) + + debug('lock stale', path, opts) + if (hasStaleLock) { + exports.unlock(path, function (er) { + if (er) return cb(er) + debug('lock stale retry', path, opts) + fs.link(path + '.STALE', path, function (er) { + fs.unlink(path + '.STALE', function () { + // best effort. if the unlink fails, oh well. + cb(er) + }) + }) + }) + } else { + debug('acquire .STALE file lock', opts) + exports.lock(path + '.STALE', opts, function (er) { + if (er) return cb(er) + maybeStale(originalEr, path, opts, true, cb) + }) + } + }) +} + +function notStale (er, path, opts, cb) { + debug('notStale', path, opts) + + // if we can't wait, then just call it a failure + if (typeof opts.wait !== 'number' || opts.wait <= 0) { + debug('notStale, wait is not a number') + return cb(er) + } + + // poll for some ms for the lock to clear + var now = Date.now() + var start = opts.start || now + var end = start + opts.wait + + if (end <= now) + return cb(er) + + debug('now=%d, wait until %d (delta=%d)', start, end, end-start) + var wait = Math.min(end - start, opts.pollPeriod || 100) + var timer = setTimeout(poll, wait) + + function poll () { + debug('notStale, polling', path, opts) + exports.lock(path, opts, cb) + } +} + +exports.lockSync = function (path, opts) { + opts = opts || {} + opts.req = opts.req || req++ + debug('lockSync', path, opts) + if (opts.wait || opts.retryWait) { + throw new Error('opts.wait not supported sync for obvious reasons') + } + + try { + var fd = fs.openSync(path, wx) + locks[path] = fd + try { fs.closeSync(fd) } catch (er) {} + debug('locked sync!', path, fd) + return + } catch (er) { + if (er.code !== 'EEXIST') return retryThrow(path, opts, er) + + if (opts.stale) { + var st = fs.statSync(path) + var ct = st[exports.filetime].getTime() + if (!(ct % 1000) && (opts.stale % 1000)) { + // probably don't have subsecond resolution. + // round up the staleness indicator. + // Yes, this will be wrong 1/1000 times on platforms + // with subsecond stat precision, but that's acceptable + // in exchange for not mistakenly removing locks on + // most other systems. + opts.stale = 1000 * Math.ceil(opts.stale / 1000) + } + var age = Date.now() - ct + if (age > opts.stale) { + debug('lockSync stale', path, opts, age) + exports.unlockSync(path) + return exports.lockSync(path, opts) + } + } + + // failed to lock! + debug('failed to lock', path, opts, er) + return retryThrow(path, opts, er) + } +} + +function retryThrow (path, opts, er) { + if (typeof opts.retries === 'number' && opts.retries > 0) { + var newRT = opts.retries - 1 + debug('retryThrow', path, opts, newRT) + opts.retries = newRT + return exports.lockSync(path, opts) + } + throw er +} + + + +/***/ }), +/* 152 */ +/***/ (function(module, exports) { + +module.exports = require("constants"); + +/***/ }), +/* 153 */ +/***/ (function(module, exports) { + +module.exports = require("os"); + +/***/ }), +/* 154 */ +/***/ (function(module, exports, __webpack_require__) { + +// Note: since nyc uses this module to output coverage, any lines +// that are in the direct sync flow of nyc's outputCoverage are +// ignored, since we can never get coverage for them. +var assert = __webpack_require__(98) +var signals = __webpack_require__(155) + +var EE = __webpack_require__(58) +/* istanbul ignore if */ +if (typeof EE !== 'function') { + EE = EE.EventEmitter +} + +var emitter +if (process.__signal_exit_emitter__) { + emitter = process.__signal_exit_emitter__ +} else { + emitter = process.__signal_exit_emitter__ = new EE() + emitter.count = 0 + emitter.emitted = {} +} + +// Because this emitter is a global, we have to check to see if a +// previous version of this library failed to enable infinite listeners. +// I know what you're about to say. But literally everything about +// signal-exit is a compromise with evil. Get used to it. +if (!emitter.infinite) { + emitter.setMaxListeners(Infinity) + emitter.infinite = true +} + +module.exports = function (cb, opts) { + assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler') + + if (loaded === false) { + load() + } + + var ev = 'exit' + if (opts && opts.alwaysLast) { + ev = 'afterexit' + } + + var remove = function () { + emitter.removeListener(ev, cb) + if (emitter.listeners('exit').length === 0 && + emitter.listeners('afterexit').length === 0) { + unload() + } + } + emitter.on(ev, cb) + + return remove +} + +module.exports.unload = unload +function unload () { + if (!loaded) { + return + } + loaded = false + + signals.forEach(function (sig) { + try { + process.removeListener(sig, sigListeners[sig]) + } catch (er) {} + }) + process.emit = originalProcessEmit + process.reallyExit = originalProcessReallyExit + emitter.count -= 1 +} + +function emit (event, code, signal) { + if (emitter.emitted[event]) { + return + } + emitter.emitted[event] = true + emitter.emit(event, code, signal) +} + +// { : , ... } +var sigListeners = {} +signals.forEach(function (sig) { + sigListeners[sig] = function listener () { + // If there are no other listeners, an exit is coming! + // Simplest way: remove us and then re-send the signal. + // We know that this will kill the process, so we can + // safely emit now. + var listeners = process.listeners(sig) + if (listeners.length === emitter.count) { + unload() + emit('exit', null, sig) + /* istanbul ignore next */ + emit('afterexit', null, sig) + /* istanbul ignore next */ + process.kill(process.pid, sig) + } + } +}) + +module.exports.signals = function () { + return signals +} + +module.exports.load = load + +var loaded = false + +function load () { + if (loaded) { + return + } + loaded = true + + // This is the number of onSignalExit's that are in play. + // It's important so that we can count the correct number of + // listeners on signals, and don't wait for the other one to + // handle it instead of us. + emitter.count += 1 + + signals = signals.filter(function (sig) { + try { + process.on(sig, sigListeners[sig]) + return true + } catch (er) { + return false + } + }) + + process.emit = processEmit + process.reallyExit = processReallyExit +} + +var originalProcessReallyExit = process.reallyExit +function processReallyExit (code) { + process.exitCode = code || 0 + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + /* istanbul ignore next */ + originalProcessReallyExit.call(process, process.exitCode) +} + +var originalProcessEmit = process.emit +function processEmit (ev, arg) { + if (ev === 'exit') { + if (arg !== undefined) { + process.exitCode = arg + } + var ret = originalProcessEmit.apply(this, arguments) + emit('exit', process.exitCode, null) + /* istanbul ignore next */ + emit('afterexit', process.exitCode, null) + return ret + } else { + return originalProcessEmit.apply(this, arguments) + } +} + + +/***/ }), +/* 155 */ +/***/ (function(module, exports) { + +// This is not the set of all possible signals. +// +// It IS, however, the set of all signals that trigger +// an exit on either Linux or BSD systems. Linux is a +// superset of the signal names supported on BSD, and +// the unknown signals just fail to register, so we can +// catch that easily enough. +// +// Don't bother with SIGKILL. It's uncatchable, which +// means that we can't fire any callbacks anyway. +// +// If a user does happen to register a handler on a non- +// fatal signal like SIGWINCH or something, and then +// exit, it'll end up firing `process.emit('exit')`, so +// the handler will be fired anyway. +// +// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised +// artificially, inherently leave the process in a +// state from which it is not safe to try and enter JS +// listeners. +module.exports = [ + 'SIGABRT', + 'SIGALRM', + 'SIGHUP', + 'SIGINT', + 'SIGTERM' +] + +if (process.platform !== 'win32') { + module.exports.push( + 'SIGVTALRM', + 'SIGXCPU', + 'SIGXFSZ', + 'SIGUSR2', + 'SIGTRAP', + 'SIGSYS', + 'SIGQUIT', + 'SIGIOT' + // should detect profiler and enable/disable accordingly. + // see #21 + // 'SIGPROF' + ) +} + +if (process.platform === 'linux') { + module.exports.push( + 'SIGIO', + 'SIGPOLL', + 'SIGPWR', + 'SIGSTKFLT', + 'SIGUNUSED' + ) +} + + +/***/ }), +/* 156 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const parsers_1 = __webpack_require__(102); +const camelcase_1 = __importDefault(__webpack_require__(157)); +const chalk_1 = __importDefault(__webpack_require__(158)); +const clipanion_1 = __webpack_require__(169); +const decamelize_1 = __importDefault(__webpack_require__(182)); +const os_1 = __webpack_require__(153); +const path_1 = __webpack_require__(6); +const supports_color_1 = __importDefault(__webpack_require__(166)); +const MultiFetcher_1 = __webpack_require__(267); +const MultiResolver_1 = __webpack_require__(268); +const SemverResolver_1 = __webpack_require__(269); +const TagResolver_1 = __webpack_require__(270); +const VirtualFetcher_1 = __webpack_require__(271); +const WorkspaceFetcher_1 = __webpack_require__(272); +const WorkspaceResolver_1 = __webpack_require__(273); +const miscUtils = __importStar(__webpack_require__(99)); +const nodeUtils = __importStar(__webpack_require__(275)); +const structUtils = __importStar(__webpack_require__(113)); +// @ts-ignore +const ctx = new chalk_1.default.constructor({ enabled: true }); +const legacyNames = new Set([ + `networkConcurrency`, + `childConcurrency`, + `networkTimeout`, + `proxy`, + `strictSsl`, + `ca`, + `cert`, + `key`, + `lastUpdateCheck`, + `plugnplayOverride`, + `plugnplayShebang`, + `plugnplayBlacklist`, + `workspacesExperimental`, + `workspacesNohoistExperimental`, + `offlineCacheFolder`, + `yarnOfflineMirrorPruning`, + `enableMetaFolder`, + `yarnEnableLockfileVersions`, + `yarnLinkFileDependencies`, + `experimentalPackScriptPackagesInMirror`, + `unsafeDisableIntegrityMigration`, + `production`, + `noProgress`, + `registry`, + `versionCommitHooks`, + `versionGitTag`, + `versionGitMessage`, + `versionSignGitTag`, + `versionTagPrefix`, + `savePrefix`, + `saveExact`, + `initAuthorName`, + `initAuthorEmail`, + `initAuthorUrl`, + `initVersion`, + `initLicense`, + `initPrivate`, + `ignoreScripts`, + `ignorePlatform`, + `ignoreEngines`, + `ignoreOptional`, + `force`, + `disableSelfUpdateCheck`, + `username`, + `email`, +]); +exports.ENVIRONMENT_PREFIX = `yarn_`; +exports.DEFAULT_RC_FILENAME = `.yarnrc`; +var SettingsType; +(function (SettingsType) { + SettingsType["BOOLEAN"] = "BOOLEAN"; + SettingsType["ABSOLUTE_PATH"] = "ABSOLUTE_PATH"; + SettingsType["LOCATOR"] = "LOCATOR"; + SettingsType["LOCATOR_LOOSE"] = "LOCATOR_LOOSE"; + SettingsType["STRING"] = "STRING"; + SettingsType["SECRET"] = "SECRET"; +})(SettingsType = exports.SettingsType || (exports.SettingsType = {})); +; +// General rules: +// +// - filenames that don't accept actual paths must end with the "Filename" suffix +// prefer to use absolute paths instead, since they are automatically resolved +// ex: lockfileFilename +// +// - folders must end with the "Folder" suffix +// ex: cacheFolder, pnpVirtualFolder +// +// - actual paths to a file must end with the "Path" suffix +// ex: pnpPath +// +// - options that tweaks the strictness must begin with the "allow" prefix +// ex: allowInvalidChecksums +// +// - options that enable a feature must begin with the "enable" prefix +// ex: enableEmojis, enableColors +exports.coreDefinitions = { + // Not implemented for now, but since it's part of all Yarn installs we want to declare it in order to improve drop-in compatibility + lastUpdateCheck: { + description: `Last timestamp we checked whether new Yarn versions were available`, + type: SettingsType.STRING, + default: null, + }, + // Settings related to the proxying Berry to a specific executable + yarnPath: { + description: `Path to the local executable that must be used over the global one`, + type: SettingsType.ABSOLUTE_PATH, + default: null, + }, + ignorePath: { + description: `If true, the local executable will be ignored when using the global one`, + type: SettingsType.BOOLEAN, + default: false, + }, + // Settings related to the package manager internal names + globalFolder: { + description: `Folder where are stored the system-wide settings`, + type: SettingsType.ABSOLUTE_PATH, + default: getDefaultGlobalFolder(), + }, + cacheFolder: { + description: `Folder where the cache files must be written`, + type: SettingsType.ABSOLUTE_PATH, + default: `./.yarn/cache`, + }, + virtualFolder: { + description: `Folder where the symlinks generated for virtual packages must be written`, + type: SettingsType.ABSOLUTE_PATH, + default: `./.yarn/virtual`, + }, + bstatePath: { + description: `Path of the file where the current state of the built packages must be stored`, + type: SettingsType.ABSOLUTE_PATH, + default: `./.yarn/build-state.yml`, + }, + lockfileFilename: { + description: `Name of the files where the Yarn dependency tree entries must be stored`, + type: SettingsType.STRING, + default: `yarn.lock`, + }, + rcFilename: { + description: `Name of the files where the configuration can be found`, + type: SettingsType.STRING, + default: getRcFilename(), + }, + enableGlobalCache: { + description: `If true, the system-wide cache folder will be used regardless of \`cache-folder\``, + type: SettingsType.BOOLEAN, + default: false, + }, + enableAbsoluteVirtuals: { + description: `If true, the virtual symlinks will use absolute paths if required [non portable!!]`, + type: SettingsType.BOOLEAN, + default: false, + }, + // Settings related to the output style + enableColors: { + description: `If true, the CLI is allowed to use colors in its output`, + type: SettingsType.BOOLEAN, + default: !!supports_color_1.default.stdout, + defaultText: ``, + }, + enableTimers: { + description: `If true, the CLI is allowed to print the time spent executing commands`, + type: SettingsType.BOOLEAN, + default: true, + }, + preferInteractive: { + description: `If true, the CLI will automatically use the interactive mode when called from a TTY`, + type: SettingsType.BOOLEAN, + default: false, + }, + // Settings related to how packages are interpreted by default + defaultLanguageName: { + description: `Default language mode that should be used when a package doesn't offer any insight`, + type: SettingsType.STRING, + default: `node`, + }, + defaultProtocol: { + description: `Default resolution protocol used when resolving pure semver and tag ranges`, + type: SettingsType.STRING, + default: `npm:`, + }, + // Settings related to network access + enableNetwork: { + description: `If false, the package manager will refuse to use the network if required to`, + type: SettingsType.BOOLEAN, + default: true, + }, + httpProxy: { + description: `URL of the http proxy that must be used for outgoing http requests`, + type: SettingsType.STRING, + default: null, + }, + httpsProxy: { + description: `URL of the http proxy that must be used for outgoing https requests`, + type: SettingsType.STRING, + default: null, + }, + // Settings related to security + enableScripts: { + description: `If true, packages are allowed to have install scripts by default`, + type: SettingsType.BOOLEAN, + default: true, + }, + checksumBehavior: { + description: `Enumeration defining what to do when a checksum doesn't match expectations`, + type: SettingsType.STRING, + default: `throw`, + }, +}; +function parseBoolean(value) { + switch (value) { + case `true`: + case `1`: + case 1: + case true: + { + return true; + } + break; + case `false`: + case `0`: + case 0: + case false: + { + return false; + } + break; + default: + { + throw new Error(`Couldn't parse "${value}" as a boolean`); + } + break; + } +} +function parseValue(value, type, folder) { + if (type === SettingsType.BOOLEAN) + return parseBoolean(value); + if (typeof value !== `string`) + throw new Error(`Expected value to be a string`); + if (type === SettingsType.ABSOLUTE_PATH) { + return path_1.posix.resolve(folder, fslib_1.NodeFS.toPortablePath(value)); + } + else if (type === SettingsType.LOCATOR_LOOSE) { + return structUtils.parseLocator(value, false); + } + else if (type === SettingsType.LOCATOR) { + return structUtils.parseLocator(value); + } + else { + return value; + } +} +function getDefaultGlobalFolder() { + let base; + if (process.platform === `win32`) + base = fslib_1.NodeFS.toPortablePath(process.env.LOCALAPPDATA || path_1.win32.join(os_1.homedir(), 'AppData', 'Local')); + else if (process.env.XDG_DATA_HOME) + base = fslib_1.NodeFS.toPortablePath(process.env.XDG_DATA_HOME); + else + base = fslib_1.NodeFS.toPortablePath(os_1.homedir()); + return path_1.posix.resolve(base, `yarn/modern`); +} +function getEnvironmentSettings() { + const environmentSettings = {}; + for (let [key, value] of Object.entries(process.env)) { + key = key.toLowerCase(); + if (!key.startsWith(exports.ENVIRONMENT_PREFIX)) + continue; + key = key.slice(exports.ENVIRONMENT_PREFIX.length); + key = key.replace(/[_-]([a-z])/g, ($0, $1) => $1.toUpperCase()); + environmentSettings[key] = value; + } + return environmentSettings; +} +function getRcFilename() { + const rcKey = `${exports.ENVIRONMENT_PREFIX}rc_filename`; + for (const [key, value] of Object.entries(process.env)) + if (key.toLowerCase() === rcKey) + return value; + return exports.DEFAULT_RC_FILENAME; +} +class Configuration { + constructor(projectCwd, plugins) { + this.plugins = new Map(); + this.settings = new Map(); + this.values = new Map(); + this.sources = new Map(); + this.projectCwd = projectCwd; + this.plugins = plugins; + const importSettings = (definitions) => { + for (const [name, definition] of Object.entries(definitions)) { + if (this.settings.has(name)) + throw new Error(`Cannot redefine settings "${name}"`); + else if (name in this) + throw new Error(`Settings named "${name}" conflicts with an actual property`); + this.settings.set(name, definition); + if (definition.type === SettingsType.ABSOLUTE_PATH && definition.default !== null) { + if (this.projectCwd === null) { + if (path_1.posix.isAbsolute(definition.default)) { + this.values.set(name, path_1.posix.normalize(definition.default)); + } + else if (definition.isNullable || definition.default === null) { + this.values.set(name, null); + } + } + else { + const projectCwd = this.projectCwd; + if (Array.isArray(definition.default)) { + this.values.set(name, definition.default.map((entry) => path_1.posix.resolve(projectCwd, entry))); + } + else { + this.values.set(name, path_1.posix.resolve(projectCwd, definition.default)); + } + } + } + else { + this.values.set(name, definition.default); + } + } + }; + importSettings(exports.coreDefinitions); + for (const plugin of this.plugins.values()) { + if (plugin.configuration) { + importSettings(plugin.configuration); + } + } + } + /** + * Instantiate a new configuration object exposing the configuration obtained + * from reading the various rc files and the environment settings. + * + * The `pluginConfiguration` parameter is expected to indicate: + * + * 1. which modules should be made available to plugins when they require a + * package (this is the dynamic linking part - for example we want all the + * plugins to use the exact same version of @berry/core, which also is the + * version used by the running Yarn instance). + * + * 2. which of those modules are actually plugins that need to be injected + * within the configuration. + * + * Note that some extra plugins will be automatically added based on the + * content of the rc files - with the rc plugins taking precedence over + * the other ones. + * + * One particularity: the plugin initialization order is quite strict, with + * plugins listed in /foo/bar/.yarnrc taking precedence over plugins listed + * in /foo/.yarnrc and /.yarnrc. Additionally, while plugins can depend on + * one another, they can only depend on plugins that have been instantiated + * before them (so a plugin listed in /foo/.yarnrc can depend on another + * one listed on /foo/bar/.yarnrc, but not the other way around). + */ + static async find(startingCwd, pluginConfiguration) { + const environmentSettings = getEnvironmentSettings(); + delete environmentSettings.rcFilename; + const rcFiles = await Configuration.findRcFiles(startingCwd); + const plugins = new Map(); + if (pluginConfiguration !== null) { + for (const request of pluginConfiguration.plugins.keys()) + plugins.set(request, pluginConfiguration.modules.get(request).default); + const requireEntries = new Map(); + for (const request of nodeUtils.builtinModules()) + requireEntries.set(request, () => nodeUtils.dynamicRequire(request)); + for (const [request, embedModule] of pluginConfiguration.modules) + requireEntries.set(request, () => embedModule); + const dynamicPlugins = new Set(); + for (const { path, cwd, data } of rcFiles) { + if (!Array.isArray(data.plugins)) + continue; + for (const userProvidedPath of data.plugins) { + const pluginPath = path_1.posix.resolve(cwd, fslib_1.NodeFS.toPortablePath(userProvidedPath)); + const { factory, name } = nodeUtils.dynamicRequire(fslib_1.NodeFS.fromPortablePath(pluginPath)); + // Prevent plugin redefinition so that the ones declared deeper in the + // filesystem always have precedence over the ones below. + if (dynamicPlugins.has(name)) + continue; + const pluginRequireEntries = new Map(requireEntries); + const pluginRequire = (request) => { + if (pluginRequireEntries.has(request)) { + return pluginRequireEntries.get(request)(); + } + else { + throw new clipanion_1.UsageError(`This plugin cannot access the package referenced via ${request} which is neither a builtin, nor an exposed entry`); + } + }; + const plugin = miscUtils.prettifySyncErrors(() => { + return factory(pluginRequire).default; + }, message => { + return `${message} (when initializing ${name}, defined in ${path})`; + }); + requireEntries.set(name, () => plugin); + dynamicPlugins.add(name); + plugins.set(name, plugin); + } + } + } + let lockfileFilename = exports.coreDefinitions.lockfileFilename.default; + // We need to know the project root before being able to truly instantiate + // our configuration, and to know that we need to know the lockfile name + if (environmentSettings.lockfileFilename) { + lockfileFilename = environmentSettings.lockfileFilename; + } + else { + for (const { data } of rcFiles) { + if (data.lockfileFilename) { + lockfileFilename = data.lockfileFilename; + break; + } + } + } + const projectCwd = await Configuration.findProjectCwd(startingCwd, lockfileFilename); + const configuration = new Configuration(projectCwd, plugins); + configuration.useWithSource(``, environmentSettings, startingCwd); + for (const { path, cwd, data } of rcFiles) + configuration.useWithSource(path, data, cwd); + if (configuration.get(`enableGlobalCache`)) { + configuration.values.set(`cacheFolder`, `${configuration.get(`globalFolder`)}/cache`); + configuration.sources.set(`cacheFolder`, ``); + } + return configuration; + } + static async findRcFiles(startingCwd) { + const rcFilename = getRcFilename(); + const rcFiles = []; + let nextCwd = startingCwd; + let currentCwd = null; + while (nextCwd !== currentCwd) { + currentCwd = nextCwd; + const rcPath = `${currentCwd}/${rcFilename}`; + if (fslib_1.xfs.existsSync(rcPath)) { + const content = await fslib_1.xfs.readFilePromise(rcPath, `utf8`); + const data = parsers_1.parseSyml(content); + rcFiles.push({ path: rcPath, cwd: currentCwd, data }); + } + nextCwd = path_1.posix.dirname(currentCwd); + } + return rcFiles; + } + static async findProjectCwd(startingCwd, lockfileFilename) { + let projectCwd = null; + let nextCwd = startingCwd; + let currentCwd = null; + while (nextCwd !== currentCwd) { + currentCwd = nextCwd; + if (fslib_1.xfs.existsSync(`${currentCwd}/package.json`)) + projectCwd = currentCwd; + if (fslib_1.xfs.existsSync(`${currentCwd}/${lockfileFilename}`)) + break; + nextCwd = path_1.posix.dirname(currentCwd); + } + return projectCwd; + } + static async updateConfiguration(cwd, patch) { + const rcFilename = getRcFilename(); + const configurationPath = `${cwd}/${rcFilename}`; + const current = fslib_1.xfs.existsSync(configurationPath) ? parsers_1.parseSyml(await fslib_1.xfs.readFilePromise(configurationPath, `utf8`)) : {}; + const currentKeys = Object.keys(current); + // If some keys already use kebab-case then we keep using this style + const preferKebabCase = currentKeys.some(key => key.includes(`-`)); + let patched = false; + for (const key of Object.keys(patch)) { + let currentKey; + if (currentKeys.includes(key)) { + currentKey = key; + } + else { + currentKey = currentKeys.find(currentKey => camelcase_1.default(currentKey) === key); + if (typeof currentKey === `undefined`) { + if (preferKebabCase) { + currentKey = decamelize_1.default(key, `-`); + } + else { + currentKey = key; + } + } + } + if (current[currentKey] === patch[key]) + continue; + current[currentKey] = patch[key]; + patched = true; + } + if (!patched) + return; + await fslib_1.xfs.writeFilePromise(configurationPath, parsers_1.stringifySyml(current)); + } + useWithSource(source, data, folder) { + try { + this.use(source, data, folder); + } + catch (error) { + error.message += ` (in ${source})`; + throw error; + } + } + use(source, data, folder) { + if (typeof data.berry === `object` && data.berry !== null) + data = data.berry; + for (const key of Object.keys(data)) { + const name = key.replace(/[_-]([a-z])/g, ($0, $1) => $1.toUpperCase()); + // The plugins have already been loaded at this point + if (name === `plugins`) + continue; + // binFolder is the magic location where the parent process stored the current binaries; not an actual configuration settings + if (name === `binFolder`) + continue; + // It wouldn't make much sense, would it? + if (name === `rcFilename`) + throw new clipanion_1.UsageError(`The rcFilename settings can only be set via ${`${exports.ENVIRONMENT_PREFIX}RC_FILENAME`.toUpperCase()}, not via a rc file`); + const definition = this.settings.get(name); + if (!definition) + throw new clipanion_1.UsageError(`${legacyNames.has(key) ? `Legacy` : `Unrecognized`} configuration settings found: ${key} - run "yarn config -v" to see the list of settings supported in Yarn`); + if (this.sources.has(name)) + continue; + let value = data[key]; + if (value === null && !definition.isNullable && definition.default !== null) + throw new Error(`Non-nullable configuration settings "${name}" cannot be set to null`); + if (Array.isArray(value)) { + if (!definition.isArray && !Array.isArray(definition.default)) { + throw new Error(`Non-array configuration settings "${name}" cannot be an array`); + } + else { + value = value.map(sub => parseValue(sub, definition.type, folder)); + } + } + else { + value = parseValue(value, definition.type, folder); + } + // @ts-ignore + this.values.set(name, value); + this.sources.set(name, source); + } + } + get(key) { + if (!this.values.has(key)) + throw new Error(`Invalid configuration key "${key}"`); + return this.values.get(key); + } + makeResolver() { + const pluginResolvers = []; + for (const plugin of this.plugins.values()) + for (const resolver of plugin.resolvers || []) + pluginResolvers.push(new resolver()); + return new MultiResolver_1.MultiResolver([ + new WorkspaceResolver_1.WorkspaceResolver(), + new SemverResolver_1.SemverResolver(), + new TagResolver_1.TagResolver(), + ...pluginResolvers, + ]); + } + makeFetcher() { + const pluginFetchers = []; + for (const plugin of this.plugins.values()) + for (const fetcher of plugin.fetchers || []) + pluginFetchers.push(new fetcher()); + return new MultiFetcher_1.MultiFetcher([ + new VirtualFetcher_1.VirtualFetcher(), + new WorkspaceFetcher_1.WorkspaceFetcher(), + ...pluginFetchers, + ]); + } + getLinkers() { + const linkers = []; + for (const plugin of this.plugins.values()) + for (const linker of plugin.linkers || []) + linkers.push(new linker()); + return linkers; + } + async triggerHook(get, ...args) { + for (const plugin of this.plugins.values()) { + const hooks = plugin.hooks; + if (!hooks) + continue; + const hook = get(hooks); + if (!hook) + continue; + await hook(...args); + } + } + async triggerMultipleHooks(get, argsList) { + for (const args of argsList) { + await this.triggerHook(get, ...args); + } + } + format(text, color) { + if (this.get(`enableColors`)) { + if (color.charAt(0) === `#`) { + return ctx.hex(color)(text); + } + else { + return ctx[color](text); + } + } + else { + return text; + } + } +} +exports.Configuration = Configuration; + + +/***/ }), +/* 157 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const preserveCamelCase = string => { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; + + for (let i = 0; i < string.length; i++) { + const character = string[i]; + + if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) { + string = string.slice(0, i) + '-' + string.slice(i); + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i++; + } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) { + string = string.slice(0, i - 1) + '-' + string.slice(i - 1); + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character; + } + } + + return string; +}; + +const camelCase = (input, options) => { + if (!(typeof input === 'string' || Array.isArray(input))) { + throw new TypeError('Expected the input to be `string | string[]`'); + } + + options = Object.assign({ + pascalCase: false + }, options); + + const postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x; + + if (Array.isArray(input)) { + input = input.map(x => x.trim()) + .filter(x => x.length) + .join('-'); + } else { + input = input.trim(); + } + + if (input.length === 0) { + return ''; + } + + if (input.length === 1) { + return options.pascalCase ? input.toUpperCase() : input.toLowerCase(); + } + + const hasUpperCase = input !== input.toLowerCase(); + + if (hasUpperCase) { + input = preserveCamelCase(input); + } + + input = input + .replace(/^[_.\- ]+/, '') + .toLowerCase() + .replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase()) + .replace(/\d+(\w|$)/g, m => m.toUpperCase()); + + return postProcess(input); +}; + +module.exports = camelCase; +// TODO: Remove this for the next major release +module.exports.default = camelCase; + + +/***/ }), +/* 158 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const escapeStringRegexp = __webpack_require__(159); +const ansiStyles = __webpack_require__(160); +const stdoutColor = __webpack_require__(166).stdout; + +const template = __webpack_require__(168); + +const isSimpleWindowsTerm = process.platform === 'win32' && !(process.env.TERM || '').toLowerCase().startsWith('xterm'); + +// `supportsColor.level` → `ansiStyles.color[name]` mapping +const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m']; + +// `color-convert` models to exclude from the Chalk API due to conflicts and such +const skipModels = new Set(['gray']); + +const styles = Object.create(null); + +function applyOptions(obj, options) { + options = options || {}; + + // Detect level if not set manually + const scLevel = stdoutColor ? stdoutColor.level : 0; + obj.level = options.level === undefined ? scLevel : options.level; + obj.enabled = 'enabled' in options ? options.enabled : obj.level > 0; +} + +function Chalk(options) { + // We check for this.template here since calling `chalk.constructor()` + // by itself will have a `this` of a previously constructed chalk object + if (!this || !(this instanceof Chalk) || this.template) { + const chalk = {}; + applyOptions(chalk, options); + + chalk.template = function () { + const args = [].slice.call(arguments); + return chalkTag.apply(null, [chalk.template].concat(args)); + }; + + Object.setPrototypeOf(chalk, Chalk.prototype); + Object.setPrototypeOf(chalk.template, chalk); + + chalk.template.constructor = Chalk; + + return chalk.template; + } + + applyOptions(this, options); +} + +// Use bright blue on Windows as the normal blue color is illegible +if (isSimpleWindowsTerm) { + ansiStyles.blue.open = '\u001B[94m'; +} + +for (const key of Object.keys(ansiStyles)) { + ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); + + styles[key] = { + get() { + const codes = ansiStyles[key]; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, key); + } + }; +} + +styles.visible = { + get() { + return build.call(this, this._styles || [], true, 'visible'); + } +}; + +ansiStyles.color.closeRe = new RegExp(escapeStringRegexp(ansiStyles.color.close), 'g'); +for (const model of Object.keys(ansiStyles.color.ansi)) { + if (skipModels.has(model)) { + continue; + } + + styles[model] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.color[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.color.close, + closeRe: ansiStyles.color.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} + +ansiStyles.bgColor.closeRe = new RegExp(escapeStringRegexp(ansiStyles.bgColor.close), 'g'); +for (const model of Object.keys(ansiStyles.bgColor.ansi)) { + if (skipModels.has(model)) { + continue; + } + + const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1); + styles[bgModel] = { + get() { + const level = this.level; + return function () { + const open = ansiStyles.bgColor[levelMapping[level]][model].apply(null, arguments); + const codes = { + open, + close: ansiStyles.bgColor.close, + closeRe: ansiStyles.bgColor.closeRe + }; + return build.call(this, this._styles ? this._styles.concat(codes) : [codes], this._empty, model); + }; + } + }; +} + +const proto = Object.defineProperties(() => {}, styles); + +function build(_styles, _empty, key) { + const builder = function () { + return applyStyle.apply(builder, arguments); + }; + + builder._styles = _styles; + builder._empty = _empty; + + const self = this; + + Object.defineProperty(builder, 'level', { + enumerable: true, + get() { + return self.level; + }, + set(level) { + self.level = level; + } + }); + + Object.defineProperty(builder, 'enabled', { + enumerable: true, + get() { + return self.enabled; + }, + set(enabled) { + self.enabled = enabled; + } + }); + + // See below for fix regarding invisible grey/dim combination on Windows + builder.hasGrey = this.hasGrey || key === 'gray' || key === 'grey'; + + // `__proto__` is used because we must return a function, but there is + // no way to create a function with a different prototype + builder.__proto__ = proto; // eslint-disable-line no-proto + + return builder; +} + +function applyStyle() { + // Support varags, but simply cast to string in case there's only one arg + const args = arguments; + const argsLen = args.length; + let str = String(arguments[0]); + + if (argsLen === 0) { + return ''; + } + + if (argsLen > 1) { + // Don't slice `arguments`, it prevents V8 optimizations + for (let a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } + + if (!this.enabled || this.level <= 0 || !str) { + return this._empty ? '' : str; + } + + // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, + // see https://github.com/chalk/chalk/issues/58 + // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. + const originalDim = ansiStyles.dim.open; + if (isSimpleWindowsTerm && this.hasGrey) { + ansiStyles.dim.open = ''; + } + + for (const code of this._styles.slice().reverse()) { + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + str = code.open + str.replace(code.closeRe, code.open) + code.close; + + // Close the styling before a linebreak and reopen + // after next line to fix a bleed issue on macOS + // https://github.com/chalk/chalk/pull/92 + str = str.replace(/\r?\n/g, `${code.close}$&${code.open}`); + } + + // Reset the original `dim` if we changed it to work around the Windows dimmed gray issue + ansiStyles.dim.open = originalDim; + + return str; +} + +function chalkTag(chalk, strings) { + if (!Array.isArray(strings)) { + // If chalk() was called by itself or with a string, + // return the string itself as a string. + return [].slice.call(arguments, 1).join(' '); + } + + const args = [].slice.call(arguments, 2); + const parts = [strings.raw[0]]; + + for (let i = 1; i < strings.length; i++) { + parts.push(String(args[i - 1]).replace(/[{}\\]/g, '\\$&')); + parts.push(String(strings.raw[i])); + } + + return template(chalk, parts.join('')); +} + +Object.defineProperties(Chalk.prototype, styles); + +module.exports = Chalk(); // eslint-disable-line new-cap +module.exports.supportsColor = stdoutColor; +module.exports.default = module.exports; // For TypeScript + + +/***/ }), +/* 159 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; + +module.exports = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + + return str.replace(matchOperatorsRe, '\\$&'); +}; + + +/***/ }), +/* 160 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(module) { +const colorConvert = __webpack_require__(162); + +const wrapAnsi16 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => function () { + const rgb = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], + + // Bright color + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Fix humans + styles.color.grey = styles.color.gray; + + for (const groupName of Object.keys(styles)) { + const group = styles[groupName]; + + for (const styleName of Object.keys(group)) { + const style = group[styleName]; + + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + } + + const ansi2ansi = n => n; + const rgb2rgb = (r, g, b) => [r, g, b]; + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + styles.color.ansi = { + ansi: wrapAnsi16(ansi2ansi, 0) + }; + styles.color.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 0) + }; + styles.color.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 0) + }; + + styles.bgColor.ansi = { + ansi: wrapAnsi16(ansi2ansi, 10) + }; + styles.bgColor.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 10) + }; + styles.bgColor.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 10) + }; + + for (let key of Object.keys(colorConvert)) { + if (typeof colorConvert[key] !== 'object') { + continue; + } + + const suite = colorConvert[key]; + + if (key === 'ansi16') { + key = 'ansi'; + } + + if ('ansi16' in suite) { + styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); + styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); + } + + if ('ansi256' in suite) { + styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); + styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); + } + + if ('rgb' in suite) { + styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); + styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); + } + } + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(161)(module))) + +/***/ }), +/* 161 */ +/***/ (function(module, exports) { + +module.exports = function(module) { + if (!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + if (!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; +}; + + +/***/ }), +/* 162 */ +/***/ (function(module, exports, __webpack_require__) { + +var conversions = __webpack_require__(163); +var route = __webpack_require__(165); + +var convert = {}; + +var models = Object.keys(conversions); + +function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(function (fromModel) { + convert[fromModel] = {}; + + Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert[fromModel][toModel] = wrapRounded(fn); + convert[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +module.exports = convert; + + +/***/ }), +/* 163 */ +/***/ (function(module, exports, __webpack_require__) { + +/* MIT license */ +var cssKeywords = __webpack_require__(164); + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +var reverseKeywords = {}; +for (var key in cssKeywords) { + if (cssKeywords.hasOwnProperty(key)) { + reverseKeywords[cssKeywords[key]] = key; + } +} + +var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +// hide .channels and .labels properties +for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } +} + +convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); +} + +convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in cssKeywords) { + if (cssKeywords.hasOwnProperty(keyword)) { + var value = cssKeywords[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; + + +/***/ }), +/* 164 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + + +/***/ }), +/* 165 */ +/***/ (function(module, exports, __webpack_require__) { + +var conversions = __webpack_require__(163); + +/* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +module.exports = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + + + +/***/ }), +/* 166 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const os = __webpack_require__(153); +const hasFlag = __webpack_require__(167); + +const env = process.env; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + forceColor = false; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env) { + forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(stream) { + if (forceColor === false) { + return 0; + } + + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (stream && !stream.isTTY && forceColor !== true) { + return 0; + } + + const min = forceColor ? 1 : 0; + + if (process.platform === 'win32') { + // Node.js 7.5.0 is the first version of Node.js to include a patch to + // libuv that enables 256 color output on Windows. Anything earlier and it + // won't work. However, here we target Node.js 8 at minimum as it is an LTS + // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows + // release that supports 256 colors. Windows 10 build 14931 is the first release + // that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(process.versions.node.split('.')[0]) >= 8 && + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + if (env.TERM === 'dumb') { + return min; + } + + return min; +} + +function getSupportLevel(stream) { + const level = supportsColor(stream); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) +}; + + +/***/ }), +/* 167 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = (flag, argv) => { + argv = argv || process.argv; + const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--'); + const pos = argv.indexOf(prefix + flag); + const terminatorPos = argv.indexOf('--'); + return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos); +}; + + +/***/ }), +/* 168 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; + +const ESCAPES = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] +]); + +function unescape(c) { + if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) { + return String.fromCharCode(parseInt(c.slice(1), 16)); + } + + return ESCAPES.get(c) || c; +} + +function parseArguments(name, args) { + const results = []; + const chunks = args.trim().split(/\s*,\s*/g); + let matches; + + for (const chunk of chunks) { + if (!isNaN(chunk)) { + results.push(Number(chunk)); + } else if ((matches = chunk.match(STRING_REGEX))) { + results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr)); + } else { + throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); + } + } + + return results; +} + +function parseStyle(style) { + STYLE_REGEX.lastIndex = 0; + + const results = []; + let matches; + + while ((matches = STYLE_REGEX.exec(style)) !== null) { + const name = matches[1]; + + if (matches[2]) { + const args = parseArguments(name, matches[2]); + results.push([name].concat(args)); + } else { + results.push([name]); + } + } + + return results; +} + +function buildStyle(chalk, styles) { + const enabled = {}; + + for (const layer of styles) { + for (const style of layer.styles) { + enabled[style[0]] = layer.inverse ? null : style.slice(1); + } + } + + let current = chalk; + for (const styleName of Object.keys(enabled)) { + if (Array.isArray(enabled[styleName])) { + if (!(styleName in current)) { + throw new Error(`Unknown Chalk style: ${styleName}`); + } + + if (enabled[styleName].length > 0) { + current = current[styleName].apply(current, enabled[styleName]); + } else { + current = current[styleName]; + } + } + } + + return current; +} + +module.exports = (chalk, tmp) => { + const styles = []; + const chunks = []; + let chunk = []; + + // eslint-disable-next-line max-params + tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => { + if (escapeChar) { + chunk.push(unescape(escapeChar)); + } else if (style) { + const str = chunk.join(''); + chunk = []; + chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str)); + styles.push({inverse, styles: parseStyle(style)}); + } else if (close) { + if (styles.length === 0) { + throw new Error('Found extraneous } in Chalk template literal'); + } + + chunks.push(buildStyle(chalk, styles)(chunk.join(''))); + chunk = []; + styles.pop(); + } else { + chunk.push(chr); + } + }); + + chunks.push(chunk.join('')); + + if (styles.length > 0) { + const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; + throw new Error(errMsg); + } + + return chunks.join(''); +}; + + +/***/ }), +/* 169 */ +/***/ (function(module, exports, __webpack_require__) { + +exports.UsageError = __webpack_require__(170).UsageError; +exports.Clipanion = __webpack_require__(171).Clipanion; + +exports.clipanion = new exports.Clipanion(); + + +/***/ }), +/* 170 */ +/***/ (function(module, exports) { + +exports.UsageError = class UsageError extends Error { + + constructor(message) { + + super(message); + + this.isUsageError = true; + + } + +}; + + +/***/ }), +/* 171 */ +/***/ (function(module, exports, __webpack_require__) { + +const chalk = __webpack_require__(172); +const fs = __webpack_require__(5); +const camelCase = __webpack_require__(178); +const path = __webpack_require__(6); + +const { Command } = __webpack_require__(179); +const { UsageError } = __webpack_require__(170); +const { getOptionComponent, getUsageLine } = __webpack_require__(180); +const { parse } = __webpack_require__(181); + +let standardOptions = [ { + + shortName: `h`, + longName: `help`, + +}, { + + shortName: null, + longName: `clipanion-definitions`, + + hidden: true, + +} ]; + +exports.Clipanion = class Clipanion { + + constructor({configKey = `config`} = {}) { + + this.configKey = configKey; + + this.commands = []; + + this.validator = null; + this.options = standardOptions.slice(); + + this.beforeEachList = []; + this.afterEachList = []; + + if (this.configKey !== null) { + this.options.push({ + longName: this.configKey, + argumentName: `PATH` + }); + } + + } + + beforeEach(callback) { + + this.beforeEachList.push(callback); + + return this; + + } + + afterEach(callback) { + + this.afterEachList.push(callback); + + return this; + + } + + topLevel(pattern) { + + if (Array.isArray(pattern)) + pattern = pattern.join(` `); + + let definition = parse(pattern); + + if (definition.path.length > 0) + throw new Error(`The top-level pattern cannot have a command path; use command() instead`); + + if (definition.requiredArguments.length > 0) + throw new Error(`The top-level pattern cannot have required arguments; use command() instead`); + + if (definition.optionalArguments.length > 0) + throw new Error(`The top-level pattern cannot have optional arguments; use command() instead`); + + this.options = this.options.concat(definition.options); + + return this; + + } + + validate(validator) { + + this.validator = validator; + + return this; + + } + + directory(startingPath, recursive = true, pattern = /\.js$/) { + + if (true) { + + if (typeof startingPath === `string`) + throw new Error(`In webpack mode, you must use require.context to provide the directory content yourself; a path isn't enough`); + + for (let entry of startingPath.keys()) { + + let pkg = startingPath(entry); + let factory = pkg.default || pkg; + + factory(this); + + } + + } else {} + + } + + command(pattern) { + + if (Array.isArray(pattern)) + pattern = pattern.join(` `); + + let definition = parse(pattern); + + let command = new Command(this, definition); + this.commands.push(command); + + return command; + + } + + error(error, { stream }) { + + if (error && error.isUsageError) { + + stream.write(`${chalk.red.bold(`Error`)}${chalk.bold(`:`)} ${error.message}\n`); + + } else if (error && error.message) { + + let stackIndex = error.stack ? error.stack.search(/\n *at /) : -1; + + if (stackIndex >= 0) { + stream.write(`${chalk.red.bold(`Error`)}${chalk.bold(`:`)} ${error.message}${error.stack.substr(stackIndex)}\n`); + } else { + stream.write(`${chalk.red.bold(`Error`)}${chalk.bold(`:`)} ${error.message}\n`); + } + + } else { + + stream.write(`${chalk.red.bold(`Error`)}${chalk.bold(`:`)} ${error}\n`); + + } + + } + + usage(argv0, { command = null, error = null, stream = process.stderr } = {}) { + + if (error) { + + this.error(error, { stream }); + + stream.write(`\n`); + + } + + if (command) { + + let commandPath = command.path.join(` `); + let usageLine = getUsageLine(command); + + if (!error) { + + if (command.description) { + + let capitalized = command.description.replace(/^[a-z]/, $0 => $0.toUpperCase()); + + stream.write(capitalized); + stream.write(`\n`); + + } + + if (command.details || command.examples.length > 0) { + + stream.write(`${chalk.bold(`Usage:`)}\n`); + stream.write(`\n`); + stream.write(`${argv0 || ``} ${commandPath} ${usageLine}\n`.replace(/ +/g, ` `).replace(/^ +| +$/g, ``)); + + } else { + + stream.write(`${chalk.bold(`Usage:`)} ${argv0 || ``} ${commandPath} ${usageLine}\n`.replace(/ +/g, ` `).replace(/^ +| +$/g, ``)); + + } + + if (command.details) { + + stream.write(`\n`); + stream.write(`${chalk.bold(`Details:`)}\n`); + stream.write(`\n`); + + stream.write(command.details); + + } + + if (command.examples.length > 0) { + + stream.write(`\n`); + stream.write(`${chalk.bold(`Examples:`)}\n`); + + for (let {description, example} of command.examples) { + stream.write(`\n`); + stream.write(description); + stream.write(`\n`); + stream.write(example.replace(/^/m, ` `)); + } + + } + + } else { + + stream.write(`${chalk.bold(`Usage:`)} ${argv0 || ``} ${commandPath} ${usageLine}\n`.replace(/ +/g, ` `).replace(/^ +| +$/g, ``)); + + } + + } else { + + let globalOptions = getOptionComponent(this.options); + + stream.write(`${chalk.bold(`Usage:`)} ${argv0 || ``} ${globalOptions} \n`.replace(/ +/g, ` `).replace(/ +$/, ``)); + + let commandsByCategories = new Map(); + let maxPathLength = 0; + + for (const command of this.commands) { + + if (command.hiddenCommand || command.path.some(component => component.startsWith(`_`))) + continue; + + let categoryCommands = commandsByCategories.get(command.category); + + if (!categoryCommands) + commandsByCategories.set(command.category, categoryCommands = []); + + categoryCommands.push(command); + + let thisPathLength = command.path.join(` `).length; + + if (thisPathLength > maxPathLength) { + maxPathLength = thisPathLength; + } + + } + + let categoryNames = Array.from(commandsByCategories.keys()).sort((a, b) => { + + if (a === null) + return -1; + if (b === null) + return +1; + + return a.localeCompare(b, `en`, {usage: `sort`, caseFirst: `upper`}); + + }); + + for (let categoryName of categoryNames) { + + let commands = commandsByCategories.get(categoryName).slice().sort((a, b) => { + + const aPath = a.path.join(` `); + const bPath = b.path.join(` `); + + return aPath.localeCompare(bPath, `en`, {usage: `sort`, caseFirst: `upper`}); + + }); + + let header = categoryName !== null ? categoryName.trim() : `Where is one of`; + + stream.write(`\n`); + stream.write(`${chalk.bold(`${header}:`)}\n`); + stream.write(`\n`); + + let pad = str => { + return `${str}${` `.repeat(maxPathLength - str.length)}`; + }; + + for (let command of commands) { + stream.write(` ${chalk.bold(pad(command.path.join(` `)))} ${command.description ? command.description.trim() : `undocumented`}\n`); + } + + } + + } + + } + + definitions({ stream = process.stderr } = {}) { + + let commands = []; + + for (const command of this.commands) { + if (!command.hiddenCommand) { + commands.push({ + path: command.path, + category: command.category, + usage: getUsageLine(command), + description: command.description, + details: command.details, + examples: command.examples, + }); + } + } + + stream.write(JSON.stringify({ + commands, + }, null, 2)); + + } + + check() { + + if (this.commands.filter(command => command.defaultCommand).length > 1) + throw new Error(`Multiple commands have been flagged as default command`); + + let shortNames = this.options.map(option => option.shortName).filter(name => name); + let longNames = this.options.map(option => option.longName).filter(name => name); + + let topLevelNames = [].concat(shortNames, longNames); + + if (new Set(topLevelNames).size !== topLevelNames.length) + throw new Error(`Some top-level parameter names are conflicting together`); + + for (let command of this.commands) { + command.check(topLevelNames); + } + + } + + async run(argv0, argv, { stdin = process.stdin, stdout = process.stdout, stderr = process.stderr, ... initialEnv } = {}) { + + // Sanity check to make sure that the configuration makes sense + if (false) + {} + + // This object is the one we'll fill with the parsed options + let env = { argv0, stdin, stdout, stderr, ... initialEnv }; + + // This array will contain the literals that will be forwarded to the command as positional arguments + let rest = []; + + // We copy the global options from our initial environment into our new one (it's a form of inheritance) + for (let option of this.options) { + + if (option.longName) { + + if (Object.prototype.hasOwnProperty.call(initialEnv, option.longName)) { + env[option.longName] = initialEnv[option.longName]; + } + + } else { + + if (Object.prototype.hasOwnProperty.call(initialEnv, option.shortName)) { + env[option.shortName] = initialEnv[option.shortName]; + } + + } + + } + + // This pointer contains the command we'll be using if nothing prevents it + let selectedCommand = this.commands.find(command => command.defaultCommand); + + // This array is the list of the commands we might still have a chance to end up using + let candidateCommands = this.commands; + + // This array is the list of the words that make up the selected command name + let commandPath = []; + + // This array is the list of the words that might end up in a command name + let commandBuffer = []; + + // True if a command has been locked (cannot be changed anymore), false otherwise + let isCommandLocked = false; + + let LONG_OPTION = 0; + let SHORT_OPTION = 1; + let STOP_OPTION = 2; + let MALFORMED_OPTION = 3; + let RAW_STRING = 4; + + let LONG_OPTION_REGEXP = /^--(?:(no|without)-)?([a-z][a-z0-9]*(?:-[a-z][a-z0-9]*)*)(?:(=)(.*))?$/; + let SHORT_OPTION_REGEXP = /^-([a-zA-Z])(?:=(.*))?(.*)$/; + + function lockCommand() { + + if (isCommandLocked) + return; + + if (!selectedCommand) + throw new UsageError(`No commands match the arguments you've providen`); + + // We can save what's left of our command buffer into the argv array that will be providen to the command + rest = commandBuffer.slice(commandPath.length); + + isCommandLocked = true; + + } + + function getShortOption(short) { + + return options.find(option => { + return option.shortName === short; + }); + + } + + function getLongOption(long) { + + return options.find(option => { + return option.longName === long; + }); + + } + + function parseArgument(literal) { + + if (literal === `--`) + return { type: STOP_OPTION, literal }; + + if (literal.startsWith(`--`)) { + + let match = literal.match(LONG_OPTION_REGEXP); + + if (match) { + return { type: LONG_OPTION, literal, enabled: !match[1], name: (match[1] === `without` ? `with-` : ``) + match[2], value: match[3] ? match[4] || `` : undefined }; + } else { + return { type: MALFORMED_OPTION, literal }; + } + + } + + if (literal.startsWith(`-`)) { + + let match = literal.match(SHORT_OPTION_REGEXP); + + if (match) { + return { type: SHORT_OPTION, literal, leading: match[1], value: match[2], rest: match[3] }; + } else { + return { type: MALFORMED_OPTION, literal }; + } + + } + + return { type: RAW_STRING, literal }; + + } + + try { + + let parsedArgv = argv.map(arg => parseArgument(arg)); + + for (let t = 0, T = parsedArgv.length; t < T; ++t) { + + let current = parsedArgv[t]; + let next = parsedArgv[t + 1]; + + // If we're currently processing a command that accepts arguments by proxy, we treat all following tokens as raw strings + if (selectedCommand && selectedCommand.proxyArguments && rest.length >= selectedCommand.requiredArguments.length) { + + current = {... current}; + current.type = RAW_STRING; + + next = {... next}; + next.type = RAW_STRING; + + } + + switch (current.type) { + + case MALFORMED_OPTION: { + + throw new UsageError(`Malformed option "${current.literal}"`); + + } break; + + case STOP_OPTION: { + + lockCommand(); + + for (t = t + 1; t < T; ++t) { + rest.push(parsedArgv[t].literal); + } + + } break; + + case SHORT_OPTION: { + + let leadingOption = selectedCommand ? selectedCommand.options.find(option => option.shortName === current.leading) : null; + + if (leadingOption) + lockCommand(); + else + leadingOption = this.options.find(option => option.shortName === current.leading); + + if (!leadingOption) + throw new UsageError(`Unknown option "${current.leading}"`); + + if (leadingOption.argumentName) { + + let value = current.value || current.rest || undefined; + + if (!value && next && next.type === RAW_STRING) { + value = next.literal; + t += 1; + } + + if (value === undefined) + throw new UsageError(`Option "${leadingOption.shortName}" cannot be used without argument`); + + let envName = leadingOption.longName + ? camelCase(leadingOption.longName) + : leadingOption.shortName; + + if (Array.isArray(leadingOption.initialValue)) { + if (env[envName]) { + env[envName].push(value); + } else { + env[envName] = [value]; + } + } else { + env[envName] = value; + } + + } else { + + if (current.value) + throw new UsageError(`Option "${leadingOption.shortName}" doesn't expect any argument`); + + if (!current.rest.match(/^[a-z0-9]*$/)) + throw new UsageError(`Malformed option list "${current.literal}"`); + + for (let optionName of [ current.leading, ... current.rest ]) { + + let option = selectedCommand ? selectedCommand.options.find(option => option.shortName === optionName) : null; + + if (option) + lockCommand(); + else + option = this.options.find(option => option.shortName === optionName); + + if (!option) + throw new UsageError(`Unknown option "${optionName}"`); + + if (option.argumentName) + throw new UsageError(`Option "${optionName}" cannot be placed in an option list, because it expects an argument`); + + if (option.maxValue !== undefined) { + + if (option.longName) { + env[camelCase(option.longName)] = Math.min((env[camelCase(option.longName)] || option.initialValue) + 1, option.maxValue); + } else { + env[option.shortName] = Math.min((env[option.shortName] || option.initialValue) + 1, option.maxValue); + } + + } else { + + if (option.longName) { + env[camelCase(option.longName)] = !option.initialValue; + } else { + env[option.shortName] = !option.initialValue; + } + + } + + } + + } + + } break; + + case LONG_OPTION: { + + let option = selectedCommand ? selectedCommand.options.find(option => option.longName === current.name) : null; + + if (option) + lockCommand(); + else + option = this.options.find(option => option.longName === current.name); + + if (!option) + throw new UsageError(`Unknown option "${current.name}"`); + + let value; + + if (option.argumentName) { + + let disablePrefix = option.longName.startsWith(`with-`) ? `--without` : `--no`; + + if (!current.enabled && current.value !== undefined) + throw new UsageError(`Option "${option.longName}" cannot have an argument when used with ${disablePrefix}`); + + if (current.enabled) { + + if (current.value !== undefined) { + value = current.value; + } else if (next && next.type === RAW_STRING) { + value = next.literal; + t += 1; + } else { + throw new UsageError(`Option "${option.longName}" cannot be used without argument. Use "${disablePrefix}-${option.longName}" instead`); + } + + } else { + + value = null; + + } + + } else { + + if (current.value !== undefined) + throw new UsageError(`Option "${option.name}" doesn't expect any argument`); + + if (current.enabled) { + value = true; + } else { + value = false; + } + + } + + let envName = option.longName + ? camelCase(option.longName) + : option.shortName; + + if (Array.isArray(option.initialValue)) { + if (env[envName]) { + env[envName].push(value); + } else { + env[envName] = [value]; + } + } else { + env[envName] = value; + } + + } break; + + case RAW_STRING: { + + if (!isCommandLocked) { + + let nextCandidates = candidateCommands.filter(command => command.path[commandBuffer.length] === current.literal); + + commandBuffer.push(current.literal); + + let nextSelectedCommand = nextCandidates.find(command => command.path.length === commandBuffer.length); + + if (nextSelectedCommand) { + selectedCommand = nextSelectedCommand; + commandPath = commandBuffer; + } + + candidateCommands = nextCandidates.filter(candidate => candidate !== nextSelectedCommand); + + // If there's absolutely no other command we can switch to, then we can lock the current one right away, so that we can start parsing its options + if (candidateCommands.length === 0) { + + lockCommand(); + + } + + } else { + + rest.push(current.literal); + + } + + } break; + + } + + } + + lockCommand(); + + if (env.help) { + + if (commandPath.length > 0) + this.usage(argv0, { command: selectedCommand, stream: stdout }); + else + this.usage(argv0, { stream: stdout }); + + return 0; + + } + + if (env.clipanionDefinitions) { + + this.definitions({ stream: stdout }); + + return 0; + + } + + for (let name of selectedCommand.requiredArguments) { + + if (rest.length === 0) + throw new UsageError(`Missing required argument "${name}"`); + + env[camelCase(name)] = rest.shift(); + + } + + for (let name of selectedCommand.optionalArguments) { + + if (rest.length === 0) + break; + + env[camelCase(name)] = rest.shift(); + + } + + if (selectedCommand.spread) + env[camelCase(selectedCommand.spread)] = rest; + + else if (rest.length > 0) + throw new UsageError(`Too many arguments`); + + for (let option of [ ... selectedCommand.options, ... this.options ]) { + + let envName = option.longName + ? camelCase(option.longName) + : option.shortName; + + if (Object.prototype.hasOwnProperty.call(env, envName)) + continue; + + env[envName] = option.initialValue; + + } + + if (this.configKey !== null && typeof env[this.configKey] !== `undefined`) { + + let configOptions = JSON.parse(fs.readFileSync(env[this.configKey], `utf8`)); + + for (let name of Object.keys(configOptions)) { + + let option = selectedCommand.options.find(option => option.longName === optionName); + + if (!option) + option = this.options.find(option => option.longName === optionName); + + if (!option) + continue; + + if (configOptions[name] === undefined) + continue; + + if (option.argumentName) { + + if (typeof configOptions[name] === `string` || configOptions[name] === null) { + env[name] = configOptions[name]; + } else { + throw new UsageError(`Option "${name}" must be a string, null, or undefined`); + } + + } else { + + if (option.maxValue !== undefined) { + + if (Number.isInteger(configOptions[name])) { + env[name] = Math.max(0, Math.min(Number(configOptions[name]), option.maxValue)); + } else { + throw new UsageError(`Option "${name}" must be a number or undefined`); + } + + } else { + + if (typeof configOptions[name] === `boolean`) { + env[name] = configOptions[name]; + } else { + throw new UsageError(`Option "${name}" must be a boolean or undefined`); + } + + } + + } + + } + + } + + if (this.validator || selectedCommand.validator) { + + let schema = this.validator && selectedCommand.validator + ? this.validator.concat(selectedCommand.validator) + : this.validator || selectedCommand.validator; + + try { + + env = await schema.validate(env); + + } catch (error) { + + if (error && error.name === `ValidationError`) { + + if (error.errors.length > 1) { + throw new UsageError(`Validation failed because ${error.errors.slice(0, -1).join(`, `)}, and ${error.errors[error.errors.length - 1]}`); + } else { + throw new UsageError(`Validation failed because ${error.errors[0]}`); + } + + } else { + + throw error; + + } + + } + + } + + for (let beforeEach of this.beforeEachList) + await beforeEach(env); + + let result = await selectedCommand.run(env); + + for (let afterEach of this.afterEachList) + await afterEach(env, result); + + return result; + + } catch (error) { + + if (error && error.isUsageError) { + + this.usage(argv0, { command: selectedCommand, error, stream: stderr }); + + return 1; + + } else { + + throw error; + + } + + } + + return undefined; + + } + + async runExit(argv0, argv, { stdin = process.stdin, stdout = process.stdout, stderr = process.stderr, ... rest } = {}) { + + try { + + process.exitCode = await this.run(argv0, argv, { stdin, stdout, stderr, ... rest }); + + } catch (error) { + + this.error(error, { stream: stderr }); + + process.exitCode = 1; + + } + + } + +}; + + +/***/ }), +/* 172 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var escapeStringRegexp = __webpack_require__(159); +var ansiStyles = __webpack_require__(173); +var stripAnsi = __webpack_require__(174); +var hasAnsi = __webpack_require__(176); +var supportsColor = __webpack_require__(177); +var defineProps = Object.defineProperties; +var isSimpleWindowsTerm = process.platform === 'win32' && !/^xterm/i.test(process.env.TERM); + +function Chalk(options) { + // detect mode if not set manually + this.enabled = !options || options.enabled === undefined ? supportsColor : options.enabled; +} + +// use bright blue on Windows as the normal blue color is illegible +if (isSimpleWindowsTerm) { + ansiStyles.blue.open = '\u001b[94m'; +} + +var styles = (function () { + var ret = {}; + + Object.keys(ansiStyles).forEach(function (key) { + ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); + + ret[key] = { + get: function () { + return build.call(this, this._styles.concat(key)); + } + }; + }); + + return ret; +})(); + +var proto = defineProps(function chalk() {}, styles); + +function build(_styles) { + var builder = function () { + return applyStyle.apply(builder, arguments); + }; + + builder._styles = _styles; + builder.enabled = this.enabled; + // __proto__ is used because we must return a function, but there is + // no way to create a function with a different prototype. + /* eslint-disable no-proto */ + builder.__proto__ = proto; + + return builder; +} + +function applyStyle() { + // support varags, but simply cast to string in case there's only one arg + var args = arguments; + var argsLen = args.length; + var str = argsLen !== 0 && String(arguments[0]); + + if (argsLen > 1) { + // don't slice `arguments`, it prevents v8 optimizations + for (var a = 1; a < argsLen; a++) { + str += ' ' + args[a]; + } + } + + if (!this.enabled || !str) { + return str; + } + + var nestedStyles = this._styles; + var i = nestedStyles.length; + + // Turns out that on Windows dimmed gray text becomes invisible in cmd.exe, + // see https://github.com/chalk/chalk/issues/58 + // If we're on Windows and we're dealing with a gray color, temporarily make 'dim' a noop. + var originalDim = ansiStyles.dim.open; + if (isSimpleWindowsTerm && (nestedStyles.indexOf('gray') !== -1 || nestedStyles.indexOf('grey') !== -1)) { + ansiStyles.dim.open = ''; + } + + while (i--) { + var code = ansiStyles[nestedStyles[i]]; + + // Replace any instances already present with a re-opening code + // otherwise only the part of the string until said closing code + // will be colored, and the rest will simply be 'plain'. + str = code.open + str.replace(code.closeRe, code.open) + code.close; + } + + // Reset the original 'dim' if we changed it to work around the Windows dimmed gray issue. + ansiStyles.dim.open = originalDim; + + return str; +} + +function init() { + var ret = {}; + + Object.keys(styles).forEach(function (name) { + ret[name] = { + get: function () { + return build.call(this, [name]); + } + }; + }); + + return ret; +} + +defineProps(Chalk.prototype, init()); + +module.exports = new Chalk(); +module.exports.styles = ansiStyles; +module.exports.hasColor = hasAnsi; +module.exports.stripColor = stripAnsi; +module.exports.supportsColor = supportsColor; + + +/***/ }), +/* 173 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* WEBPACK VAR INJECTION */(function(module) { + +function assembleStyles () { + var styles = { + modifiers: { + reset: [0, 0], + bold: [1, 22], // 21 isn't widely supported and 22 does the same thing + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + colors: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39] + }, + bgColors: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49] + } + }; + + // fix humans + styles.colors.grey = styles.colors.gray; + + Object.keys(styles).forEach(function (groupName) { + var group = styles[groupName]; + + Object.keys(group).forEach(function (styleName) { + var style = group[styleName]; + + styles[styleName] = group[styleName] = { + open: '\u001b[' + style[0] + 'm', + close: '\u001b[' + style[1] + 'm' + }; + }); + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + }); + + return styles; +} + +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(161)(module))) + +/***/ }), +/* 174 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var ansiRegex = __webpack_require__(175)(); + +module.exports = function (str) { + return typeof str === 'string' ? str.replace(ansiRegex, '') : str; +}; + + +/***/ }), +/* 175 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = function () { + return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g; +}; + + +/***/ }), +/* 176 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var ansiRegex = __webpack_require__(175); +var re = new RegExp(ansiRegex().source); // remove the `g` flag +module.exports = re.test.bind(re); + + +/***/ }), +/* 177 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var argv = process.argv; + +var terminator = argv.indexOf('--'); +var hasFlag = function (flag) { + flag = '--' + flag; + var pos = argv.indexOf(flag); + return pos !== -1 && (terminator !== -1 ? pos < terminator : true); +}; + +module.exports = (function () { + if ('FORCE_COLOR' in process.env) { + return true; + } + + if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + return false; + } + + if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + return true; + } + + if (process.stdout && !process.stdout.isTTY) { + return false; + } + + if (process.platform === 'win32') { + return true; + } + + if ('COLORTERM' in process.env) { + return true; + } + + if (process.env.TERM === 'dumb') { + return false; + } + + if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { + return true; + } + + return false; +})(); + + +/***/ }), +/* 178 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const preserveCamelCase = string => { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; + + for (let i = 0; i < string.length; i++) { + const character = string[i]; + + if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) { + string = string.slice(0, i) + '-' + string.slice(i); + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i++; + } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) { + string = string.slice(0, i - 1) + '-' + string.slice(i - 1); + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = character.toLowerCase() === character; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = character.toUpperCase() === character; + } + } + + return string; +}; + +const camelCase = (input, options) => { + if (!(typeof input === 'string' || Array.isArray(input))) { + throw new TypeError('Expected the input to be `string | string[]`'); + } + + options = Object.assign({ + pascalCase: false + }, options); + + const postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x; + + if (Array.isArray(input)) { + input = input.map(x => x.trim()) + .filter(x => x.length) + .join('-'); + } else { + input = input.trim(); + } + + if (input.length === 0) { + return ''; + } + + if (input.length === 1) { + return options.pascalCase ? input.toUpperCase() : input.toLowerCase(); + } + + if (/^[a-z\d]+$/.test(input)) { + return postProcess(input); + } + + const hasUpperCase = input !== input.toLowerCase(); + + if (hasUpperCase) { + input = preserveCamelCase(input); + } + + input = input + .replace(/^[_.\- ]+/, '') + .toLowerCase() + .replace(/[_.\- ]+(\w|$)/g, (m, p1) => p1.toUpperCase()); + + return postProcess(input); +}; + +module.exports = camelCase; +module.exports.default = camelCase; + + +/***/ }), +/* 179 */ +/***/ (function(module, exports, __webpack_require__) { + +const chalk = __webpack_require__(172); + +function extractContent(text, paragraphs) { + + text = text.replace(/^[\t ]+|[\t ]+$/gm, ``); + text = text.replace(/^\n+|\n+$/g, ``); + text = text.replace(/\n(\n)?\n*/g, `$1`); + + if (paragraphs) { + text = text.split(/\r\n|\r|\n/g).map(function (paragraph) { + + let bulletMatch = paragraph.match(/^[*-][\t ]+(.*)/); + + if (bulletMatch) { + return bulletMatch[1].match(/(.{1,78})(?: |$)/g).map((line, index) => { + return (index === 0 ? `- ` : ` `) + line; + }).join('\n'); + } else { + return paragraph.match(/(.{1,80})(?: |$)/g).join('\n'); + } + + }).join('\n\n'); + } + + text = text.replace(/(`+)((?:.|[\n])*?)\1/g, function ($0, $1, $2) { + return chalk.cyan($1 + $2 + $1); + }); + + return text ? text + `\n` : ``; + +} + +exports.Command = class Command { + + constructor(clipanion, definition) { + + this.clipanion = clipanion; + + // An array with the command "path" (ie the words that are required to run the command) + this.path = definition.path; + + // The category where this command belongs in the help + this.category = null; + + // The command description, has displayed in the help + this.description = null; + + // The command details, written when printing the usage of a specific command + this.details = ``; + + // Various commands examples that can good introduction to figure out how to use the command + this.examples = []; + + // Various flag that affect how the command is seen by the controller + this.defaultCommand = this.path.length === 0; + this.hiddenCommand = false; + this.proxyArguments = false; + + // A list of the names of the required arguments + this.requiredArguments = definition.requiredArguments; + + // A list of the names of the optional arguments + this.optionalArguments = definition.optionalArguments; + + // The name of the spread + this.spread = definition.spread; + + // A list of all the options supported by the command + this.options = definition.options; + + // A Joi validator, or null if this command doesn't use any validation + this.validator = null; + + // The function that will be called when running the command + this.run = () => {}; + + } + + alias(pattern) { + + this.clipanion.command(`${pattern} [... rest]`) + + .flags({ + + // Alias must not be displayed as regular commands + hiddenCommand: true, + + // Alias directly forward all of their arguments to the actual command + proxyArguments: true, + + }) + + .action(args => this.clipanion.run(args.argv0, [ + ... this.path, + ... args.rest, + ])) + + ; + + } + + aliases(... patterns) { + + for (let pattern of patterns) + this.alias(pattern); + + return this; + + } + + flags(flags) { + + Object.assign(this, flags); + + return this; + + } + + validate(validator) { + + this.validator = validator; + + return this; + + } + + categorize(category) { + + this.category = extractContent(category, false); + + return this; + + } + + describe(description) { + + this.description = extractContent(description, false); + + return this; + + } + + detail(details) { + + this.details = extractContent(details, true); + + return this; + + } + + example(description, example) { + + this.examples.push({ + description: extractContent(description, true), + example: extractContent(example, false), + }); + + return this; + + } + + action(action) { + + this.run = action; + + return this; + + } + + check(topLevelNames) { + + let shortNames = this.options.map(option => option.shortName).filter(name => name); + let longNames = this.options.map(option => option.longName).filter(name => name); + + let localNames = [].concat(shortNames, longNames, this.requiredArguments, this.optionalArguments); + + if (new Set(localNames).size !== localNames.length) + throw new Error(`Some parameter names used inside a same command are conflicting together`); + + let allNames = localNames.concat(topLevelNames); + + if (new Set(allNames).size !== allNames.length) { + throw new Error(`Some parameter names from a command are conflicting with the top-level parameters`); + } + + } + +}; + + +/***/ }), +/* 180 */ +/***/ (function(module, exports) { + +exports.getOptionComponent = function getOptionString(options) { + + let components = []; + + for (let option of options) { + + if (option.hidden) + continue; + + let names = []; + + if (option.shortName) + names.push(`-${option.shortName}`); + + if (option.longName) { + if (option.initialValue !== true) { + names.push(`--${option.longName}`); + } else if (option.longName.startsWith(`with-`)) { + names.push(`--without-${option.longName.replace(/^with-/, ``)}`); + } else { + names.push(`--no-${option.longName}`); + } + } + + if (option.argumentName) { + components.push(`[${names.join(`,`)} ${option.argumentName}]`); + } else { + components.push(`[${names.join(`,`)}]`); + } + + } + + return components.join(` `); + +}; + +exports.getUsageLine = function getUsageLine(command) { + + let components = []; + + for (const name of command.requiredArguments) + components.push(`<${name}>`); + + for (const name of command.optionalArguments) + components.push(`[${name}]`); + + if (command.spread) + components.push(`[... ${command.spread}]`); + + let optionComponent = exports.getOptionComponent(command.options); + + if (optionComponent.length !== 0) + components.push(optionComponent); + + return components.join(` `); + +}; + + +/***/ }), +/* 181 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* + * Generated by PEG.js 0.10.0. + * + * http://pegjs.org/ + */ + + + +function peg$subclass(child, parent) { + function ctor() { this.constructor = child; } + ctor.prototype = parent.prototype; + child.prototype = new ctor(); +} + +function peg$SyntaxError(message, expected, found, location) { + this.message = message; + this.expected = expected; + this.found = found; + this.location = location; + this.name = "SyntaxError"; + + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, peg$SyntaxError); + } +} + +peg$subclass(peg$SyntaxError, Error); + +peg$SyntaxError.buildMessage = function(expected, found) { + var DESCRIBE_EXPECTATION_FNS = { + literal: function(expectation) { + return "\"" + literalEscape(expectation.text) + "\""; + }, + + "class": function(expectation) { + var escapedParts = "", + i; + + for (i = 0; i < expectation.parts.length; i++) { + escapedParts += expectation.parts[i] instanceof Array + ? classEscape(expectation.parts[i][0]) + "-" + classEscape(expectation.parts[i][1]) + : classEscape(expectation.parts[i]); + } + + return "[" + (expectation.inverted ? "^" : "") + escapedParts + "]"; + }, + + any: function(expectation) { + return "any character"; + }, + + end: function(expectation) { + return "end of input"; + }, + + other: function(expectation) { + return expectation.description; + } + }; + + function hex(ch) { + return ch.charCodeAt(0).toString(16).toUpperCase(); + } + + function literalEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function classEscape(s) { + return s + .replace(/\\/g, '\\\\') + .replace(/\]/g, '\\]') + .replace(/\^/g, '\\^') + .replace(/-/g, '\\-') + .replace(/\0/g, '\\0') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x0F]/g, function(ch) { return '\\x0' + hex(ch); }) + .replace(/[\x10-\x1F\x7F-\x9F]/g, function(ch) { return '\\x' + hex(ch); }); + } + + function describeExpectation(expectation) { + return DESCRIBE_EXPECTATION_FNS[expectation.type](expectation); + } + + function describeExpected(expected) { + var descriptions = new Array(expected.length), + i, j; + + for (i = 0; i < expected.length; i++) { + descriptions[i] = describeExpectation(expected[i]); + } + + descriptions.sort(); + + if (descriptions.length > 0) { + for (i = 1, j = 1; i < descriptions.length; i++) { + if (descriptions[i - 1] !== descriptions[i]) { + descriptions[j] = descriptions[i]; + j++; + } + } + descriptions.length = j; + } + + switch (descriptions.length) { + case 1: + return descriptions[0]; + + case 2: + return descriptions[0] + " or " + descriptions[1]; + + default: + return descriptions.slice(0, -1).join(", ") + + ", or " + + descriptions[descriptions.length - 1]; + } + } + + function describeFound(found) { + return found ? "\"" + literalEscape(found) + "\"" : "end of input"; + } + + return "Expected " + describeExpected(expected) + " but " + describeFound(found) + " found."; +}; + +function peg$parse(input, options) { + options = options !== void 0 ? options : {}; + + var peg$FAILED = {}, + + peg$startRuleFunctions = { main: peg$parsemain }, + peg$startRuleFunction = peg$parsemain, + + peg$c0 = function(command, options) { return Object.assign({}, command, options) }, + peg$c1 = function(path, requiredArguments, optionalArguments) { return Object.assign({}, path, requiredArguments, optionalArguments) }, + peg$c2 = function(initial, part) { return part }, + peg$c3 = function(initial, rest) { return { path: [ initial, ... rest ] } }, + peg$c4 = "", + peg$c5 = function() { return { path: [] } }, + peg$c6 = function(name) { return name }, + peg$c7 = function(initial, rest) { return { requiredArguments: [ initial, ... rest ] } }, + peg$c8 = function() { return { requiredArguments: [] } }, + peg$c9 = "<", + peg$c10 = peg$literalExpectation("<", false), + peg$c11 = ">", + peg$c12 = peg$literalExpectation(">", false), + peg$c13 = function(spread) { return { optionalArguments: [], spread } }, + peg$c14 = function(initial, rest) { return { optionalArguments: [ initial, ... rest ], spread: null } }, + peg$c15 = function() { return { optionalArguments: [], spread: null } }, + peg$c16 = "[", + peg$c17 = peg$literalExpectation("[", false), + peg$c18 = "]", + peg$c19 = peg$literalExpectation("]", false), + peg$c20 = "[...", + peg$c21 = peg$literalExpectation("[...", false), + peg$c22 = function(initial, rest) { return { options: initial.concat(... rest) } }, + peg$c23 = function() { return { options: [] } }, + peg$c24 = "[-", + peg$c25 = peg$literalExpectation("[-", false), + peg$c26 = function(names) { return names.map(shortName => Object.assign({}, shortName, { longName: null, argumentName: null })) }, + peg$c27 = "...]", + peg$c28 = peg$literalExpectation("...]", false), + peg$c29 = function(names, argumentName) { return [ Object.assign({}, names, { argumentName, initialValue: [] }) ] }, + peg$c30 = function(names, argumentName) { return [ Object.assign({}, names, { argumentName, initialValue: undefined }) ] }, + peg$c31 = "?]", + peg$c32 = peg$literalExpectation("?]", false), + peg$c33 = function(names) { return [ Object.assign({}, names, { argumentName: null, initialValue: null }) ] }, + peg$c34 = function(names) { return [ Object.assign({}, names, { argumentName: null }) ] }, + peg$c35 = "-", + peg$c36 = peg$literalExpectation("-", false), + peg$c37 = ",-", + peg$c38 = peg$literalExpectation(",-", false), + peg$c39 = function(shortName) { return text() }, + peg$c40 = function(shortName, repeat) { return repeat }, + peg$c41 = ",--", + peg$c42 = peg$literalExpectation(",--", false), + peg$c43 = function(shortName, repeats, longName) { return longName }, + peg$c44 = function(shortName, repeats, longName) { return repeats.every((repeat, index) => repeat === shortName.shortName.repeat(2 + index)) }, + peg$c45 = function(shortName, repeats, longName) { return Object.assign({}, shortName, longName, { initialValue: 0, maxValue: 1 + repeats.length }) }, + peg$c46 = function(shortName, longName) { return Object.assign({}, shortName, longName) }, + peg$c47 = function(shortName) { return Object.assign({}, shortName, { longName: null }) }, + peg$c48 = "--", + peg$c49 = peg$literalExpectation("--", false), + peg$c50 = function(longName) { return Object.assign({}, longName, { shortName: null }) }, + peg$c51 = /^[a-zA-Z]/, + peg$c52 = peg$classExpectation([["a", "z"], ["A", "Z"]], false, false), + peg$c53 = function(shortName) { return { shortName, initialValue: false } }, + peg$c54 = "no-", + peg$c55 = peg$literalExpectation("no-", false), + peg$c56 = function(longName) { return { longName, initialValue: true } }, + peg$c57 = "without-", + peg$c58 = peg$literalExpectation("without-", false), + peg$c59 = function(longName) { return { longName: `with-${longName}`, initialValue: true } }, + peg$c60 = function(longName) { return { longName, initialValue: false } }, + peg$c61 = /^[A-Z]/, + peg$c62 = peg$classExpectation([["A", "Z"]], false, false), + peg$c63 = /^[A-Z0-9]/, + peg$c64 = peg$classExpectation([["A", "Z"], ["0", "9"]], false, false), + peg$c65 = function() { return text() }, + peg$c66 = "_", + peg$c67 = peg$literalExpectation("_", false), + peg$c68 = /^[a-z]/, + peg$c69 = peg$classExpectation([["a", "z"]], false, false), + peg$c70 = /^[a-z0-9]/, + peg$c71 = peg$classExpectation([["a", "z"], ["0", "9"]], false, false), + peg$c72 = /^[ ]/, + peg$c73 = peg$classExpectation([" "], false, false), + + peg$currPos = 0, + peg$savedPos = 0, + peg$posDetailsCache = [{ line: 1, column: 1 }], + peg$maxFailPos = 0, + peg$maxFailExpected = [], + peg$silentFails = 0, + + peg$result; + + if ("startRule" in options) { + if (!(options.startRule in peg$startRuleFunctions)) { + throw new Error("Can't start parsing from rule \"" + options.startRule + "\"."); + } + + peg$startRuleFunction = peg$startRuleFunctions[options.startRule]; + } + + function text() { + return input.substring(peg$savedPos, peg$currPos); + } + + function location() { + return peg$computeLocation(peg$savedPos, peg$currPos); + } + + function expected(description, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildStructuredError( + [peg$otherExpectation(description)], + input.substring(peg$savedPos, peg$currPos), + location + ); + } + + function error(message, location) { + location = location !== void 0 ? location : peg$computeLocation(peg$savedPos, peg$currPos) + + throw peg$buildSimpleError(message, location); + } + + function peg$literalExpectation(text, ignoreCase) { + return { type: "literal", text: text, ignoreCase: ignoreCase }; + } + + function peg$classExpectation(parts, inverted, ignoreCase) { + return { type: "class", parts: parts, inverted: inverted, ignoreCase: ignoreCase }; + } + + function peg$anyExpectation() { + return { type: "any" }; + } + + function peg$endExpectation() { + return { type: "end" }; + } + + function peg$otherExpectation(description) { + return { type: "other", description: description }; + } + + function peg$computePosDetails(pos) { + var details = peg$posDetailsCache[pos], p; + + if (details) { + return details; + } else { + p = pos - 1; + while (!peg$posDetailsCache[p]) { + p--; + } + + details = peg$posDetailsCache[p]; + details = { + line: details.line, + column: details.column + }; + + while (p < pos) { + if (input.charCodeAt(p) === 10) { + details.line++; + details.column = 1; + } else { + details.column++; + } + + p++; + } + + peg$posDetailsCache[pos] = details; + return details; + } + } + + function peg$computeLocation(startPos, endPos) { + var startPosDetails = peg$computePosDetails(startPos), + endPosDetails = peg$computePosDetails(endPos); + + return { + start: { + offset: startPos, + line: startPosDetails.line, + column: startPosDetails.column + }, + end: { + offset: endPos, + line: endPosDetails.line, + column: endPosDetails.column + } + }; + } + + function peg$fail(expected) { + if (peg$currPos < peg$maxFailPos) { return; } + + if (peg$currPos > peg$maxFailPos) { + peg$maxFailPos = peg$currPos; + peg$maxFailExpected = []; + } + + peg$maxFailExpected.push(expected); + } + + function peg$buildSimpleError(message, location) { + return new peg$SyntaxError(message, null, null, location); + } + + function peg$buildStructuredError(expected, found, location) { + return new peg$SyntaxError( + peg$SyntaxError.buildMessage(expected, found), + expected, + found, + location + ); + } + + function peg$parsemain() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parsecommand(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parseoptionList(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseS(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseS(); + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c0(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsecommand() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + s1 = []; + s2 = peg$parseS(); + while (s2 !== peg$FAILED) { + s1.push(s2); + s2 = peg$parseS(); + } + if (s1 !== peg$FAILED) { + s2 = peg$parsecommandPath(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + if (s3 !== peg$FAILED) { + s4 = peg$parserequiredArgumentList(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseS(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseS(); + } + if (s5 !== peg$FAILED) { + s6 = peg$parseoptionalArgumentList(); + if (s6 !== peg$FAILED) { + s7 = []; + s8 = peg$parseS(); + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parseS(); + } + if (s7 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c1(s2, s4, s6); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parsecommandPath() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parsecommandPart(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecommandPart(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parsecommandPart(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c3(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$c4; + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c5(); + } + s0 = s1; + } + + return s0; + } + + function peg$parsecommandPart() { + var s0, s1; + + s0 = peg$currPos; + s1 = peg$parseidentifier(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c6(s1); + } + s0 = s1; + + return s0; + } + + function peg$parserequiredArgumentList() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parserequiredArgument(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parserequiredArgument(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parserequiredArgument(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c7(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$c4; + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c8(); + } + s0 = s1; + } + + return s0; + } + + function peg$parserequiredArgument() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 60) { + s1 = peg$c9; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c10); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseidentifier(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 62) { + s3 = peg$c11; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c12); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c6(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseoptionalArgumentList() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parseoptionalSpread(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c13(s1); + } + s0 = s1; + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseoptionalArgument(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseoptionalArgument(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseoptionalArgument(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c14(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$c4; + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c15(); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parseoptionalArgument() { + var s0, s1, s2, s3; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseidentifier(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c18; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c6(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseoptionalSpread() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 4) === peg$c20) { + s1 = peg$c20; + peg$currPos += 4; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c21); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseS(); + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseS(); + } + if (s2 !== peg$FAILED) { + s3 = peg$parseidentifier(); + if (s3 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s4 = peg$c18; + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c6(s3); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseoptionList() { + var s0, s1, s2, s3, s4, s5; + + s0 = peg$currPos; + s1 = peg$parseoption(); + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseoption(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$currPos; + s4 = []; + s5 = peg$parseS(); + if (s5 !== peg$FAILED) { + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$parseS(); + } + } else { + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + s5 = peg$parseoption(); + if (s5 !== peg$FAILED) { + peg$savedPos = s3; + s4 = peg$c2(s1, s5); + s3 = s4; + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } else { + peg$currPos = s3; + s3 = peg$FAILED; + } + } + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c22(s1, s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$c4; + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c23(); + } + s0 = s1; + } + + return s0; + } + + function peg$parseoption() { + var s0, s1, s2, s3, s4, s5, s6; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c24) { + s1 = peg$c24; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c25); } + } + if (s1 !== peg$FAILED) { + s2 = []; + s3 = peg$parseshortOptionName(); + if (s3 !== peg$FAILED) { + while (s3 !== peg$FAILED) { + s2.push(s3); + s3 = peg$parseshortOptionName(); + } + } else { + s2 = peg$FAILED; + } + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c18; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c26(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoptionNames(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseoptionArgument(); + if (s4 !== peg$FAILED) { + s5 = []; + s6 = peg$parseS(); + while (s6 !== peg$FAILED) { + s5.push(s6); + s6 = peg$parseS(); + } + if (s5 !== peg$FAILED) { + if (input.substr(peg$currPos, 4) === peg$c27) { + s6 = peg$c27; + peg$currPos += 4; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c28); } + } + if (s6 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c29(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoptionNames(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$parseS(); + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$parseS(); + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$parseoptionArgument(); + if (s4 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s5 = peg$c18; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c30(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoptionNamesNoRepeat(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 2) === peg$c31) { + s3 = peg$c31; + peg$currPos += 2; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c32); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c33(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 91) { + s1 = peg$c16; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c17); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseoptionNames(); + if (s2 !== peg$FAILED) { + if (input.charCodeAt(peg$currPos) === 93) { + s3 = peg$c18; + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c19); } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c34(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + } + } + + return s0; + } + + function peg$parseoptionNames() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseshortOptionName(); + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c37) { + s5 = peg$c37; + peg$currPos += 2; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + s7 = []; + s8 = peg$parseshortOptionName(); + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parseshortOptionName(); + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + peg$savedPos = s6; + s7 = peg$c39(s2); + } + s6 = s7; + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s5 = peg$c40(s2, s6); + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 !== peg$FAILED) { + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c37) { + s5 = peg$c37; + peg$currPos += 2; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c38); } + } + if (s5 !== peg$FAILED) { + s6 = peg$currPos; + s7 = []; + s8 = peg$parseshortOptionName(); + if (s8 !== peg$FAILED) { + while (s8 !== peg$FAILED) { + s7.push(s8); + s8 = peg$parseshortOptionName(); + } + } else { + s7 = peg$FAILED; + } + if (s7 !== peg$FAILED) { + peg$savedPos = s6; + s7 = peg$c39(s2); + } + s6 = s7; + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s5 = peg$c40(s2, s6); + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + } else { + s3 = peg$FAILED; + } + if (s3 !== peg$FAILED) { + s4 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c41) { + s5 = peg$c41; + peg$currPos += 3; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c42); } + } + if (s5 !== peg$FAILED) { + s6 = peg$parselongOptionName(); + if (s6 !== peg$FAILED) { + peg$savedPos = s4; + s5 = peg$c43(s2, s3, s6); + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + if (s4 === peg$FAILED) { + s4 = null; + } + if (s4 !== peg$FAILED) { + peg$savedPos = peg$currPos; + s5 = peg$c44(s2, s3, s4); + if (s5) { + s5 = void 0; + } else { + s5 = peg$FAILED; + } + if (s5 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c45(s2, s3, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$parseoptionNamesNoRepeat(); + } + + return s0; + } + + function peg$parseoptionNamesNoRepeat() { + var s0, s1, s2, s3, s4; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseshortOptionName(); + if (s2 !== peg$FAILED) { + if (input.substr(peg$currPos, 3) === peg$c41) { + s3 = peg$c41; + peg$currPos += 3; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c42); } + } + if (s3 !== peg$FAILED) { + s4 = peg$parselongOptionName(); + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c46(s2, s4); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s1 = peg$c35; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseshortOptionName(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c47(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 2) === peg$c48) { + s1 = peg$c48; + peg$currPos += 2; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c49); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parselongOptionName(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c50(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } + } + + return s0; + } + + function peg$parseshortOptionName() { + var s0, s1; + + s0 = peg$currPos; + if (peg$c51.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c52); } + } + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c53(s1); + } + s0 = s1; + + return s0; + } + + function peg$parselongOptionName() { + var s0, s1, s2; + + s0 = peg$currPos; + if (input.substr(peg$currPos, 3) === peg$c54) { + s1 = peg$c54; + peg$currPos += 3; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c55); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseidentifier(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c56(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + if (input.substr(peg$currPos, 8) === peg$c57) { + s1 = peg$c57; + peg$currPos += 8; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c58); } + } + if (s1 !== peg$FAILED) { + s2 = peg$parseidentifier(); + if (s2 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c59(s2); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + if (s0 === peg$FAILED) { + s0 = peg$currPos; + s1 = peg$parseidentifier(); + if (s1 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c60(s1); + } + s0 = s1; + } + } + + return s0; + } + + function peg$parseoptionArgument() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8; + + s0 = peg$currPos; + if (peg$c61.test(input.charAt(peg$currPos))) { + s1 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s1 !== peg$FAILED) { + s2 = []; + if (peg$c63.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + while (s3 !== peg$FAILED) { + s2.push(s3); + if (peg$c63.test(input.charAt(peg$currPos))) { + s3 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s3 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + } + if (s2 !== peg$FAILED) { + s3 = []; + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s5 = peg$c35; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + if (s5 !== peg$FAILED) { + if (peg$c61.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s6 !== peg$FAILED) { + s7 = []; + if (peg$c63.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$c63.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + while (s4 !== peg$FAILED) { + s3.push(s4); + s4 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s5 = peg$c35; + peg$currPos++; + } else { + s5 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + if (s5 !== peg$FAILED) { + if (peg$c61.test(input.charAt(peg$currPos))) { + s6 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c62); } + } + if (s6 !== peg$FAILED) { + s7 = []; + if (peg$c63.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + while (s8 !== peg$FAILED) { + s7.push(s8); + if (peg$c63.test(input.charAt(peg$currPos))) { + s8 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s8 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c64); } + } + } + if (s7 !== peg$FAILED) { + s5 = [s5, s6, s7]; + s4 = s5; + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } else { + peg$currPos = s4; + s4 = peg$FAILED; + } + } + if (s3 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c65(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseidentifier() { + var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9; + + s0 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 95) { + s1 = peg$c66; + peg$currPos++; + } else { + s1 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c67); } + } + if (s1 === peg$FAILED) { + s1 = null; + } + if (s1 !== peg$FAILED) { + if (peg$c68.test(input.charAt(peg$currPos))) { + s2 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s2 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c69); } + } + if (s2 !== peg$FAILED) { + s3 = []; + if (peg$c70.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + while (s4 !== peg$FAILED) { + s3.push(s4); + if (peg$c70.test(input.charAt(peg$currPos))) { + s4 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s4 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + } + if (s3 !== peg$FAILED) { + s4 = []; + s5 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s6 = peg$c35; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + if (s6 !== peg$FAILED) { + if (peg$c68.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c69); } + } + if (s7 !== peg$FAILED) { + s8 = []; + if (peg$c70.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + while (s9 !== peg$FAILED) { + s8.push(s9); + if (peg$c70.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + } + if (s8 !== peg$FAILED) { + s6 = [s6, s7, s8]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + while (s5 !== peg$FAILED) { + s4.push(s5); + s5 = peg$currPos; + if (input.charCodeAt(peg$currPos) === 45) { + s6 = peg$c35; + peg$currPos++; + } else { + s6 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c36); } + } + if (s6 !== peg$FAILED) { + if (peg$c68.test(input.charAt(peg$currPos))) { + s7 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s7 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c69); } + } + if (s7 !== peg$FAILED) { + s8 = []; + if (peg$c70.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + while (s9 !== peg$FAILED) { + s8.push(s9); + if (peg$c70.test(input.charAt(peg$currPos))) { + s9 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s9 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c71); } + } + } + if (s8 !== peg$FAILED) { + s6 = [s6, s7, s8]; + s5 = s6; + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } else { + peg$currPos = s5; + s5 = peg$FAILED; + } + } + if (s4 !== peg$FAILED) { + peg$savedPos = s0; + s1 = peg$c65(); + s0 = s1; + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + } else { + peg$currPos = s0; + s0 = peg$FAILED; + } + + return s0; + } + + function peg$parseS() { + var s0; + + if (peg$c72.test(input.charAt(peg$currPos))) { + s0 = input.charAt(peg$currPos); + peg$currPos++; + } else { + s0 = peg$FAILED; + if (peg$silentFails === 0) { peg$fail(peg$c73); } + } + + return s0; + } + + peg$result = peg$startRuleFunction(); + + if (peg$result !== peg$FAILED && peg$currPos === input.length) { + return peg$result; + } else { + if (peg$result !== peg$FAILED && peg$currPos < input.length) { + peg$fail(peg$endExpectation()); + } + + throw peg$buildStructuredError( + peg$maxFailExpected, + peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, + peg$maxFailPos < input.length + ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) + : peg$computeLocation(peg$maxFailPos, peg$maxFailPos) + ); + } +} + +module.exports = { + SyntaxError: peg$SyntaxError, + parse: peg$parse +}; + + +/***/ }), +/* 182 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const xRegExp = __webpack_require__(183); + +const decamelize = (text, separator = '_') => { + if (!(typeof text === 'string' && typeof separator === 'string')) { + throw new TypeError('The `text` and `separator` arguments should be of type `string`'); + } + + const regex1 = xRegExp('([\\p{Ll}\\d])(\\p{Lu})', 'g'); + const regex2 = xRegExp('(\\p{Lu}+)(\\p{Lu}[\\p{Ll}\\d]+)', 'g'); + + return text + // TODO: Use this instead of `xregexp` when targeting Node.js 10: + // .replace(/([\p{Lowercase_Letter}\d])(\p{Uppercase_Letter})/gu, `$1${separator}$2`) + // .replace(/(\p{Lowercase_Letter}+)(\p{Uppercase_Letter}[\p{Lowercase_Letter}\d]+)/gu, `$1${separator}$2`) + .replace(regex1, `$1${separator}$2`) + .replace(regex2, `$1${separator}$2`) + .toLowerCase(); +}; + +module.exports = decamelize; +// TODO: Remove this for the next major release +module.exports.default = decamelize; + + +/***/ }), +/* 183 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(184); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _xregexp = _interopRequireDefault(__webpack_require__(185)); + +var _build = _interopRequireDefault(__webpack_require__(256)); + +var _matchrecursive = _interopRequireDefault(__webpack_require__(257)); + +var _unicodeBase = _interopRequireDefault(__webpack_require__(258)); + +var _unicodeBlocks = _interopRequireDefault(__webpack_require__(259)); + +var _unicodeCategories = _interopRequireDefault(__webpack_require__(261)); + +var _unicodeProperties = _interopRequireDefault(__webpack_require__(263)); + +var _unicodeScripts = _interopRequireDefault(__webpack_require__(265)); + +(0, _build.default)(_xregexp.default); +(0, _matchrecursive.default)(_xregexp.default); +(0, _unicodeBase.default)(_xregexp.default); +(0, _unicodeBlocks.default)(_xregexp.default); +(0, _unicodeCategories.default)(_xregexp.default); +(0, _unicodeProperties.default)(_xregexp.default); +(0, _unicodeScripts.default)(_xregexp.default); +var _default = _xregexp.default; +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 184 */ +/***/ (function(module, exports) { + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + "default": obj + }; +} + +module.exports = _interopRequireDefault; + +/***/ }), +/* 185 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(184); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _create = _interopRequireDefault(__webpack_require__(186)); + +var _slicedToArray2 = _interopRequireDefault(__webpack_require__(223)); + +var _getIterator2 = _interopRequireDefault(__webpack_require__(230)); + +var _parseInt2 = _interopRequireDefault(__webpack_require__(250)); + +/*! + * XRegExp 4.2.4 + * + * Steven Levithan (c) 2007-present MIT License + */ + +/** + * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and + * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to + * make your client-side grepping simpler and more powerful, while freeing you from related + * cross-browser inconsistencies. + */ +// ==--------------------------== +// Private stuff +// ==--------------------------== +// Property name used for extended regex instance data +var REGEX_DATA = 'xregexp'; // Optional features that can be installed and uninstalled + +var features = { + astral: false, + namespacing: false +}; // Native methods to use and restore ('native' is an ES3 reserved keyword) + +var nativ = { + exec: RegExp.prototype.exec, + test: RegExp.prototype.test, + match: String.prototype.match, + replace: String.prototype.replace, + split: String.prototype.split +}; // Storage for fixed/extended native methods + +var fixed = {}; // Storage for regexes cached by `XRegExp.cache` + +var regexCache = {}; // Storage for pattern details cached by the `XRegExp` constructor + +var patternCache = {}; // Storage for regex syntax tokens added internally or by `XRegExp.addToken` + +var tokens = []; // Token scopes + +var defaultScope = 'default'; +var classScope = 'class'; // Regexes that match native regex syntax, including octals + +var nativeTokens = { + // Any native multicharacter token in default scope, or any single character + 'default': /\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|\(\?(?:[:=!]|<[=!])|[?*+]\?|{\d+(?:,\d*)?}\??|[\s\S]/, + // Any native multicharacter token in character class scope, or any single character + 'class': /\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u(?:[\dA-Fa-f]{4}|{[\dA-Fa-f]+})|c[A-Za-z]|[\s\S])|[\s\S]/ +}; // Any backreference or dollar-prefixed character in replacement strings + +var replacementToken = /\$(?:{([\w$]+)}|<([\w$]+)>|(\d\d?|[\s\S]))/g; // Check for correct `exec` handling of nonparticipating capturing groups + +var correctExecNpcg = nativ.exec.call(/()??/, '')[1] === undefined; // Check for ES6 `flags` prop support + +var hasFlagsProp = /x/.flags !== undefined; // Shortcut to `Object.prototype.toString` + +var _ref = {}, + toString = _ref.toString; + +function hasNativeFlag(flag) { + // Can't check based on the presence of properties/getters since browsers might support such + // properties even when they don't support the corresponding flag in regex construction (tested + // in Chrome 48, where `'unicode' in /x/` is true but trying to construct a regex with flag `u` + // throws an error) + var isSupported = true; + + try { + // Can't use regex literals for testing even in a `try` because regex literals with + // unsupported flags cause a compilation error in IE + new RegExp('', flag); + } catch (exception) { + isSupported = false; + } + + return isSupported; +} // Check for ES6 `u` flag support + + +var hasNativeU = hasNativeFlag('u'); // Check for ES6 `y` flag support + +var hasNativeY = hasNativeFlag('y'); // Tracker for known flags, including addon flags + +var registeredFlags = { + g: true, + i: true, + m: true, + u: hasNativeU, + y: hasNativeY +}; +/** + * Attaches extended data and `XRegExp.prototype` properties to a regex object. + * + * @private + * @param {RegExp} regex Regex to augment. + * @param {Array} captureNames Array with capture names, or `null`. + * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A. + * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A. + * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal + * operations, and never exposed to users. For internal-only regexes, we can improve perf by + * skipping some operations like attaching `XRegExp.prototype` properties. + * @returns {RegExp} Augmented regex. + */ + +function augment(regex, captureNames, xSource, xFlags, isInternalOnly) { + regex[REGEX_DATA] = { + captureNames: captureNames + }; + + if (isInternalOnly) { + return regex; + } // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value + + + if (regex.__proto__) { + regex.__proto__ = XRegExp.prototype; + } else { + for (var p in XRegExp.prototype) { + // An `XRegExp.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this + // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype` + // extensions exist on `regex.prototype` anyway + regex[p] = XRegExp.prototype[p]; + } + } + + regex[REGEX_DATA].source = xSource; // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order + + regex[REGEX_DATA].flags = xFlags ? xFlags.split('').sort().join('') : xFlags; + return regex; +} +/** + * Removes any duplicate characters from the provided string. + * + * @private + * @param {String} str String to remove duplicate characters from. + * @returns {String} String with any duplicate characters removed. + */ + + +function clipDuplicates(str) { + return nativ.replace.call(str, /([\s\S])(?=[\s\S]*\1)/g, ''); +} +/** + * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype` + * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing + * flags g and y while copying the regex. + * + * @private + * @param {RegExp} regex Regex to copy. + * @param {Object} [options] Options object with optional properties: + * - `addG` {Boolean} Add flag g while copying the regex. + * - `addY` {Boolean} Add flag y while copying the regex. + * - `removeG` {Boolean} Remove flag g while copying the regex. + * - `removeY` {Boolean} Remove flag y while copying the regex. + * - `isInternalOnly` {Boolean} Whether the copied regex will be used only for internal + * operations, and never exposed to users. For internal-only regexes, we can improve perf by + * skipping some operations like attaching `XRegExp.prototype` properties. + * - `source` {String} Overrides `.source`, for special cases. + * @returns {RegExp} Copy of the provided regex, possibly with modified flags. + */ + + +function copyRegex(regex, options) { + if (!XRegExp.isRegExp(regex)) { + throw new TypeError('Type RegExp expected'); + } + + var xData = regex[REGEX_DATA] || {}; + var flags = getNativeFlags(regex); + var flagsToAdd = ''; + var flagsToRemove = ''; + var xregexpSource = null; + var xregexpFlags = null; + options = options || {}; + + if (options.removeG) { + flagsToRemove += 'g'; + } + + if (options.removeY) { + flagsToRemove += 'y'; + } + + if (flagsToRemove) { + flags = nativ.replace.call(flags, new RegExp("[".concat(flagsToRemove, "]+"), 'g'), ''); + } + + if (options.addG) { + flagsToAdd += 'g'; + } + + if (options.addY) { + flagsToAdd += 'y'; + } + + if (flagsToAdd) { + flags = clipDuplicates(flags + flagsToAdd); + } + + if (!options.isInternalOnly) { + if (xData.source !== undefined) { + xregexpSource = xData.source; + } // null or undefined; don't want to add to `flags` if the previous value was null, since + // that indicates we're not tracking original precompilation flags + + + if (xData.flags != null) { + // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are never + // removed for non-internal regexes, so don't need to handle it + xregexpFlags = flagsToAdd ? clipDuplicates(xData.flags + flagsToAdd) : xData.flags; + } + } // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to avoid + // searching for special tokens. That would be wrong for regexes constructed by `RegExp`, and + // unnecessary for regexes constructed by `XRegExp` because the regex has already undergone the + // translation to native regex syntax + + + regex = augment(new RegExp(options.source || regex.source, flags), hasNamedCapture(regex) ? xData.captureNames.slice(0) : null, xregexpSource, xregexpFlags, options.isInternalOnly); + return regex; +} +/** + * Converts hexadecimal to decimal. + * + * @private + * @param {String} hex + * @returns {Number} + */ + + +function dec(hex) { + return (0, _parseInt2.default)(hex, 16); +} +/** + * Returns a pattern that can be used in a native RegExp in place of an ignorable token such as an + * inline comment or whitespace with flag x. This is used directly as a token handler function + * passed to `XRegExp.addToken`. + * + * @private + * @param {String} match Match arg of `XRegExp.addToken` handler + * @param {String} scope Scope arg of `XRegExp.addToken` handler + * @param {String} flags Flags arg of `XRegExp.addToken` handler + * @returns {String} Either '' or '(?:)', depending on which is needed in the context of the match. + */ + + +function getContextualTokenSeparator(match, scope, flags) { + if ( // No need to separate tokens if at the beginning or end of a group + match.input[match.index - 1] === '(' || match.input[match.index + match[0].length] === ')' || // No need to separate tokens if before or after a `|` + match.input[match.index - 1] === '|' || match.input[match.index + match[0].length] === '|' || // No need to separate tokens if at the beginning or end of the pattern + match.index < 1 || match.index + match[0].length >= match.input.length || // No need to separate tokens if at the beginning of a noncapturing group or lookahead. + // The way this is written relies on: + // - The search regex matching only 3-char strings. + // - Although `substr` gives chars from the end of the string if given a negative index, + // the resulting substring will be too short to match. Ex: `'abcd'.substr(-1, 3) === 'd'` + nativ.test.call(/^\(\?[:=!]/, match.input.substr(match.index - 3, 3)) || // Avoid separating tokens when the following token is a quantifier + isQuantifierNext(match.input, match.index + match[0].length, flags)) { + return ''; + } // Keep tokens separated. This avoids e.g. inadvertedly changing `\1 1` or `\1(?#)1` to `\11`. + // This also ensures all tokens remain as discrete atoms, e.g. it avoids converting the syntax + // error `(? :` into `(?:`. + + + return '(?:)'; +} +/** + * Returns native `RegExp` flags used by a regex object. + * + * @private + * @param {RegExp} regex Regex to check. + * @returns {String} Native flags in use. + */ + + +function getNativeFlags(regex) { + return hasFlagsProp ? regex.flags : // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation + // with an empty string) allows this to continue working predictably when + // `XRegExp.proptotype.toString` is overridden + nativ.exec.call(/\/([a-z]*)$/i, RegExp.prototype.toString.call(regex))[1]; +} +/** + * Determines whether a regex has extended instance data used to track capture names. + * + * @private + * @param {RegExp} regex Regex to check. + * @returns {Boolean} Whether the regex uses named capture. + */ + + +function hasNamedCapture(regex) { + return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames); +} +/** + * Converts decimal to hexadecimal. + * + * @private + * @param {Number|String} dec + * @returns {String} + */ + + +function hex(dec) { + return (0, _parseInt2.default)(dec, 10).toString(16); +} +/** + * Checks whether the next nonignorable token after the specified position is a quantifier. + * + * @private + * @param {String} pattern Pattern to search within. + * @param {Number} pos Index in `pattern` to search at. + * @param {String} flags Flags used by the pattern. + * @returns {Boolean} Whether the next nonignorable token is a quantifier. + */ + + +function isQuantifierNext(pattern, pos, flags) { + var inlineCommentPattern = '\\(\\?#[^)]*\\)'; + var lineCommentPattern = '#[^#\\n]*'; + var quantifierPattern = '[?*+]|{\\d+(?:,\\d*)?}'; + return nativ.test.call(flags.indexOf('x') !== -1 ? // Ignore any leading whitespace, line comments, and inline comments + /^(?:\s|#[^#\n]*|\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/ : // Ignore any leading inline comments + /^(?:\(\?#[^)]*\))*(?:[?*+]|{\d+(?:,\d*)?})/, pattern.slice(pos)); +} +/** + * Determines whether a value is of the specified type, by resolving its internal [[Class]]. + * + * @private + * @param {*} value Object to check. + * @param {String} type Type to check for, in TitleCase. + * @returns {Boolean} Whether the object matches the type. + */ + + +function isType(value, type) { + return toString.call(value) === "[object ".concat(type, "]"); +} +/** + * Adds leading zeros if shorter than four characters. Used for fixed-length hexadecimal values. + * + * @private + * @param {String} str + * @returns {String} + */ + + +function pad4(str) { + while (str.length < 4) { + str = "0".concat(str); + } + + return str; +} +/** + * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads + * the flag preparation logic from the `XRegExp` constructor. + * + * @private + * @param {String} pattern Regex pattern, possibly with a leading mode modifier. + * @param {String} flags Any combination of flags. + * @returns {Object} Object with properties `pattern` and `flags`. + */ + + +function prepareFlags(pattern, flags) { + // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags + if (clipDuplicates(flags) !== flags) { + throw new SyntaxError("Invalid duplicate regex flag ".concat(flags)); + } // Strip and apply a leading mode modifier with any combination of flags except g or y + + + pattern = nativ.replace.call(pattern, /^\(\?([\w$]+)\)/, function ($0, $1) { + if (nativ.test.call(/[gy]/, $1)) { + throw new SyntaxError("Cannot use flag g or y in mode modifier ".concat($0)); + } // Allow duplicate flags within the mode modifier + + + flags = clipDuplicates(flags + $1); + return ''; + }); // Throw on unknown native or nonnative flags + + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator2.default)(flags), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var flag = _step.value; + + if (!registeredFlags[flag]) { + throw new SyntaxError("Unknown regex flag ".concat(flag)); + } + } + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + return { + pattern: pattern, + flags: flags + }; +} +/** + * Prepares an options object from the given value. + * + * @private + * @param {String|Object} value Value to convert to an options object. + * @returns {Object} Options object. + */ + + +function prepareOptions(value) { + var options = {}; + + if (isType(value, 'String')) { + XRegExp.forEach(value, /[^\s,]+/, function (match) { + options[match] = true; + }); + return options; + } + + return value; +} +/** + * Registers a flag so it doesn't throw an 'unknown flag' error. + * + * @private + * @param {String} flag Single-character flag to register. + */ + + +function registerFlag(flag) { + if (!/^[\w$]$/.test(flag)) { + throw new Error('Flag must be a single character A-Za-z0-9_$'); + } + + registeredFlags[flag] = true; +} +/** + * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified + * position, until a match is found. + * + * @private + * @param {String} pattern Original pattern from which an XRegExp object is being built. + * @param {String} flags Flags being used to construct the regex. + * @param {Number} pos Position to search for tokens within `pattern`. + * @param {Number} scope Regex scope to apply: 'default' or 'class'. + * @param {Object} context Context object to use for token handler functions. + * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`. + */ + + +function runTokens(pattern, flags, pos, scope, context) { + var i = tokens.length; + var leadChar = pattern[pos]; + var result = null; + var match; + var t; // Run in reverse insertion order + + while (i--) { + t = tokens[i]; + + if (t.leadChar && t.leadChar !== leadChar || t.scope !== scope && t.scope !== 'all' || t.flag && !(flags.indexOf(t.flag) !== -1)) { + continue; + } + + match = XRegExp.exec(pattern, t.regex, pos, 'sticky'); + + if (match) { + result = { + matchLength: match[0].length, + output: t.handler.call(context, match, scope, flags), + reparse: t.reparse + }; // Finished with token tests + + break; + } + } + + return result; +} +/** + * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to + * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if + * the Unicode Base addon is not available, since flag A is registered by that addon. + * + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ + + +function setAstral(on) { + features.astral = on; +} +/** + * Adds named capture groups to the `groups` property of match arrays. See here for details: + * https://github.com/tc39/proposal-regexp-named-groups + * + * @private + * @param {Boolean} on `true` to enable; `false` to disable. + */ + + +function setNamespacing(on) { + features.namespacing = on; +} +/** + * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow + * the ES5 abstract operation `ToObject`. + * + * @private + * @param {*} value Object to check and return. + * @returns {*} The provided object. + */ + + +function toObject(value) { + // null or undefined + if (value == null) { + throw new TypeError('Cannot convert null or undefined to object'); + } + + return value; +} // ==--------------------------== +// Constructor +// ==--------------------------== + +/** + * Creates an extended regular expression object for matching text with a pattern. Differs from a + * native regular expression in that additional syntax and flags are supported. The returned object + * is in fact a native `RegExp` and works with all native methods. + * + * @class XRegExp + * @constructor + * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy. + * @param {String} [flags] Any combination of flags. + * Native flags: + * - `g` - global + * - `i` - ignore case + * - `m` - multiline anchors + * - `u` - unicode (ES6) + * - `y` - sticky (Firefox 3+, ES6) + * Additional XRegExp flags: + * - `n` - explicit capture + * - `s` - dot matches all (aka singleline) + * - `x` - free-spacing and line comments (aka extended) + * - `A` - astral (requires the Unicode Base addon) + * Flags cannot be provided when constructing one `RegExp` from another. + * @returns {RegExp} Extended regular expression object. + * @example + * + * // With named capture and flag x + * XRegExp(`(? [0-9]{4} ) -? # year + * (? [0-9]{2} ) -? # month + * (? [0-9]{2} ) # day`, 'x'); + * + * // Providing a regex object copies it. Native regexes are recompiled using native (not XRegExp) + * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and + * // have fresh `lastIndex` properties (set to zero). + * XRegExp(/regex/); + */ + + +function XRegExp(pattern, flags) { + if (XRegExp.isRegExp(pattern)) { + if (flags !== undefined) { + throw new TypeError('Cannot supply flags when copying a RegExp'); + } + + return copyRegex(pattern); + } // Copy the argument behavior of `RegExp` + + + pattern = pattern === undefined ? '' : String(pattern); + flags = flags === undefined ? '' : String(flags); + + if (XRegExp.isInstalled('astral') && !(flags.indexOf('A') !== -1)) { + // This causes an error to be thrown if the Unicode Base addon is not available + flags += 'A'; + } + + if (!patternCache[pattern]) { + patternCache[pattern] = {}; + } + + if (!patternCache[pattern][flags]) { + var context = { + hasNamedCapture: false, + captureNames: [] + }; + var scope = defaultScope; + var output = ''; + var pos = 0; + var result; // Check for flag-related errors, and strip/apply flags in a leading mode modifier + + var applied = prepareFlags(pattern, flags); + var appliedPattern = applied.pattern; + var appliedFlags = applied.flags; // Use XRegExp's tokens to translate the pattern to a native regex pattern. + // `appliedPattern.length` may change on each iteration if tokens use `reparse` + + while (pos < appliedPattern.length) { + do { + // Check for custom tokens at the current position + result = runTokens(appliedPattern, appliedFlags, pos, scope, context); // If the matched token used the `reparse` option, splice its output into the + // pattern before running tokens again at the same position + + if (result && result.reparse) { + appliedPattern = appliedPattern.slice(0, pos) + result.output + appliedPattern.slice(pos + result.matchLength); + } + } while (result && result.reparse); + + if (result) { + output += result.output; + pos += result.matchLength || 1; + } else { + // Get the native token at the current position + var _XRegExp$exec = XRegExp.exec(appliedPattern, nativeTokens[scope], pos, 'sticky'), + _XRegExp$exec2 = (0, _slicedToArray2.default)(_XRegExp$exec, 1), + token = _XRegExp$exec2[0]; + + output += token; + pos += token.length; + + if (token === '[' && scope === defaultScope) { + scope = classScope; + } else if (token === ']' && scope === classScope) { + scope = defaultScope; + } + } + } + + patternCache[pattern][flags] = { + // Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty + // groups are sometimes inserted during regex transpilation in order to keep tokens + // separated. However, more than one empty group in a row is never needed. + pattern: nativ.replace.call(output, /(?:\(\?:\))+/g, '(?:)'), + // Strip all but native flags + flags: nativ.replace.call(appliedFlags, /[^gimuy]+/g, ''), + // `context.captureNames` has an item for each capturing group, even if unnamed + captures: context.hasNamedCapture ? context.captureNames : null + }; + } + + var generated = patternCache[pattern][flags]; + return augment(new RegExp(generated.pattern, generated.flags), generated.captures, pattern, flags); +} // Add `RegExp.prototype` to the prototype chain + + +XRegExp.prototype = /(?:)/; // ==--------------------------== +// Public properties +// ==--------------------------== + +/** + * The XRegExp version number as a string containing three dot-separated parts. For example, + * '2.0.0-beta-3'. + * + * @static + * @memberOf XRegExp + * @type String + */ + +XRegExp.version = '4.2.4'; // ==--------------------------== +// Public methods +// ==--------------------------== +// Intentionally undocumented; used in tests and addons + +XRegExp._clipDuplicates = clipDuplicates; +XRegExp._hasNativeFlag = hasNativeFlag; +XRegExp._dec = dec; +XRegExp._hex = hex; +XRegExp._pad4 = pad4; +/** + * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to + * create XRegExp addons. If more than one token can match the same string, the last added wins. + * + * @memberOf XRegExp + * @param {RegExp} regex Regex object that matches the new token. + * @param {Function} handler Function that returns a new pattern string (using native regex syntax) + * to replace the matched token within all future XRegExp regexes. Has access to persistent + * properties of the regex being built, through `this`. Invoked with three arguments: + * - The match array, with named backreference properties. + * - The regex scope where the match was found: 'default' or 'class'. + * - The flags used by the regex, including any flags in a leading mode modifier. + * The handler function becomes part of the XRegExp construction process, so be careful not to + * construct XRegExps within the function or you will trigger infinite recursion. + * @param {Object} [options] Options object with optional properties: + * - `scope` {String} Scope where the token applies: 'default', 'class', or 'all'. + * - `flag` {String} Single-character flag that triggers the token. This also registers the + * flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used. + * - `optionalFlags` {String} Any custom flags checked for within the token `handler` that are + * not required to trigger the token. This registers the flags, to prevent XRegExp from + * throwing an 'unknown flag' error when any of the flags are used. + * - `reparse` {Boolean} Whether the `handler` function's output should not be treated as + * final, and instead be reparseable by other tokens (including the current token). Allows + * token chaining or deferring. + * - `leadChar` {String} Single character that occurs at the beginning of any successful match + * of the token (not always applicable). This doesn't change the behavior of the token unless + * you provide an erroneous value. However, providing it can increase the token's performance + * since the token can be skipped at any positions where this character doesn't appear. + * @example + * + * // Basic usage: Add \a for the ALERT control code + * XRegExp.addToken( + * /\\a/, + * () => '\\x07', + * {scope: 'all'} + * ); + * XRegExp('\\a[\\a-\\n]+').test('\x07\n\x07'); // -> true + * + * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers. + * // Since `scope` is not specified, it uses 'default' (i.e., transformations apply outside of + * // character classes only) + * XRegExp.addToken( + * /([?*+]|{\d+(?:,\d*)?})(\??)/, + * (match) => `${match[1]}${match[2] ? '' : '?'}`, + * {flag: 'U'} + * ); + * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a' + * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa' + */ + +XRegExp.addToken = function (regex, handler, options) { + options = options || {}; + var _options = options, + optionalFlags = _options.optionalFlags; + + if (options.flag) { + registerFlag(options.flag); + } + + if (optionalFlags) { + optionalFlags = nativ.split.call(optionalFlags, ''); + var _iteratorNormalCompletion2 = true; + var _didIteratorError2 = false; + var _iteratorError2 = undefined; + + try { + for (var _iterator2 = (0, _getIterator2.default)(optionalFlags), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { + var flag = _step2.value; + registerFlag(flag); + } + } catch (err) { + _didIteratorError2 = true; + _iteratorError2 = err; + } finally { + try { + if (!_iteratorNormalCompletion2 && _iterator2.return != null) { + _iterator2.return(); + } + } finally { + if (_didIteratorError2) { + throw _iteratorError2; + } + } + } + } // Add to the private list of syntax tokens + + + tokens.push({ + regex: copyRegex(regex, { + addG: true, + addY: hasNativeY, + isInternalOnly: true + }), + handler: handler, + scope: options.scope || defaultScope, + flag: options.flag, + reparse: options.reparse, + leadChar: options.leadChar + }); // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and flags + // might now produce different results + + XRegExp.cache.flush('patterns'); +}; +/** + * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with + * the same pattern and flag combination, the cached copy of the regex is returned. + * + * @memberOf XRegExp + * @param {String} pattern Regex pattern string. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Cached XRegExp object. + * @example + * + * while (match = XRegExp.cache('.', 'gs').exec(str)) { + * // The regex is compiled once only + * } + */ + + +XRegExp.cache = function (pattern, flags) { + if (!regexCache[pattern]) { + regexCache[pattern] = {}; + } + + return regexCache[pattern][flags] || (regexCache[pattern][flags] = XRegExp(pattern, flags)); +}; // Intentionally undocumented; used in tests + + +XRegExp.cache.flush = function (cacheName) { + if (cacheName === 'patterns') { + // Flush the pattern cache used by the `XRegExp` constructor + patternCache = {}; + } else { + // Flush the regex cache populated by `XRegExp.cache` + regexCache = {}; + } +}; +/** + * Escapes any regular expression metacharacters, for use when matching literal strings. The result + * can safely be used at any point within a regex that uses any flags. + * + * @memberOf XRegExp + * @param {String} str String to escape. + * @returns {String} String with regex metacharacters escaped. + * @example + * + * XRegExp.escape('Escaped? <.>'); + * // -> 'Escaped\?\ <\.>' + */ + + +XRegExp.escape = function (str) { + return nativ.replace.call(toObject(str), /[-\[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); +}; +/** + * Executes a regex search in a specified string. Returns a match array or `null`. If the provided + * regex uses named capture, named backreference properties are included on the match array. + * Optional `pos` and `sticky` arguments specify the search start position, and whether the match + * must start at the specified position only. The `lastIndex` property of the provided regex is not + * used, but is updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.exec` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {Array} Match array with named backreference properties, or `null`. + * @example + * + * // Basic use, with named backreference + * let match = XRegExp.exec('U+2620', XRegExp('U\\+(?[0-9A-F]{4})')); + * match.hex; // -> '2620' + * + * // With pos and sticky, in a loop + * let pos = 2, result = [], match; + * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\d)>/, pos, 'sticky')) { + * result.push(match[1]); + * pos = match.index + match[0].length; + * } + * // result -> ['2', '3', '4'] + */ + + +XRegExp.exec = function (str, regex, pos, sticky) { + var cacheKey = 'g'; + var addY = false; + var fakeY = false; + var match; + addY = hasNativeY && !!(sticky || regex.sticky && sticky !== false); + + if (addY) { + cacheKey += 'y'; + } else if (sticky) { + // Simulate sticky matching by appending an empty capture to the original regex. The + // resulting regex will succeed no matter what at the current index (set with `lastIndex`), + // and will not search the rest of the subject string. We'll know that the original regex + // has failed if that last capture is `''` rather than `undefined` (i.e., if that last + // capture participated in the match). + fakeY = true; + cacheKey += 'FakeY'; + } + + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; // Shares cached copies with `XRegExp.match`/`replace` + + var r2 = regex[REGEX_DATA][cacheKey] || (regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: true, + addY: addY, + source: fakeY ? "".concat(regex.source, "|()") : undefined, + removeY: sticky === false, + isInternalOnly: true + })); + pos = pos || 0; + r2.lastIndex = pos; // Fixed `exec` required for `lastIndex` fix, named backreferences, etc. + + match = fixed.exec.call(r2, str); // Get rid of the capture added by the pseudo-sticky matcher if needed. An empty string means + // the original regexp failed (see above). + + if (fakeY && match && match.pop() === '') { + match = null; + } + + if (regex.global) { + regex.lastIndex = match ? r2.lastIndex : 0; + } + + return match; +}; +/** + * Executes a provided function once per regex match. Searches always start at the beginning of the + * string and continue until the end, regardless of the state of the regex's `global` property and + * initial `lastIndex`. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Function} callback Function to execute for each match. Invoked with four arguments: + * - The match array, with named backreference properties. + * - The zero-based match index. + * - The string being traversed. + * - The regex object being used to traverse the string. + * @example + * + * // Extracts every other digit from a string + * const evens = []; + * XRegExp.forEach('1a2345', /\d/, (match, i) => { + * if (i % 2) evens.push(+match[0]); + * }); + * // evens -> [2, 4] + */ + + +XRegExp.forEach = function (str, regex, callback) { + var pos = 0; + var i = -1; + var match; + + while (match = XRegExp.exec(str, regex, pos)) { + // Because `regex` is provided to `callback`, the function could use the deprecated/ + // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since `XRegExp.exec` + // doesn't use `lastIndex` to set the search position, this can't lead to an infinite loop, + // at least. Actually, because of the way `XRegExp.exec` caches globalized versions of + // regexes, mutating the regex will not have any effect on the iteration or matched strings, + // which is a nice side effect that brings extra safety. + callback(match, ++i, str, regex); + pos = match.index + (match[0].length || 1); + } +}; +/** + * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with + * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native + * regexes are not recompiled using XRegExp syntax. + * + * @memberOf XRegExp + * @param {RegExp} regex Regex to globalize. + * @returns {RegExp} Copy of the provided regex with flag `g` added. + * @example + * + * const globalCopy = XRegExp.globalize(/regex/); + * globalCopy.global; // -> true + */ + + +XRegExp.globalize = function (regex) { + return copyRegex(regex, { + addG: true + }); +}; +/** + * Installs optional features according to the specified options. Can be undone using + * `XRegExp.uninstall`. + * + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.install({ + * // Enables support for astral code points in Unicode addons (implicitly sets flag A) + * astral: true, + * + * // Adds named capture groups to the `groups` property of matches + * namespacing: true + * }); + * + * // With an options string + * XRegExp.install('astral namespacing'); + */ + + +XRegExp.install = function (options) { + options = prepareOptions(options); + + if (!features.astral && options.astral) { + setAstral(true); + } + + if (!features.namespacing && options.namespacing) { + setNamespacing(true); + } +}; +/** + * Checks whether an individual optional feature is installed. + * + * @memberOf XRegExp + * @param {String} feature Name of the feature to check. One of: + * - `astral` + * - `namespacing` + * @returns {Boolean} Whether the feature is installed. + * @example + * + * XRegExp.isInstalled('astral'); + */ + + +XRegExp.isInstalled = function (feature) { + return !!features[feature]; +}; +/** + * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes + * created in another frame, when `instanceof` and `constructor` checks would fail. + * + * @memberOf XRegExp + * @param {*} value Object to check. + * @returns {Boolean} Whether the object is a `RegExp` object. + * @example + * + * XRegExp.isRegExp('string'); // -> false + * XRegExp.isRegExp(/regex/i); // -> true + * XRegExp.isRegExp(RegExp('^', 'm')); // -> true + * XRegExp.isRegExp(XRegExp('(?s).')); // -> true + */ + + +XRegExp.isRegExp = function (value) { + return toString.call(value) === '[object RegExp]'; +}; // isType(value, 'RegExp'); + +/** + * Returns the first matched string, or in global mode, an array containing all matched strings. + * This is essentially a more convenient re-implementation of `String.prototype.match` that gives + * the result types you actually want (string instead of `exec`-style array in match-first mode, + * and an empty array instead of `null` when no matches are found in match-all mode). It also lets + * you override flag g and ignore `lastIndex`, and fixes browser bugs. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to + * return an array of all matched strings. If not explicitly specified and `regex` uses flag g, + * `scope` is 'all'. + * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all + * mode: Array of all matched strings, or an empty array. + * @example + * + * // Match first + * XRegExp.match('abc', /\w/); // -> 'a' + * XRegExp.match('abc', /\w/g, 'one'); // -> 'a' + * XRegExp.match('abc', /x/g, 'one'); // -> null + * + * // Match all + * XRegExp.match('abc', /\w/g); // -> ['a', 'b', 'c'] + * XRegExp.match('abc', /\w/, 'all'); // -> ['a', 'b', 'c'] + * XRegExp.match('abc', /x/, 'all'); // -> [] + */ + + +XRegExp.match = function (str, regex, scope) { + var global = regex.global && scope !== 'one' || scope === 'all'; + var cacheKey = (global ? 'g' : '') + (regex.sticky ? 'y' : '') || 'noGY'; + regex[REGEX_DATA] = regex[REGEX_DATA] || {}; // Shares cached copies with `XRegExp.exec`/`replace` + + var r2 = regex[REGEX_DATA][cacheKey] || (regex[REGEX_DATA][cacheKey] = copyRegex(regex, { + addG: !!global, + removeG: scope === 'one', + isInternalOnly: true + })); + var result = nativ.match.call(toObject(str), r2); + + if (regex.global) { + regex.lastIndex = scope === 'one' && result ? // Can't use `r2.lastIndex` since `r2` is nonglobal in this case + result.index + result[0].length : 0; + } + + return global ? result || [] : result && result[0]; +}; +/** + * Retrieves the matches from searching a string using a chain of regexes that successively search + * within previous matches. The provided `chain` array can contain regexes and or objects with + * `regex` and `backref` properties. When a backreference is specified, the named or numbered + * backreference is passed forward to the next regex or returned. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {Array} chain Regexes that each search for matches within preceding results. + * @returns {Array} Matches by the last regex in the chain, or an empty array. + * @example + * + * // Basic usage; matches numbers within tags + * XRegExp.matchChain('1 2 3 4 a 56', [ + * XRegExp('(?is).*?'), + * /\d+/ + * ]); + * // -> ['2', '4', '56'] + * + * // Passing forward and returning specific backreferences + * html = 'XRegExp\ + * Google'; + * XRegExp.matchChain(html, [ + * {regex: //i, backref: 1}, + * {regex: XRegExp('(?i)^https?://(?[^/?#]+)'), backref: 'domain'} + * ]); + * // -> ['xregexp.com', 'www.google.com'] + */ + + +XRegExp.matchChain = function (str, chain) { + return function recurseChain(values, level) { + var item = chain[level].regex ? chain[level] : { + regex: chain[level] + }; + var matches = []; + + function addMatch(match) { + if (item.backref) { + var ERR_UNDEFINED_GROUP = "Backreference to undefined group: ".concat(item.backref); + var isNamedBackref = isNaN(item.backref); + + if (isNamedBackref && XRegExp.isInstalled('namespacing')) { + // `groups` has `null` as prototype, so using `in` instead of `hasOwnProperty` + if (!(item.backref in match.groups)) { + throw new ReferenceError(ERR_UNDEFINED_GROUP); + } + } else if (!match.hasOwnProperty(item.backref)) { + throw new ReferenceError(ERR_UNDEFINED_GROUP); + } + + var backrefValue = isNamedBackref && XRegExp.isInstalled('namespacing') ? match.groups[item.backref] : match[item.backref]; + matches.push(backrefValue || ''); + } else { + matches.push(match[0]); + } + } + + var _iteratorNormalCompletion3 = true; + var _didIteratorError3 = false; + var _iteratorError3 = undefined; + + try { + for (var _iterator3 = (0, _getIterator2.default)(values), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { + var value = _step3.value; + XRegExp.forEach(value, item.regex, addMatch); + } + } catch (err) { + _didIteratorError3 = true; + _iteratorError3 = err; + } finally { + try { + if (!_iteratorNormalCompletion3 && _iterator3.return != null) { + _iterator3.return(); + } + } finally { + if (_didIteratorError3) { + throw _iteratorError3; + } + } + } + + return level === chain.length - 1 || !matches.length ? matches : recurseChain(matches, level + 1); + }([str], 0); +}; +/** + * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string + * or regex, and the replacement can be a string or a function to be called for each match. To + * perform a global search and replace, use the optional `scope` argument or include flag g if using + * a regex. Replacement strings can use `${n}` or `$` for named and numbered backreferences. + * Replacement functions can use named backreferences via `arguments[0].name`. Also fixes browser + * bugs compared to the native `String.prototype.replace` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * Replacement strings can include special replacement syntax: + * - $$ - Inserts a literal $ character. + * - $&, $0 - Inserts the matched substring. + * - $` - Inserts the string that precedes the matched substring (left context). + * - $' - Inserts the string that follows the matched substring (right context). + * - $n, $nn - Where n/nn are digits referencing an existent capturing group, inserts + * backreference n/nn. + * - ${n}, $ - Where n is a name or any number of digits that reference an existent capturing + * group, inserts backreference n. + * Replacement functions are invoked with three or more arguments: + * - The matched substring (corresponds to $& above). Named backreferences are accessible as + * properties of this first argument. + * - 0..n arguments, one for each backreference (corresponding to $1, $2, etc. above). + * - The zero-based index of the match within the total search string. + * - The total string being searched. + * @param {String} [scope='one'] Use 'one' to replace the first match only, or 'all'. If not + * explicitly specified and using a regex with flag g, `scope` is 'all'. + * @returns {String} New string with one or all matches replaced. + * @example + * + * // Regex search, using named backreferences in replacement string + * const name = XRegExp('(?\\w+) (?\\w+)'); + * XRegExp.replace('John Smith', name, '$, $'); + * // -> 'Smith, John' + * + * // Regex search, using named backreferences in replacement function + * XRegExp.replace('John Smith', name, (match) => `${match.last}, ${match.first}`); + * // -> 'Smith, John' + * + * // String search, with replace-all + * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all'); + * // -> 'XRegExp builds XRegExps' + */ + + +XRegExp.replace = function (str, search, replacement, scope) { + var isRegex = XRegExp.isRegExp(search); + var global = search.global && scope !== 'one' || scope === 'all'; + var cacheKey = (global ? 'g' : '') + (search.sticky ? 'y' : '') || 'noGY'; + var s2 = search; + + if (isRegex) { + search[REGEX_DATA] = search[REGEX_DATA] || {}; // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s + // `lastIndex` isn't updated *during* replacement iterations + + s2 = search[REGEX_DATA][cacheKey] || (search[REGEX_DATA][cacheKey] = copyRegex(search, { + addG: !!global, + removeG: scope === 'one', + isInternalOnly: true + })); + } else if (global) { + s2 = new RegExp(XRegExp.escape(String(search)), 'g'); + } // Fixed `replace` required for named backreferences, etc. + + + var result = fixed.replace.call(toObject(str), s2, replacement); + + if (isRegex && search.global) { + // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + search.lastIndex = 0; + } + + return result; +}; +/** + * Performs batch processing of string replacements. Used like `XRegExp.replace`, but accepts an + * array of replacement details. Later replacements operate on the output of earlier replacements. + * Replacement details are accepted as an array with a regex or string to search for, the + * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp + * replacement text syntax, which supports named backreference properties via `${name}` or + * `$`. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {Array} replacements Array of replacement detail arrays. + * @returns {String} New string with all replacements. + * @example + * + * str = XRegExp.replaceEach(str, [ + * [XRegExp('(?a)'), 'z${name}'], + * [/b/gi, 'y'], + * [/c/g, 'x', 'one'], // scope 'one' overrides /g + * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g + * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings + * [/f/g, ($0) => $0.toUpperCase()] + * ]); + */ + + +XRegExp.replaceEach = function (str, replacements) { + var _iteratorNormalCompletion4 = true; + var _didIteratorError4 = false; + var _iteratorError4 = undefined; + + try { + for (var _iterator4 = (0, _getIterator2.default)(replacements), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { + var r = _step4.value; + str = XRegExp.replace(str, r[0], r[1], r[2]); + } + } catch (err) { + _didIteratorError4 = true; + _iteratorError4 = err; + } finally { + try { + if (!_iteratorNormalCompletion4 && _iterator4.return != null) { + _iterator4.return(); + } + } finally { + if (_didIteratorError4) { + throw _iteratorError4; + } + } + } + + return str; +}; +/** + * Splits a string into an array of strings using a regex or string separator. Matches of the + * separator are not included in the result array. However, if `separator` is a regex that contains + * capturing groups, backreferences are spliced into the result each time `separator` is matched. + * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably + * cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to split. + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + * @example + * + * // Basic use + * XRegExp.split('a b c', ' '); + * // -> ['a', 'b', 'c'] + * + * // With limit + * XRegExp.split('a b c', ' ', 2); + * // -> ['a', 'b'] + * + * // Backreferences in result array + * XRegExp.split('..word1..', /([a-z]+)(\d+)/i); + * // -> ['..', 'word', '1', '..'] + */ + + +XRegExp.split = function (str, separator, limit) { + return fixed.split.call(toObject(str), separator, limit); +}; +/** + * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and + * `sticky` arguments specify the search start position, and whether the match must start at the + * specified position only. The `lastIndex` property of the provided regex is not used, but is + * updated for compatibility. Also fixes browser bugs compared to the native + * `RegExp.prototype.test` and can be used reliably cross-browser. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {RegExp} regex Regex to search with. + * @param {Number} [pos=0] Zero-based index at which to start the search. + * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position + * only. The string `'sticky'` is accepted as an alternative to `true`. + * @returns {Boolean} Whether the regex matched the provided value. + * @example + * + * // Basic use + * XRegExp.test('abc', /c/); // -> true + * + * // With pos and sticky + * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false + * XRegExp.test('abc', /c/, 2, 'sticky'); // -> true + */ +// Do this the easy way :-) + + +XRegExp.test = function (str, regex, pos, sticky) { + return !!XRegExp.exec(str, regex, pos, sticky); +}; +/** + * Uninstalls optional features according to the specified options. All optional features start out + * uninstalled, so this is used to undo the actions of `XRegExp.install`. + * + * @memberOf XRegExp + * @param {Object|String} options Options object or string. + * @example + * + * // With an options object + * XRegExp.uninstall({ + * // Disables support for astral code points in Unicode addons + * astral: true, + * + * // Don't add named capture groups to the `groups` property of matches + * namespacing: true + * }); + * + * // With an options string + * XRegExp.uninstall('astral namespacing'); + */ + + +XRegExp.uninstall = function (options) { + options = prepareOptions(options); + + if (features.astral && options.astral) { + setAstral(false); + } + + if (features.namespacing && options.namespacing) { + setNamespacing(false); + } +}; +/** + * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as + * regex objects or strings. Metacharacters are escaped in patterns provided as strings. + * Backreferences in provided regex objects are automatically renumbered to work correctly within + * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the + * `flags` argument. + * + * @memberOf XRegExp + * @param {Array} patterns Regexes and strings to combine. + * @param {String} [flags] Any combination of XRegExp flags. + * @param {Object} [options] Options object with optional properties: + * - `conjunction` {String} Type of conjunction to use: 'or' (default) or 'none'. + * @returns {RegExp} Union of the provided regexes and strings. + * @example + * + * XRegExp.union(['a+b*c', /(dogs)\1/, /(cats)\1/], 'i'); + * // -> /a\+b\*c|(dogs)\1|(cats)\2/i + * + * XRegExp.union([/man/, /bear/, /pig/], 'i', {conjunction: 'none'}); + * // -> /manbearpig/i + */ + + +XRegExp.union = function (patterns, flags, options) { + options = options || {}; + var conjunction = options.conjunction || 'or'; + var numCaptures = 0; + var numPriorCaptures; + var captureNames; + + function rewrite(match, paren, backref) { + var name = captureNames[numCaptures - numPriorCaptures]; // Capturing group + + if (paren) { + ++numCaptures; // If the current capture has a name, preserve the name + + if (name) { + return "(?<".concat(name, ">"); + } // Backreference + + } else if (backref) { + // Rewrite the backreference + return "\\".concat(+backref + numPriorCaptures); + } + + return match; + } + + if (!(isType(patterns, 'Array') && patterns.length)) { + throw new TypeError('Must provide a nonempty array of patterns to merge'); + } + + var parts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var output = []; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = (0, _getIterator2.default)(patterns), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var pattern = _step5.value; + + if (XRegExp.isRegExp(pattern)) { + numPriorCaptures = numCaptures; + captureNames = pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames || []; // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns are + // independently valid; helps keep this simple. Named captures are put back + + output.push(nativ.replace.call(XRegExp(pattern.source).source, parts, rewrite)); + } else { + output.push(XRegExp.escape(pattern)); + } + } + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5.return != null) { + _iterator5.return(); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } + } + } + + var separator = conjunction === 'none' ? '' : '|'; + return XRegExp(output.join(separator), flags); +}; // ==--------------------------== +// Fixed/extended native methods +// ==--------------------------== + +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `RegExp.prototype.exec`. Use via `XRegExp.exec`. + * + * @memberOf RegExp + * @param {String} str String to search. + * @returns {Array} Match array with named backreference properties, or `null`. + */ + + +fixed.exec = function (str) { + var origLastIndex = this.lastIndex; + var match = nativ.exec.apply(this, arguments); + + if (match) { + // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating capturing + // groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of older IEs. IE 9 + // in standards mode follows the spec. + if (!correctExecNpcg && match.length > 1 && match.indexOf('') !== -1) { + var r2 = copyRegex(this, { + removeG: true, + isInternalOnly: true + }); // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed + // matching due to characters outside the match + + nativ.replace.call(String(str).slice(match.index), r2, function () { + var len = arguments.length; // Skip index 0 and the last 2 + + for (var i = 1; i < len - 2; ++i) { + if ((i < 0 || arguments.length <= i ? undefined : arguments[i]) === undefined) { + match[i] = undefined; + } + } + }); + } // Attach named capture properties + + + var groupsObject = match; + + if (XRegExp.isInstalled('namespacing')) { + // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec + match.groups = (0, _create.default)(null); + groupsObject = match.groups; + } + + if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) { + // Skip index 0 + for (var i = 1; i < match.length; ++i) { + var name = this[REGEX_DATA].captureNames[i - 1]; + + if (name) { + groupsObject[name] = match[i]; + } + } + } // Fix browsers that increment `lastIndex` after zero-length matches + + + if (this.global && !match[0].length && this.lastIndex > match.index) { + this.lastIndex = match.index; + } + } + + if (!this.global) { + // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + this.lastIndex = origLastIndex; + } + + return match; +}; +/** + * Fixes browser bugs in the native `RegExp.prototype.test`. + * + * @memberOf RegExp + * @param {String} str String to search. + * @returns {Boolean} Whether the regex matched the provided value. + */ + + +fixed.test = function (str) { + // Do this the easy way :-) + return !!fixed.exec.call(this, str); +}; +/** + * Adds named capture support (with backreferences returned as `result.name`), and fixes browser + * bugs in the native `String.prototype.match`. + * + * @memberOf String + * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`. + * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g, + * the result of calling `regex.exec(this)`. + */ + + +fixed.match = function (regex) { + if (!XRegExp.isRegExp(regex)) { + // Use the native `RegExp` rather than `XRegExp` + regex = new RegExp(regex); + } else if (regex.global) { + var result = nativ.match.apply(this, arguments); // Fixes IE bug + + regex.lastIndex = 0; + return result; + } + + return fixed.exec.call(regex, toObject(this)); +}; +/** + * Adds support for `${n}` (or `$`) tokens for named and numbered backreferences in replacement + * text, and provides named backreferences to replacement functions as `arguments[0].name`. Also + * fixes browser bugs in replacement text syntax when performing a replacement using a nonregex + * search value, and the value of a replacement regex's `lastIndex` property during replacement + * iterations and upon completion. Note that this doesn't support SpiderMonkey's proprietary third + * (`flags`) argument. Use via `XRegExp.replace`. + * + * @memberOf String + * @param {RegExp|String} search Search pattern to be replaced. + * @param {String|Function} replacement Replacement string or a function invoked to create it. + * @returns {String} New string with one or all matches replaced. + */ + + +fixed.replace = function (search, replacement) { + var isRegex = XRegExp.isRegExp(search); + var origLastIndex; + var captureNames; + var result; + + if (isRegex) { + if (search[REGEX_DATA]) { + captureNames = search[REGEX_DATA].captureNames; + } // Only needed if `search` is nonglobal + + + origLastIndex = search.lastIndex; + } else { + search += ''; // Type-convert + } // Don't use `typeof`; some older browsers return 'function' for regex objects + + + if (isType(replacement, 'Function')) { + // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement + // functions isn't type-converted to a string + result = nativ.replace.call(String(this), search, function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + if (captureNames) { + var groupsObject; + + if (XRegExp.isInstalled('namespacing')) { + // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec + groupsObject = (0, _create.default)(null); + args.push(groupsObject); + } else { + // Change the `args[0]` string primitive to a `String` object that can store + // properties. This really does need to use `String` as a constructor + args[0] = new String(args[0]); + groupsObject = args[0]; + } // Store named backreferences + + + for (var i = 0; i < captureNames.length; ++i) { + if (captureNames[i]) { + groupsObject[captureNames[i]] = args[i + 1]; + } + } + } // Update `lastIndex` before calling `replacement`. Fixes IE, Chrome, Firefox, Safari + // bug (last tested IE 9, Chrome 17, Firefox 11, Safari 5.1) + + + if (isRegex && search.global) { + search.lastIndex = args[args.length - 2] + args[0].length; + } // ES6 specs the context for replacement functions as `undefined` + + + return replacement.apply(void 0, args); + }); + } else { + // Ensure that the last value of `args` will be a string when given nonstring `this`, + // while still throwing on null or undefined context + result = nativ.replace.call(this == null ? this : String(this), search, function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return nativ.replace.call(String(replacement), replacementToken, replacer); + + function replacer($0, bracketed, angled, dollarToken) { + bracketed = bracketed || angled; // Named or numbered backreference with curly or angled braces + + if (bracketed) { + // XRegExp behavior for `${n}` or `$`: + // 1. Backreference to numbered capture, if `n` is an integer. Use `0` for the + // entire match. Any number of leading zeros may be used. + // 2. Backreference to named capture `n`, if it exists and is not an integer + // overridden by numbered capture. In practice, this does not overlap with + // numbered capture since XRegExp does not allow named capture to use a bare + // integer as the name. + // 3. If the name or number does not refer to an existing capturing group, it's + // an error. + var n = +bracketed; // Type-convert; drop leading zeros + + if (n <= args.length - 3) { + return args[n] || ''; + } // Groups with the same name is an error, else would need `lastIndexOf` + + + n = captureNames ? captureNames.indexOf(bracketed) : -1; + + if (n < 0) { + throw new SyntaxError("Backreference to undefined group ".concat($0)); + } + + return args[n + 1] || ''; + } // Else, special variable or numbered backreference without curly braces + + + if (dollarToken === '$') { + // $$ + return '$'; + } + + if (dollarToken === '&' || +dollarToken === 0) { + // $&, $0 (not followed by 1-9), $00 + return args[0]; + } + + if (dollarToken === '`') { + // $` (left context) + return args[args.length - 1].slice(0, args[args.length - 2]); + } + + if (dollarToken === "'") { + // $' (right context) + return args[args.length - 1].slice(args[args.length - 2] + args[0].length); + } // Else, numbered backreference without braces + + + dollarToken = +dollarToken; // Type-convert; drop leading zero + // XRegExp behavior for `$n` and `$nn`: + // - Backrefs end after 1 or 2 digits. Use `${..}` or `$<..>` for more digits. + // - `$1` is an error if no capturing groups. + // - `$10` is an error if less than 10 capturing groups. Use `${1}0` or `$<1>0` + // instead. + // - `$01` is `$1` if at least one capturing group, else it's an error. + // - `$0` (not followed by 1-9) and `$00` are the entire match. + // Native behavior, for comparison: + // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+. + // - `$1` is a literal `$1` if no capturing groups. + // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups. + // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`. + // - `$0` is a literal `$0`. + + if (!isNaN(dollarToken)) { + if (dollarToken > args.length - 3) { + throw new SyntaxError("Backreference to undefined group ".concat($0)); + } + + return args[dollarToken] || ''; + } // `$` followed by an unsupported char is an error, unlike native JS + + + throw new SyntaxError("Invalid token ".concat($0)); + } + }); + } + + if (isRegex) { + if (search.global) { + // Fixes IE, Safari bug (last tested IE 9, Safari 5.1) + search.lastIndex = 0; + } else { + // Fixes IE, Opera bug (last tested IE 9, Opera 11.6) + search.lastIndex = origLastIndex; + } + } + + return result; +}; +/** + * Fixes browser bugs in the native `String.prototype.split`. Use via `XRegExp.split`. + * + * @memberOf String + * @param {RegExp|String} separator Regex or string to use for separating the string. + * @param {Number} [limit] Maximum number of items to include in the result array. + * @returns {Array} Array of substrings. + */ + + +fixed.split = function (separator, limit) { + if (!XRegExp.isRegExp(separator)) { + // Browsers handle nonregex split correctly, so use the faster native method + return nativ.split.apply(this, arguments); + } + + var str = String(this); + var output = []; + var origLastIndex = separator.lastIndex; + var lastLastIndex = 0; + var lastLength; // Values for `limit`, per the spec: + // If undefined: pow(2,32) - 1 + // If 0, Infinity, or NaN: 0 + // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32); + // If negative number: pow(2,32) - floor(abs(limit)) + // If other: Type-convert, then use the above rules + // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63, unless + // Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+ + + limit = (limit === undefined ? -1 : limit) >>> 0; + XRegExp.forEach(str, separator, function (match) { + // This condition is not the same as `if (match[0].length)` + if (match.index + match[0].length > lastLastIndex) { + output.push(str.slice(lastLastIndex, match.index)); + + if (match.length > 1 && match.index < str.length) { + Array.prototype.push.apply(output, match.slice(1)); + } + + lastLength = match[0].length; + lastLastIndex = match.index + lastLength; + } + }); + + if (lastLastIndex === str.length) { + if (!nativ.test.call(separator, '') || lastLength) { + output.push(''); + } + } else { + output.push(str.slice(lastLastIndex)); + } + + separator.lastIndex = origLastIndex; + return output.length > limit ? output.slice(0, limit) : output; +}; // ==--------------------------== +// Built-in syntax/flag tokens +// ==--------------------------== + +/* + * Letter escapes that natively match literal characters: `\a`, `\A`, etc. These should be + * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser + * consistency and to reserve their syntax, but lets them be superseded by addons. + */ + + +XRegExp.addToken(/\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\dA-Fa-f]{4}|{[\dA-Fa-f]+})|x(?![\dA-Fa-f]{2}))/, function (match, scope) { + // \B is allowed in default scope only + if (match[1] === 'B' && scope === defaultScope) { + return match[0]; + } + + throw new SyntaxError("Invalid escape ".concat(match[0])); +}, { + scope: 'all', + leadChar: '\\' +}); +/* + * Unicode code point escape with curly braces: `\u{N..}`. `N..` is any one or more digit + * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag + * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to + * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior + * if you follow a `\u{N..}` token that references a code point above U+FFFF with a quantifier, or + * if you use the same in a character class. + */ + +XRegExp.addToken(/\\u{([\dA-Fa-f]+)}/, function (match, scope, flags) { + var code = dec(match[1]); + + if (code > 0x10FFFF) { + throw new SyntaxError("Invalid Unicode code point ".concat(match[0])); + } + + if (code <= 0xFFFF) { + // Converting to \uNNNN avoids needing to escape the literal character and keep it + // separate from preceding tokens + return "\\u".concat(pad4(hex(code))); + } // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling + + + if (hasNativeU && flags.indexOf('u') !== -1) { + return match[0]; + } + + throw new SyntaxError('Cannot use Unicode code point above \\u{FFFF} without flag u'); +}, { + scope: 'all', + leadChar: '\\' +}); +/* + * Empty character class: `[]` or `[^]`. This fixes a critical cross-browser syntax inconsistency. + * Unless this is standardized (per the ES spec), regex syntax can't be accurately parsed because + * character class endings can't be determined. + */ + +XRegExp.addToken(/\[(\^?)\]/, // For cross-browser compatibility with ES3, convert [] to \b\B and [^] to [\s\S]. +// (?!) should work like \b\B, but is unreliable in some versions of Firefox + +/* eslint-disable no-confusing-arrow */ +function (match) { + return match[1] ? '[\\s\\S]' : '\\b\\B'; +}, +/* eslint-enable no-confusing-arrow */ +{ + leadChar: '[' +}); +/* + * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in + * free-spacing mode (flag x). + */ + +XRegExp.addToken(/\(\?#[^)]*\)/, getContextualTokenSeparator, { + leadChar: '(' +}); +/* + * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only. + */ + +XRegExp.addToken(/\s+|#[^\n]*\n?/, getContextualTokenSeparator, { + flag: 'x' +}); +/* + * Dot, in dotall mode (aka singleline mode, flag s) only. + */ + +XRegExp.addToken(/\./, function () { + return '[\\s\\S]'; +}, { + flag: 's', + leadChar: '.' +}); +/* + * Named backreference: `\k`. Backreference names can use the characters A-Z, a-z, 0-9, _, + * and $ only. Also allows numbered backreferences as `\k`. + */ + +XRegExp.addToken(/\\k<([\w$]+)>/, function (match) { + // Groups with the same name is an error, else would need `lastIndexOf` + var index = isNaN(match[1]) ? this.captureNames.indexOf(match[1]) + 1 : +match[1]; + var endIndex = match.index + match[0].length; + + if (!index || index > this.captureNames.length) { + throw new SyntaxError("Backreference to undefined group ".concat(match[0])); + } // Keep backreferences separate from subsequent literal numbers. This avoids e.g. + // inadvertedly changing `(?)\k1` to `()\11`. + + + return "\\".concat(index).concat(endIndex === match.input.length || isNaN(match.input[endIndex]) ? '' : '(?:)'); +}, { + leadChar: '\\' +}); +/* + * Numbered backreference or octal, plus any following digits: `\0`, `\11`, etc. Octals except `\0` + * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches + * are returned unaltered. IE < 9 doesn't support backreferences above `\99` in regex syntax. + */ + +XRegExp.addToken(/\\(\d+)/, function (match, scope) { + if (!(scope === defaultScope && /^[1-9]/.test(match[1]) && +match[1] <= this.captureNames.length) && match[1] !== '0') { + throw new SyntaxError("Cannot use octal escape or backreference to undefined group ".concat(match[0])); + } + + return match[0]; +}, { + scope: 'all', + leadChar: '\\' +}); +/* + * Named capturing group; match the opening delimiter only: `(?`. Capture names can use the + * characters A-Z, a-z, 0-9, _, and $ only. Names can't be integers. Supports Python-style + * `(?P` as an alternate syntax to avoid issues in some older versions of Opera which natively + * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to + * Python-style named capture as octals. + */ + +XRegExp.addToken(/\(\?P?<([\w$]+)>/, function (match) { + // Disallow bare integers as names because named backreferences are added to match arrays + // and therefore numeric properties may lead to incorrect lookups + if (!isNaN(match[1])) { + throw new SyntaxError("Cannot use integer as capture name ".concat(match[0])); + } + + if (!XRegExp.isInstalled('namespacing') && (match[1] === 'length' || match[1] === '__proto__')) { + throw new SyntaxError("Cannot use reserved word as capture name ".concat(match[0])); + } + + if (this.captureNames.indexOf(match[1]) !== -1) { + throw new SyntaxError("Cannot use same name for multiple groups ".concat(match[0])); + } + + this.captureNames.push(match[1]); + this.hasNamedCapture = true; + return '('; +}, { + leadChar: '(' +}); +/* + * Capturing group; match the opening parenthesis only. Required for support of named capturing + * groups. Also adds explicit capture mode (flag n). + */ + +XRegExp.addToken(/\((?!\?)/, function (match, scope, flags) { + if (flags.indexOf('n') !== -1) { + return '(?:'; + } + + this.captureNames.push(null); + return '('; +}, { + optionalFlags: 'n', + leadChar: '(' +}); +var _default = XRegExp; +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 186 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(187); + +/***/ }), +/* 187 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(188); +var $Object = __webpack_require__(191).Object; +module.exports = function create(P, D) { + return $Object.create(P, D); +}; + + +/***/ }), +/* 188 */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(189); +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +$export($export.S, 'Object', { create: __webpack_require__(205) }); + + +/***/ }), +/* 189 */ +/***/ (function(module, exports, __webpack_require__) { + +var global = __webpack_require__(190); +var core = __webpack_require__(191); +var ctx = __webpack_require__(192); +var hide = __webpack_require__(194); +var has = __webpack_require__(204); +var PROTOTYPE = 'prototype'; + +var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var IS_WRAP = type & $export.W; + var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); + var expProto = exports[PROTOTYPE]; + var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]; + var key, own, out; + if (IS_GLOBAL) source = name; + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if (own && has(exports, key)) continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function (C) { + var F = function (a, b, c) { + if (this instanceof C) { + switch (arguments.length) { + case 0: return new C(); + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if (IS_PROTO) { + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; + + +/***/ }), +/* 190 */ +/***/ (function(module, exports) { + +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); +if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef + + +/***/ }), +/* 191 */ +/***/ (function(module, exports) { + +var core = module.exports = { version: '2.6.5' }; +if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef + + +/***/ }), +/* 192 */ +/***/ (function(module, exports, __webpack_require__) { + +// optional / simple context binding +var aFunction = __webpack_require__(193); +module.exports = function (fn, that, length) { + aFunction(fn); + if (that === undefined) return fn; + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; +}; + + +/***/ }), +/* 193 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + if (typeof it != 'function') throw TypeError(it + ' is not a function!'); + return it; +}; + + +/***/ }), +/* 194 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(195); +var createDesc = __webpack_require__(203); +module.exports = __webpack_require__(199) ? function (object, key, value) { + return dP.f(object, key, createDesc(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + + +/***/ }), +/* 195 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(196); +var IE8_DOM_DEFINE = __webpack_require__(198); +var toPrimitive = __webpack_require__(202); +var dP = Object.defineProperty; + +exports.f = __webpack_require__(199) ? Object.defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + + +/***/ }), +/* 196 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(197); +module.exports = function (it) { + if (!isObject(it)) throw TypeError(it + ' is not an object!'); + return it; +}; + + +/***/ }), +/* 197 */ +/***/ (function(module, exports) { + +module.exports = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; + + +/***/ }), +/* 198 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = !__webpack_require__(199) && !__webpack_require__(200)(function () { + return Object.defineProperty(__webpack_require__(201)('div'), 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 199 */ +/***/ (function(module, exports, __webpack_require__) { + +// Thank's IE8 for his funny defineProperty +module.exports = !__webpack_require__(200)(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; +}); + + +/***/ }), +/* 200 */ +/***/ (function(module, exports) { + +module.exports = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } +}; + + +/***/ }), +/* 201 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(197); +var document = __webpack_require__(190).document; +// typeof document.createElement is 'object' in old IE +var is = isObject(document) && isObject(document.createElement); +module.exports = function (it) { + return is ? document.createElement(it) : {}; +}; + + +/***/ }), +/* 202 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = __webpack_require__(197); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function (it, S) { + if (!isObject(it)) return it; + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; + if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + + +/***/ }), +/* 203 */ +/***/ (function(module, exports) { + +module.exports = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + + +/***/ }), +/* 204 */ +/***/ (function(module, exports) { + +var hasOwnProperty = {}.hasOwnProperty; +module.exports = function (it, key) { + return hasOwnProperty.call(it, key); +}; + + +/***/ }), +/* 205 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties]) +var anObject = __webpack_require__(196); +var dPs = __webpack_require__(206); +var enumBugKeys = __webpack_require__(221); +var IE_PROTO = __webpack_require__(217)('IE_PROTO'); +var Empty = function () { /* empty */ }; +var PROTOTYPE = 'prototype'; + +// Create object with fake `null` prototype: use iframe Object with cleared prototype +var createDict = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = __webpack_require__(201)('iframe'); + var i = enumBugKeys.length; + var lt = '<'; + var gt = '>'; + var iframeDocument; + iframe.style.display = 'none'; + __webpack_require__(222).appendChild(iframe); + iframe.src = 'javascript:'; // eslint-disable-line no-script-url + // createDict = iframe.contentWindow.Object; + // html.removeChild(iframe); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); + iframeDocument.close(); + createDict = iframeDocument.F; + while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]]; + return createDict(); +}; + +module.exports = Object.create || function create(O, Properties) { + var result; + if (O !== null) { + Empty[PROTOTYPE] = anObject(O); + result = new Empty(); + Empty[PROTOTYPE] = null; + // add "__proto__" for Object.getPrototypeOf polyfill + result[IE_PROTO] = O; + } else result = createDict(); + return Properties === undefined ? result : dPs(result, Properties); +}; + + +/***/ }), +/* 206 */ +/***/ (function(module, exports, __webpack_require__) { + +var dP = __webpack_require__(195); +var anObject = __webpack_require__(196); +var getKeys = __webpack_require__(207); + +module.exports = __webpack_require__(199) ? Object.defineProperties : function defineProperties(O, Properties) { + anObject(O); + var keys = getKeys(Properties); + var length = keys.length; + var i = 0; + var P; + while (length > i) dP.f(O, P = keys[i++], Properties[P]); + return O; +}; + + +/***/ }), +/* 207 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.14 / 15.2.3.14 Object.keys(O) +var $keys = __webpack_require__(208); +var enumBugKeys = __webpack_require__(221); + +module.exports = Object.keys || function keys(O) { + return $keys(O, enumBugKeys); +}; + + +/***/ }), +/* 208 */ +/***/ (function(module, exports, __webpack_require__) { + +var has = __webpack_require__(204); +var toIObject = __webpack_require__(209); +var arrayIndexOf = __webpack_require__(213)(false); +var IE_PROTO = __webpack_require__(217)('IE_PROTO'); + +module.exports = function (object, names) { + var O = toIObject(object); + var i = 0; + var result = []; + var key; + for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key); + // Don't enum bug & hidden keys + while (names.length > i) if (has(O, key = names[i++])) { + ~arrayIndexOf(result, key) || result.push(key); + } + return result; +}; + + +/***/ }), +/* 209 */ +/***/ (function(module, exports, __webpack_require__) { + +// to indexed object, toObject with fallback for non-array-like ES3 strings +var IObject = __webpack_require__(210); +var defined = __webpack_require__(212); +module.exports = function (it) { + return IObject(defined(it)); +}; + + +/***/ }), +/* 210 */ +/***/ (function(module, exports, __webpack_require__) { + +// fallback for non-array-like ES3 and non-enumerable old V8 strings +var cof = __webpack_require__(211); +// eslint-disable-next-line no-prototype-builtins +module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { + return cof(it) == 'String' ? it.split('') : Object(it); +}; + + +/***/ }), +/* 211 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = function (it) { + return toString.call(it).slice(8, -1); +}; + + +/***/ }), +/* 212 */ +/***/ (function(module, exports) { + +// 7.2.1 RequireObjectCoercible(argument) +module.exports = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + + +/***/ }), +/* 213 */ +/***/ (function(module, exports, __webpack_require__) { + +// false -> Array#indexOf +// true -> Array#includes +var toIObject = __webpack_require__(209); +var toLength = __webpack_require__(214); +var toAbsoluteIndex = __webpack_require__(216); +module.exports = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIObject($this); + var length = toLength(O.length); + var index = toAbsoluteIndex(fromIndex, length); + var value; + // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + // eslint-disable-next-line no-self-compare + if (value != value) return true; + // Array#indexOf ignores holes, Array#includes - not + } else for (;length > index; index++) if (IS_INCLUDES || index in O) { + if (O[index] === el) return IS_INCLUDES || index || 0; + } return !IS_INCLUDES && -1; + }; +}; + + +/***/ }), +/* 214 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.15 ToLength +var toInteger = __webpack_require__(215); +var min = Math.min; +module.exports = function (it) { + return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991 +}; + + +/***/ }), +/* 215 */ +/***/ (function(module, exports) { + +// 7.1.4 ToInteger +var ceil = Math.ceil; +var floor = Math.floor; +module.exports = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); +}; + + +/***/ }), +/* 216 */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(215); +var max = Math.max; +var min = Math.min; +module.exports = function (index, length) { + index = toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); +}; + + +/***/ }), +/* 217 */ +/***/ (function(module, exports, __webpack_require__) { + +var shared = __webpack_require__(218)('keys'); +var uid = __webpack_require__(220); +module.exports = function (key) { + return shared[key] || (shared[key] = uid(key)); +}; + + +/***/ }), +/* 218 */ +/***/ (function(module, exports, __webpack_require__) { + +var core = __webpack_require__(191); +var global = __webpack_require__(190); +var SHARED = '__core-js_shared__'; +var store = global[SHARED] || (global[SHARED] = {}); + +(module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: core.version, + mode: __webpack_require__(219) ? 'pure' : 'global', + copyright: '© 2019 Denis Pushkarev (zloirock.ru)' +}); + + +/***/ }), +/* 219 */ +/***/ (function(module, exports) { + +module.exports = true; + + +/***/ }), +/* 220 */ +/***/ (function(module, exports) { + +var id = 0; +var px = Math.random(); +module.exports = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); +}; + + +/***/ }), +/* 221 */ +/***/ (function(module, exports) { + +// IE 8- don't enum bug keys +module.exports = ( + 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf' +).split(','); + + +/***/ }), +/* 222 */ +/***/ (function(module, exports, __webpack_require__) { + +var document = __webpack_require__(190).document; +module.exports = document && document.documentElement; + + +/***/ }), +/* 223 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayWithHoles = __webpack_require__(224); + +var iterableToArrayLimit = __webpack_require__(229); + +var nonIterableRest = __webpack_require__(249); + +function _slicedToArray(arr, i) { + return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest(); +} + +module.exports = _slicedToArray; + +/***/ }), +/* 224 */ +/***/ (function(module, exports, __webpack_require__) { + +var _Array$isArray = __webpack_require__(225); + +function _arrayWithHoles(arr) { + if (_Array$isArray(arr)) return arr; +} + +module.exports = _arrayWithHoles; + +/***/ }), +/* 225 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(226); + +/***/ }), +/* 226 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(227); +module.exports = __webpack_require__(191).Array.isArray; + + +/***/ }), +/* 227 */ +/***/ (function(module, exports, __webpack_require__) { + +// 22.1.2.2 / 15.4.3.2 Array.isArray(arg) +var $export = __webpack_require__(189); + +$export($export.S, 'Array', { isArray: __webpack_require__(228) }); + + +/***/ }), +/* 228 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.2.2 IsArray(argument) +var cof = __webpack_require__(211); +module.exports = Array.isArray || function isArray(arg) { + return cof(arg) == 'Array'; +}; + + +/***/ }), +/* 229 */ +/***/ (function(module, exports, __webpack_require__) { + +var _getIterator = __webpack_require__(230); + +function _iterableToArrayLimit(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; + + try { + for (var _i = _getIterator(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +module.exports = _iterableToArrayLimit; + +/***/ }), +/* 230 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(231); + +/***/ }), +/* 231 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(232); +__webpack_require__(244); +module.exports = __webpack_require__(246); + + +/***/ }), +/* 232 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(233); +var global = __webpack_require__(190); +var hide = __webpack_require__(194); +var Iterators = __webpack_require__(236); +var TO_STRING_TAG = __webpack_require__(241)('toStringTag'); + +var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' + + 'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' + + 'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' + + 'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' + + 'TextTrackList,TouchList').split(','); + +for (var i = 0; i < DOMIterables.length; i++) { + var NAME = DOMIterables[i]; + var Collection = global[NAME]; + var proto = Collection && Collection.prototype; + if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); + Iterators[NAME] = Iterators.Array; +} + + +/***/ }), +/* 233 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var addToUnscopables = __webpack_require__(234); +var step = __webpack_require__(235); +var Iterators = __webpack_require__(236); +var toIObject = __webpack_require__(209); + +// 22.1.3.4 Array.prototype.entries() +// 22.1.3.13 Array.prototype.keys() +// 22.1.3.29 Array.prototype.values() +// 22.1.3.30 Array.prototype[@@iterator]() +module.exports = __webpack_require__(237)(Array, 'Array', function (iterated, kind) { + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind +// 22.1.5.2.1 %ArrayIteratorPrototype%.next() +}, function () { + var O = this._t; + var kind = this._k; + var index = this._i++; + if (!O || index >= O.length) { + this._t = undefined; + return step(1); + } + if (kind == 'keys') return step(0, index); + if (kind == 'values') return step(0, O[index]); + return step(0, [index, O[index]]); +}, 'values'); + +// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) +Iterators.Arguments = Iterators.Array; + +addToUnscopables('keys'); +addToUnscopables('values'); +addToUnscopables('entries'); + + +/***/ }), +/* 234 */ +/***/ (function(module, exports) { + +module.exports = function () { /* empty */ }; + + +/***/ }), +/* 235 */ +/***/ (function(module, exports) { + +module.exports = function (done, value) { + return { value: value, done: !!done }; +}; + + +/***/ }), +/* 236 */ +/***/ (function(module, exports) { + +module.exports = {}; + + +/***/ }), +/* 237 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var LIBRARY = __webpack_require__(219); +var $export = __webpack_require__(189); +var redefine = __webpack_require__(238); +var hide = __webpack_require__(194); +var Iterators = __webpack_require__(236); +var $iterCreate = __webpack_require__(239); +var setToStringTag = __webpack_require__(240); +var getPrototypeOf = __webpack_require__(242); +var ITERATOR = __webpack_require__(241)('iterator'); +var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next` +var FF_ITERATOR = '@@iterator'; +var KEYS = 'keys'; +var VALUES = 'values'; + +var returnThis = function () { return this; }; + +module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { + $iterCreate(Constructor, NAME, next); + var getMethod = function (kind) { + if (!BUGGY && kind in proto) return proto[kind]; + switch (kind) { + case KEYS: return function keys() { return new Constructor(this, kind); }; + case VALUES: return function values() { return new Constructor(this, kind); }; + } return function entries() { return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator'; + var DEF_VALUES = DEFAULT == VALUES; + var VALUES_BUG = false; + var proto = Base.prototype; + var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; + var $default = $native || getMethod(DEFAULT); + var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; + var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; + var methods, key, IteratorPrototype; + // Fix native + if ($anyNative) { + IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); + if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // fix for some old engines + if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); + } + } + // fix Array#{values, @@iterator}.name in V8 / FF + if (DEF_VALUES && $native && $native.name !== VALUES) { + VALUES_BUG = true; + $default = function values() { return $native.call(this); }; + } + // Define iterator + if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if (DEFAULT) { + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: $entries + }; + if (FORCED) for (key in methods) { + if (!(key in proto)) redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; +}; + + +/***/ }), +/* 238 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(194); + + +/***/ }), +/* 239 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var create = __webpack_require__(205); +var descriptor = __webpack_require__(203); +var setToStringTag = __webpack_require__(240); +var IteratorPrototype = {}; + +// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() +__webpack_require__(194)(IteratorPrototype, __webpack_require__(241)('iterator'), function () { return this; }); + +module.exports = function (Constructor, NAME, next) { + Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); + setToStringTag(Constructor, NAME + ' Iterator'); +}; + + +/***/ }), +/* 240 */ +/***/ (function(module, exports, __webpack_require__) { + +var def = __webpack_require__(195).f; +var has = __webpack_require__(204); +var TAG = __webpack_require__(241)('toStringTag'); + +module.exports = function (it, tag, stat) { + if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); +}; + + +/***/ }), +/* 241 */ +/***/ (function(module, exports, __webpack_require__) { + +var store = __webpack_require__(218)('wks'); +var uid = __webpack_require__(220); +var Symbol = __webpack_require__(190).Symbol; +var USE_SYMBOL = typeof Symbol == 'function'; + +var $exports = module.exports = function (name) { + return store[name] || (store[name] = + USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name)); +}; + +$exports.store = store; + + +/***/ }), +/* 242 */ +/***/ (function(module, exports, __webpack_require__) { + +// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O) +var has = __webpack_require__(204); +var toObject = __webpack_require__(243); +var IE_PROTO = __webpack_require__(217)('IE_PROTO'); +var ObjectProto = Object.prototype; + +module.exports = Object.getPrototypeOf || function (O) { + O = toObject(O); + if (has(O, IE_PROTO)) return O[IE_PROTO]; + if (typeof O.constructor == 'function' && O instanceof O.constructor) { + return O.constructor.prototype; + } return O instanceof Object ? ObjectProto : null; +}; + + +/***/ }), +/* 243 */ +/***/ (function(module, exports, __webpack_require__) { + +// 7.1.13 ToObject(argument) +var defined = __webpack_require__(212); +module.exports = function (it) { + return Object(defined(it)); +}; + + +/***/ }), +/* 244 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var $at = __webpack_require__(245)(true); + +// 21.1.3.27 String.prototype[@@iterator]() +__webpack_require__(237)(String, 'String', function (iterated) { + this._t = String(iterated); // target + this._i = 0; // next index +// 21.1.5.2.1 %StringIteratorPrototype%.next() +}, function () { + var O = this._t; + var index = this._i; + var point; + if (index >= O.length) return { value: undefined, done: true }; + point = $at(O, index); + this._i += point.length; + return { value: point, done: false }; +}); + + +/***/ }), +/* 245 */ +/***/ (function(module, exports, __webpack_require__) { + +var toInteger = __webpack_require__(215); +var defined = __webpack_require__(212); +// true -> String#at +// false -> String#codePointAt +module.exports = function (TO_STRING) { + return function (that, pos) { + var s = String(defined(that)); + var i = toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; +}; + + +/***/ }), +/* 246 */ +/***/ (function(module, exports, __webpack_require__) { + +var anObject = __webpack_require__(196); +var get = __webpack_require__(247); +module.exports = __webpack_require__(191).getIterator = function (it) { + var iterFn = get(it); + if (typeof iterFn != 'function') throw TypeError(it + ' is not iterable!'); + return anObject(iterFn.call(it)); +}; + + +/***/ }), +/* 247 */ +/***/ (function(module, exports, __webpack_require__) { + +var classof = __webpack_require__(248); +var ITERATOR = __webpack_require__(241)('iterator'); +var Iterators = __webpack_require__(236); +module.exports = __webpack_require__(191).getIteratorMethod = function (it) { + if (it != undefined) return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; +}; + + +/***/ }), +/* 248 */ +/***/ (function(module, exports, __webpack_require__) { + +// getting tag from 19.1.3.6 Object.prototype.toString() +var cof = __webpack_require__(211); +var TAG = __webpack_require__(241)('toStringTag'); +// ES3 wrong here +var ARG = cof(function () { return arguments; }()) == 'Arguments'; + +// fallback for IE11 Script Access Denied error +var tryGet = function (it, key) { + try { + return it[key]; + } catch (e) { /* empty */ } +}; + +module.exports = function (it) { + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; +}; + + +/***/ }), +/* 249 */ +/***/ (function(module, exports) { + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); +} + +module.exports = _nonIterableRest; + +/***/ }), +/* 250 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = __webpack_require__(251); + +/***/ }), +/* 251 */ +/***/ (function(module, exports, __webpack_require__) { + +__webpack_require__(252); +module.exports = __webpack_require__(191).parseInt; + + +/***/ }), +/* 252 */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(189); +var $parseInt = __webpack_require__(253); +// 18.2.5 parseInt(string, radix) +$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt }); + + +/***/ }), +/* 253 */ +/***/ (function(module, exports, __webpack_require__) { + +var $parseInt = __webpack_require__(190).parseInt; +var $trim = __webpack_require__(254).trim; +var ws = __webpack_require__(255); +var hex = /^[-+]?0[xX]/; + +module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) { + var string = $trim(String(str), 3); + return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10)); +} : $parseInt; + + +/***/ }), +/* 254 */ +/***/ (function(module, exports, __webpack_require__) { + +var $export = __webpack_require__(189); +var defined = __webpack_require__(212); +var fails = __webpack_require__(200); +var spaces = __webpack_require__(255); +var space = '[' + spaces + ']'; +var non = '\u200b\u0085'; +var ltrim = RegExp('^' + space + space + '*'); +var rtrim = RegExp(space + space + '*$'); + +var exporter = function (KEY, exec, ALIAS) { + var exp = {}; + var FORCE = fails(function () { + return !!spaces[KEY]() || non[KEY]() != non; + }); + var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY]; + if (ALIAS) exp[ALIAS] = fn; + $export($export.P + $export.F * FORCE, 'String', exp); +}; + +// 1 -> String#trimLeft +// 2 -> String#trimRight +// 3 -> String#trim +var trim = exporter.trim = function (string, TYPE) { + string = String(defined(string)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; +}; + +module.exports = exporter; + + +/***/ }), +/* 255 */ +/***/ (function(module, exports) { + +module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + +/***/ }), +/* 256 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +/*! + * XRegExp.build 4.2.4 + * + * Steven Levithan (c) 2012-present MIT License + */ +var _default = function _default(XRegExp) { + var REGEX_DATA = 'xregexp'; + var subParts = /(\()(?!\?)|\\([1-9]\d*)|\\[\s\S]|\[(?:[^\\\]]|\\[\s\S])*\]/g; + var parts = XRegExp.union([/\({{([\w$]+)}}\)|{{([\w$]+)}}/, subParts], 'g', { + conjunction: 'or' + }); + /** + * Strips a leading `^` and trailing unescaped `$`, if both are present. + * + * @private + * @param {String} pattern Pattern to process. + * @returns {String} Pattern with edge anchors removed. + */ + + function deanchor(pattern) { + // Allow any number of empty noncapturing groups before/after anchors, because regexes + // built/generated by XRegExp sometimes include them + var leadingAnchor = /^(?:\(\?:\))*\^/; + var trailingAnchor = /\$(?:\(\?:\))*$/; + + if (leadingAnchor.test(pattern) && trailingAnchor.test(pattern) && // Ensure that the trailing `$` isn't escaped + trailingAnchor.test(pattern.replace(/\\[\s\S]/g, ''))) { + return pattern.replace(leadingAnchor, '').replace(trailingAnchor, ''); + } + + return pattern; + } + /** + * Converts the provided value to an XRegExp. Native RegExp flags are not preserved. + * + * @private + * @param {String|RegExp} value Value to convert. + * @param {Boolean} [addFlagX] Whether to apply the `x` flag in cases when `value` is not + * already a regex generated by XRegExp + * @returns {RegExp} XRegExp object with XRegExp syntax applied. + */ + + + function asXRegExp(value, addFlagX) { + var flags = addFlagX ? 'x' : ''; + return XRegExp.isRegExp(value) ? value[REGEX_DATA] && value[REGEX_DATA].captureNames ? // Don't recompile, to preserve capture names + value : // Recompile as XRegExp + XRegExp(value.source, flags) : // Compile string as XRegExp + XRegExp(value, flags); + } + + function interpolate(substitution) { + return substitution instanceof RegExp ? substitution : XRegExp.escape(substitution); + } + + function reduceToSubpatternsObject(subpatterns, interpolated, subpatternIndex) { + subpatterns["subpattern".concat(subpatternIndex)] = interpolated; + return subpatterns; + } + + function embedSubpatternAfter(raw, subpatternIndex, rawLiterals) { + var hasSubpattern = subpatternIndex < rawLiterals.length - 1; + return raw + (hasSubpattern ? "{{subpattern".concat(subpatternIndex, "}}") : ''); + } + /** + * Provides tagged template literals that create regexes with XRegExp syntax and flags. The + * provided pattern is handled as a raw string, so backslashes don't need to be escaped. + * + * Interpolation of strings and regexes shares the features of `XRegExp.build`. Interpolated + * patterns are treated as atomic units when quantified, interpolated strings have their special + * characters escaped, a leading `^` and trailing unescaped `$` are stripped from interpolated + * regexes if both are present, and any backreferences within an interpolated regex are + * rewritten to work within the overall pattern. + * + * @memberOf XRegExp + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {Function} Handler for template literals that construct regexes with XRegExp syntax. + * @example + * + * const h12 = /1[0-2]|0?[1-9]/; + * const h24 = /2[0-3]|[01][0-9]/; + * const hours = XRegExp.tag('x')`${h12} : | ${h24}`; + * const minutes = /^[0-5][0-9]$/; + * // Note that explicitly naming the 'minutes' group is required for named backreferences + * const time = XRegExp.tag('x')`^ ${hours} (?${minutes}) $`; + * time.test('10:59'); // -> true + * XRegExp.exec('10:59', time).minutes; // -> '59' + */ + + + XRegExp.tag = function (flags) { + return function (literals) { + for (var _len = arguments.length, substitutions = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + substitutions[_key - 1] = arguments[_key]; + } + + var subpatterns = substitutions.map(interpolate).reduce(reduceToSubpatternsObject, {}); + var pattern = literals.raw.map(embedSubpatternAfter).join(''); + return XRegExp.build(pattern, subpatterns, flags); + }; + }; + /** + * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in + * the outer pattern and provided subpatterns are automatically renumbered to work correctly. + * Native flags used by provided subpatterns are ignored in favor of the `flags` argument. + * + * @memberOf XRegExp + * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows + * `({{name}})` as shorthand for `(?{{name}})`. Patterns cannot be embedded within + * character classes. + * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A + * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present. + * @param {String} [flags] Any combination of XRegExp flags. + * @returns {RegExp} Regex with interpolated subpatterns. + * @example + * + * const time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', { + * hours: XRegExp.build('{{h12}} : | {{h24}}', { + * h12: /1[0-2]|0?[1-9]/, + * h24: /2[0-3]|[01][0-9]/ + * }, 'x'), + * minutes: /^[0-5][0-9]$/ + * }); + * time.test('10:59'); // -> true + * XRegExp.exec('10:59', time).minutes; // -> '59' + */ + + + XRegExp.build = function (pattern, subs, flags) { + flags = flags || ''; // Used with `asXRegExp` calls for `pattern` and subpatterns in `subs`, to work around how + // some browsers convert `RegExp('\n')` to a regex that contains the literal characters `\` + // and `n`. See more details at . + + var addFlagX = flags.indexOf('x') !== -1; + var inlineFlags = /^\(\?([\w$]+)\)/.exec(pattern); // Add flags within a leading mode modifier to the overall pattern's flags + + if (inlineFlags) { + flags = XRegExp._clipDuplicates(flags + inlineFlags[1]); + } + + var data = {}; + + for (var p in subs) { + if (subs.hasOwnProperty(p)) { + // Passing to XRegExp enables extended syntax and ensures independent validity, + // lest an unescaped `(`, `)`, `[`, or trailing `\` breaks the `(?:)` wrapper. For + // subpatterns provided as native regexes, it dies on octals and adds the property + // used to hold extended regex instance data, for simplicity. + var sub = asXRegExp(subs[p], addFlagX); + data[p] = { + // Deanchoring allows embedding independently useful anchored regexes. If you + // really need to keep your anchors, double them (i.e., `^^...$$`). + pattern: deanchor(sub.source), + names: sub[REGEX_DATA].captureNames || [] + }; + } + } // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid; + // helps keep this simple. Named captures will be put back. + + + var patternAsRegex = asXRegExp(pattern, addFlagX); // 'Caps' is short for 'captures' + + var numCaps = 0; + var numPriorCaps; + var numOuterCaps = 0; + var outerCapsMap = [0]; + var outerCapNames = patternAsRegex[REGEX_DATA].captureNames || []; + var output = patternAsRegex.source.replace(parts, function ($0, $1, $2, $3, $4) { + var subName = $1 || $2; + var capName; + var intro; + var localCapIndex; // Named subpattern + + if (subName) { + if (!data.hasOwnProperty(subName)) { + throw new ReferenceError("Undefined property ".concat($0)); + } // Named subpattern was wrapped in a capturing group + + + if ($1) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; // If it's a named group, preserve the name. Otherwise, use the subpattern name + // as the capture name + + intro = "(?<".concat(capName || subName, ">"); + } else { + intro = '(?:'; + } + + numPriorCaps = numCaps; + var rewrittenSubpattern = data[subName].pattern.replace(subParts, function (match, paren, backref) { + // Capturing group + if (paren) { + capName = data[subName].names[numCaps - numPriorCaps]; + ++numCaps; // If the current capture has a name, preserve the name + + if (capName) { + return "(?<".concat(capName, ">"); + } // Backreference + + } else if (backref) { + localCapIndex = +backref - 1; // Rewrite the backreference + + return data[subName].names[localCapIndex] ? // Need to preserve the backreference name in case using flag `n` + "\\k<".concat(data[subName].names[localCapIndex], ">") : "\\".concat(+backref + numPriorCaps); + } + + return match; + }); + return "".concat(intro).concat(rewrittenSubpattern, ")"); + } // Capturing group + + + if ($3) { + capName = outerCapNames[numOuterCaps]; + outerCapsMap[++numOuterCaps] = ++numCaps; // If the current capture has a name, preserve the name + + if (capName) { + return "(?<".concat(capName, ">"); + } // Backreference + + } else if ($4) { + localCapIndex = +$4 - 1; // Rewrite the backreference + + return outerCapNames[localCapIndex] ? // Need to preserve the backreference name in case using flag `n` + "\\k<".concat(outerCapNames[localCapIndex], ">") : "\\".concat(outerCapsMap[+$4]); + } + + return $0; + }); + return XRegExp(output, flags); + }; +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 257 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +/*! + * XRegExp.matchRecursive 4.2.4 + * + * Steven Levithan (c) 2009-present MIT License + */ +var _default = function _default(XRegExp) { + /** + * Returns a match detail object composed of the provided values. + * + * @private + */ + function row(name, value, start, end) { + return { + name: name, + value: value, + start: start, + end: end + }; + } + /** + * Returns an array of match strings between outermost left and right delimiters, or an array of + * objects with detailed match parts and position data. An error is thrown if delimiters are + * unbalanced within the data. + * + * @memberOf XRegExp + * @param {String} str String to search. + * @param {String} left Left delimiter as an XRegExp pattern. + * @param {String} right Right delimiter as an XRegExp pattern. + * @param {String} [flags] Any native or XRegExp flags, used for the left and right delimiters. + * @param {Object} [options] Lets you specify `valueNames` and `escapeChar` options. + * @returns {Array} Array of matches, or an empty array. + * @example + * + * // Basic usage + * let str = '(t((e))s)t()(ing)'; + * XRegExp.matchRecursive(str, '\\(', '\\)', 'g'); + * // -> ['t((e))s', '', 'ing'] + * + * // Extended information mode with valueNames + * str = 'Here is
an
example'; + * XRegExp.matchRecursive(str, '', '', 'gi', { + * valueNames: ['between', 'left', 'match', 'right'] + * }); + * // -> [ + * // {name: 'between', value: 'Here is ', start: 0, end: 8}, + * // {name: 'left', value: '
', start: 8, end: 13}, + * // {name: 'match', value: '
an
', start: 13, end: 27}, + * // {name: 'right', value: '
', start: 27, end: 33}, + * // {name: 'between', value: ' example', start: 33, end: 41} + * // ] + * + * // Omitting unneeded parts with null valueNames, and using escapeChar + * str = '...{1}.\\{{function(x,y){return {y:x}}}'; + * XRegExp.matchRecursive(str, '{', '}', 'g', { + * valueNames: ['literal', null, 'value', null], + * escapeChar: '\\' + * }); + * // -> [ + * // {name: 'literal', value: '...', start: 0, end: 3}, + * // {name: 'value', value: '1', start: 4, end: 5}, + * // {name: 'literal', value: '.\\{', start: 6, end: 9}, + * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37} + * // ] + * + * // Sticky mode via flag y + * str = '<1><<<2>>><3>4<5>'; + * XRegExp.matchRecursive(str, '<', '>', 'gy'); + * // -> ['1', '<<2>>', '3'] + */ + + + XRegExp.matchRecursive = function (str, left, right, flags, options) { + flags = flags || ''; + options = options || {}; + var global = flags.indexOf('g') !== -1; + var sticky = flags.indexOf('y') !== -1; // Flag `y` is controlled internally + + var basicFlags = flags.replace(/y/g, ''); + var _options = options, + escapeChar = _options.escapeChar; + var vN = options.valueNames; + var output = []; + var openTokens = 0; + var delimStart = 0; + var delimEnd = 0; + var lastOuterEnd = 0; + var outerStart; + var innerStart; + var leftMatch; + var rightMatch; + var esc; + left = XRegExp(left, basicFlags); + right = XRegExp(right, basicFlags); + + if (escapeChar) { + if (escapeChar.length > 1) { + throw new Error('Cannot use more than one escape character'); + } + + escapeChar = XRegExp.escape(escapeChar); // Example of concatenated `esc` regex: + // `escapeChar`: '%' + // `left`: '<' + // `right`: '>' + // Regex is: /(?:%[\S\s]|(?:(?!<|>)[^%])+)+/ + + esc = new RegExp("(?:".concat(escapeChar, "[\\S\\s]|(?:(?!").concat( // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`. + // Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax + // transformation resulting from those flags was already applied to `left` and + // `right` when they were passed through the XRegExp constructor above. + XRegExp.union([left, right], '', { + conjunction: 'or' + }).source, ")[^").concat(escapeChar, "])+)+"), // Flags `gy` not needed here + flags.replace(/[^imu]+/g, '')); + } + + while (true) { + // If using an escape character, advance to the delimiter's next starting position, + // skipping any escaped characters in between + if (escapeChar) { + delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length; + } + + leftMatch = XRegExp.exec(str, left, delimEnd); + rightMatch = XRegExp.exec(str, right, delimEnd); // Keep the leftmost match only + + if (leftMatch && rightMatch) { + if (leftMatch.index <= rightMatch.index) { + rightMatch = null; + } else { + leftMatch = null; + } + } // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens): + // LM | RM | OT | Result + // 1 | 0 | 1 | loop + // 1 | 0 | 0 | loop + // 0 | 1 | 1 | loop + // 0 | 1 | 0 | throw + // 0 | 0 | 1 | throw + // 0 | 0 | 0 | break + // The paths above don't include the sticky mode special case. The loop ends after the + // first completed match if not `global`. + + + if (leftMatch || rightMatch) { + delimStart = (leftMatch || rightMatch).index; + delimEnd = delimStart + (leftMatch || rightMatch)[0].length; + } else if (!openTokens) { + break; + } + + if (sticky && !openTokens && delimStart > lastOuterEnd) { + break; + } + + if (leftMatch) { + if (!openTokens) { + outerStart = delimStart; + innerStart = delimEnd; + } + + ++openTokens; + } else if (rightMatch && openTokens) { + if (! --openTokens) { + if (vN) { + if (vN[0] && outerStart > lastOuterEnd) { + output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart)); + } + + if (vN[1]) { + output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart)); + } + + if (vN[2]) { + output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart)); + } + + if (vN[3]) { + output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd)); + } + } else { + output.push(str.slice(innerStart, delimStart)); + } + + lastOuterEnd = delimEnd; + + if (!global) { + break; + } + } + } else { + throw new Error('Unbalanced delimiter found in string'); + } // If the delimiter matched an empty string, avoid an infinite loop + + + if (delimStart === delimEnd) { + ++delimEnd; + } + } + + if (global && !sticky && vN && vN[0] && str.length > lastOuterEnd) { + output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length)); + } + + return output; + }; +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 258 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(184); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _getIterator2 = _interopRequireDefault(__webpack_require__(230)); + +/*! + * XRegExp Unicode Base 4.2.4 + * + * Steven Levithan (c) 2008-present MIT License + */ +var _default = function _default(XRegExp) { + /** + * Adds base support for Unicode matching: + * - Adds syntax `\p{..}` for matching Unicode tokens. Tokens can be inverted using `\P{..}` or + * `\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the + * braces for token names that are a single letter (e.g. `\pL` or `PL`). + * - Adds flag A (astral), which enables 21-bit Unicode support. + * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data. + * + * Unicode Base relies on externally provided Unicode character data. Official addons are + * available to provide data for Unicode categories, scripts, blocks, and properties. + * + * @requires XRegExp + */ + // ==--------------------------== + // Private stuff + // ==--------------------------== + // Storage for Unicode data + var unicode = {}; // Reuse utils + + var dec = XRegExp._dec; + var hex = XRegExp._hex; + var pad4 = XRegExp._pad4; // Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed + + function normalize(name) { + return name.replace(/[- _]+/g, '').toLowerCase(); + } // Gets the decimal code of a literal code unit, \xHH, \uHHHH, or a backslash-escaped literal + + + function charCode(chr) { + var esc = /^\\[xu](.+)/.exec(chr); + return esc ? dec(esc[1]) : chr.charCodeAt(chr[0] === '\\' ? 1 : 0); + } // Inverts a list of ordered BMP characters and ranges + + + function invertBmp(range) { + var output = ''; + var lastEnd = -1; + XRegExp.forEach(range, /(\\x..|\\u....|\\?[\s\S])(?:-(\\x..|\\u....|\\?[\s\S]))?/, function (m) { + var start = charCode(m[1]); + + if (start > lastEnd + 1) { + output += "\\u".concat(pad4(hex(lastEnd + 1))); + + if (start > lastEnd + 2) { + output += "-\\u".concat(pad4(hex(start - 1))); + } + } + + lastEnd = charCode(m[2] || m[1]); + }); + + if (lastEnd < 0xFFFF) { + output += "\\u".concat(pad4(hex(lastEnd + 1))); + + if (lastEnd < 0xFFFE) { + output += '-\\uFFFF'; + } + } + + return output; + } // Generates an inverted BMP range on first use + + + function cacheInvertedBmp(slug) { + var prop = 'b!'; + return unicode[slug][prop] || (unicode[slug][prop] = invertBmp(unicode[slug].bmp)); + } // Combines and optionally negates BMP and astral data + + + function buildAstral(slug, isNegated) { + var item = unicode[slug]; + var combined = ''; + + if (item.bmp && !item.isBmpLast) { + combined = "[".concat(item.bmp, "]").concat(item.astral ? '|' : ''); + } + + if (item.astral) { + combined += item.astral; + } + + if (item.isBmpLast && item.bmp) { + combined += "".concat(item.astral ? '|' : '', "[").concat(item.bmp, "]"); + } // Astral Unicode tokens always match a code point, never a code unit + + + return isNegated ? "(?:(?!".concat(combined, ")(?:[\uD800-\uDBFF][\uDC00-\uDFFF]|[\0-\uFFFF]))") : "(?:".concat(combined, ")"); + } // Builds a complete astral pattern on first use + + + function cacheAstral(slug, isNegated) { + var prop = isNegated ? 'a!' : 'a='; + return unicode[slug][prop] || (unicode[slug][prop] = buildAstral(slug, isNegated)); + } // ==--------------------------== + // Core functionality + // ==--------------------------== + + /* + * Add astral mode (flag A) and Unicode token syntax: `\p{..}`, `\P{..}`, `\p{^..}`, `\pC`. + */ + + + XRegExp.addToken( // Use `*` instead of `+` to avoid capturing `^` as the token name in `\p{^}` + /\\([pP])(?:{(\^?)([^}]*)}|([A-Za-z]))/, function (match, scope, flags) { + var ERR_DOUBLE_NEG = 'Invalid double negation '; + var ERR_UNKNOWN_NAME = 'Unknown Unicode token '; + var ERR_UNKNOWN_REF = 'Unicode token missing data '; + var ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token '; + var ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes'; // Negated via \P{..} or \p{^..} + + var isNegated = match[1] === 'P' || !!match[2]; // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A + + var isAstralMode = flags.indexOf('A') !== -1; // Token lookup name. Check `[4]` first to avoid passing `undefined` via `\p{}` + + var slug = normalize(match[4] || match[3]); // Token data object + + var item = unicode[slug]; + + if (match[1] === 'P' && match[2]) { + throw new SyntaxError(ERR_DOUBLE_NEG + match[0]); + } + + if (!unicode.hasOwnProperty(slug)) { + throw new SyntaxError(ERR_UNKNOWN_NAME + match[0]); + } // Switch to the negated form of the referenced Unicode token + + + if (item.inverseOf) { + slug = normalize(item.inverseOf); + + if (!unicode.hasOwnProperty(slug)) { + throw new ReferenceError("".concat(ERR_UNKNOWN_REF + match[0], " -> ").concat(item.inverseOf)); + } + + item = unicode[slug]; + isNegated = !isNegated; + } + + if (!(item.bmp || isAstralMode)) { + throw new SyntaxError(ERR_ASTRAL_ONLY + match[0]); + } + + if (isAstralMode) { + if (scope === 'class') { + throw new SyntaxError(ERR_ASTRAL_IN_CLASS); + } + + return cacheAstral(slug, isNegated); + } + + return scope === 'class' ? isNegated ? cacheInvertedBmp(slug) : item.bmp : "".concat((isNegated ? '[^' : '[') + item.bmp, "]"); + }, { + scope: 'all', + optionalFlags: 'A', + leadChar: '\\' + }); + /** + * Adds to the list of Unicode tokens that XRegExp regexes can match via `\p` or `\P`. + * + * @memberOf XRegExp + * @param {Array} data Objects with named character ranges. Each object may have properties + * `name`, `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are + * optional, although one of `bmp` or `astral` is required (unless `inverseOf` is set). If + * `astral` is absent, the `bmp` data is used for BMP and astral modes. If `bmp` is absent, + * the name errors in BMP mode but works in astral mode. If both `bmp` and `astral` are + * provided, the `bmp` data only is used in BMP mode, and the combination of `bmp` and + * `astral` data is used in astral mode. `isBmpLast` is needed when a token matches orphan + * high surrogates *and* uses surrogate pairs to match astral code points. The `bmp` and + * `astral` data should be a combination of literal characters and `\xHH` or `\uHHHH` escape + * sequences, with hyphens to create ranges. Any regex metacharacters in the data should be + * escaped, apart from range-creating hyphens. The `astral` data can additionally use + * character classes and alternation, and should use surrogate pairs to represent astral code + * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is + * defined as the exact inverse of another token. + * @example + * + * // Basic use + * XRegExp.addUnicodeData([{ + * name: 'XDigit', + * alias: 'Hexadecimal', + * bmp: '0-9A-Fa-f' + * }]); + * XRegExp('\\p{XDigit}:\\p{Hexadecimal}+').test('0:3D'); // -> true + */ + + XRegExp.addUnicodeData = function (data) { + var ERR_NO_NAME = 'Unicode token requires name'; + var ERR_NO_DATA = 'Unicode token has no character data '; + var _iteratorNormalCompletion = true; + var _didIteratorError = false; + var _iteratorError = undefined; + + try { + for (var _iterator = (0, _getIterator2.default)(data), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { + var item = _step.value; + + if (!item.name) { + throw new Error(ERR_NO_NAME); + } + + if (!(item.inverseOf || item.bmp || item.astral)) { + throw new Error(ERR_NO_DATA + item.name); + } + + unicode[normalize(item.name)] = item; + + if (item.alias) { + unicode[normalize(item.alias)] = item; + } + } // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and + // flags might now produce different results + + } catch (err) { + _didIteratorError = true; + _iteratorError = err; + } finally { + try { + if (!_iteratorNormalCompletion && _iterator.return != null) { + _iterator.return(); + } + } finally { + if (_didIteratorError) { + throw _iteratorError; + } + } + } + + XRegExp.cache.flush('patterns'); + }; + /** + * @ignore + * + * Return a reference to the internal Unicode definition structure for the given Unicode + * Property if the given name is a legal Unicode Property for use in XRegExp `\p` or `\P` regex + * constructs. + * + * @memberOf XRegExp + * @param {String} name Name by which the Unicode Property may be recognized (case-insensitive), + * e.g. `'N'` or `'Number'`. The given name is matched against all registered Unicode + * Properties and Property Aliases. + * @returns {Object} Reference to definition structure when the name matches a Unicode Property. + * + * @note + * For more info on Unicode Properties, see also http://unicode.org/reports/tr18/#Categories. + * + * @note + * This method is *not* part of the officially documented API and may change or be removed in + * the future. It is meant for userland code that wishes to reuse the (large) internal Unicode + * structures set up by XRegExp. + */ + + + XRegExp._getUnicodeProperty = function (name) { + var slug = normalize(name); + return unicode[slug]; + }; +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 259 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(184); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _blocks = _interopRequireDefault(__webpack_require__(260)); + +/*! + * XRegExp Unicode Blocks 4.2.4 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds support for all Unicode blocks. Block names use the prefix 'In'. E.g., + * `\p{InBasicLatin}`. Token names are case insensitive, and any spaces, hyphens, and + * underscores are ignored. + * + * Uses Unicode 11.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Blocks'); + } + + XRegExp.addUnicodeData(_blocks.default); +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 260 */ +/***/ (function(module, exports) { + +module.exports = [ + { + 'name': 'InAdlam', + 'astral': '\uD83A[\uDD00-\uDD5F]' + }, + { + 'name': 'InAegean_Numbers', + 'astral': '\uD800[\uDD00-\uDD3F]' + }, + { + 'name': 'InAhom', + 'astral': '\uD805[\uDF00-\uDF3F]' + }, + { + 'name': 'InAlchemical_Symbols', + 'astral': '\uD83D[\uDF00-\uDF7F]' + }, + { + 'name': 'InAlphabetic_Presentation_Forms', + 'bmp': '\uFB00-\uFB4F' + }, + { + 'name': 'InAnatolian_Hieroglyphs', + 'astral': '\uD811[\uDC00-\uDE7F]' + }, + { + 'name': 'InAncient_Greek_Musical_Notation', + 'astral': '\uD834[\uDE00-\uDE4F]' + }, + { + 'name': 'InAncient_Greek_Numbers', + 'astral': '\uD800[\uDD40-\uDD8F]' + }, + { + 'name': 'InAncient_Symbols', + 'astral': '\uD800[\uDD90-\uDDCF]' + }, + { + 'name': 'InArabic', + 'bmp': '\u0600-\u06FF' + }, + { + 'name': 'InArabic_Extended_A', + 'bmp': '\u08A0-\u08FF' + }, + { + 'name': 'InArabic_Mathematical_Alphabetic_Symbols', + 'astral': '\uD83B[\uDE00-\uDEFF]' + }, + { + 'name': 'InArabic_Presentation_Forms_A', + 'bmp': '\uFB50-\uFDFF' + }, + { + 'name': 'InArabic_Presentation_Forms_B', + 'bmp': '\uFE70-\uFEFF' + }, + { + 'name': 'InArabic_Supplement', + 'bmp': '\u0750-\u077F' + }, + { + 'name': 'InArmenian', + 'bmp': '\u0530-\u058F' + }, + { + 'name': 'InArrows', + 'bmp': '\u2190-\u21FF' + }, + { + 'name': 'InAvestan', + 'astral': '\uD802[\uDF00-\uDF3F]' + }, + { + 'name': 'InBalinese', + 'bmp': '\u1B00-\u1B7F' + }, + { + 'name': 'InBamum', + 'bmp': '\uA6A0-\uA6FF' + }, + { + 'name': 'InBamum_Supplement', + 'astral': '\uD81A[\uDC00-\uDE3F]' + }, + { + 'name': 'InBasic_Latin', + 'bmp': '\0-\x7F' + }, + { + 'name': 'InBassa_Vah', + 'astral': '\uD81A[\uDED0-\uDEFF]' + }, + { + 'name': 'InBatak', + 'bmp': '\u1BC0-\u1BFF' + }, + { + 'name': 'InBengali', + 'bmp': '\u0980-\u09FF' + }, + { + 'name': 'InBhaiksuki', + 'astral': '\uD807[\uDC00-\uDC6F]' + }, + { + 'name': 'InBlock_Elements', + 'bmp': '\u2580-\u259F' + }, + { + 'name': 'InBopomofo', + 'bmp': '\u3100-\u312F' + }, + { + 'name': 'InBopomofo_Extended', + 'bmp': '\u31A0-\u31BF' + }, + { + 'name': 'InBox_Drawing', + 'bmp': '\u2500-\u257F' + }, + { + 'name': 'InBrahmi', + 'astral': '\uD804[\uDC00-\uDC7F]' + }, + { + 'name': 'InBraille_Patterns', + 'bmp': '\u2800-\u28FF' + }, + { + 'name': 'InBuginese', + 'bmp': '\u1A00-\u1A1F' + }, + { + 'name': 'InBuhid', + 'bmp': '\u1740-\u175F' + }, + { + 'name': 'InByzantine_Musical_Symbols', + 'astral': '\uD834[\uDC00-\uDCFF]' + }, + { + 'name': 'InCJK_Compatibility', + 'bmp': '\u3300-\u33FF' + }, + { + 'name': 'InCJK_Compatibility_Forms', + 'bmp': '\uFE30-\uFE4F' + }, + { + 'name': 'InCJK_Compatibility_Ideographs', + 'bmp': '\uF900-\uFAFF' + }, + { + 'name': 'InCJK_Compatibility_Ideographs_Supplement', + 'astral': '\uD87E[\uDC00-\uDE1F]' + }, + { + 'name': 'InCJK_Radicals_Supplement', + 'bmp': '\u2E80-\u2EFF' + }, + { + 'name': 'InCJK_Strokes', + 'bmp': '\u31C0-\u31EF' + }, + { + 'name': 'InCJK_Symbols_And_Punctuation', + 'bmp': '\u3000-\u303F' + }, + { + 'name': 'InCJK_Unified_Ideographs', + 'bmp': '\u4E00-\u9FFF' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_A', + 'bmp': '\u3400-\u4DBF' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_B', + 'astral': '[\uD840-\uD868][\uDC00-\uDFFF]|\uD869[\uDC00-\uDEDF]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_C', + 'astral': '\uD869[\uDF00-\uDFFF]|[\uD86A-\uD86C][\uDC00-\uDFFF]|\uD86D[\uDC00-\uDF3F]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_D', + 'astral': '\uD86D[\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1F]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_E', + 'astral': '\uD86E[\uDC20-\uDFFF]|[\uD86F-\uD872][\uDC00-\uDFFF]|\uD873[\uDC00-\uDEAF]' + }, + { + 'name': 'InCJK_Unified_Ideographs_Extension_F', + 'astral': '\uD873[\uDEB0-\uDFFF]|[\uD874-\uD879][\uDC00-\uDFFF]|\uD87A[\uDC00-\uDFEF]' + }, + { + 'name': 'InCarian', + 'astral': '\uD800[\uDEA0-\uDEDF]' + }, + { + 'name': 'InCaucasian_Albanian', + 'astral': '\uD801[\uDD30-\uDD6F]' + }, + { + 'name': 'InChakma', + 'astral': '\uD804[\uDD00-\uDD4F]' + }, + { + 'name': 'InCham', + 'bmp': '\uAA00-\uAA5F' + }, + { + 'name': 'InCherokee', + 'bmp': '\u13A0-\u13FF' + }, + { + 'name': 'InCherokee_Supplement', + 'bmp': '\uAB70-\uABBF' + }, + { + 'name': 'InChess_Symbols', + 'astral': '\uD83E[\uDE00-\uDE6F]' + }, + { + 'name': 'InCombining_Diacritical_Marks', + 'bmp': '\u0300-\u036F' + }, + { + 'name': 'InCombining_Diacritical_Marks_Extended', + 'bmp': '\u1AB0-\u1AFF' + }, + { + 'name': 'InCombining_Diacritical_Marks_For_Symbols', + 'bmp': '\u20D0-\u20FF' + }, + { + 'name': 'InCombining_Diacritical_Marks_Supplement', + 'bmp': '\u1DC0-\u1DFF' + }, + { + 'name': 'InCombining_Half_Marks', + 'bmp': '\uFE20-\uFE2F' + }, + { + 'name': 'InCommon_Indic_Number_Forms', + 'bmp': '\uA830-\uA83F' + }, + { + 'name': 'InControl_Pictures', + 'bmp': '\u2400-\u243F' + }, + { + 'name': 'InCoptic', + 'bmp': '\u2C80-\u2CFF' + }, + { + 'name': 'InCoptic_Epact_Numbers', + 'astral': '\uD800[\uDEE0-\uDEFF]' + }, + { + 'name': 'InCounting_Rod_Numerals', + 'astral': '\uD834[\uDF60-\uDF7F]' + }, + { + 'name': 'InCuneiform', + 'astral': '\uD808[\uDC00-\uDFFF]' + }, + { + 'name': 'InCuneiform_Numbers_And_Punctuation', + 'astral': '\uD809[\uDC00-\uDC7F]' + }, + { + 'name': 'InCurrency_Symbols', + 'bmp': '\u20A0-\u20CF' + }, + { + 'name': 'InCypriot_Syllabary', + 'astral': '\uD802[\uDC00-\uDC3F]' + }, + { + 'name': 'InCyrillic', + 'bmp': '\u0400-\u04FF' + }, + { + 'name': 'InCyrillic_Extended_A', + 'bmp': '\u2DE0-\u2DFF' + }, + { + 'name': 'InCyrillic_Extended_B', + 'bmp': '\uA640-\uA69F' + }, + { + 'name': 'InCyrillic_Extended_C', + 'bmp': '\u1C80-\u1C8F' + }, + { + 'name': 'InCyrillic_Supplement', + 'bmp': '\u0500-\u052F' + }, + { + 'name': 'InDeseret', + 'astral': '\uD801[\uDC00-\uDC4F]' + }, + { + 'name': 'InDevanagari', + 'bmp': '\u0900-\u097F' + }, + { + 'name': 'InDevanagari_Extended', + 'bmp': '\uA8E0-\uA8FF' + }, + { + 'name': 'InDingbats', + 'bmp': '\u2700-\u27BF' + }, + { + 'name': 'InDogra', + 'astral': '\uD806[\uDC00-\uDC4F]' + }, + { + 'name': 'InDomino_Tiles', + 'astral': '\uD83C[\uDC30-\uDC9F]' + }, + { + 'name': 'InDuployan', + 'astral': '\uD82F[\uDC00-\uDC9F]' + }, + { + 'name': 'InEarly_Dynastic_Cuneiform', + 'astral': '\uD809[\uDC80-\uDD4F]' + }, + { + 'name': 'InEgyptian_Hieroglyphs', + 'astral': '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F]' + }, + { + 'name': 'InElbasan', + 'astral': '\uD801[\uDD00-\uDD2F]' + }, + { + 'name': 'InEmoticons', + 'astral': '\uD83D[\uDE00-\uDE4F]' + }, + { + 'name': 'InEnclosed_Alphanumeric_Supplement', + 'astral': '\uD83C[\uDD00-\uDDFF]' + }, + { + 'name': 'InEnclosed_Alphanumerics', + 'bmp': '\u2460-\u24FF' + }, + { + 'name': 'InEnclosed_CJK_Letters_And_Months', + 'bmp': '\u3200-\u32FF' + }, + { + 'name': 'InEnclosed_Ideographic_Supplement', + 'astral': '\uD83C[\uDE00-\uDEFF]' + }, + { + 'name': 'InEthiopic', + 'bmp': '\u1200-\u137F' + }, + { + 'name': 'InEthiopic_Extended', + 'bmp': '\u2D80-\u2DDF' + }, + { + 'name': 'InEthiopic_Extended_A', + 'bmp': '\uAB00-\uAB2F' + }, + { + 'name': 'InEthiopic_Supplement', + 'bmp': '\u1380-\u139F' + }, + { + 'name': 'InGeneral_Punctuation', + 'bmp': '\u2000-\u206F' + }, + { + 'name': 'InGeometric_Shapes', + 'bmp': '\u25A0-\u25FF' + }, + { + 'name': 'InGeometric_Shapes_Extended', + 'astral': '\uD83D[\uDF80-\uDFFF]' + }, + { + 'name': 'InGeorgian', + 'bmp': '\u10A0-\u10FF' + }, + { + 'name': 'InGeorgian_Extended', + 'bmp': '\u1C90-\u1CBF' + }, + { + 'name': 'InGeorgian_Supplement', + 'bmp': '\u2D00-\u2D2F' + }, + { + 'name': 'InGlagolitic', + 'bmp': '\u2C00-\u2C5F' + }, + { + 'name': 'InGlagolitic_Supplement', + 'astral': '\uD838[\uDC00-\uDC2F]' + }, + { + 'name': 'InGothic', + 'astral': '\uD800[\uDF30-\uDF4F]' + }, + { + 'name': 'InGrantha', + 'astral': '\uD804[\uDF00-\uDF7F]' + }, + { + 'name': 'InGreek_And_Coptic', + 'bmp': '\u0370-\u03FF' + }, + { + 'name': 'InGreek_Extended', + 'bmp': '\u1F00-\u1FFF' + }, + { + 'name': 'InGujarati', + 'bmp': '\u0A80-\u0AFF' + }, + { + 'name': 'InGunjala_Gondi', + 'astral': '\uD807[\uDD60-\uDDAF]' + }, + { + 'name': 'InGurmukhi', + 'bmp': '\u0A00-\u0A7F' + }, + { + 'name': 'InHalfwidth_And_Fullwidth_Forms', + 'bmp': '\uFF00-\uFFEF' + }, + { + 'name': 'InHangul_Compatibility_Jamo', + 'bmp': '\u3130-\u318F' + }, + { + 'name': 'InHangul_Jamo', + 'bmp': '\u1100-\u11FF' + }, + { + 'name': 'InHangul_Jamo_Extended_A', + 'bmp': '\uA960-\uA97F' + }, + { + 'name': 'InHangul_Jamo_Extended_B', + 'bmp': '\uD7B0-\uD7FF' + }, + { + 'name': 'InHangul_Syllables', + 'bmp': '\uAC00-\uD7AF' + }, + { + 'name': 'InHanifi_Rohingya', + 'astral': '\uD803[\uDD00-\uDD3F]' + }, + { + 'name': 'InHanunoo', + 'bmp': '\u1720-\u173F' + }, + { + 'name': 'InHatran', + 'astral': '\uD802[\uDCE0-\uDCFF]' + }, + { + 'name': 'InHebrew', + 'bmp': '\u0590-\u05FF' + }, + { + 'name': 'InHigh_Private_Use_Surrogates', + 'bmp': '\uDB80-\uDBFF' + }, + { + 'name': 'InHigh_Surrogates', + 'bmp': '\uD800-\uDB7F' + }, + { + 'name': 'InHiragana', + 'bmp': '\u3040-\u309F' + }, + { + 'name': 'InIPA_Extensions', + 'bmp': '\u0250-\u02AF' + }, + { + 'name': 'InIdeographic_Description_Characters', + 'bmp': '\u2FF0-\u2FFF' + }, + { + 'name': 'InIdeographic_Symbols_And_Punctuation', + 'astral': '\uD81B[\uDFE0-\uDFFF]' + }, + { + 'name': 'InImperial_Aramaic', + 'astral': '\uD802[\uDC40-\uDC5F]' + }, + { + 'name': 'InIndic_Siyaq_Numbers', + 'astral': '\uD83B[\uDC70-\uDCBF]' + }, + { + 'name': 'InInscriptional_Pahlavi', + 'astral': '\uD802[\uDF60-\uDF7F]' + }, + { + 'name': 'InInscriptional_Parthian', + 'astral': '\uD802[\uDF40-\uDF5F]' + }, + { + 'name': 'InJavanese', + 'bmp': '\uA980-\uA9DF' + }, + { + 'name': 'InKaithi', + 'astral': '\uD804[\uDC80-\uDCCF]' + }, + { + 'name': 'InKana_Extended_A', + 'astral': '\uD82C[\uDD00-\uDD2F]' + }, + { + 'name': 'InKana_Supplement', + 'astral': '\uD82C[\uDC00-\uDCFF]' + }, + { + 'name': 'InKanbun', + 'bmp': '\u3190-\u319F' + }, + { + 'name': 'InKangxi_Radicals', + 'bmp': '\u2F00-\u2FDF' + }, + { + 'name': 'InKannada', + 'bmp': '\u0C80-\u0CFF' + }, + { + 'name': 'InKatakana', + 'bmp': '\u30A0-\u30FF' + }, + { + 'name': 'InKatakana_Phonetic_Extensions', + 'bmp': '\u31F0-\u31FF' + }, + { + 'name': 'InKayah_Li', + 'bmp': '\uA900-\uA92F' + }, + { + 'name': 'InKharoshthi', + 'astral': '\uD802[\uDE00-\uDE5F]' + }, + { + 'name': 'InKhmer', + 'bmp': '\u1780-\u17FF' + }, + { + 'name': 'InKhmer_Symbols', + 'bmp': '\u19E0-\u19FF' + }, + { + 'name': 'InKhojki', + 'astral': '\uD804[\uDE00-\uDE4F]' + }, + { + 'name': 'InKhudawadi', + 'astral': '\uD804[\uDEB0-\uDEFF]' + }, + { + 'name': 'InLao', + 'bmp': '\u0E80-\u0EFF' + }, + { + 'name': 'InLatin_1_Supplement', + 'bmp': '\x80-\xFF' + }, + { + 'name': 'InLatin_Extended_A', + 'bmp': '\u0100-\u017F' + }, + { + 'name': 'InLatin_Extended_Additional', + 'bmp': '\u1E00-\u1EFF' + }, + { + 'name': 'InLatin_Extended_B', + 'bmp': '\u0180-\u024F' + }, + { + 'name': 'InLatin_Extended_C', + 'bmp': '\u2C60-\u2C7F' + }, + { + 'name': 'InLatin_Extended_D', + 'bmp': '\uA720-\uA7FF' + }, + { + 'name': 'InLatin_Extended_E', + 'bmp': '\uAB30-\uAB6F' + }, + { + 'name': 'InLepcha', + 'bmp': '\u1C00-\u1C4F' + }, + { + 'name': 'InLetterlike_Symbols', + 'bmp': '\u2100-\u214F' + }, + { + 'name': 'InLimbu', + 'bmp': '\u1900-\u194F' + }, + { + 'name': 'InLinear_A', + 'astral': '\uD801[\uDE00-\uDF7F]' + }, + { + 'name': 'InLinear_B_Ideograms', + 'astral': '\uD800[\uDC80-\uDCFF]' + }, + { + 'name': 'InLinear_B_Syllabary', + 'astral': '\uD800[\uDC00-\uDC7F]' + }, + { + 'name': 'InLisu', + 'bmp': '\uA4D0-\uA4FF' + }, + { + 'name': 'InLow_Surrogates', + 'bmp': '\uDC00-\uDFFF' + }, + { + 'name': 'InLycian', + 'astral': '\uD800[\uDE80-\uDE9F]' + }, + { + 'name': 'InLydian', + 'astral': '\uD802[\uDD20-\uDD3F]' + }, + { + 'name': 'InMahajani', + 'astral': '\uD804[\uDD50-\uDD7F]' + }, + { + 'name': 'InMahjong_Tiles', + 'astral': '\uD83C[\uDC00-\uDC2F]' + }, + { + 'name': 'InMakasar', + 'astral': '\uD807[\uDEE0-\uDEFF]' + }, + { + 'name': 'InMalayalam', + 'bmp': '\u0D00-\u0D7F' + }, + { + 'name': 'InMandaic', + 'bmp': '\u0840-\u085F' + }, + { + 'name': 'InManichaean', + 'astral': '\uD802[\uDEC0-\uDEFF]' + }, + { + 'name': 'InMarchen', + 'astral': '\uD807[\uDC70-\uDCBF]' + }, + { + 'name': 'InMasaram_Gondi', + 'astral': '\uD807[\uDD00-\uDD5F]' + }, + { + 'name': 'InMathematical_Alphanumeric_Symbols', + 'astral': '\uD835[\uDC00-\uDFFF]' + }, + { + 'name': 'InMathematical_Operators', + 'bmp': '\u2200-\u22FF' + }, + { + 'name': 'InMayan_Numerals', + 'astral': '\uD834[\uDEE0-\uDEFF]' + }, + { + 'name': 'InMedefaidrin', + 'astral': '\uD81B[\uDE40-\uDE9F]' + }, + { + 'name': 'InMeetei_Mayek', + 'bmp': '\uABC0-\uABFF' + }, + { + 'name': 'InMeetei_Mayek_Extensions', + 'bmp': '\uAAE0-\uAAFF' + }, + { + 'name': 'InMende_Kikakui', + 'astral': '\uD83A[\uDC00-\uDCDF]' + }, + { + 'name': 'InMeroitic_Cursive', + 'astral': '\uD802[\uDDA0-\uDDFF]' + }, + { + 'name': 'InMeroitic_Hieroglyphs', + 'astral': '\uD802[\uDD80-\uDD9F]' + }, + { + 'name': 'InMiao', + 'astral': '\uD81B[\uDF00-\uDF9F]' + }, + { + 'name': 'InMiscellaneous_Mathematical_Symbols_A', + 'bmp': '\u27C0-\u27EF' + }, + { + 'name': 'InMiscellaneous_Mathematical_Symbols_B', + 'bmp': '\u2980-\u29FF' + }, + { + 'name': 'InMiscellaneous_Symbols', + 'bmp': '\u2600-\u26FF' + }, + { + 'name': 'InMiscellaneous_Symbols_And_Arrows', + 'bmp': '\u2B00-\u2BFF' + }, + { + 'name': 'InMiscellaneous_Symbols_And_Pictographs', + 'astral': '\uD83C[\uDF00-\uDFFF]|\uD83D[\uDC00-\uDDFF]' + }, + { + 'name': 'InMiscellaneous_Technical', + 'bmp': '\u2300-\u23FF' + }, + { + 'name': 'InModi', + 'astral': '\uD805[\uDE00-\uDE5F]' + }, + { + 'name': 'InModifier_Tone_Letters', + 'bmp': '\uA700-\uA71F' + }, + { + 'name': 'InMongolian', + 'bmp': '\u1800-\u18AF' + }, + { + 'name': 'InMongolian_Supplement', + 'astral': '\uD805[\uDE60-\uDE7F]' + }, + { + 'name': 'InMro', + 'astral': '\uD81A[\uDE40-\uDE6F]' + }, + { + 'name': 'InMultani', + 'astral': '\uD804[\uDE80-\uDEAF]' + }, + { + 'name': 'InMusical_Symbols', + 'astral': '\uD834[\uDD00-\uDDFF]' + }, + { + 'name': 'InMyanmar', + 'bmp': '\u1000-\u109F' + }, + { + 'name': 'InMyanmar_Extended_A', + 'bmp': '\uAA60-\uAA7F' + }, + { + 'name': 'InMyanmar_Extended_B', + 'bmp': '\uA9E0-\uA9FF' + }, + { + 'name': 'InNKo', + 'bmp': '\u07C0-\u07FF' + }, + { + 'name': 'InNabataean', + 'astral': '\uD802[\uDC80-\uDCAF]' + }, + { + 'name': 'InNew_Tai_Lue', + 'bmp': '\u1980-\u19DF' + }, + { + 'name': 'InNewa', + 'astral': '\uD805[\uDC00-\uDC7F]' + }, + { + 'name': 'InNumber_Forms', + 'bmp': '\u2150-\u218F' + }, + { + 'name': 'InNushu', + 'astral': '\uD82C[\uDD70-\uDEFF]' + }, + { + 'name': 'InOgham', + 'bmp': '\u1680-\u169F' + }, + { + 'name': 'InOl_Chiki', + 'bmp': '\u1C50-\u1C7F' + }, + { + 'name': 'InOld_Hungarian', + 'astral': '\uD803[\uDC80-\uDCFF]' + }, + { + 'name': 'InOld_Italic', + 'astral': '\uD800[\uDF00-\uDF2F]' + }, + { + 'name': 'InOld_North_Arabian', + 'astral': '\uD802[\uDE80-\uDE9F]' + }, + { + 'name': 'InOld_Permic', + 'astral': '\uD800[\uDF50-\uDF7F]' + }, + { + 'name': 'InOld_Persian', + 'astral': '\uD800[\uDFA0-\uDFDF]' + }, + { + 'name': 'InOld_Sogdian', + 'astral': '\uD803[\uDF00-\uDF2F]' + }, + { + 'name': 'InOld_South_Arabian', + 'astral': '\uD802[\uDE60-\uDE7F]' + }, + { + 'name': 'InOld_Turkic', + 'astral': '\uD803[\uDC00-\uDC4F]' + }, + { + 'name': 'InOptical_Character_Recognition', + 'bmp': '\u2440-\u245F' + }, + { + 'name': 'InOriya', + 'bmp': '\u0B00-\u0B7F' + }, + { + 'name': 'InOrnamental_Dingbats', + 'astral': '\uD83D[\uDE50-\uDE7F]' + }, + { + 'name': 'InOsage', + 'astral': '\uD801[\uDCB0-\uDCFF]' + }, + { + 'name': 'InOsmanya', + 'astral': '\uD801[\uDC80-\uDCAF]' + }, + { + 'name': 'InPahawh_Hmong', + 'astral': '\uD81A[\uDF00-\uDF8F]' + }, + { + 'name': 'InPalmyrene', + 'astral': '\uD802[\uDC60-\uDC7F]' + }, + { + 'name': 'InPau_Cin_Hau', + 'astral': '\uD806[\uDEC0-\uDEFF]' + }, + { + 'name': 'InPhags_Pa', + 'bmp': '\uA840-\uA87F' + }, + { + 'name': 'InPhaistos_Disc', + 'astral': '\uD800[\uDDD0-\uDDFF]' + }, + { + 'name': 'InPhoenician', + 'astral': '\uD802[\uDD00-\uDD1F]' + }, + { + 'name': 'InPhonetic_Extensions', + 'bmp': '\u1D00-\u1D7F' + }, + { + 'name': 'InPhonetic_Extensions_Supplement', + 'bmp': '\u1D80-\u1DBF' + }, + { + 'name': 'InPlaying_Cards', + 'astral': '\uD83C[\uDCA0-\uDCFF]' + }, + { + 'name': 'InPrivate_Use_Area', + 'bmp': '\uE000-\uF8FF' + }, + { + 'name': 'InPsalter_Pahlavi', + 'astral': '\uD802[\uDF80-\uDFAF]' + }, + { + 'name': 'InRejang', + 'bmp': '\uA930-\uA95F' + }, + { + 'name': 'InRumi_Numeral_Symbols', + 'astral': '\uD803[\uDE60-\uDE7F]' + }, + { + 'name': 'InRunic', + 'bmp': '\u16A0-\u16FF' + }, + { + 'name': 'InSamaritan', + 'bmp': '\u0800-\u083F' + }, + { + 'name': 'InSaurashtra', + 'bmp': '\uA880-\uA8DF' + }, + { + 'name': 'InSharada', + 'astral': '\uD804[\uDD80-\uDDDF]' + }, + { + 'name': 'InShavian', + 'astral': '\uD801[\uDC50-\uDC7F]' + }, + { + 'name': 'InShorthand_Format_Controls', + 'astral': '\uD82F[\uDCA0-\uDCAF]' + }, + { + 'name': 'InSiddham', + 'astral': '\uD805[\uDD80-\uDDFF]' + }, + { + 'name': 'InSinhala', + 'bmp': '\u0D80-\u0DFF' + }, + { + 'name': 'InSinhala_Archaic_Numbers', + 'astral': '\uD804[\uDDE0-\uDDFF]' + }, + { + 'name': 'InSmall_Form_Variants', + 'bmp': '\uFE50-\uFE6F' + }, + { + 'name': 'InSogdian', + 'astral': '\uD803[\uDF30-\uDF6F]' + }, + { + 'name': 'InSora_Sompeng', + 'astral': '\uD804[\uDCD0-\uDCFF]' + }, + { + 'name': 'InSoyombo', + 'astral': '\uD806[\uDE50-\uDEAF]' + }, + { + 'name': 'InSpacing_Modifier_Letters', + 'bmp': '\u02B0-\u02FF' + }, + { + 'name': 'InSpecials', + 'bmp': '\uFFF0-\uFFFF' + }, + { + 'name': 'InSundanese', + 'bmp': '\u1B80-\u1BBF' + }, + { + 'name': 'InSundanese_Supplement', + 'bmp': '\u1CC0-\u1CCF' + }, + { + 'name': 'InSuperscripts_And_Subscripts', + 'bmp': '\u2070-\u209F' + }, + { + 'name': 'InSupplemental_Arrows_A', + 'bmp': '\u27F0-\u27FF' + }, + { + 'name': 'InSupplemental_Arrows_B', + 'bmp': '\u2900-\u297F' + }, + { + 'name': 'InSupplemental_Arrows_C', + 'astral': '\uD83E[\uDC00-\uDCFF]' + }, + { + 'name': 'InSupplemental_Mathematical_Operators', + 'bmp': '\u2A00-\u2AFF' + }, + { + 'name': 'InSupplemental_Punctuation', + 'bmp': '\u2E00-\u2E7F' + }, + { + 'name': 'InSupplemental_Symbols_And_Pictographs', + 'astral': '\uD83E[\uDD00-\uDDFF]' + }, + { + 'name': 'InSupplementary_Private_Use_Area_A', + 'astral': '[\uDB80-\uDBBF][\uDC00-\uDFFF]' + }, + { + 'name': 'InSupplementary_Private_Use_Area_B', + 'astral': '[\uDBC0-\uDBFF][\uDC00-\uDFFF]' + }, + { + 'name': 'InSutton_SignWriting', + 'astral': '\uD836[\uDC00-\uDEAF]' + }, + { + 'name': 'InSyloti_Nagri', + 'bmp': '\uA800-\uA82F' + }, + { + 'name': 'InSyriac', + 'bmp': '\u0700-\u074F' + }, + { + 'name': 'InSyriac_Supplement', + 'bmp': '\u0860-\u086F' + }, + { + 'name': 'InTagalog', + 'bmp': '\u1700-\u171F' + }, + { + 'name': 'InTagbanwa', + 'bmp': '\u1760-\u177F' + }, + { + 'name': 'InTags', + 'astral': '\uDB40[\uDC00-\uDC7F]' + }, + { + 'name': 'InTai_Le', + 'bmp': '\u1950-\u197F' + }, + { + 'name': 'InTai_Tham', + 'bmp': '\u1A20-\u1AAF' + }, + { + 'name': 'InTai_Viet', + 'bmp': '\uAA80-\uAADF' + }, + { + 'name': 'InTai_Xuan_Jing_Symbols', + 'astral': '\uD834[\uDF00-\uDF5F]' + }, + { + 'name': 'InTakri', + 'astral': '\uD805[\uDE80-\uDECF]' + }, + { + 'name': 'InTamil', + 'bmp': '\u0B80-\u0BFF' + }, + { + 'name': 'InTangut', + 'astral': '[\uD81C-\uD821][\uDC00-\uDFFF]' + }, + { + 'name': 'InTangut_Components', + 'astral': '\uD822[\uDC00-\uDEFF]' + }, + { + 'name': 'InTelugu', + 'bmp': '\u0C00-\u0C7F' + }, + { + 'name': 'InThaana', + 'bmp': '\u0780-\u07BF' + }, + { + 'name': 'InThai', + 'bmp': '\u0E00-\u0E7F' + }, + { + 'name': 'InTibetan', + 'bmp': '\u0F00-\u0FFF' + }, + { + 'name': 'InTifinagh', + 'bmp': '\u2D30-\u2D7F' + }, + { + 'name': 'InTirhuta', + 'astral': '\uD805[\uDC80-\uDCDF]' + }, + { + 'name': 'InTransport_And_Map_Symbols', + 'astral': '\uD83D[\uDE80-\uDEFF]' + }, + { + 'name': 'InUgaritic', + 'astral': '\uD800[\uDF80-\uDF9F]' + }, + { + 'name': 'InUnified_Canadian_Aboriginal_Syllabics', + 'bmp': '\u1400-\u167F' + }, + { + 'name': 'InUnified_Canadian_Aboriginal_Syllabics_Extended', + 'bmp': '\u18B0-\u18FF' + }, + { + 'name': 'InVai', + 'bmp': '\uA500-\uA63F' + }, + { + 'name': 'InVariation_Selectors', + 'bmp': '\uFE00-\uFE0F' + }, + { + 'name': 'InVariation_Selectors_Supplement', + 'astral': '\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'InVedic_Extensions', + 'bmp': '\u1CD0-\u1CFF' + }, + { + 'name': 'InVertical_Forms', + 'bmp': '\uFE10-\uFE1F' + }, + { + 'name': 'InWarang_Citi', + 'astral': '\uD806[\uDCA0-\uDCFF]' + }, + { + 'name': 'InYi_Radicals', + 'bmp': '\uA490-\uA4CF' + }, + { + 'name': 'InYi_Syllables', + 'bmp': '\uA000-\uA48F' + }, + { + 'name': 'InYijing_Hexagram_Symbols', + 'bmp': '\u4DC0-\u4DFF' + }, + { + 'name': 'InZanabazar_Square', + 'astral': '\uD806[\uDE00-\uDE4F]' + } +]; + + +/***/ }), +/* 261 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(184); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _categories = _interopRequireDefault(__webpack_require__(262)); + +/*! + * XRegExp Unicode Categories 4.2.4 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds support for Unicode's general categories. E.g., `\p{Lu}` or `\p{Uppercase Letter}`. See + * category descriptions in UAX #44 . Token + * names are case insensitive, and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 11.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Categories'); + } + + XRegExp.addUnicodeData(_categories.default); +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 262 */ +/***/ (function(module, exports) { + +module.exports = [ + { + 'name': 'C', + 'alias': 'Other', + 'isBmpLast': true, + 'bmp': '\0-\x1F\x7F-\x9F\xAD\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u0605\u061C\u061D\u06DD\u070E\u070F\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08BE-\u08D2\u08E2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D04\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180E\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFA-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u200B-\u200F\u202A-\u202E\u2060-\u206F\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BC9\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E4F-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FF0-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7BA-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uF8FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD-\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCBD\uDCC2-\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD47-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5A\uDC5C\uDC5F-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD00-\uDDFF\uDE48-\uDE4F\uDE84\uDE85\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD823-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F-\uDB3F\uDB41-\uDBFF][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFDF\uDFE2-\uDFFF]|\uD821[\uDFF2-\uDFFF]|\uD822[\uDEF3-\uDFFF]|\uD82C[\uDD1F-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA0-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD73-\uDD7A\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4B-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD6C-\uDD6F\uDDAD-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED5-\uDEDF\uDEED-\uDEEF\uDEFA-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDCFF\uDD0C-\uDD0F\uDD3F\uDD71\uDD72\uDD77-\uDD79\uDD7B\uDDA3-\uDDAF\uDDBA-\uDDBF\uDDC3-\uDDCF\uDE00-\uDE5F\uDE6E-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uDB40[\uDC00-\uDCFF\uDDF0-\uDFFF]' + }, + { + 'name': 'Cc', + 'alias': 'Control', + 'bmp': '\0-\x1F\x7F-\x9F' + }, + { + 'name': 'Cf', + 'alias': 'Format', + 'bmp': '\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB', + 'astral': '\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + 'name': 'Cn', + 'alias': 'Unassigned', + 'bmp': '\u0378\u0379\u0380-\u0383\u038B\u038D\u03A2\u0530\u0557\u0558\u058B\u058C\u0590\u05C8-\u05CF\u05EB-\u05EE\u05F5-\u05FF\u061D\u070E\u074B\u074C\u07B2-\u07BF\u07FB\u07FC\u082E\u082F\u083F\u085C\u085D\u085F\u086B-\u089F\u08B5\u08BE-\u08D2\u0984\u098D\u098E\u0991\u0992\u09A9\u09B1\u09B3-\u09B5\u09BA\u09BB\u09C5\u09C6\u09C9\u09CA\u09CF-\u09D6\u09D8-\u09DB\u09DE\u09E4\u09E5\u09FF\u0A00\u0A04\u0A0B-\u0A0E\u0A11\u0A12\u0A29\u0A31\u0A34\u0A37\u0A3A\u0A3B\u0A3D\u0A43-\u0A46\u0A49\u0A4A\u0A4E-\u0A50\u0A52-\u0A58\u0A5D\u0A5F-\u0A65\u0A77-\u0A80\u0A84\u0A8E\u0A92\u0AA9\u0AB1\u0AB4\u0ABA\u0ABB\u0AC6\u0ACA\u0ACE\u0ACF\u0AD1-\u0ADF\u0AE4\u0AE5\u0AF2-\u0AF8\u0B00\u0B04\u0B0D\u0B0E\u0B11\u0B12\u0B29\u0B31\u0B34\u0B3A\u0B3B\u0B45\u0B46\u0B49\u0B4A\u0B4E-\u0B55\u0B58-\u0B5B\u0B5E\u0B64\u0B65\u0B78-\u0B81\u0B84\u0B8B-\u0B8D\u0B91\u0B96-\u0B98\u0B9B\u0B9D\u0BA0-\u0BA2\u0BA5-\u0BA7\u0BAB-\u0BAD\u0BBA-\u0BBD\u0BC3-\u0BC5\u0BC9\u0BCE\u0BCF\u0BD1-\u0BD6\u0BD8-\u0BE5\u0BFB-\u0BFF\u0C0D\u0C11\u0C29\u0C3A-\u0C3C\u0C45\u0C49\u0C4E-\u0C54\u0C57\u0C5B-\u0C5F\u0C64\u0C65\u0C70-\u0C77\u0C8D\u0C91\u0CA9\u0CB4\u0CBA\u0CBB\u0CC5\u0CC9\u0CCE-\u0CD4\u0CD7-\u0CDD\u0CDF\u0CE4\u0CE5\u0CF0\u0CF3-\u0CFF\u0D04\u0D0D\u0D11\u0D45\u0D49\u0D50-\u0D53\u0D64\u0D65\u0D80\u0D81\u0D84\u0D97-\u0D99\u0DB2\u0DBC\u0DBE\u0DBF\u0DC7-\u0DC9\u0DCB-\u0DCE\u0DD5\u0DD7\u0DE0-\u0DE5\u0DF0\u0DF1\u0DF5-\u0E00\u0E3B-\u0E3E\u0E5C-\u0E80\u0E83\u0E85\u0E86\u0E89\u0E8B\u0E8C\u0E8E-\u0E93\u0E98\u0EA0\u0EA4\u0EA6\u0EA8\u0EA9\u0EAC\u0EBA\u0EBE\u0EBF\u0EC5\u0EC7\u0ECE\u0ECF\u0EDA\u0EDB\u0EE0-\u0EFF\u0F48\u0F6D-\u0F70\u0F98\u0FBD\u0FCD\u0FDB-\u0FFF\u10C6\u10C8-\u10CC\u10CE\u10CF\u1249\u124E\u124F\u1257\u1259\u125E\u125F\u1289\u128E\u128F\u12B1\u12B6\u12B7\u12BF\u12C1\u12C6\u12C7\u12D7\u1311\u1316\u1317\u135B\u135C\u137D-\u137F\u139A-\u139F\u13F6\u13F7\u13FE\u13FF\u169D-\u169F\u16F9-\u16FF\u170D\u1715-\u171F\u1737-\u173F\u1754-\u175F\u176D\u1771\u1774-\u177F\u17DE\u17DF\u17EA-\u17EF\u17FA-\u17FF\u180F\u181A-\u181F\u1879-\u187F\u18AB-\u18AF\u18F6-\u18FF\u191F\u192C-\u192F\u193C-\u193F\u1941-\u1943\u196E\u196F\u1975-\u197F\u19AC-\u19AF\u19CA-\u19CF\u19DB-\u19DD\u1A1C\u1A1D\u1A5F\u1A7D\u1A7E\u1A8A-\u1A8F\u1A9A-\u1A9F\u1AAE\u1AAF\u1ABF-\u1AFF\u1B4C-\u1B4F\u1B7D-\u1B7F\u1BF4-\u1BFB\u1C38-\u1C3A\u1C4A-\u1C4C\u1C89-\u1C8F\u1CBB\u1CBC\u1CC8-\u1CCF\u1CFA-\u1CFF\u1DFA\u1F16\u1F17\u1F1E\u1F1F\u1F46\u1F47\u1F4E\u1F4F\u1F58\u1F5A\u1F5C\u1F5E\u1F7E\u1F7F\u1FB5\u1FC5\u1FD4\u1FD5\u1FDC\u1FF0\u1FF1\u1FF5\u1FFF\u2065\u2072\u2073\u208F\u209D-\u209F\u20C0-\u20CF\u20F1-\u20FF\u218C-\u218F\u2427-\u243F\u244B-\u245F\u2B74\u2B75\u2B96\u2B97\u2BC9\u2BFF\u2C2F\u2C5F\u2CF4-\u2CF8\u2D26\u2D28-\u2D2C\u2D2E\u2D2F\u2D68-\u2D6E\u2D71-\u2D7E\u2D97-\u2D9F\u2DA7\u2DAF\u2DB7\u2DBF\u2DC7\u2DCF\u2DD7\u2DDF\u2E4F-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u2FFF\u3040\u3097\u3098\u3100-\u3104\u3130\u318F\u31BB-\u31BF\u31E4-\u31EF\u321F\u32FF\u4DB6-\u4DBF\u9FF0-\u9FFF\uA48D-\uA48F\uA4C7-\uA4CF\uA62C-\uA63F\uA6F8-\uA6FF\uA7BA-\uA7F6\uA82C-\uA82F\uA83A-\uA83F\uA878-\uA87F\uA8C6-\uA8CD\uA8DA-\uA8DF\uA954-\uA95E\uA97D-\uA97F\uA9CE\uA9DA-\uA9DD\uA9FF\uAA37-\uAA3F\uAA4E\uAA4F\uAA5A\uAA5B\uAAC3-\uAADA\uAAF7-\uAB00\uAB07\uAB08\uAB0F\uAB10\uAB17-\uAB1F\uAB27\uAB2F\uAB66-\uAB6F\uABEE\uABEF\uABFA-\uABFF\uD7A4-\uD7AF\uD7C7-\uD7CA\uD7FC-\uD7FF\uFA6E\uFA6F\uFADA-\uFAFF\uFB07-\uFB12\uFB18-\uFB1C\uFB37\uFB3D\uFB3F\uFB42\uFB45\uFBC2-\uFBD2\uFD40-\uFD4F\uFD90\uFD91\uFDC8-\uFDEF\uFDFE\uFDFF\uFE1A-\uFE1F\uFE53\uFE67\uFE6C-\uFE6F\uFE75\uFEFD\uFEFE\uFF00\uFFBF-\uFFC1\uFFC8\uFFC9\uFFD0\uFFD1\uFFD8\uFFD9\uFFDD-\uFFDF\uFFE7\uFFEF-\uFFF8\uFFFE\uFFFF', + 'astral': '\uD800[\uDC0C\uDC27\uDC3B\uDC3E\uDC4E\uDC4F\uDC5E-\uDC7F\uDCFB-\uDCFF\uDD03-\uDD06\uDD34-\uDD36\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFE-\uDE7F\uDE9D-\uDE9F\uDED1-\uDEDF\uDEFC-\uDEFF\uDF24-\uDF2C\uDF4B-\uDF4F\uDF7B-\uDF7F\uDF9E\uDFC4-\uDFC7\uDFD6-\uDFFF]|\uD801[\uDC9E\uDC9F\uDCAA-\uDCAF\uDCD4-\uDCD7\uDCFC-\uDCFF\uDD28-\uDD2F\uDD64-\uDD6E\uDD70-\uDDFF\uDF37-\uDF3F\uDF56-\uDF5F\uDF68-\uDFFF]|\uD802[\uDC06\uDC07\uDC09\uDC36\uDC39-\uDC3B\uDC3D\uDC3E\uDC56\uDC9F-\uDCA6\uDCB0-\uDCDF\uDCF3\uDCF6-\uDCFA\uDD1C-\uDD1E\uDD3A-\uDD3E\uDD40-\uDD7F\uDDB8-\uDDBB\uDDD0\uDDD1\uDE04\uDE07-\uDE0B\uDE14\uDE18\uDE36\uDE37\uDE3B-\uDE3E\uDE49-\uDE4F\uDE59-\uDE5F\uDEA0-\uDEBF\uDEE7-\uDEEA\uDEF7-\uDEFF\uDF36-\uDF38\uDF56\uDF57\uDF73-\uDF77\uDF92-\uDF98\uDF9D-\uDFA8\uDFB0-\uDFFF]|\uD803[\uDC49-\uDC7F\uDCB3-\uDCBF\uDCF3-\uDCF9\uDD28-\uDD2F\uDD3A-\uDE5F\uDE7F-\uDEFF\uDF28-\uDF2F\uDF5A-\uDFFF]|\uD804[\uDC4E-\uDC51\uDC70-\uDC7E\uDCC2-\uDCCC\uDCCE\uDCCF\uDCE9-\uDCEF\uDCFA-\uDCFF\uDD35\uDD47-\uDD4F\uDD77-\uDD7F\uDDCE\uDDCF\uDDE0\uDDF5-\uDDFF\uDE12\uDE3F-\uDE7F\uDE87\uDE89\uDE8E\uDE9E\uDEAA-\uDEAF\uDEEB-\uDEEF\uDEFA-\uDEFF\uDF04\uDF0D\uDF0E\uDF11\uDF12\uDF29\uDF31\uDF34\uDF3A\uDF45\uDF46\uDF49\uDF4A\uDF4E\uDF4F\uDF51-\uDF56\uDF58-\uDF5C\uDF64\uDF65\uDF6D-\uDF6F\uDF75-\uDFFF]|\uD805[\uDC5A\uDC5C\uDC5F-\uDC7F\uDCC8-\uDCCF\uDCDA-\uDD7F\uDDB6\uDDB7\uDDDE-\uDDFF\uDE45-\uDE4F\uDE5A-\uDE5F\uDE6D-\uDE7F\uDEB8-\uDEBF\uDECA-\uDEFF\uDF1B\uDF1C\uDF2C-\uDF2F\uDF40-\uDFFF]|\uD806[\uDC3C-\uDC9F\uDCF3-\uDCFE\uDD00-\uDDFF\uDE48-\uDE4F\uDE84\uDE85\uDEA3-\uDEBF\uDEF9-\uDFFF]|\uD807[\uDC09\uDC37\uDC46-\uDC4F\uDC6D-\uDC6F\uDC90\uDC91\uDCA8\uDCB7-\uDCFF\uDD07\uDD0A\uDD37-\uDD39\uDD3B\uDD3E\uDD48-\uDD4F\uDD5A-\uDD5F\uDD66\uDD69\uDD8F\uDD92\uDD99-\uDD9F\uDDAA-\uDEDF\uDEF9-\uDFFF]|\uD808[\uDF9A-\uDFFF]|\uD809[\uDC6F\uDC75-\uDC7F\uDD44-\uDFFF]|[\uD80A\uD80B\uD80E-\uD810\uD812-\uD819\uD823-\uD82B\uD82D\uD82E\uD830-\uD833\uD837\uD839\uD83F\uD87B-\uD87D\uD87F-\uDB3F\uDB41-\uDB7F][\uDC00-\uDFFF]|\uD80D[\uDC2F-\uDFFF]|\uD811[\uDE47-\uDFFF]|\uD81A[\uDE39-\uDE3F\uDE5F\uDE6A-\uDE6D\uDE70-\uDECF\uDEEE\uDEEF\uDEF6-\uDEFF\uDF46-\uDF4F\uDF5A\uDF62\uDF78-\uDF7C\uDF90-\uDFFF]|\uD81B[\uDC00-\uDE3F\uDE9B-\uDEFF\uDF45-\uDF4F\uDF7F-\uDF8E\uDFA0-\uDFDF\uDFE2-\uDFFF]|\uD821[\uDFF2-\uDFFF]|\uD822[\uDEF3-\uDFFF]|\uD82C[\uDD1F-\uDD6F\uDEFC-\uDFFF]|\uD82F[\uDC6B-\uDC6F\uDC7D-\uDC7F\uDC89-\uDC8F\uDC9A\uDC9B\uDCA4-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDDE9-\uDDFF\uDE46-\uDEDF\uDEF4-\uDEFF\uDF57-\uDF5F\uDF79-\uDFFF]|\uD835[\uDC55\uDC9D\uDCA0\uDCA1\uDCA3\uDCA4\uDCA7\uDCA8\uDCAD\uDCBA\uDCBC\uDCC4\uDD06\uDD0B\uDD0C\uDD15\uDD1D\uDD3A\uDD3F\uDD45\uDD47-\uDD49\uDD51\uDEA6\uDEA7\uDFCC\uDFCD]|\uD836[\uDE8C-\uDE9A\uDEA0\uDEB0-\uDFFF]|\uD838[\uDC07\uDC19\uDC1A\uDC22\uDC25\uDC2B-\uDFFF]|\uD83A[\uDCC5\uDCC6\uDCD7-\uDCFF\uDD4B-\uDD4F\uDD5A-\uDD5D\uDD60-\uDFFF]|\uD83B[\uDC00-\uDC70\uDCB5-\uDDFF\uDE04\uDE20\uDE23\uDE25\uDE26\uDE28\uDE33\uDE38\uDE3A\uDE3C-\uDE41\uDE43-\uDE46\uDE48\uDE4A\uDE4C\uDE50\uDE53\uDE55\uDE56\uDE58\uDE5A\uDE5C\uDE5E\uDE60\uDE63\uDE65\uDE66\uDE6B\uDE73\uDE78\uDE7D\uDE7F\uDE8A\uDE9C-\uDEA0\uDEA4\uDEAA\uDEBC-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDCFF\uDD0D-\uDD0F\uDD6C-\uDD6F\uDDAD-\uDDE5\uDE03-\uDE0F\uDE3C-\uDE3F\uDE49-\uDE4F\uDE52-\uDE5F\uDE66-\uDEFF]|\uD83D[\uDED5-\uDEDF\uDEED-\uDEEF\uDEFA-\uDEFF\uDF74-\uDF7F\uDFD9-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDCFF\uDD0C-\uDD0F\uDD3F\uDD71\uDD72\uDD77-\uDD79\uDD7B\uDDA3-\uDDAF\uDDBA-\uDDBF\uDDC3-\uDDCF\uDE00-\uDE5F\uDE6E-\uDFFF]|\uD869[\uDED7-\uDEFF]|\uD86D[\uDF35-\uDF3F]|\uD86E[\uDC1E\uDC1F]|\uD873[\uDEA2-\uDEAF]|\uD87A[\uDFE1-\uDFFF]|\uD87E[\uDE1E-\uDFFF]|\uDB40[\uDC00\uDC02-\uDC1F\uDC80-\uDCFF\uDDF0-\uDFFF]|[\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + 'name': 'Co', + 'alias': 'Private_Use', + 'bmp': '\uE000-\uF8FF', + 'astral': '[\uDB80-\uDBBE\uDBC0-\uDBFE][\uDC00-\uDFFF]|[\uDBBF\uDBFF][\uDC00-\uDFFD]' + }, + { + 'name': 'Cs', + 'alias': 'Surrogate', + 'bmp': '\uD800-\uDFFF' + }, + { + 'name': 'L', + 'alias': 'Letter', + 'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7B9\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDF00-\uDF1C\uDF27\uDF30-\uDF45]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]' + }, + { + 'name': 'LC', + 'alias': 'Cased_Letter', + 'bmp': 'A-Za-z\xB5\xC0-\xD6\xD8-\xF6\xF8-\u01BA\u01BC-\u01BF\u01C4-\u0293\u0295-\u02AF\u0370-\u0373\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0560-\u0588\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FD-\u10FF\u13A0-\u13F5\u13F8-\u13FD\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2134\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2C7B\u2C7E-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA640-\uA66D\uA680-\uA69B\uA722-\uA76F\uA771-\uA787\uA78B-\uA78E\uA790-\uA7B9\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF21-\uFF3A\uFF41-\uFF5A', + 'astral': '\uD801[\uDC00-\uDC4F\uDCB0-\uDCD3\uDCD8-\uDCFB]|\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD806[\uDCA0-\uDCDF]|\uD81B[\uDE40-\uDE7F]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDD00-\uDD43]' + }, + { + 'name': 'Ll', + 'alias': 'Lowercase_Letter', + 'bmp': 'a-z\xB5\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02AF\u0371\u0373\u0377\u037B-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1D2B\u1D6B-\u1D77\u1D79-\u1D9A\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2184\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7B\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F\uA771-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7FA\uAB30-\uAB5A\uAB60-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + 'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + 'name': 'Lm', + 'alias': 'Modifier_Letter', + 'bmp': '\u02B0-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0374\u037A\u0559\u0640\u06E5\u06E6\u07F4\u07F5\u07FA\u081A\u0824\u0828\u0971\u0E46\u0EC6\u10FC\u17D7\u1843\u1AA7\u1C78-\u1C7D\u1D2C-\u1D6A\u1D78\u1D9B-\u1DBF\u2071\u207F\u2090-\u209C\u2C7C\u2C7D\u2D6F\u2E2F\u3005\u3031-\u3035\u303B\u309D\u309E\u30FC-\u30FE\uA015\uA4F8-\uA4FD\uA60C\uA67F\uA69C\uA69D\uA717-\uA71F\uA770\uA788\uA7F8\uA7F9\uA9CF\uA9E6\uAA70\uAADD\uAAF3\uAAF4\uAB5C-\uAB5F\uFF70\uFF9E\uFF9F', + 'astral': '\uD81A[\uDF40-\uDF43]|\uD81B[\uDF93-\uDF9F\uDFE0\uDFE1]' + }, + { + 'name': 'Lo', + 'alias': 'Other_Letter', + 'bmp': '\xAA\xBA\u01BB\u01C0-\u01C3\u0294\u05D0-\u05EA\u05EF-\u05F2\u0620-\u063F\u0641-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u0800-\u0815\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0972-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E45\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1100-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17DC\u1820-\u1842\u1844-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C77\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u2135-\u2138\u2D30-\u2D67\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3006\u303C\u3041-\u3096\u309F\u30A1-\u30FA\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA014\uA016-\uA48C\uA4D0-\uA4F7\uA500-\uA60B\uA610-\uA61F\uA62A\uA62B\uA66E\uA6A0-\uA6E5\uA78F\uA7F7\uA7FB-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9E0-\uA9E4\uA9E7-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA6F\uAA71-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB\uAADC\uAAE0-\uAAEA\uAAF2\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF66-\uFF6F\uFF71-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC50-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDD00-\uDD23\uDF00-\uDF1C\uDF27\uDF30-\uDF45]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF1A]|\uD806[\uDC00-\uDC2B\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]' + }, + { + 'name': 'Lt', + 'alias': 'Titlecase_Letter', + 'bmp': '\u01C5\u01C8\u01CB\u01F2\u1F88-\u1F8F\u1F98-\u1F9F\u1FA8-\u1FAF\u1FBC\u1FCC\u1FFC' + }, + { + 'name': 'Lu', + 'alias': 'Uppercase_Letter', + 'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2183\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uFF21-\uFF3A', + 'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]' + }, + { + 'name': 'M', + 'alias': 'Mark', + 'bmp': '\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09FE\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C04\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D00-\u0D03\u0D3B\u0D3C\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF7-\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDF46-\uDF50]|\uD804[\uDC00-\uDC02\uDC38-\uDC46\uDC7F-\uDC82\uDCB0-\uDCBA\uDD00-\uDD02\uDD27-\uDD34\uDD45\uDD46\uDD73\uDD80-\uDD82\uDDB3-\uDDC0\uDDC9-\uDDCC\uDE2C-\uDE37\uDE3E\uDEDF-\uDEEA\uDF00-\uDF03\uDF3B\uDF3C\uDF3E-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC35-\uDC46\uDC5E\uDCB0-\uDCC3\uDDAF-\uDDB5\uDDB8-\uDDC0\uDDDC\uDDDD\uDE30-\uDE40\uDEAB-\uDEB7\uDF1D-\uDF2B]|\uD806[\uDC2C-\uDC3A\uDE01-\uDE0A\uDE33-\uDE39\uDE3B-\uDE3E\uDE47\uDE51-\uDE5B\uDE8A-\uDE99]|\uD807[\uDC2F-\uDC36\uDC38-\uDC3F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD8A-\uDD8E\uDD90\uDD91\uDD93-\uDD97\uDEF3-\uDEF6]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF51-\uDF7E\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'Mc', + 'alias': 'Spacing_Mark', + 'bmp': '\u0903\u093B\u093E-\u0940\u0949-\u094C\u094E\u094F\u0982\u0983\u09BE-\u09C0\u09C7\u09C8\u09CB\u09CC\u09D7\u0A03\u0A3E-\u0A40\u0A83\u0ABE-\u0AC0\u0AC9\u0ACB\u0ACC\u0B02\u0B03\u0B3E\u0B40\u0B47\u0B48\u0B4B\u0B4C\u0B57\u0BBE\u0BBF\u0BC1\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD7\u0C01-\u0C03\u0C41-\u0C44\u0C82\u0C83\u0CBE\u0CC0-\u0CC4\u0CC7\u0CC8\u0CCA\u0CCB\u0CD5\u0CD6\u0D02\u0D03\u0D3E-\u0D40\u0D46-\u0D48\u0D4A-\u0D4C\u0D57\u0D82\u0D83\u0DCF-\u0DD1\u0DD8-\u0DDF\u0DF2\u0DF3\u0F3E\u0F3F\u0F7F\u102B\u102C\u1031\u1038\u103B\u103C\u1056\u1057\u1062-\u1064\u1067-\u106D\u1083\u1084\u1087-\u108C\u108F\u109A-\u109C\u17B6\u17BE-\u17C5\u17C7\u17C8\u1923-\u1926\u1929-\u192B\u1930\u1931\u1933-\u1938\u1A19\u1A1A\u1A55\u1A57\u1A61\u1A63\u1A64\u1A6D-\u1A72\u1B04\u1B35\u1B3B\u1B3D-\u1B41\u1B43\u1B44\u1B82\u1BA1\u1BA6\u1BA7\u1BAA\u1BE7\u1BEA-\u1BEC\u1BEE\u1BF2\u1BF3\u1C24-\u1C2B\u1C34\u1C35\u1CE1\u1CF2\u1CF3\u1CF7\u302E\u302F\uA823\uA824\uA827\uA880\uA881\uA8B4-\uA8C3\uA952\uA953\uA983\uA9B4\uA9B5\uA9BA\uA9BB\uA9BD-\uA9C0\uAA2F\uAA30\uAA33\uAA34\uAA4D\uAA7B\uAA7D\uAAEB\uAAEE\uAAEF\uAAF5\uABE3\uABE4\uABE6\uABE7\uABE9\uABEA\uABEC', + 'astral': '\uD804[\uDC00\uDC02\uDC82\uDCB0-\uDCB2\uDCB7\uDCB8\uDD2C\uDD45\uDD46\uDD82\uDDB3-\uDDB5\uDDBF\uDDC0\uDE2C-\uDE2E\uDE32\uDE33\uDE35\uDEE0-\uDEE2\uDF02\uDF03\uDF3E\uDF3F\uDF41-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF62\uDF63]|\uD805[\uDC35-\uDC37\uDC40\uDC41\uDC45\uDCB0-\uDCB2\uDCB9\uDCBB-\uDCBE\uDCC1\uDDAF-\uDDB1\uDDB8-\uDDBB\uDDBE\uDE30-\uDE32\uDE3B\uDE3C\uDE3E\uDEAC\uDEAE\uDEAF\uDEB6\uDF20\uDF21\uDF26]|\uD806[\uDC2C-\uDC2E\uDC38\uDE39\uDE57\uDE58\uDE97]|\uD807[\uDC2F\uDC3E\uDCA9\uDCB1\uDCB4\uDD8A-\uDD8E\uDD93\uDD94\uDD96\uDEF5\uDEF6]|\uD81B[\uDF51-\uDF7E]|\uD834[\uDD65\uDD66\uDD6D-\uDD72]' + }, + { + 'name': 'Me', + 'alias': 'Enclosing_Mark', + 'bmp': '\u0488\u0489\u1ABE\u20DD-\u20E0\u20E2-\u20E4\uA670-\uA672' + }, + { + 'name': 'Mn', + 'alias': 'Nonspacing_Mark', + 'bmp': '\u0300-\u036F\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u07FD\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D3-\u08E1\u08E3-\u0902\u093A\u093C\u0941-\u0948\u094D\u0951-\u0957\u0962\u0963\u0981\u09BC\u09C1-\u09C4\u09CD\u09E2\u09E3\u09FE\u0A01\u0A02\u0A3C\u0A41\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81\u0A82\u0ABC\u0AC1-\u0AC5\u0AC7\u0AC8\u0ACD\u0AE2\u0AE3\u0AFA-\u0AFF\u0B01\u0B3C\u0B3F\u0B41-\u0B44\u0B4D\u0B56\u0B62\u0B63\u0B82\u0BC0\u0BCD\u0C00\u0C04\u0C3E-\u0C40\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81\u0CBC\u0CBF\u0CC6\u0CCC\u0CCD\u0CE2\u0CE3\u0D00\u0D01\u0D3B\u0D3C\u0D41-\u0D44\u0D4D\u0D62\u0D63\u0DCA\u0DD2-\u0DD4\u0DD6\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F71-\u0F7E\u0F80-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102D-\u1030\u1032-\u1037\u1039\u103A\u103D\u103E\u1058\u1059\u105E-\u1060\u1071-\u1074\u1082\u1085\u1086\u108D\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4\u17B5\u17B7-\u17BD\u17C6\u17C9-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193B\u1A17\u1A18\u1A1B\u1A56\u1A58-\u1A5E\u1A60\u1A62\u1A65-\u1A6C\u1A73-\u1A7C\u1A7F\u1AB0-\u1ABD\u1B00-\u1B03\u1B34\u1B36-\u1B3A\u1B3C\u1B42\u1B6B-\u1B73\u1B80\u1B81\u1BA2-\u1BA5\u1BA8\u1BA9\u1BAB-\u1BAD\u1BE6\u1BE8\u1BE9\u1BED\u1BEF-\u1BF1\u1C2C-\u1C33\u1C36\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302D\u3099\u309A\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA825\uA826\uA8C4\uA8C5\uA8E0-\uA8F1\uA8FF\uA926-\uA92D\uA947-\uA951\uA980-\uA982\uA9B3\uA9B6-\uA9B9\uA9BC\uA9E5\uAA29-\uAA2E\uAA31\uAA32\uAA35\uAA36\uAA43\uAA4C\uAA7C\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEC\uAAED\uAAF6\uABE5\uABE8\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F', + 'astral': '\uD800[\uDDFD\uDEE0\uDF76-\uDF7A]|\uD802[\uDE01-\uDE03\uDE05\uDE06\uDE0C-\uDE0F\uDE38-\uDE3A\uDE3F\uDEE5\uDEE6]|\uD803[\uDD24-\uDD27\uDF46-\uDF50]|\uD804[\uDC01\uDC38-\uDC46\uDC7F-\uDC81\uDCB3-\uDCB6\uDCB9\uDCBA\uDD00-\uDD02\uDD27-\uDD2B\uDD2D-\uDD34\uDD73\uDD80\uDD81\uDDB6-\uDDBE\uDDC9-\uDDCC\uDE2F-\uDE31\uDE34\uDE36\uDE37\uDE3E\uDEDF\uDEE3-\uDEEA\uDF00\uDF01\uDF3B\uDF3C\uDF40\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC38-\uDC3F\uDC42-\uDC44\uDC46\uDC5E\uDCB3-\uDCB8\uDCBA\uDCBF\uDCC0\uDCC2\uDCC3\uDDB2-\uDDB5\uDDBC\uDDBD\uDDBF\uDDC0\uDDDC\uDDDD\uDE33-\uDE3A\uDE3D\uDE3F\uDE40\uDEAB\uDEAD\uDEB0-\uDEB5\uDEB7\uDF1D-\uDF1F\uDF22-\uDF25\uDF27-\uDF2B]|\uD806[\uDC2F-\uDC37\uDC39\uDC3A\uDE01-\uDE0A\uDE33-\uDE38\uDE3B-\uDE3E\uDE47\uDE51-\uDE56\uDE59-\uDE5B\uDE8A-\uDE96\uDE98\uDE99]|\uD807[\uDC30-\uDC36\uDC38-\uDC3D\uDC3F\uDC92-\uDCA7\uDCAA-\uDCB0\uDCB2\uDCB3\uDCB5\uDCB6\uDD31-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD45\uDD47\uDD90\uDD91\uDD95\uDD97\uDEF3\uDEF4]|\uD81A[\uDEF0-\uDEF4\uDF30-\uDF36]|\uD81B[\uDF8F-\uDF92]|\uD82F[\uDC9D\uDC9E]|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDCD0-\uDCD6\uDD44-\uDD4A]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'N', + 'alias': 'Number', + 'bmp': '0-9\xB2\xB3\xB9\xBC-\xBE\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u09F4-\u09F9\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0B72-\u0B77\u0BE6-\u0BF2\u0C66-\u0C6F\u0C78-\u0C7E\u0CE6-\u0CEF\u0D58-\u0D5E\u0D66-\u0D78\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F33\u1040-\u1049\u1090-\u1099\u1369-\u137C\u16EE-\u16F0\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1946-\u194F\u19D0-\u19DA\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\u2070\u2074-\u2079\u2080-\u2089\u2150-\u2182\u2185-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3007\u3021-\u3029\u3038-\u303A\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA620-\uA629\uA6E6-\uA6EF\uA830-\uA835\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD800[\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23\uDF41\uDF4A\uDFD1-\uDFD5]|\uD801[\uDCA0-\uDCA9]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDD30-\uDD39\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54]|\uD804[\uDC52-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDDE1-\uDDF4\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF3B]|\uD806[\uDCE0-\uDCF2]|\uD807[\uDC50-\uDC6C\uDD50-\uDD59\uDDA0-\uDDA9]|\uD809[\uDC00-\uDC6E]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDFCE-\uDFFF]|\uD83A[\uDCC7-\uDCCF\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4]|\uD83C[\uDD00-\uDD0C]' + }, + { + 'name': 'Nd', + 'alias': 'Decimal_Number', + 'bmp': '0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19', + 'astral': '\uD801[\uDCA0-\uDCA9]|\uD803[\uDD30-\uDD39]|\uD804[\uDC66-\uDC6F\uDCF0-\uDCF9\uDD36-\uDD3F\uDDD0-\uDDD9\uDEF0-\uDEF9]|\uD805[\uDC50-\uDC59\uDCD0-\uDCD9\uDE50-\uDE59\uDEC0-\uDEC9\uDF30-\uDF39]|\uD806[\uDCE0-\uDCE9]|\uD807[\uDC50-\uDC59\uDD50-\uDD59\uDDA0-\uDDA9]|\uD81A[\uDE60-\uDE69\uDF50-\uDF59]|\uD835[\uDFCE-\uDFFF]|\uD83A[\uDD50-\uDD59]' + }, + { + 'name': 'Nl', + 'alias': 'Letter_Number', + 'bmp': '\u16EE-\u16F0\u2160-\u2182\u2185-\u2188\u3007\u3021-\u3029\u3038-\u303A\uA6E6-\uA6EF', + 'astral': '\uD800[\uDD40-\uDD74\uDF41\uDF4A\uDFD1-\uDFD5]|\uD809[\uDC00-\uDC6E]' + }, + { + 'name': 'No', + 'alias': 'Other_Number', + 'bmp': '\xB2\xB3\xB9\xBC-\xBE\u09F4-\u09F9\u0B72-\u0B77\u0BF0-\u0BF2\u0C78-\u0C7E\u0D58-\u0D5E\u0D70-\u0D78\u0F2A-\u0F33\u1369-\u137C\u17F0-\u17F9\u19DA\u2070\u2074-\u2079\u2080-\u2089\u2150-\u215F\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2CFD\u3192-\u3195\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\uA830-\uA835', + 'astral': '\uD800[\uDD07-\uDD33\uDD75-\uDD78\uDD8A\uDD8B\uDEE1-\uDEFB\uDF20-\uDF23]|\uD802[\uDC58-\uDC5F\uDC79-\uDC7F\uDCA7-\uDCAF\uDCFB-\uDCFF\uDD16-\uDD1B\uDDBC\uDDBD\uDDC0-\uDDCF\uDDD2-\uDDFF\uDE40-\uDE48\uDE7D\uDE7E\uDE9D-\uDE9F\uDEEB-\uDEEF\uDF58-\uDF5F\uDF78-\uDF7F\uDFA9-\uDFAF]|\uD803[\uDCFA-\uDCFF\uDE60-\uDE7E\uDF1D-\uDF26\uDF51-\uDF54]|\uD804[\uDC52-\uDC65\uDDE1-\uDDF4]|\uD805[\uDF3A\uDF3B]|\uD806[\uDCEA-\uDCF2]|\uD807[\uDC5A-\uDC6C]|\uD81A[\uDF5B-\uDF61]|\uD81B[\uDE80-\uDE96]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD83A[\uDCC7-\uDCCF]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4]|\uD83C[\uDD00-\uDD0C]' + }, + { + 'name': 'P', + 'alias': 'Punctuation', + 'bmp': '!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Pc', + 'alias': 'Connector_Punctuation', + 'bmp': '_\u203F\u2040\u2054\uFE33\uFE34\uFE4D-\uFE4F\uFF3F' + }, + { + 'name': 'Pd', + 'alias': 'Dash_Punctuation', + 'bmp': '\\-\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D' + }, + { + 'name': 'Pe', + 'alias': 'Close_Punctuation', + 'bmp': '\\)\\]\\}\u0F3B\u0F3D\u169C\u2046\u207E\u208E\u2309\u230B\u232A\u2769\u276B\u276D\u276F\u2771\u2773\u2775\u27C6\u27E7\u27E9\u27EB\u27ED\u27EF\u2984\u2986\u2988\u298A\u298C\u298E\u2990\u2992\u2994\u2996\u2998\u29D9\u29DB\u29FD\u2E23\u2E25\u2E27\u2E29\u3009\u300B\u300D\u300F\u3011\u3015\u3017\u3019\u301B\u301E\u301F\uFD3E\uFE18\uFE36\uFE38\uFE3A\uFE3C\uFE3E\uFE40\uFE42\uFE44\uFE48\uFE5A\uFE5C\uFE5E\uFF09\uFF3D\uFF5D\uFF60\uFF63' + }, + { + 'name': 'Pf', + 'alias': 'Final_Punctuation', + 'bmp': '\xBB\u2019\u201D\u203A\u2E03\u2E05\u2E0A\u2E0D\u2E1D\u2E21' + }, + { + 'name': 'Pi', + 'alias': 'Initial_Punctuation', + 'bmp': '\xAB\u2018\u201B\u201C\u201F\u2039\u2E02\u2E04\u2E09\u2E0C\u2E1C\u2E20' + }, + { + 'name': 'Po', + 'alias': 'Other_Punctuation', + 'bmp': '!-#%-\'\\*,\\.\\/:;\\?@\\\xA1\xA7\xB6\xB7\xBF\u037E\u0387\u055A-\u055F\u0589\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u166D\u166E\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u1805\u1807-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2016\u2017\u2020-\u2027\u2030-\u2038\u203B-\u203E\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205E\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00\u2E01\u2E06-\u2E08\u2E0B\u2E0E-\u2E16\u2E18\u2E19\u2E1B\u2E1E\u2E1F\u2E2A-\u2E2E\u2E30-\u2E39\u2E3C-\u2E3F\u2E41\u2E43-\u2E4E\u3001-\u3003\u303D\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFE10-\uFE16\uFE19\uFE30\uFE45\uFE46\uFE49-\uFE4C\uFE50-\uFE52\uFE54-\uFE57\uFE5F-\uFE61\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF07\uFF0A\uFF0C\uFF0E\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3C\uFF61\uFF64\uFF65', + 'astral': '\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]' + }, + { + 'name': 'Ps', + 'alias': 'Open_Punctuation', + 'bmp': '\\(\\[\\{\u0F3A\u0F3C\u169B\u201A\u201E\u2045\u207D\u208D\u2308\u230A\u2329\u2768\u276A\u276C\u276E\u2770\u2772\u2774\u27C5\u27E6\u27E8\u27EA\u27EC\u27EE\u2983\u2985\u2987\u2989\u298B\u298D\u298F\u2991\u2993\u2995\u2997\u29D8\u29DA\u29FC\u2E22\u2E24\u2E26\u2E28\u2E42\u3008\u300A\u300C\u300E\u3010\u3014\u3016\u3018\u301A\u301D\uFD3F\uFE17\uFE35\uFE37\uFE39\uFE3B\uFE3D\uFE3F\uFE41\uFE43\uFE47\uFE59\uFE5B\uFE5D\uFF08\uFF3B\uFF5B\uFF5F\uFF62' + }, + { + 'name': 'S', + 'alias': 'Symbol', + 'bmp': '\\$\\+<->\\^`\\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20BF\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B98-\u2BC8\u2BCA-\u2BFE\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uFB29\uFBB2-\uFBC1\uFDFC\uFDFD\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD83B[\uDCAC\uDCB0\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD6B\uDD70-\uDDAC\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED4\uDEE0-\uDEEC\uDEF0-\uDEF9\uDF00-\uDF73\uDF80-\uDFD8]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD00-\uDD0B\uDD10-\uDD3E\uDD40-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF\uDE60-\uDE6D]' + }, + { + 'name': 'Sc', + 'alias': 'Currency_Symbol', + 'bmp': '\\$\xA2-\xA5\u058F\u060B\u07FE\u07FF\u09F2\u09F3\u09FB\u0AF1\u0BF9\u0E3F\u17DB\u20A0-\u20BF\uA838\uFDFC\uFE69\uFF04\uFFE0\uFFE1\uFFE5\uFFE6', + 'astral': '\uD83B\uDCB0' + }, + { + 'name': 'Sk', + 'alias': 'Modifier_Symbol', + 'bmp': '\\^`\xA8\xAF\xB4\xB8\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u309B\u309C\uA700-\uA716\uA720\uA721\uA789\uA78A\uAB5B\uFBB2-\uFBC1\uFF3E\uFF40\uFFE3', + 'astral': '\uD83C[\uDFFB-\uDFFF]' + }, + { + 'name': 'Sm', + 'alias': 'Math_Symbol', + 'bmp': '\\+<->\\|~\xAC\xB1\xD7\xF7\u03F6\u0606-\u0608\u2044\u2052\u207A-\u207C\u208A-\u208C\u2118\u2140-\u2144\u214B\u2190-\u2194\u219A\u219B\u21A0\u21A3\u21A6\u21AE\u21CE\u21CF\u21D2\u21D4\u21F4-\u22FF\u2320\u2321\u237C\u239B-\u23B3\u23DC-\u23E1\u25B7\u25C1\u25F8-\u25FF\u266F\u27C0-\u27C4\u27C7-\u27E5\u27F0-\u27FF\u2900-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2AFF\u2B30-\u2B44\u2B47-\u2B4C\uFB29\uFE62\uFE64-\uFE66\uFF0B\uFF1C-\uFF1E\uFF5C\uFF5E\uFFE2\uFFE9-\uFFEC', + 'astral': '\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD83B[\uDEF0\uDEF1]' + }, + { + 'name': 'So', + 'alias': 'Other_Symbol', + 'bmp': '\xA6\xA9\xAE\xB0\u0482\u058D\u058E\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u09FA\u0B70\u0BF3-\u0BF8\u0BFA\u0C7F\u0D4F\u0D79\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116\u2117\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u214A\u214C\u214D\u214F\u218A\u218B\u2195-\u2199\u219C-\u219F\u21A1\u21A2\u21A4\u21A5\u21A7-\u21AD\u21AF-\u21CD\u21D0\u21D1\u21D3\u21D5-\u21F3\u2300-\u2307\u230C-\u231F\u2322-\u2328\u232B-\u237B\u237D-\u239A\u23B4-\u23DB\u23E2-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u25B6\u25B8-\u25C0\u25C2-\u25F7\u2600-\u266E\u2670-\u2767\u2794-\u27BF\u2800-\u28FF\u2B00-\u2B2F\u2B45\u2B46\u2B4D-\u2B73\u2B76-\u2B95\u2B98-\u2BC8\u2BCA-\u2BFE\u2CE5-\u2CEA\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u32FE\u3300-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA828-\uA82B\uA836\uA837\uA839\uAA77-\uAA79\uFDFD\uFFE4\uFFE8\uFFED\uFFEE\uFFFC\uFFFD', + 'astral': '\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9B\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD83B\uDCAC|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD10-\uDD6B\uDD70-\uDDAC\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFA]|\uD83D[\uDC00-\uDED4\uDEE0-\uDEEC\uDEF0-\uDEF9\uDF00-\uDF73\uDF80-\uDFD8]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD00-\uDD0B\uDD10-\uDD3E\uDD40-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF\uDE60-\uDE6D]' + }, + { + 'name': 'Z', + 'alias': 'Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + }, + { + 'name': 'Zl', + 'alias': 'Line_Separator', + 'bmp': '\u2028' + }, + { + 'name': 'Zp', + 'alias': 'Paragraph_Separator', + 'bmp': '\u2029' + }, + { + 'name': 'Zs', + 'alias': 'Space_Separator', + 'bmp': ' \xA0\u1680\u2000-\u200A\u202F\u205F\u3000' + } +]; + + +/***/ }), +/* 263 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(184); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _properties = _interopRequireDefault(__webpack_require__(264)); + +/*! + * XRegExp Unicode Properties 4.2.4 + * + * Steven Levithan (c) 2012-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See + * . Following are definitions of these properties from + * UAX #44 : + * + * - Alphabetic + * Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm + + * Lo + Nl + Other_Alphabetic. + * + * - Default_Ignorable_Code_Point + * For programmatic determination of default ignorable code points. New characters that should + * be ignored in rendering (unless explicitly supported) will be assigned in these ranges, + * permitting programs to correctly handle the default rendering of such characters when not + * otherwise supported. + * + * - Lowercase + * Characters with the Lowercase property. Generated from: Ll + Other_Lowercase. + * + * - Noncharacter_Code_Point + * Code points permanently reserved for internal use. + * + * - Uppercase + * Characters with the Uppercase property. Generated from: Lu + Other_Uppercase. + * + * - White_Space + * Spaces, separator characters and other control characters which should be treated by + * programming languages as "white space" for the purpose of parsing elements. + * + * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS + * #18 RL1.2 additionally requires support for Unicode scripts and general categories. These are + * included in XRegExp's Unicode Categories and Unicode Scripts addons. + * + * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 11.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Properties'); + } + + var unicodeData = _properties.default; // Add non-generated data + + unicodeData.push({ + name: 'Assigned', + // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode + // Categories addon is required to use this property + inverseOf: 'Cn' + }); + XRegExp.addUnicodeData(unicodeData); +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 264 */ +/***/ (function(module, exports) { + +module.exports = [ + { + 'name': 'ASCII', + 'bmp': '\0-\x7F' + }, + { + 'name': 'Alphabetic', + 'bmp': 'A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0345\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05B0-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0657\u0659-\u065F\u066E-\u06D3\u06D5-\u06DC\u06E1-\u06E8\u06ED-\u06EF\u06FA-\u06FC\u06FF\u0710-\u073F\u074D-\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0817\u081A-\u082C\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08DF\u08E3-\u08E9\u08F0-\u093B\u093D-\u094C\u094E-\u0950\u0955-\u0963\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD-\u09C4\u09C7\u09C8\u09CB\u09CC\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09F0\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3E-\u0A42\u0A47\u0A48\u0A4B\u0A4C\u0A51\u0A59-\u0A5C\u0A5E\u0A70-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD-\u0AC5\u0AC7-\u0AC9\u0ACB\u0ACC\u0AD0\u0AE0-\u0AE3\u0AF9-\u0AFC\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D-\u0B44\u0B47\u0B48\u0B4B\u0B4C\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCC\u0BD0\u0BD7\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4C\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCC\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4C\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E46\u0E4D\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0ECD\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F71-\u0F81\u0F88-\u0F97\u0F99-\u0FBC\u1000-\u1036\u1038\u103B-\u103F\u1050-\u1062\u1065-\u1068\u106E-\u1086\u108E\u109C\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1713\u1720-\u1733\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17B3\u17B6-\u17C8\u17D7\u17DC\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u1938\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A1B\u1A20-\u1A5E\u1A61-\u1A74\u1AA7\u1B00-\u1B33\u1B35-\u1B43\u1B45-\u1B4B\u1B80-\u1BA9\u1BAC-\u1BAF\u1BBA-\u1BE5\u1BE7-\u1BF1\u1C00-\u1C35\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1D00-\u1DBF\u1DE7-\u1DF4\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u24B6-\u24E9\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEF\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA674-\uA67B\uA67F-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7B9\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA827\uA840-\uA873\uA880-\uA8C3\uA8C5\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA92A\uA930-\uA952\uA960-\uA97C\uA980-\uA9B2\uA9B4-\uA9BF\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA60-\uAA76\uAA7A\uAA7E-\uAABE\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF5\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDF00-\uDF1C\uDF27\uDF30-\uDF45]|\uD804[\uDC00-\uDC45\uDC82-\uDCB8\uDCD0-\uDCE8\uDD00-\uDD32\uDD44-\uDD46\uDD50-\uDD72\uDD76\uDD80-\uDDBF\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE34\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEE8\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D-\uDF44\uDF47\uDF48\uDF4B\uDF4C\uDF50\uDF57\uDF5D-\uDF63]|\uD805[\uDC00-\uDC41\uDC43-\uDC45\uDC47-\uDC4A\uDC80-\uDCC1\uDCC4\uDCC5\uDCC7\uDD80-\uDDB5\uDDB8-\uDDBE\uDDD8-\uDDDD\uDE00-\uDE3E\uDE40\uDE44\uDE80-\uDEB5\uDF00-\uDF1A\uDF1D-\uDF2A]|\uD806[\uDC00-\uDC38\uDCA0-\uDCDF\uDCFF\uDE00-\uDE32\uDE35-\uDE3E\uDE50-\uDE83\uDE86-\uDE97\uDE9D\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC3E\uDC40\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD41\uDD43\uDD46\uDD47\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD96\uDD98\uDEE0-\uDEF6]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF36\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF44\uDF50-\uDF7E\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9E]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD47]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]' + }, + { + 'name': 'Any', + 'isBmpLast': true, + 'bmp': '\0-\uFFFF', + 'astral': '[\uD800-\uDBFF][\uDC00-\uDFFF]' + }, + { + 'name': 'Default_Ignorable_Code_Point', + 'bmp': '\xAD\u034F\u061C\u115F\u1160\u17B4\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8', + 'astral': '\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|[\uDB40-\uDB43][\uDC00-\uDFFF]' + }, + { + 'name': 'Lowercase', + 'bmp': 'a-z\xAA\xB5\xBA\xDF-\xF6\xF8-\xFF\u0101\u0103\u0105\u0107\u0109\u010B\u010D\u010F\u0111\u0113\u0115\u0117\u0119\u011B\u011D\u011F\u0121\u0123\u0125\u0127\u0129\u012B\u012D\u012F\u0131\u0133\u0135\u0137\u0138\u013A\u013C\u013E\u0140\u0142\u0144\u0146\u0148\u0149\u014B\u014D\u014F\u0151\u0153\u0155\u0157\u0159\u015B\u015D\u015F\u0161\u0163\u0165\u0167\u0169\u016B\u016D\u016F\u0171\u0173\u0175\u0177\u017A\u017C\u017E-\u0180\u0183\u0185\u0188\u018C\u018D\u0192\u0195\u0199-\u019B\u019E\u01A1\u01A3\u01A5\u01A8\u01AA\u01AB\u01AD\u01B0\u01B4\u01B6\u01B9\u01BA\u01BD-\u01BF\u01C6\u01C9\u01CC\u01CE\u01D0\u01D2\u01D4\u01D6\u01D8\u01DA\u01DC\u01DD\u01DF\u01E1\u01E3\u01E5\u01E7\u01E9\u01EB\u01ED\u01EF\u01F0\u01F3\u01F5\u01F9\u01FB\u01FD\u01FF\u0201\u0203\u0205\u0207\u0209\u020B\u020D\u020F\u0211\u0213\u0215\u0217\u0219\u021B\u021D\u021F\u0221\u0223\u0225\u0227\u0229\u022B\u022D\u022F\u0231\u0233-\u0239\u023C\u023F\u0240\u0242\u0247\u0249\u024B\u024D\u024F-\u0293\u0295-\u02B8\u02C0\u02C1\u02E0-\u02E4\u0345\u0371\u0373\u0377\u037A-\u037D\u0390\u03AC-\u03CE\u03D0\u03D1\u03D5-\u03D7\u03D9\u03DB\u03DD\u03DF\u03E1\u03E3\u03E5\u03E7\u03E9\u03EB\u03ED\u03EF-\u03F3\u03F5\u03F8\u03FB\u03FC\u0430-\u045F\u0461\u0463\u0465\u0467\u0469\u046B\u046D\u046F\u0471\u0473\u0475\u0477\u0479\u047B\u047D\u047F\u0481\u048B\u048D\u048F\u0491\u0493\u0495\u0497\u0499\u049B\u049D\u049F\u04A1\u04A3\u04A5\u04A7\u04A9\u04AB\u04AD\u04AF\u04B1\u04B3\u04B5\u04B7\u04B9\u04BB\u04BD\u04BF\u04C2\u04C4\u04C6\u04C8\u04CA\u04CC\u04CE\u04CF\u04D1\u04D3\u04D5\u04D7\u04D9\u04DB\u04DD\u04DF\u04E1\u04E3\u04E5\u04E7\u04E9\u04EB\u04ED\u04EF\u04F1\u04F3\u04F5\u04F7\u04F9\u04FB\u04FD\u04FF\u0501\u0503\u0505\u0507\u0509\u050B\u050D\u050F\u0511\u0513\u0515\u0517\u0519\u051B\u051D\u051F\u0521\u0523\u0525\u0527\u0529\u052B\u052D\u052F\u0560-\u0588\u10D0-\u10FA\u10FD-\u10FF\u13F8-\u13FD\u1C80-\u1C88\u1D00-\u1DBF\u1E01\u1E03\u1E05\u1E07\u1E09\u1E0B\u1E0D\u1E0F\u1E11\u1E13\u1E15\u1E17\u1E19\u1E1B\u1E1D\u1E1F\u1E21\u1E23\u1E25\u1E27\u1E29\u1E2B\u1E2D\u1E2F\u1E31\u1E33\u1E35\u1E37\u1E39\u1E3B\u1E3D\u1E3F\u1E41\u1E43\u1E45\u1E47\u1E49\u1E4B\u1E4D\u1E4F\u1E51\u1E53\u1E55\u1E57\u1E59\u1E5B\u1E5D\u1E5F\u1E61\u1E63\u1E65\u1E67\u1E69\u1E6B\u1E6D\u1E6F\u1E71\u1E73\u1E75\u1E77\u1E79\u1E7B\u1E7D\u1E7F\u1E81\u1E83\u1E85\u1E87\u1E89\u1E8B\u1E8D\u1E8F\u1E91\u1E93\u1E95-\u1E9D\u1E9F\u1EA1\u1EA3\u1EA5\u1EA7\u1EA9\u1EAB\u1EAD\u1EAF\u1EB1\u1EB3\u1EB5\u1EB7\u1EB9\u1EBB\u1EBD\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1EC9\u1ECB\u1ECD\u1ECF\u1ED1\u1ED3\u1ED5\u1ED7\u1ED9\u1EDB\u1EDD\u1EDF\u1EE1\u1EE3\u1EE5\u1EE7\u1EE9\u1EEB\u1EED\u1EEF\u1EF1\u1EF3\u1EF5\u1EF7\u1EF9\u1EFB\u1EFD\u1EFF-\u1F07\u1F10-\u1F15\u1F20-\u1F27\u1F30-\u1F37\u1F40-\u1F45\u1F50-\u1F57\u1F60-\u1F67\u1F70-\u1F7D\u1F80-\u1F87\u1F90-\u1F97\u1FA0-\u1FA7\u1FB0-\u1FB4\u1FB6\u1FB7\u1FBE\u1FC2-\u1FC4\u1FC6\u1FC7\u1FD0-\u1FD3\u1FD6\u1FD7\u1FE0-\u1FE7\u1FF2-\u1FF4\u1FF6\u1FF7\u2071\u207F\u2090-\u209C\u210A\u210E\u210F\u2113\u212F\u2134\u2139\u213C\u213D\u2146-\u2149\u214E\u2170-\u217F\u2184\u24D0-\u24E9\u2C30-\u2C5E\u2C61\u2C65\u2C66\u2C68\u2C6A\u2C6C\u2C71\u2C73\u2C74\u2C76-\u2C7D\u2C81\u2C83\u2C85\u2C87\u2C89\u2C8B\u2C8D\u2C8F\u2C91\u2C93\u2C95\u2C97\u2C99\u2C9B\u2C9D\u2C9F\u2CA1\u2CA3\u2CA5\u2CA7\u2CA9\u2CAB\u2CAD\u2CAF\u2CB1\u2CB3\u2CB5\u2CB7\u2CB9\u2CBB\u2CBD\u2CBF\u2CC1\u2CC3\u2CC5\u2CC7\u2CC9\u2CCB\u2CCD\u2CCF\u2CD1\u2CD3\u2CD5\u2CD7\u2CD9\u2CDB\u2CDD\u2CDF\u2CE1\u2CE3\u2CE4\u2CEC\u2CEE\u2CF3\u2D00-\u2D25\u2D27\u2D2D\uA641\uA643\uA645\uA647\uA649\uA64B\uA64D\uA64F\uA651\uA653\uA655\uA657\uA659\uA65B\uA65D\uA65F\uA661\uA663\uA665\uA667\uA669\uA66B\uA66D\uA681\uA683\uA685\uA687\uA689\uA68B\uA68D\uA68F\uA691\uA693\uA695\uA697\uA699\uA69B-\uA69D\uA723\uA725\uA727\uA729\uA72B\uA72D\uA72F-\uA731\uA733\uA735\uA737\uA739\uA73B\uA73D\uA73F\uA741\uA743\uA745\uA747\uA749\uA74B\uA74D\uA74F\uA751\uA753\uA755\uA757\uA759\uA75B\uA75D\uA75F\uA761\uA763\uA765\uA767\uA769\uA76B\uA76D\uA76F-\uA778\uA77A\uA77C\uA77F\uA781\uA783\uA785\uA787\uA78C\uA78E\uA791\uA793-\uA795\uA797\uA799\uA79B\uA79D\uA79F\uA7A1\uA7A3\uA7A5\uA7A7\uA7A9\uA7AF\uA7B5\uA7B7\uA7B9\uA7F8-\uA7FA\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABBF\uFB00-\uFB06\uFB13-\uFB17\uFF41-\uFF5A', + 'astral': '\uD801[\uDC28-\uDC4F\uDCD8-\uDCFB]|\uD803[\uDCC0-\uDCF2]|\uD806[\uDCC0-\uDCDF]|\uD81B[\uDE60-\uDE7F]|\uD835[\uDC1A-\uDC33\uDC4E-\uDC54\uDC56-\uDC67\uDC82-\uDC9B\uDCB6-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDCEA-\uDD03\uDD1E-\uDD37\uDD52-\uDD6B\uDD86-\uDD9F\uDDBA-\uDDD3\uDDEE-\uDE07\uDE22-\uDE3B\uDE56-\uDE6F\uDE8A-\uDEA5\uDEC2-\uDEDA\uDEDC-\uDEE1\uDEFC-\uDF14\uDF16-\uDF1B\uDF36-\uDF4E\uDF50-\uDF55\uDF70-\uDF88\uDF8A-\uDF8F\uDFAA-\uDFC2\uDFC4-\uDFC9\uDFCB]|\uD83A[\uDD22-\uDD43]' + }, + { + 'name': 'Noncharacter_Code_Point', + 'bmp': '\uFDD0-\uFDEF\uFFFE\uFFFF', + 'astral': '[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]' + }, + { + 'name': 'Uppercase', + 'bmp': 'A-Z\xC0-\xD6\xD8-\xDE\u0100\u0102\u0104\u0106\u0108\u010A\u010C\u010E\u0110\u0112\u0114\u0116\u0118\u011A\u011C\u011E\u0120\u0122\u0124\u0126\u0128\u012A\u012C\u012E\u0130\u0132\u0134\u0136\u0139\u013B\u013D\u013F\u0141\u0143\u0145\u0147\u014A\u014C\u014E\u0150\u0152\u0154\u0156\u0158\u015A\u015C\u015E\u0160\u0162\u0164\u0166\u0168\u016A\u016C\u016E\u0170\u0172\u0174\u0176\u0178\u0179\u017B\u017D\u0181\u0182\u0184\u0186\u0187\u0189-\u018B\u018E-\u0191\u0193\u0194\u0196-\u0198\u019C\u019D\u019F\u01A0\u01A2\u01A4\u01A6\u01A7\u01A9\u01AC\u01AE\u01AF\u01B1-\u01B3\u01B5\u01B7\u01B8\u01BC\u01C4\u01C7\u01CA\u01CD\u01CF\u01D1\u01D3\u01D5\u01D7\u01D9\u01DB\u01DE\u01E0\u01E2\u01E4\u01E6\u01E8\u01EA\u01EC\u01EE\u01F1\u01F4\u01F6-\u01F8\u01FA\u01FC\u01FE\u0200\u0202\u0204\u0206\u0208\u020A\u020C\u020E\u0210\u0212\u0214\u0216\u0218\u021A\u021C\u021E\u0220\u0222\u0224\u0226\u0228\u022A\u022C\u022E\u0230\u0232\u023A\u023B\u023D\u023E\u0241\u0243-\u0246\u0248\u024A\u024C\u024E\u0370\u0372\u0376\u037F\u0386\u0388-\u038A\u038C\u038E\u038F\u0391-\u03A1\u03A3-\u03AB\u03CF\u03D2-\u03D4\u03D8\u03DA\u03DC\u03DE\u03E0\u03E2\u03E4\u03E6\u03E8\u03EA\u03EC\u03EE\u03F4\u03F7\u03F9\u03FA\u03FD-\u042F\u0460\u0462\u0464\u0466\u0468\u046A\u046C\u046E\u0470\u0472\u0474\u0476\u0478\u047A\u047C\u047E\u0480\u048A\u048C\u048E\u0490\u0492\u0494\u0496\u0498\u049A\u049C\u049E\u04A0\u04A2\u04A4\u04A6\u04A8\u04AA\u04AC\u04AE\u04B0\u04B2\u04B4\u04B6\u04B8\u04BA\u04BC\u04BE\u04C0\u04C1\u04C3\u04C5\u04C7\u04C9\u04CB\u04CD\u04D0\u04D2\u04D4\u04D6\u04D8\u04DA\u04DC\u04DE\u04E0\u04E2\u04E4\u04E6\u04E8\u04EA\u04EC\u04EE\u04F0\u04F2\u04F4\u04F6\u04F8\u04FA\u04FC\u04FE\u0500\u0502\u0504\u0506\u0508\u050A\u050C\u050E\u0510\u0512\u0514\u0516\u0518\u051A\u051C\u051E\u0520\u0522\u0524\u0526\u0528\u052A\u052C\u052E\u0531-\u0556\u10A0-\u10C5\u10C7\u10CD\u13A0-\u13F5\u1C90-\u1CBA\u1CBD-\u1CBF\u1E00\u1E02\u1E04\u1E06\u1E08\u1E0A\u1E0C\u1E0E\u1E10\u1E12\u1E14\u1E16\u1E18\u1E1A\u1E1C\u1E1E\u1E20\u1E22\u1E24\u1E26\u1E28\u1E2A\u1E2C\u1E2E\u1E30\u1E32\u1E34\u1E36\u1E38\u1E3A\u1E3C\u1E3E\u1E40\u1E42\u1E44\u1E46\u1E48\u1E4A\u1E4C\u1E4E\u1E50\u1E52\u1E54\u1E56\u1E58\u1E5A\u1E5C\u1E5E\u1E60\u1E62\u1E64\u1E66\u1E68\u1E6A\u1E6C\u1E6E\u1E70\u1E72\u1E74\u1E76\u1E78\u1E7A\u1E7C\u1E7E\u1E80\u1E82\u1E84\u1E86\u1E88\u1E8A\u1E8C\u1E8E\u1E90\u1E92\u1E94\u1E9E\u1EA0\u1EA2\u1EA4\u1EA6\u1EA8\u1EAA\u1EAC\u1EAE\u1EB0\u1EB2\u1EB4\u1EB6\u1EB8\u1EBA\u1EBC\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1EC8\u1ECA\u1ECC\u1ECE\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EDA\u1EDC\u1EDE\u1EE0\u1EE2\u1EE4\u1EE6\u1EE8\u1EEA\u1EEC\u1EEE\u1EF0\u1EF2\u1EF4\u1EF6\u1EF8\u1EFA\u1EFC\u1EFE\u1F08-\u1F0F\u1F18-\u1F1D\u1F28-\u1F2F\u1F38-\u1F3F\u1F48-\u1F4D\u1F59\u1F5B\u1F5D\u1F5F\u1F68-\u1F6F\u1FB8-\u1FBB\u1FC8-\u1FCB\u1FD8-\u1FDB\u1FE8-\u1FEC\u1FF8-\u1FFB\u2102\u2107\u210B-\u210D\u2110-\u2112\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u2130-\u2133\u213E\u213F\u2145\u2160-\u216F\u2183\u24B6-\u24CF\u2C00-\u2C2E\u2C60\u2C62-\u2C64\u2C67\u2C69\u2C6B\u2C6D-\u2C70\u2C72\u2C75\u2C7E-\u2C80\u2C82\u2C84\u2C86\u2C88\u2C8A\u2C8C\u2C8E\u2C90\u2C92\u2C94\u2C96\u2C98\u2C9A\u2C9C\u2C9E\u2CA0\u2CA2\u2CA4\u2CA6\u2CA8\u2CAA\u2CAC\u2CAE\u2CB0\u2CB2\u2CB4\u2CB6\u2CB8\u2CBA\u2CBC\u2CBE\u2CC0\u2CC2\u2CC4\u2CC6\u2CC8\u2CCA\u2CCC\u2CCE\u2CD0\u2CD2\u2CD4\u2CD6\u2CD8\u2CDA\u2CDC\u2CDE\u2CE0\u2CE2\u2CEB\u2CED\u2CF2\uA640\uA642\uA644\uA646\uA648\uA64A\uA64C\uA64E\uA650\uA652\uA654\uA656\uA658\uA65A\uA65C\uA65E\uA660\uA662\uA664\uA666\uA668\uA66A\uA66C\uA680\uA682\uA684\uA686\uA688\uA68A\uA68C\uA68E\uA690\uA692\uA694\uA696\uA698\uA69A\uA722\uA724\uA726\uA728\uA72A\uA72C\uA72E\uA732\uA734\uA736\uA738\uA73A\uA73C\uA73E\uA740\uA742\uA744\uA746\uA748\uA74A\uA74C\uA74E\uA750\uA752\uA754\uA756\uA758\uA75A\uA75C\uA75E\uA760\uA762\uA764\uA766\uA768\uA76A\uA76C\uA76E\uA779\uA77B\uA77D\uA77E\uA780\uA782\uA784\uA786\uA78B\uA78D\uA790\uA792\uA796\uA798\uA79A\uA79C\uA79E\uA7A0\uA7A2\uA7A4\uA7A6\uA7A8\uA7AA-\uA7AE\uA7B0-\uA7B4\uA7B6\uA7B8\uFF21-\uFF3A', + 'astral': '\uD801[\uDC00-\uDC27\uDCB0-\uDCD3]|\uD803[\uDC80-\uDCB2]|\uD806[\uDCA0-\uDCBF]|\uD81B[\uDE40-\uDE5F]|\uD835[\uDC00-\uDC19\uDC34-\uDC4D\uDC68-\uDC81\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB5\uDCD0-\uDCE9\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD38\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD6C-\uDD85\uDDA0-\uDDB9\uDDD4-\uDDED\uDE08-\uDE21\uDE3C-\uDE55\uDE70-\uDE89\uDEA8-\uDEC0\uDEE2-\uDEFA\uDF1C-\uDF34\uDF56-\uDF6E\uDF90-\uDFA8\uDFCA]|\uD83A[\uDD00-\uDD21]|\uD83C[\uDD30-\uDD49\uDD50-\uDD69\uDD70-\uDD89]' + }, + { + 'name': 'White_Space', + 'bmp': '\t-\r \x85\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000' + } +]; + + +/***/ }), +/* 265 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(184); + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _scripts = _interopRequireDefault(__webpack_require__(266)); + +/*! + * XRegExp Unicode Scripts 4.2.4 + * + * Steven Levithan (c) 2010-present MIT License + * Unicode data by Mathias Bynens + */ +var _default = function _default(XRegExp) { + /** + * Adds support for all Unicode scripts. E.g., `\p{Latin}`. Token names are case insensitive, + * and any spaces, hyphens, and underscores are ignored. + * + * Uses Unicode 11.0.0. + * + * @requires XRegExp, Unicode Base + */ + if (!XRegExp.addUnicodeData) { + throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts'); + } + + XRegExp.addUnicodeData(_scripts.default); +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 266 */ +/***/ (function(module, exports) { + +module.exports = [ + { + 'name': 'Adlam', + 'astral': '\uD83A[\uDD00-\uDD4A\uDD50-\uDD59\uDD5E\uDD5F]' + }, + { + 'name': 'Ahom', + 'astral': '\uD805[\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF3F]' + }, + { + 'name': 'Anatolian_Hieroglyphs', + 'astral': '\uD811[\uDC00-\uDE46]' + }, + { + 'name': 'Arabic', + 'bmp': '\u0600-\u0604\u0606-\u060B\u060D-\u061A\u061C\u061E\u0620-\u063F\u0641-\u064A\u0656-\u066F\u0671-\u06DC\u06DE-\u06FF\u0750-\u077F\u08A0-\u08B4\u08B6-\u08BD\u08D3-\u08E1\u08E3-\u08FF\uFB50-\uFBC1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFD\uFE70-\uFE74\uFE76-\uFEFC', + 'astral': '\uD803[\uDE60-\uDE7E]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB\uDEF0\uDEF1]' + }, + { + 'name': 'Armenian', + 'bmp': '\u0531-\u0556\u0559-\u0588\u058A\u058D-\u058F\uFB13-\uFB17' + }, + { + 'name': 'Avestan', + 'astral': '\uD802[\uDF00-\uDF35\uDF39-\uDF3F]' + }, + { + 'name': 'Balinese', + 'bmp': '\u1B00-\u1B4B\u1B50-\u1B7C' + }, + { + 'name': 'Bamum', + 'bmp': '\uA6A0-\uA6F7', + 'astral': '\uD81A[\uDC00-\uDE38]' + }, + { + 'name': 'Bassa_Vah', + 'astral': '\uD81A[\uDED0-\uDEED\uDEF0-\uDEF5]' + }, + { + 'name': 'Batak', + 'bmp': '\u1BC0-\u1BF3\u1BFC-\u1BFF' + }, + { + 'name': 'Bengali', + 'bmp': '\u0980-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09FE' + }, + { + 'name': 'Bhaiksuki', + 'astral': '\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC45\uDC50-\uDC6C]' + }, + { + 'name': 'Bopomofo', + 'bmp': '\u02EA\u02EB\u3105-\u312F\u31A0-\u31BA' + }, + { + 'name': 'Brahmi', + 'astral': '\uD804[\uDC00-\uDC4D\uDC52-\uDC6F\uDC7F]' + }, + { + 'name': 'Braille', + 'bmp': '\u2800-\u28FF' + }, + { + 'name': 'Buginese', + 'bmp': '\u1A00-\u1A1B\u1A1E\u1A1F' + }, + { + 'name': 'Buhid', + 'bmp': '\u1740-\u1753' + }, + { + 'name': 'Canadian_Aboriginal', + 'bmp': '\u1400-\u167F\u18B0-\u18F5' + }, + { + 'name': 'Carian', + 'astral': '\uD800[\uDEA0-\uDED0]' + }, + { + 'name': 'Caucasian_Albanian', + 'astral': '\uD801[\uDD30-\uDD63\uDD6F]' + }, + { + 'name': 'Chakma', + 'astral': '\uD804[\uDD00-\uDD34\uDD36-\uDD46]' + }, + { + 'name': 'Cham', + 'bmp': '\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA5C-\uAA5F' + }, + { + 'name': 'Cherokee', + 'bmp': '\u13A0-\u13F5\u13F8-\u13FD\uAB70-\uABBF' + }, + { + 'name': 'Common', + 'bmp': '\0-@\\[-`\\{-\xA9\xAB-\xB9\xBB-\xBF\xD7\xF7\u02B9-\u02DF\u02E5-\u02E9\u02EC-\u02FF\u0374\u037E\u0385\u0387\u0589\u0605\u060C\u061B\u061F\u0640\u06DD\u08E2\u0964\u0965\u0E3F\u0FD5-\u0FD8\u10FB\u16EB-\u16ED\u1735\u1736\u1802\u1803\u1805\u1CD3\u1CE1\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5-\u1CF7\u2000-\u200B\u200E-\u2064\u2066-\u2070\u2074-\u207E\u2080-\u208E\u20A0-\u20BF\u2100-\u2125\u2127-\u2129\u212C-\u2131\u2133-\u214D\u214F-\u215F\u2189-\u218B\u2190-\u2426\u2440-\u244A\u2460-\u27FF\u2900-\u2B73\u2B76-\u2B95\u2B98-\u2BC8\u2BCA-\u2BFE\u2E00-\u2E4E\u2FF0-\u2FFB\u3000-\u3004\u3006\u3008-\u3020\u3030-\u3037\u303C-\u303F\u309B\u309C\u30A0\u30FB\u30FC\u3190-\u319F\u31C0-\u31E3\u3220-\u325F\u327F-\u32CF\u3358-\u33FF\u4DC0-\u4DFF\uA700-\uA721\uA788-\uA78A\uA830-\uA839\uA92E\uA9CF\uAB5B\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFEFF\uFF01-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\uFF70\uFF9E\uFF9F\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFF9-\uFFFD', + 'astral': '\uD800[\uDD00-\uDD02\uDD07-\uDD33\uDD37-\uDD3F\uDD90-\uDD9B\uDDD0-\uDDFC\uDEE1-\uDEFB]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD66\uDD6A-\uDD7A\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDE8\uDEE0-\uDEF3\uDF00-\uDF56\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDFCB\uDFCE-\uDFFF]|\uD83B[\uDC71-\uDCB4]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD00-\uDD0C\uDD10-\uDD6B\uDD70-\uDDAC\uDDE6-\uDDFF\uDE01\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED4\uDEE0-\uDEEC\uDEF0-\uDEF9\uDF00-\uDF73\uDF80-\uDFD8]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDD00-\uDD0B\uDD10-\uDD3E\uDD40-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF\uDE60-\uDE6D]|\uDB40[\uDC01\uDC20-\uDC7F]' + }, + { + 'name': 'Coptic', + 'bmp': '\u03E2-\u03EF\u2C80-\u2CF3\u2CF9-\u2CFF' + }, + { + 'name': 'Cuneiform', + 'astral': '\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC70-\uDC74\uDC80-\uDD43]' + }, + { + 'name': 'Cypriot', + 'astral': '\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F]' + }, + { + 'name': 'Cyrillic', + 'bmp': '\u0400-\u0484\u0487-\u052F\u1C80-\u1C88\u1D2B\u1D78\u2DE0-\u2DFF\uA640-\uA69F\uFE2E\uFE2F' + }, + { + 'name': 'Deseret', + 'astral': '\uD801[\uDC00-\uDC4F]' + }, + { + 'name': 'Devanagari', + 'bmp': '\u0900-\u0950\u0953-\u0963\u0966-\u097F\uA8E0-\uA8FF' + }, + { + 'name': 'Dogra', + 'astral': '\uD806[\uDC00-\uDC3B]' + }, + { + 'name': 'Duployan', + 'astral': '\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9C-\uDC9F]' + }, + { + 'name': 'Egyptian_Hieroglyphs', + 'astral': '\uD80C[\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]' + }, + { + 'name': 'Elbasan', + 'astral': '\uD801[\uDD00-\uDD27]' + }, + { + 'name': 'Ethiopic', + 'bmp': '\u1200-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u137C\u1380-\u1399\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E' + }, + { + 'name': 'Georgian', + 'bmp': '\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u10FF\u1C90-\u1CBA\u1CBD-\u1CBF\u2D00-\u2D25\u2D27\u2D2D' + }, + { + 'name': 'Glagolitic', + 'bmp': '\u2C00-\u2C2E\u2C30-\u2C5E', + 'astral': '\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]' + }, + { + 'name': 'Gothic', + 'astral': '\uD800[\uDF30-\uDF4A]' + }, + { + 'name': 'Grantha', + 'astral': '\uD804[\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]' + }, + { + 'name': 'Greek', + 'bmp': '\u0370-\u0373\u0375-\u0377\u037A-\u037D\u037F\u0384\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03E1\u03F0-\u03FF\u1D26-\u1D2A\u1D5D-\u1D61\u1D66-\u1D6A\u1DBF\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FC4\u1FC6-\u1FD3\u1FD6-\u1FDB\u1FDD-\u1FEF\u1FF2-\u1FF4\u1FF6-\u1FFE\u2126\uAB65', + 'astral': '\uD800[\uDD40-\uDD8E\uDDA0]|\uD834[\uDE00-\uDE45]' + }, + { + 'name': 'Gujarati', + 'bmp': '\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AF1\u0AF9-\u0AFF' + }, + { + 'name': 'Gunjala_Gondi', + 'astral': '\uD807[\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9]' + }, + { + 'name': 'Gurmukhi', + 'bmp': '\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A76' + }, + { + 'name': 'Han', + 'bmp': '\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u3005\u3007\u3021-\u3029\u3038-\u303B\u3400-\u4DB5\u4E00-\u9FEF\uF900-\uFA6D\uFA70-\uFAD9', + 'astral': '[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]' + }, + { + 'name': 'Hangul', + 'bmp': '\u1100-\u11FF\u302E\u302F\u3131-\u318E\u3200-\u321E\u3260-\u327E\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC' + }, + { + 'name': 'Hanifi_Rohingya', + 'astral': '\uD803[\uDD00-\uDD27\uDD30-\uDD39]' + }, + { + 'name': 'Hanunoo', + 'bmp': '\u1720-\u1734' + }, + { + 'name': 'Hatran', + 'astral': '\uD802[\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDCFF]' + }, + { + 'name': 'Hebrew', + 'bmp': '\u0591-\u05C7\u05D0-\u05EA\u05EF-\u05F4\uFB1D-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFB4F' + }, + { + 'name': 'Hiragana', + 'bmp': '\u3041-\u3096\u309D-\u309F', + 'astral': '\uD82C[\uDC01-\uDD1E]|\uD83C\uDE00' + }, + { + 'name': 'Imperial_Aramaic', + 'astral': '\uD802[\uDC40-\uDC55\uDC57-\uDC5F]' + }, + { + 'name': 'Inherited', + 'bmp': '\u0300-\u036F\u0485\u0486\u064B-\u0655\u0670\u0951\u0952\u1AB0-\u1ABE\u1CD0-\u1CD2\u1CD4-\u1CE0\u1CE2-\u1CE8\u1CED\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF9\u1DFB-\u1DFF\u200C\u200D\u20D0-\u20F0\u302A-\u302D\u3099\u309A\uFE00-\uFE0F\uFE20-\uFE2D', + 'astral': '\uD800[\uDDFD\uDEE0]|\uD804\uDF3B|\uD834[\uDD67-\uDD69\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD]|\uDB40[\uDD00-\uDDEF]' + }, + { + 'name': 'Inscriptional_Pahlavi', + 'astral': '\uD802[\uDF60-\uDF72\uDF78-\uDF7F]' + }, + { + 'name': 'Inscriptional_Parthian', + 'astral': '\uD802[\uDF40-\uDF55\uDF58-\uDF5F]' + }, + { + 'name': 'Javanese', + 'bmp': '\uA980-\uA9CD\uA9D0-\uA9D9\uA9DE\uA9DF' + }, + { + 'name': 'Kaithi', + 'astral': '\uD804[\uDC80-\uDCC1\uDCCD]' + }, + { + 'name': 'Kannada', + 'bmp': '\u0C80-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2' + }, + { + 'name': 'Katakana', + 'bmp': '\u30A1-\u30FA\u30FD-\u30FF\u31F0-\u31FF\u32D0-\u32FE\u3300-\u3357\uFF66-\uFF6F\uFF71-\uFF9D', + 'astral': '\uD82C\uDC00' + }, + { + 'name': 'Kayah_Li', + 'bmp': '\uA900-\uA92D\uA92F' + }, + { + 'name': 'Kharoshthi', + 'astral': '\uD802[\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F-\uDE48\uDE50-\uDE58]' + }, + { + 'name': 'Khmer', + 'bmp': '\u1780-\u17DD\u17E0-\u17E9\u17F0-\u17F9\u19E0-\u19FF' + }, + { + 'name': 'Khojki', + 'astral': '\uD804[\uDE00-\uDE11\uDE13-\uDE3E]' + }, + { + 'name': 'Khudawadi', + 'astral': '\uD804[\uDEB0-\uDEEA\uDEF0-\uDEF9]' + }, + { + 'name': 'Lao', + 'bmp': '\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF' + }, + { + 'name': 'Latin', + 'bmp': 'A-Za-z\xAA\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u02E0-\u02E4\u1D00-\u1D25\u1D2C-\u1D5C\u1D62-\u1D65\u1D6B-\u1D77\u1D79-\u1DBE\u1E00-\u1EFF\u2071\u207F\u2090-\u209C\u212A\u212B\u2132\u214E\u2160-\u2188\u2C60-\u2C7F\uA722-\uA787\uA78B-\uA7B9\uA7F7-\uA7FF\uAB30-\uAB5A\uAB5C-\uAB64\uFB00-\uFB06\uFF21-\uFF3A\uFF41-\uFF5A' + }, + { + 'name': 'Lepcha', + 'bmp': '\u1C00-\u1C37\u1C3B-\u1C49\u1C4D-\u1C4F' + }, + { + 'name': 'Limbu', + 'bmp': '\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1940\u1944-\u194F' + }, + { + 'name': 'Linear_A', + 'astral': '\uD801[\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]' + }, + { + 'name': 'Linear_B', + 'astral': '\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA]' + }, + { + 'name': 'Lisu', + 'bmp': '\uA4D0-\uA4FF' + }, + { + 'name': 'Lycian', + 'astral': '\uD800[\uDE80-\uDE9C]' + }, + { + 'name': 'Lydian', + 'astral': '\uD802[\uDD20-\uDD39\uDD3F]' + }, + { + 'name': 'Mahajani', + 'astral': '\uD804[\uDD50-\uDD76]' + }, + { + 'name': 'Makasar', + 'astral': '\uD807[\uDEE0-\uDEF8]' + }, + { + 'name': 'Malayalam', + 'bmp': '\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4F\u0D54-\u0D63\u0D66-\u0D7F' + }, + { + 'name': 'Mandaic', + 'bmp': '\u0840-\u085B\u085E' + }, + { + 'name': 'Manichaean', + 'astral': '\uD802[\uDEC0-\uDEE6\uDEEB-\uDEF6]' + }, + { + 'name': 'Marchen', + 'astral': '\uD807[\uDC70-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6]' + }, + { + 'name': 'Masaram_Gondi', + 'astral': '\uD807[\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]' + }, + { + 'name': 'Medefaidrin', + 'astral': '\uD81B[\uDE40-\uDE9A]' + }, + { + 'name': 'Meetei_Mayek', + 'bmp': '\uAAE0-\uAAF6\uABC0-\uABED\uABF0-\uABF9' + }, + { + 'name': 'Mende_Kikakui', + 'astral': '\uD83A[\uDC00-\uDCC4\uDCC7-\uDCD6]' + }, + { + 'name': 'Meroitic_Cursive', + 'astral': '\uD802[\uDDA0-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDDFF]' + }, + { + 'name': 'Meroitic_Hieroglyphs', + 'astral': '\uD802[\uDD80-\uDD9F]' + }, + { + 'name': 'Miao', + 'astral': '\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]' + }, + { + 'name': 'Modi', + 'astral': '\uD805[\uDE00-\uDE44\uDE50-\uDE59]' + }, + { + 'name': 'Mongolian', + 'bmp': '\u1800\u1801\u1804\u1806-\u180E\u1810-\u1819\u1820-\u1878\u1880-\u18AA', + 'astral': '\uD805[\uDE60-\uDE6C]' + }, + { + 'name': 'Mro', + 'astral': '\uD81A[\uDE40-\uDE5E\uDE60-\uDE69\uDE6E\uDE6F]' + }, + { + 'name': 'Multani', + 'astral': '\uD804[\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA9]' + }, + { + 'name': 'Myanmar', + 'bmp': '\u1000-\u109F\uA9E0-\uA9FE\uAA60-\uAA7F' + }, + { + 'name': 'Nabataean', + 'astral': '\uD802[\uDC80-\uDC9E\uDCA7-\uDCAF]' + }, + { + 'name': 'New_Tai_Lue', + 'bmp': '\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u19DE\u19DF' + }, + { + 'name': 'Newa', + 'astral': '\uD805[\uDC00-\uDC59\uDC5B\uDC5D\uDC5E]' + }, + { + 'name': 'Nko', + 'bmp': '\u07C0-\u07FA\u07FD-\u07FF' + }, + { + 'name': 'Nushu', + 'astral': '\uD81B\uDFE1|\uD82C[\uDD70-\uDEFB]' + }, + { + 'name': 'Ogham', + 'bmp': '\u1680-\u169C' + }, + { + 'name': 'Ol_Chiki', + 'bmp': '\u1C50-\u1C7F' + }, + { + 'name': 'Old_Hungarian', + 'astral': '\uD803[\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDCFF]' + }, + { + 'name': 'Old_Italic', + 'astral': '\uD800[\uDF00-\uDF23\uDF2D-\uDF2F]' + }, + { + 'name': 'Old_North_Arabian', + 'astral': '\uD802[\uDE80-\uDE9F]' + }, + { + 'name': 'Old_Permic', + 'astral': '\uD800[\uDF50-\uDF7A]' + }, + { + 'name': 'Old_Persian', + 'astral': '\uD800[\uDFA0-\uDFC3\uDFC8-\uDFD5]' + }, + { + 'name': 'Old_Sogdian', + 'astral': '\uD803[\uDF00-\uDF27]' + }, + { + 'name': 'Old_South_Arabian', + 'astral': '\uD802[\uDE60-\uDE7F]' + }, + { + 'name': 'Old_Turkic', + 'astral': '\uD803[\uDC00-\uDC48]' + }, + { + 'name': 'Oriya', + 'bmp': '\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B77' + }, + { + 'name': 'Osage', + 'astral': '\uD801[\uDCB0-\uDCD3\uDCD8-\uDCFB]' + }, + { + 'name': 'Osmanya', + 'astral': '\uD801[\uDC80-\uDC9D\uDCA0-\uDCA9]' + }, + { + 'name': 'Pahawh_Hmong', + 'astral': '\uD81A[\uDF00-\uDF45\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]' + }, + { + 'name': 'Palmyrene', + 'astral': '\uD802[\uDC60-\uDC7F]' + }, + { + 'name': 'Pau_Cin_Hau', + 'astral': '\uD806[\uDEC0-\uDEF8]' + }, + { + 'name': 'Phags_Pa', + 'bmp': '\uA840-\uA877' + }, + { + 'name': 'Phoenician', + 'astral': '\uD802[\uDD00-\uDD1B\uDD1F]' + }, + { + 'name': 'Psalter_Pahlavi', + 'astral': '\uD802[\uDF80-\uDF91\uDF99-\uDF9C\uDFA9-\uDFAF]' + }, + { + 'name': 'Rejang', + 'bmp': '\uA930-\uA953\uA95F' + }, + { + 'name': 'Runic', + 'bmp': '\u16A0-\u16EA\u16EE-\u16F8' + }, + { + 'name': 'Samaritan', + 'bmp': '\u0800-\u082D\u0830-\u083E' + }, + { + 'name': 'Saurashtra', + 'bmp': '\uA880-\uA8C5\uA8CE-\uA8D9' + }, + { + 'name': 'Sharada', + 'astral': '\uD804[\uDD80-\uDDCD\uDDD0-\uDDDF]' + }, + { + 'name': 'Shavian', + 'astral': '\uD801[\uDC50-\uDC7F]' + }, + { + 'name': 'Siddham', + 'astral': '\uD805[\uDD80-\uDDB5\uDDB8-\uDDDD]' + }, + { + 'name': 'SignWriting', + 'astral': '\uD836[\uDC00-\uDE8B\uDE9B-\uDE9F\uDEA1-\uDEAF]' + }, + { + 'name': 'Sinhala', + 'bmp': '\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2-\u0DF4', + 'astral': '\uD804[\uDDE1-\uDDF4]' + }, + { + 'name': 'Sogdian', + 'astral': '\uD803[\uDF30-\uDF59]' + }, + { + 'name': 'Sora_Sompeng', + 'astral': '\uD804[\uDCD0-\uDCE8\uDCF0-\uDCF9]' + }, + { + 'name': 'Soyombo', + 'astral': '\uD806[\uDE50-\uDE83\uDE86-\uDEA2]' + }, + { + 'name': 'Sundanese', + 'bmp': '\u1B80-\u1BBF\u1CC0-\u1CC7' + }, + { + 'name': 'Syloti_Nagri', + 'bmp': '\uA800-\uA82B' + }, + { + 'name': 'Syriac', + 'bmp': '\u0700-\u070D\u070F-\u074A\u074D-\u074F\u0860-\u086A' + }, + { + 'name': 'Tagalog', + 'bmp': '\u1700-\u170C\u170E-\u1714' + }, + { + 'name': 'Tagbanwa', + 'bmp': '\u1760-\u176C\u176E-\u1770\u1772\u1773' + }, + { + 'name': 'Tai_Le', + 'bmp': '\u1950-\u196D\u1970-\u1974' + }, + { + 'name': 'Tai_Tham', + 'bmp': '\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA0-\u1AAD' + }, + { + 'name': 'Tai_Viet', + 'bmp': '\uAA80-\uAAC2\uAADB-\uAADF' + }, + { + 'name': 'Takri', + 'astral': '\uD805[\uDE80-\uDEB7\uDEC0-\uDEC9]' + }, + { + 'name': 'Tamil', + 'bmp': '\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BFA' + }, + { + 'name': 'Tangut', + 'astral': '\uD81B\uDFE0|[\uD81C-\uD820][\uDC00-\uDFFF]|\uD821[\uDC00-\uDFF1]|\uD822[\uDC00-\uDEF2]' + }, + { + 'name': 'Telugu', + 'bmp': '\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C78-\u0C7F' + }, + { + 'name': 'Thaana', + 'bmp': '\u0780-\u07B1' + }, + { + 'name': 'Thai', + 'bmp': '\u0E01-\u0E3A\u0E40-\u0E5B' + }, + { + 'name': 'Tibetan', + 'bmp': '\u0F00-\u0F47\u0F49-\u0F6C\u0F71-\u0F97\u0F99-\u0FBC\u0FBE-\u0FCC\u0FCE-\u0FD4\u0FD9\u0FDA' + }, + { + 'name': 'Tifinagh', + 'bmp': '\u2D30-\u2D67\u2D6F\u2D70\u2D7F' + }, + { + 'name': 'Tirhuta', + 'astral': '\uD805[\uDC80-\uDCC7\uDCD0-\uDCD9]' + }, + { + 'name': 'Ugaritic', + 'astral': '\uD800[\uDF80-\uDF9D\uDF9F]' + }, + { + 'name': 'Vai', + 'bmp': '\uA500-\uA62B' + }, + { + 'name': 'Warang_Citi', + 'astral': '\uD806[\uDCA0-\uDCF2\uDCFF]' + }, + { + 'name': 'Yi', + 'bmp': '\uA000-\uA48C\uA490-\uA4C6' + }, + { + 'name': 'Zanabazar_Square', + 'astral': '\uD806[\uDE00-\uDE47]' + } +]; + + +/***/ }), +/* 267 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const Report_1 = __webpack_require__(116); +const structUtils = __importStar(__webpack_require__(113)); +class MultiFetcher { + constructor(fetchers) { + this.fetchers = fetchers; + } + supports(locator, opts) { + if (!this.tryFetcher(locator, opts)) + return false; + return true; + } + getLocalPath(locator, opts) { + const fetcher = this.getFetcher(locator, opts); + return fetcher.getLocalPath(locator, opts); + } + async fetch(locator, opts) { + const fetcher = this.getFetcher(locator, opts); + return await fetcher.fetch(locator, opts); + } + tryFetcher(locator, opts) { + const fetcher = this.fetchers.find(fetcher => fetcher.supports(locator, opts)); + if (!fetcher) + return null; + return fetcher; + } + getFetcher(locator, opts) { + const fetcher = this.fetchers.find(fetcher => fetcher.supports(locator, opts)); + if (!fetcher) + throw new Report_1.ReportError(Report_1.MessageName.FETCHER_NOT_FOUND, `${structUtils.prettyLocator(opts.project.configuration, locator)} isn't supported by any available fetcher`); + return fetcher; + } +} +exports.MultiFetcher = MultiFetcher; + + +/***/ }), +/* 268 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const Report_1 = __webpack_require__(116); +const structUtils = __importStar(__webpack_require__(113)); +class MultiResolver { + constructor(resolvers) { + this.resolvers = resolvers.filter(resolver => resolver); + } + supportsDescriptor(descriptor, opts) { + const resolver = this.tryResolverByDescriptor(descriptor, opts); + return resolver ? true : false; + } + supportsLocator(locator, opts) { + const resolver = this.tryResolverByLocator(locator, opts); + return resolver ? true : false; + } + shouldPersistResolution(locator, opts) { + const resolver = this.getResolverByLocator(locator, opts); + return resolver.shouldPersistResolution(locator, opts); + } + bindDescriptor(descriptor, fromLocator, opts) { + const resolver = this.getResolverByDescriptor(descriptor, opts); + return resolver.bindDescriptor(descriptor, fromLocator, opts); + } + async getCandidates(descriptor, opts) { + const resolver = this.getResolverByDescriptor(descriptor, opts); + return await resolver.getCandidates(descriptor, opts); + } + async resolve(locator, opts) { + const resolver = this.getResolverByLocator(locator, opts); + return await resolver.resolve(locator, opts); + } + tryResolverByDescriptor(descriptor, opts) { + const resolver = this.resolvers.find(resolver => resolver.supportsDescriptor(descriptor, opts)); + if (!resolver) + return null; + return resolver; + } + getResolverByDescriptor(descriptor, opts) { + const resolver = this.resolvers.find(resolver => resolver.supportsDescriptor(descriptor, opts)); + if (!resolver) + throw new Report_1.ReportError(Report_1.MessageName.RESOLVER_NOT_FOUND, `${structUtils.prettyDescriptor(opts.project.configuration, descriptor)} isn't supported by any available resolver`); + return resolver; + } + tryResolverByLocator(locator, opts) { + const resolver = this.resolvers.find(resolver => resolver.supportsLocator(locator, opts)); + if (!resolver) + return null; + return resolver; + } + getResolverByLocator(locator, opts) { + const resolver = this.resolvers.find(resolver => resolver.supportsLocator(locator, opts)); + if (!resolver) + throw new Report_1.ReportError(Report_1.MessageName.RESOLVER_NOT_FOUND, `${structUtils.prettyLocator(opts.project.configuration, locator)} isn't supported by any available resolver`); + return resolver; + } +} +exports.MultiResolver = MultiResolver; + + +/***/ }), +/* 269 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const semver_1 = __importDefault(__webpack_require__(34)); +const structUtils = __importStar(__webpack_require__(113)); +class SemverResolver { + supportsDescriptor(descriptor, opts) { + if (!semver_1.default.validRange(descriptor.range)) + return false; + return true; + } + supportsLocator(locator, opts) { + if (!semver_1.default.valid(locator.reference)) + return false; + return true; + } + shouldPersistResolution(locator, opts) { + return opts.resolver.shouldPersistResolution(this.forwardLocator(locator, opts), opts); + } + bindDescriptor(descriptor, fromLocator, opts) { + return opts.resolver.bindDescriptor(this.forwardDescriptor(descriptor, opts), fromLocator, opts); + } + async getCandidates(descriptor, opts) { + return await opts.resolver.getCandidates(this.forwardDescriptor(descriptor, opts), opts); + } + async resolve(locator, opts) { + const pkg = await opts.resolver.resolve(this.forwardLocator(locator, opts), opts); + return structUtils.renamePackage(pkg, locator); + } + forwardDescriptor(descriptor, opts) { + return structUtils.makeDescriptor(descriptor, `${opts.project.configuration.get(`defaultProtocol`)}${descriptor.range}`); + } + forwardLocator(locator, opts) { + return structUtils.makeLocator(locator, `${opts.project.configuration.get(`defaultProtocol`)}${locator.reference}`); + } +} +exports.SemverResolver = SemverResolver; + + +/***/ }), +/* 270 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const structUtils = __importStar(__webpack_require__(113)); +exports.TAG_REGEXP = /^[a-z]+$/; +class TagResolver { + supportsDescriptor(descriptor, opts) { + if (!exports.TAG_REGEXP.test(descriptor.range)) + return false; + return true; + } + supportsLocator(locator, opts) { + if (!exports.TAG_REGEXP.test(locator.reference)) + return false; + return true; + } + shouldPersistResolution(locator, opts) { + return opts.resolver.shouldPersistResolution(this.forwardLocator(locator, opts), opts); + } + bindDescriptor(descriptor, fromLocator, opts) { + return opts.resolver.bindDescriptor(this.forwardDescriptor(descriptor, opts), fromLocator, opts); + } + async getCandidates(descriptor, opts) { + return await opts.resolver.getCandidates(this.forwardDescriptor(descriptor, opts), opts); + } + async resolve(locator, opts) { + const pkg = await opts.resolver.resolve(this.forwardLocator(locator, opts), opts); + return structUtils.renamePackage(pkg, locator); + } + forwardDescriptor(descriptor, opts) { + return structUtils.makeDescriptor(descriptor, `${opts.project.configuration.get(`defaultProtocol`)}${descriptor.range}`); + } + forwardLocator(locator, opts) { + return structUtils.makeLocator(locator, `${opts.project.configuration.get(`defaultProtocol`)}${locator.reference}`); + } +} +exports.TagResolver = TagResolver; + + +/***/ }), +/* 271 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const path_1 = __webpack_require__(6); +const Report_1 = __webpack_require__(116); +const structUtils = __importStar(__webpack_require__(113)); +class VirtualFetcher { + supports(locator) { + if (!locator.reference.startsWith(`virtual:`)) + return false; + return true; + } + getLocalPath(locator, opts) { + const splitPoint = locator.reference.indexOf(`#`); + if (splitPoint === -1) + throw new Error(`Invalid virtual package reference`); + const nextReference = locator.reference.slice(splitPoint + 1); + const nextLocator = structUtils.makeLocator(locator, nextReference); + return opts.fetcher.getLocalPath(nextLocator, opts); + } + async fetch(locator, opts) { + const splitPoint = locator.reference.indexOf(`#`); + if (splitPoint === -1) + throw new Error(`Invalid virtual package reference`); + const nextReference = locator.reference.slice(splitPoint + 1); + const nextLocator = structUtils.makeLocator(locator, nextReference); + const parentFetch = await opts.fetcher.fetch(nextLocator, opts); + return await this.ensureVirtualLink(locator, parentFetch, opts); + } + getLocatorFilename(locator) { + return structUtils.slugifyLocator(locator); + } + getLocatorPath(locator, opts) { + const virtualFolder = opts.project.configuration.get(`virtualFolder`); + const virtualPath = path_1.posix.resolve(virtualFolder, this.getLocatorFilename(locator)); + return virtualPath; + } + async ensureVirtualLink(locator, sourceFetch, opts) { + const virtualPath = this.getLocatorPath(locator, opts); + const from = path_1.posix.dirname(virtualPath); + const to = sourceFetch.packageFs.getRealPath(); + let target = path_1.posix.relative(from, to); + if (process.platform === `win32`) { + const fromParse = path_1.win32.parse(fslib_1.NodeFS.fromPortablePath(from)); + const toParse = path_1.win32.parse(fslib_1.NodeFS.fromPortablePath(to)); + if (fromParse.root !== toParse.root) { + if (opts.project.configuration.get(`enableAbsoluteVirtuals`)) { + target = to; + } + else { + throw new Report_1.ReportError(Report_1.MessageName.CROSS_DRIVE_VIRTUAL_LOCAL, `The virtual folder (${fromParse.root}) must be on the same drive as the local package it references (${toParse.root})`); + } + } + } + // Doesn't need locking, and the folder must exist for the lock to succeed + await fslib_1.xfs.mkdirpPromise(path_1.posix.dirname(virtualPath)); + await fslib_1.xfs.lockPromise(virtualPath, async () => { + let currentLink; + try { + currentLink = await fslib_1.xfs.readlinkPromise(virtualPath); + } + catch (error) { + if (error.code !== `ENOENT`) { + throw error; + } + } + if (currentLink !== undefined && currentLink !== target) + throw new Error(`Conflicting virtual paths (current ${currentLink} != new ${target})`); + if (currentLink === undefined) { + await fslib_1.xfs.symlinkPromise(`${target}/`, virtualPath); + } + }); + return Object.assign({}, sourceFetch, { packageFs: new fslib_1.AliasFS(virtualPath, { baseFs: sourceFetch.packageFs }) }); + } +} +exports.VirtualFetcher = VirtualFetcher; + + +/***/ }), +/* 272 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const WorkspaceResolver_1 = __webpack_require__(273); +class WorkspaceFetcher { + supports(locator) { + if (!locator.reference.startsWith(WorkspaceResolver_1.WorkspaceResolver.protocol)) + return false; + return true; + } + getLocalPath(locator, opts) { + return this.getWorkspace(locator, opts).cwd; + } + async fetch(locator, opts) { + const sourcePath = this.getWorkspace(locator, opts).cwd; + return { packageFs: new fslib_1.JailFS(sourcePath), prefixPath: `/`, localPath: sourcePath }; + } + getWorkspace(locator, opts) { + return opts.project.getWorkspaceByCwd(locator.reference.slice(WorkspaceResolver_1.WorkspaceResolver.protocol.length)); + } +} +exports.WorkspaceFetcher = WorkspaceFetcher; + + +/***/ }), +/* 273 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const Report_1 = __webpack_require__(116); +const types_1 = __webpack_require__(274); +class WorkspaceResolver { + supportsDescriptor(descriptor, opts) { + if (descriptor.range.startsWith(WorkspaceResolver.protocol)) + return true; + const matchingWorkspaces = opts.project.findWorkspacesByDescriptor(descriptor); + if (matchingWorkspaces.length > 0) + return true; + return false; + } + supportsLocator(locator, opts) { + if (!locator.reference.startsWith(WorkspaceResolver.protocol)) + return false; + return true; + } + shouldPersistResolution(locator, opts) { + return false; + } + bindDescriptor(descriptor, fromLocator, opts) { + return descriptor; + } + async getCandidates(descriptor, opts) { + const candidateWorkspaces = opts.project.findWorkspacesByDescriptor(descriptor); + if (candidateWorkspaces.length < 1) { + if (!opts.project.workspacesByIdent.has(descriptor.identHash)) { + throw new Report_1.ReportError(Report_1.MessageName.WORKSPACE_NOT_FOUND, `No local workspace found for this name`); + } + else { + throw new Report_1.ReportError(Report_1.MessageName.WORKSPACE_NOT_FOUND, `No local workspace found for this range`); + } + } + if (candidateWorkspaces.length > 1) + throw new Report_1.ReportError(Report_1.MessageName.TOO_MANY_MATCHING_WORKSPACES, `Too many workspaces match this range, please disambiguate`); + return [candidateWorkspaces[0].anchoredLocator]; + } + async resolve(locator, opts) { + const workspace = opts.project.getWorkspaceByCwd(locator.reference.slice(WorkspaceResolver.protocol.length)); + return Object.assign({}, locator, { version: workspace.manifest.version || `0.0.0`, languageName: `unknown`, linkType: types_1.LinkType.SOFT, dependencies: new Map([...workspace.manifest.dependencies, ...workspace.manifest.devDependencies]), peerDependencies: new Map([...workspace.manifest.peerDependencies]), dependenciesMeta: workspace.manifest.dependenciesMeta, peerDependenciesMeta: workspace.manifest.peerDependenciesMeta }); + } +} +WorkspaceResolver.protocol = `workspace:`; +exports.WorkspaceResolver = WorkspaceResolver; + + +/***/ }), +/* 274 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +; +; +; +var LinkType; +(function (LinkType) { + LinkType["HARD"] = "hard"; + LinkType["SOFT"] = "soft"; +})(LinkType = exports.LinkType || (exports.LinkType = {})); +; +; + + +/***/ }), +/* 275 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const module_1 = __importDefault(__webpack_require__(276)); +function dynamicRequire(request) { + const req = true + ? require + : undefined; + return req(request); +} +exports.dynamicRequire = dynamicRequire; +function builtinModules() { + // @ts-ignore + return new Set(module_1.default.builtinModules || Object.keys(process.binding('natives'))); +} +exports.builtinModules = builtinModules; + + +/***/ }), +/* 276 */ +/***/ (function(module, exports) { + +module.exports = require("module"); + +/***/ }), +/* 277 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var BuildType; +(function (BuildType) { + BuildType[BuildType["SCRIPT"] = 0] = "SCRIPT"; + BuildType[BuildType["SHELLCODE"] = 1] = "SHELLCODE"; +})(BuildType = exports.BuildType || (exports.BuildType = {})); +; +; + + +/***/ }), +/* 278 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const Report_1 = __webpack_require__(116); +class LightReport extends Report_1.Report { + constructor({ configuration, stdout, suggestInstall = true }) { + super(); + this.errorCount = 0; + this.configuration = configuration; + this.stdout = stdout; + this.suggestInstall = suggestInstall; + } + static async start(opts, cb) { + const report = new this(opts); + try { + await cb(report); + } + catch (error) { + report.reportExceptionOnce(error); + } + finally { + await report.finalize(); + } + return report; + } + hasErrors() { + return this.errorCount > 0; + } + exitCode() { + return this.hasErrors() ? 1 : 0; + } + reportCacheHit(locator) { + } + reportCacheMiss(locator) { + } + startTimerSync(what, cb) { + return cb(); + } + async startTimerPromise(what, cb) { + return await cb(); + } + reportInfo(name, text) { + } + reportWarning(name, text) { + } + reportError(name, text) { + this.errorCount += 1; + this.stdout.write(`${this.configuration.format(`➤`, `redBright`)} ${this.formatName(name)}: ${text}\n`); + } + reportJson(data) { + // Just ignore the json output + } + async finalize() { + if (this.errorCount > 0) { + this.stdout.write(`${this.configuration.format(`➤`, `redBright`)} Errors happened when preparing the environment required to run this command.\n`); + if (this.suggestInstall) { + this.stdout.write(`${this.configuration.format(`➤`, `redBright`)} This might be caused by packages being missing from the lockfile, in which case running "berry install" might help.\n`); + } + } + } + formatName(name) { + return `BR` + name.toString(10).padStart(4, `0`); + } +} +exports.LightReport = LightReport; + + +/***/ }), +/* 279 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const parsers_1 = __webpack_require__(102); +const crypto_1 = __webpack_require__(16); +// @ts-ignore +const logic_solver_1 = __importDefault(__webpack_require__(280)); +// @ts-ignore +const p_limit_1 = __importDefault(__webpack_require__(284)); +const path_1 = __webpack_require__(6); +const semver_1 = __importDefault(__webpack_require__(34)); +const tmp_1 = __webpack_require__(110); +const AliasResolver_1 = __webpack_require__(286); +const Installer_1 = __webpack_require__(277); +const LockfileResolver_1 = __webpack_require__(287); +const Manifest_1 = __webpack_require__(112); +const MultiResolver_1 = __webpack_require__(268); +const Report_1 = __webpack_require__(116); +const RunInstallPleaseResolver_1 = __webpack_require__(288); +const ThrowReport_1 = __webpack_require__(289); +const Workspace_1 = __webpack_require__(290); +const YarnResolver_1 = __webpack_require__(475); +const miscUtils = __importStar(__webpack_require__(99)); +const scriptUtils = __importStar(__webpack_require__(100)); +const structUtils = __importStar(__webpack_require__(113)); +// When upgraded, the lockfile entries have to be resolved again (but the specific +// versions are still pinned, no worry). Bump it when you change the fields within +// the Package type; no more no less. +const LOCKFILE_VERSION = 2; +class Project { + constructor(projectCwd, { configuration }) { + // Is meant to be populated by the consumer. When the descriptor referenced by + // the key should be resolved, the second one is resolved instead and its + // result is used as final resolution for the first entry. + this.resolutionAliases = new Map(); + this.workspaces = []; + this.workspacesByCwd = new Map(); + this.workspacesByLocator = new Map(); + this.workspacesByIdent = new Map(); + this.storedResolutions = new Map(); + this.storedDescriptors = new Map(); + this.storedPackages = new Map(); + this.storedChecksums = new Map(); + this.configuration = configuration; + this.cwd = projectCwd; + } + static async find(configuration, startingCwd) { + if (!configuration.projectCwd) + throw new Error(`No project found in the initial directory`); + let packageCwd = null; + let nextCwd = startingCwd; + let currentCwd = null; + while (currentCwd !== configuration.projectCwd) { + currentCwd = nextCwd; + if (fslib_1.xfs.existsSync(`${currentCwd}/package.json`)) + if (!packageCwd) + packageCwd = currentCwd; + nextCwd = path_1.posix.dirname(currentCwd); + } + if (!packageCwd) + throw new Error(`Assertion failed: No manifest found in the project`); + const project = new Project(configuration.projectCwd, { configuration }); + await project.setupResolutions(); + await project.setupWorkspaces(); + // If we're in a workspace, no need to go any further to find which package we're in + const workspace = project.tryWorkspaceByCwd(packageCwd); + if (workspace) + return { project, workspace, locator: workspace.anchoredLocator }; + // Otherwise, we need to ask the project (which will in turn ask the linkers for help) + // Note: the trailing slash is caused by a quirk in the PnP implementation that requires folders to end with a trailing slash to disambiguate them from regular files + const locator = await project.findLocatorForLocation(`${packageCwd}/`); + if (locator) + return { project, locator, workspace: null }; + throw new Error(`Assertion failed: The package should have been detected as part of the project`); + } + async setupResolutions() { + this.storedResolutions = new Map(); + this.storedDescriptors = new Map(); + this.storedPackages = new Map(); + const lockfilePath = `${this.cwd}/${this.configuration.get(`lockfileFilename`)}`; + if (fslib_1.xfs.existsSync(lockfilePath)) { + const content = await fslib_1.xfs.readFilePromise(lockfilePath, `utf8`); + const parsed = parsers_1.parseSyml(content); + // Protects against v1 lockfiles + if (parsed.__metadata) { + const lockfileVersion = parsed.__metadata.version; + for (const key of Object.keys(parsed)) { + if (key === `__metadata`) + continue; + const data = parsed[key]; + const locator = structUtils.parseLocator(data.resolution, true); + const manifest = new Manifest_1.Manifest(); + manifest.load(data); + const version = manifest.version; + const languageName = manifest.languageName || this.configuration.get(`defaultLanguageName`); + const linkType = data.linkType; + const dependencies = manifest.dependencies; + const peerDependencies = manifest.peerDependencies; + const dependenciesMeta = manifest.dependenciesMeta; + const peerDependenciesMeta = manifest.peerDependenciesMeta; + if (data.checksum != null) + this.storedChecksums.set(locator.locatorHash, data.checksum); + if (lockfileVersion >= LOCKFILE_VERSION) { + const pkg = Object.assign({}, locator, { version, languageName, linkType, dependencies, peerDependencies, dependenciesMeta, peerDependenciesMeta }); + this.storedPackages.set(pkg.locatorHash, pkg); + } + for (const entry of key.split(/ *, */g)) { + const descriptor = structUtils.parseDescriptor(entry); + this.storedDescriptors.set(descriptor.descriptorHash, descriptor); + if (lockfileVersion >= LOCKFILE_VERSION) { + // If the lockfile is up-to-date, we can simply register the + // resolution as a done deal. + this.storedResolutions.set(descriptor.descriptorHash, locator.locatorHash); + } + else { + // But if it isn't, then we instead setup an alias so that the + // descriptor will be re-resolved (so that we get to retrieve the + // new fields) while still resolving to the same locators. + const resolutionDescriptor = structUtils.convertLocatorToDescriptor(locator); + if (resolutionDescriptor.descriptorHash !== descriptor.descriptorHash) { + this.storedDescriptors.set(resolutionDescriptor.descriptorHash, resolutionDescriptor); + this.resolutionAliases.set(descriptor.descriptorHash, resolutionDescriptor.descriptorHash); + } + } + } + } + } + } + } + async setupWorkspaces({ force = false } = {}) { + this.workspaces = []; + this.workspacesByCwd = new Map(); + this.workspacesByLocator = new Map(); + this.workspacesByIdent = new Map(); + let workspaceCwds = [this.cwd]; + while (workspaceCwds.length > 0) { + const passCwds = workspaceCwds; + workspaceCwds = []; + for (const workspaceCwd of passCwds) { + if (this.workspacesByCwd.has(workspaceCwd)) + continue; + const workspace = await this.addWorkspace(workspaceCwd); + for (const workspaceCwd of workspace.workspacesCwds) { + workspaceCwds.push(workspaceCwd); + } + } + } + } + async addWorkspace(workspaceCwd) { + const workspace = new Workspace_1.Workspace(workspaceCwd, { project: this }); + await workspace.setup(); + this.workspaces.push(workspace); + this.workspacesByCwd.set(workspaceCwd, workspace); + this.workspacesByLocator.set(workspace.anchoredLocator.locatorHash, workspace); + let byIdent = this.workspacesByIdent.get(workspace.locator.identHash); + if (!byIdent) + this.workspacesByIdent.set(workspace.locator.identHash, byIdent = []); + byIdent.push(workspace); + return workspace; + } + get topLevelWorkspace() { + return this.getWorkspaceByCwd(this.cwd); + } + tryWorkspaceByCwd(workspaceCwd) { + if (!path_1.posix.isAbsolute(workspaceCwd)) + workspaceCwd = path_1.posix.resolve(this.cwd, workspaceCwd); + const workspace = this.workspacesByCwd.get(workspaceCwd); + if (!workspace) + return null; + return workspace; + } + getWorkspaceByCwd(workspaceCwd) { + const workspace = this.tryWorkspaceByCwd(workspaceCwd); + if (!workspace) + throw new Error(`Workspace not found (${workspaceCwd})`); + return workspace; + } + tryWorkspaceByLocator(locator) { + if (structUtils.isVirtualLocator(locator)) + locator = structUtils.devirtualizeLocator(locator); + const workspace = this.workspacesByLocator.get(locator.locatorHash); + if (!workspace) + return null; + return workspace; + } + getWorkspaceByLocator(locator) { + const workspace = this.tryWorkspaceByLocator(locator); + if (!workspace) + throw new Error(`Workspace not found (${structUtils.prettyLocator(this.configuration, locator)})`); + return workspace; + } + findWorkspacesByDescriptor(descriptor) { + const candidateWorkspaces = this.workspacesByIdent.get(descriptor.identHash); + if (!candidateWorkspaces) + return []; + return candidateWorkspaces.filter(workspace => { + return workspace.accepts(descriptor.range); + }); + } + forgetTransientResolutions() { + const resolver = this.configuration.makeResolver(); + const forgottenPackages = new Set(); + for (const pkg of this.storedPackages.values()) { + if (!resolver.shouldPersistResolution(pkg, { project: this, resolver })) { + this.storedPackages.delete(pkg.locatorHash); + forgottenPackages.add(pkg.locatorHash); + } + } + for (const [descriptorHash, locatorHash] of this.storedResolutions) { + if (forgottenPackages.has(locatorHash)) { + this.storedResolutions.delete(descriptorHash); + this.storedDescriptors.delete(descriptorHash); + } + } + } + getDependencyMeta(ident, version) { + const dependencyMeta = {}; + const dependenciesMeta = this.topLevelWorkspace.manifest.dependenciesMeta; + const dependencyMetaSet = dependenciesMeta.get(structUtils.stringifyIdent(ident)); + if (!dependencyMetaSet) + return dependencyMeta; + const defaultMeta = dependencyMetaSet.get(null); + if (defaultMeta) + Object.assign(dependencyMeta, defaultMeta); + if (version === null || !semver_1.default.valid(version)) + return dependencyMeta; + for (const [range, meta] of dependencyMetaSet) + if (range !== null && range === version) + Object.assign(dependencyMeta, meta); + return dependencyMeta; + } + async findLocatorForLocation(cwd) { + const report = new ThrowReport_1.ThrowReport(); + const linkers = this.configuration.getLinkers(); + const linkerOptions = { project: this, report }; + for (const linker of linkers) { + const locator = await linker.findPackageLocator(cwd, linkerOptions); + if (locator) { + return locator; + } + } + return null; + } + async resolveEverything({ cache, report, lockfileOnly }) { + if (!this.workspacesByCwd || !this.workspacesByIdent) + throw new Error(`Workspaces must have been setup before calling this function`); + // Note that the resolution process is "offline" until everything has been + // successfully resolved; all the processing is expected to have zero side + // effects until we're ready to set all the variables at once (the one + // exception being when a resolver needs to fetch a package, in which case + // we might need to populate the cache). + // + // This makes it possible to use the same Project instance for multiple + // purposes at the same time (since `resolveEverything` is async, it might + // happen that we want to do something while waiting for it to end; if we + // were to mutate the project then it would end up in a partial state that + // could lead to hard-to-debug issues). + const yarnResolver = new YarnResolver_1.YarnResolver(); + await yarnResolver.setup(this, { report }); + const realResolver = this.configuration.makeResolver(); + const resolver = lockfileOnly + ? new MultiResolver_1.MultiResolver([new LockfileResolver_1.LockfileResolver(), new RunInstallPleaseResolver_1.RunInstallPleaseResolver(realResolver)]) + : new AliasResolver_1.AliasResolver(new MultiResolver_1.MultiResolver([new LockfileResolver_1.LockfileResolver(), yarnResolver, realResolver])); + const fetcher = this.configuration.makeFetcher(); + const resolverOptions = { checksums: this.storedChecksums, project: this, cache, fetcher, report, resolver }; + const allDescriptors = new Map(); + const allPackages = new Map(); + const allResolutions = new Map(); + const haveBeenAliased = new Set(); + let mustBeResolved = new Set(); + for (const workspace of this.workspaces) { + const workspaceDescriptor = workspace.anchoredDescriptor; + allDescriptors.set(workspaceDescriptor.descriptorHash, workspaceDescriptor); + mustBeResolved.add(workspaceDescriptor.descriptorHash); + } + while (mustBeResolved.size !== 0) { + // We remove from the "mustBeResolved" list all packages that have + // already been resolved previously. + for (const descriptorHash of mustBeResolved) + if (allResolutions.has(descriptorHash)) + mustBeResolved.delete(descriptorHash); + // Then we request the resolvers for the list of possible references that + // match the given ranges. That will give us a set of candidate references + // for each descriptor. + const passCandidates = new Map(await Promise.all(Array.from(mustBeResolved).map(async (descriptorHash) => { + const descriptor = allDescriptors.get(descriptorHash); + if (!descriptor) + throw new Error(`Assertion failed: The descriptor should have been registered`); + let candidateLocators; + try { + candidateLocators = await resolver.getCandidates(descriptor, resolverOptions); + } + catch (error) { + error.message = `${structUtils.prettyDescriptor(this.configuration, descriptor)}: ${error.message}`; + throw error; + } + if (candidateLocators.length === 0) + throw new Error(`No candidate found for ${structUtils.prettyDescriptor(this.configuration, descriptor)}`); + return [descriptor.descriptorHash, candidateLocators]; + }))); + // That's where we'll store our resolutions until everything has been + // resolved and can be injected into the various stores. + // + // The reason we're storing them in a temporary store instead of writing + // them directly into the global ones is that otherwise we would end up + // with different store orderings between dependency loaded from a + // lockfiles and those who don't (when using a lockfile all descriptors + // will fall into the next shortcut, but when no lockfile is there only + // some of them will; since maps are sorted by insertion, it would affect + // the way they would be ordered). + const passResolutions = new Map(); + // We now make a pre-pass to automatically resolve the descriptors that + // can only be satisfied by a single reference. + for (const [descriptorHash, candidateLocators] of passCandidates) { + if (candidateLocators.length !== 1) + continue; + passResolutions.set(descriptorHash, candidateLocators[0]); + passCandidates.delete(descriptorHash); + } + // We make a second pre-pass to automatically resolve the descriptors + // that can be satisfied by a package we're already using (deduplication). + for (const [descriptorHash, candidateLocators] of passCandidates) { + const selectedLocator = candidateLocators.find(locator => allPackages.has(locator.locatorHash)); + if (!selectedLocator) + continue; + passResolutions.set(descriptorHash, selectedLocator); + passCandidates.delete(descriptorHash); + } + // All entries that remain in "passCandidates" are from descriptors that + // we haven't been able to resolve in the first place. We'll now configure + // our SAT solver so that it can figure it out for us. To do this, we + // simply add a constraint for each descriptor that lists all the + // descriptors it would accept. We don't have to check whether the + // locators obtained have already been selected, because if they were the + // would have been resolved in the previous step (we never backtrace to + // try to find better solutions, it would be a too expensive process - we + // just want to get an acceptable solution, not the very best one). + if (passCandidates.size > 0) { + const solver = new logic_solver_1.default.Solver(); + for (const candidateLocators of passCandidates.values()) + solver.require(logic_solver_1.default.or(...candidateLocators.map(locator => locator.locatorHash))); + let remainingSolutions = 100; + let solution; + let bestSolution = null; + let bestScore = Infinity; + while (remainingSolutions > 0 && (solution = solver.solve()) !== null) { + const trueVars = solution.getTrueVars(); + solver.forbid(solution.getFormula()); + if (trueVars.length < bestScore) { + bestSolution = trueVars; + bestScore = trueVars.length; + } + remainingSolutions -= 1; + } + if (!bestSolution) + throw new Error(`Assertion failed: No resolution found by the SAT solver`); + const solutionSet = new Set(bestSolution); + for (const [descriptorHash, candidateLocators] of passCandidates.entries()) { + const selectedLocator = candidateLocators.find(locator => solutionSet.has(locator.locatorHash)); + if (!selectedLocator) + throw new Error(`Assertion failed: The descriptor should have been solved during the previous step`); + passResolutions.set(descriptorHash, selectedLocator); + passCandidates.delete(descriptorHash); + } + } + // We now iterate over the locators we've got and, for each of them that + // hasn't been seen before, we fetch its dependency list and schedule + // them for the next cycle. + const newLocators = Array.from(passResolutions.values()).filter(locator => { + return !allPackages.has(locator.locatorHash); + }); + const newPackages = new Map(await Promise.all(newLocators.map(async (locator) => { + let pkg = await miscUtils.prettifyAsyncErrors(async () => { + return await resolver.resolve(locator, resolverOptions); + }, message => { + return `${structUtils.prettyLocator(this.configuration, locator)}: ${message}`; + }); + if (!structUtils.areLocatorsEqual(locator, pkg)) + throw new Error(`Assertion failed: The locator cannot be changed by the resolver (went from ${structUtils.prettyLocator(this.configuration, locator)} to ${structUtils.prettyLocator(this.configuration, pkg)})`); + const rawDependencies = pkg.dependencies; + const rawPeerDependencies = pkg.peerDependencies; + const dependencies = pkg.dependencies = new Map(); + const peerDependencies = pkg.peerDependencies = new Map(); + for (const descriptor of miscUtils.sortMap(rawDependencies.values(), descriptor => structUtils.stringifyIdent(descriptor))) { + const normalizedDescriptor = resolver.bindDescriptor(descriptor, locator, resolverOptions); + dependencies.set(normalizedDescriptor.identHash, normalizedDescriptor); + } + for (const descriptor of miscUtils.sortMap(rawPeerDependencies.values(), descriptor => structUtils.stringifyIdent(descriptor))) + peerDependencies.set(descriptor.identHash, descriptor); + return [pkg.locatorHash, pkg]; + }))); + // Now that the resolution is finished, we can finally insert the data + // stored inside our pass stores into the resolution ones (we now have + // the guarantee that they'll always be inserted into in the same order, + // since mustBeResolved is stable regardless of the order in which the + // resolvers return) + const haveBeenResolved = mustBeResolved; + mustBeResolved = new Set(); + for (const descriptorHash of haveBeenResolved) { + const locator = passResolutions.get(descriptorHash); + if (!locator) + throw new Error(`Assertion failed: The locator should have been registered`); + allResolutions.set(descriptorHash, locator.locatorHash); + const pkg = newPackages.get(locator.locatorHash); + if (!pkg) + continue; + allPackages.set(pkg.locatorHash, pkg); + for (const descriptor of pkg.dependencies.values()) { + allDescriptors.set(descriptor.descriptorHash, descriptor); + mustBeResolved.add(descriptor.descriptorHash); + // We must check and make sure that the descriptor didn't get aliased + // to something else + const aliasHash = this.resolutionAliases.get(descriptor.descriptorHash); + if (aliasHash === undefined) + continue; + // It doesn't cost us much to support the case where a descriptor is + // equal to its own alias (which should mean "no alias") + if (descriptor.descriptorHash === aliasHash) + continue; + const alias = this.storedDescriptors.get(aliasHash); + if (!alias) + throw new Error(`Assertion failed: The alias should have been registered`); + // If it's already been "resolved" (in reality it will be the temporary + // resolution we've set in the next few lines) we simply must skip it + if (allResolutions.has(descriptor.descriptorHash)) + continue; + // Temporarily set an invalid resolution so that it won't be resolved + // multiple times if it is found multiple times in the dependency + // tree (this is only temporary, we will replace it by the actual + // resolution after we've finished resolving everything) + allResolutions.set(descriptor.descriptorHash, `temporary`); + // We can now replace the descriptor by its alias in the list of + // descriptors that must be resolved + mustBeResolved.delete(descriptor.descriptorHash); + mustBeResolved.add(aliasHash); + allDescriptors.set(aliasHash, alias); + haveBeenAliased.add(descriptor.descriptorHash); + } + } + } + // Each package that should have been resolved but was skipped because it + // was aliased will now see the resolution for its alias propagated to it + while (haveBeenAliased.size > 0) { + let hasChanged = false; + for (const descriptorHash of haveBeenAliased) { + const descriptor = allDescriptors.get(descriptorHash); + if (!descriptor) + throw new Error(`Assertion failed: The descriptor should have been registered`); + const aliasHash = this.resolutionAliases.get(descriptorHash); + if (aliasHash === undefined) + throw new Error(`Assertion failed: The descriptor should have an alias`); + const resolution = allResolutions.get(aliasHash); + if (resolution === undefined) + throw new Error(`Assertion failed: The resolution should have been registered`); + // The following can happen if a package gets aliased to another package + // that's itself aliased - in this case we just process all those we can + // do, then make new passes until everything is resolved + if (resolution === `temporary`) + continue; + haveBeenAliased.delete(descriptorHash); + allResolutions.set(descriptorHash, resolution); + hasChanged = true; + } + if (!hasChanged) { + throw new Error(`Alias loop detected`); + } + } + // In this step we now create virtual packages for each package with at + // least one peer dependency. We also use it to search for the alias + // descriptors that aren't depended upon by anything and can be safely + // pruned. + const hasBeenTraversed = new Set(); + const volatileDescriptors = new Set(this.resolutionAliases.values()); + const resolvePeerDependencies = (parentLocator) => { + if (hasBeenTraversed.has(parentLocator.locatorHash)) + return; + hasBeenTraversed.add(parentLocator.locatorHash); + const parentPackage = allPackages.get(parentLocator.locatorHash); + if (!parentPackage) + throw new Error(`Assertion failed: The package (${structUtils.prettyLocator(this.configuration, parentLocator)}) should have been registered`); + const subResolutions = []; + const firstPass = []; + const secondPass = []; + const thirdPass = []; + const fourthPass = []; + // During this first pass we virtualize the descriptors. This allows us + // to reference them from their sibling without being order-dependent, + // which is required to solve cases where packages with peer dependencies + // have peer dependencies themselves. + for (const descriptor of Array.from(parentPackage.dependencies.values())) { + if (parentPackage.peerDependencies.has(descriptor.identHash)) + continue; + volatileDescriptors.delete(descriptor.descriptorHash); + if (descriptor.range === `missing:`) + continue; + const resolution = allResolutions.get(descriptor.descriptorHash); + if (!resolution) + throw new Error(`Assertion failed: The resolution (${structUtils.prettyDescriptor(this.configuration, descriptor)}) should have been registered`); + const pkg = allPackages.get(resolution); + if (!pkg) + throw new Error(`Assertion failed: The package (${resolution}, resolved from ${structUtils.prettyDescriptor(this.configuration, descriptor)}) should have been registered`); + if (pkg.peerDependencies.size === 0) { + resolvePeerDependencies(pkg); + continue; + } + let virtualizedDescriptor; + let virtualizedPackage; + const missingPeerDependencies = new Set(); + firstPass.push(() => { + virtualizedDescriptor = structUtils.virtualizeDescriptor(descriptor, parentLocator.locatorHash); + virtualizedPackage = structUtils.virtualizePackage(pkg, parentLocator.locatorHash); + parentPackage.dependencies.delete(descriptor.identHash); + parentPackage.dependencies.set(virtualizedDescriptor.identHash, virtualizedDescriptor); + allResolutions.set(virtualizedDescriptor.descriptorHash, virtualizedPackage.locatorHash); + allDescriptors.set(virtualizedDescriptor.descriptorHash, virtualizedDescriptor); + allPackages.set(virtualizedPackage.locatorHash, virtualizedPackage); + }); + secondPass.push(() => { + for (const peerRequest of virtualizedPackage.peerDependencies.values()) { + let peerDescriptor = parentPackage.dependencies.get(peerRequest.identHash); + if (!peerDescriptor && structUtils.areIdentsEqual(parentLocator, peerRequest)) { + peerDescriptor = structUtils.convertLocatorToDescriptor(parentLocator); + allDescriptors.set(peerDescriptor.descriptorHash, peerDescriptor); + allResolutions.set(peerDescriptor.descriptorHash, parentLocator.locatorHash); + } + if (!peerDescriptor) { + if (!parentPackage.peerDependencies.has(peerRequest.identHash)) { + const peerDependencyMeta = virtualizedPackage.peerDependenciesMeta.get(structUtils.stringifyIdent(peerRequest)); + if (!peerDependencyMeta || !peerDependencyMeta.optional) { + report.reportWarning(Report_1.MessageName.MISSING_PEER_DEPENDENCY, `${structUtils.prettyLocator(this.configuration, parentLocator)} doesn't provide ${structUtils.prettyDescriptor(this.configuration, peerRequest)} requested by ${structUtils.prettyLocator(this.configuration, pkg)}`); + } + } + peerDescriptor = structUtils.makeDescriptor(peerRequest, `missing:`); + } + if (peerDescriptor.range === `missing:`) { + missingPeerDependencies.add(peerDescriptor.descriptorHash); + } + else { + virtualizedPackage.dependencies.set(peerDescriptor.identHash, peerDescriptor); + } + } + // Since we've had to add new dependencies we need to sort them all over again + virtualizedPackage.dependencies = new Map(miscUtils.sortMap(virtualizedPackage.dependencies, ([identHash, descriptor]) => { + return structUtils.stringifyIdent(descriptor); + })); + }); + thirdPass.push(() => { + resolvePeerDependencies(virtualizedPackage); + }); + fourthPass.push(() => { + for (const missingPeerDependency of missingPeerDependencies) { + virtualizedPackage.dependencies.delete(missingPeerDependency); + } + }); + } + const allPasses = [ + ...firstPass, + ...secondPass, + ...thirdPass, + ...fourthPass + ]; + for (const fn of allPasses) { + fn(); + } + }; + for (const workspace of this.workspaces) + resolvePeerDependencies(workspace.anchoredLocator); + // All descriptors still referenced within the volatileDescriptors set are + // descriptors that aren't depended upon by anything in the dependency tree. + for (const descriptorHash of volatileDescriptors) { + allDescriptors.delete(descriptorHash); + allResolutions.delete(descriptorHash); + } + // Import the dependencies for each resolved workspaces into their own + // Workspace instance. + for (const workspace of this.workspaces) { + const pkg = allPackages.get(workspace.anchoredLocator.locatorHash); + if (!pkg) + throw new Error(`Assertion failed: Expected workspace to have been resolved`); + workspace.dependencies = new Map(pkg.dependencies); + } + // Everything is done, we can now update our internal resolutions to + // reference the new ones + this.storedResolutions = allResolutions; + this.storedDescriptors = allDescriptors; + this.storedPackages = allPackages; + } + async fetchEverything({ cache, report, fetcher: userFetcher }) { + const fetcher = userFetcher || this.configuration.makeFetcher(); + const fetcherOptions = { checksums: this.storedChecksums, project: this, cache, fetcher, report }; + const locatorHashes = miscUtils.sortMap(this.storedResolutions.values(), [(locatorHash) => { + const pkg = this.storedPackages.get(locatorHash); + if (!pkg) + throw new Error(`Assertion failed: The locator should have been registered`); + return structUtils.stringifyLocator(pkg); + }]); + const limit = p_limit_1.default(5); + let firstError = false; + await Promise.all(locatorHashes.map(locatorHash => limit(async () => { + const pkg = this.storedPackages.get(locatorHash); + if (!pkg) + throw new Error(`Assertion failed: The locator should have been registered`); + let fetchResult; + try { + fetchResult = await fetcher.fetch(pkg, fetcherOptions); + } + catch (error) { + error.message = `${structUtils.prettyLocator(this.configuration, pkg)}: ${error.message}`; + report.reportExceptionOnce(error); + firstError = error; + return; + } + if (fetchResult.checksum) + this.storedChecksums.set(pkg.locatorHash, fetchResult.checksum); + else + this.storedChecksums.delete(pkg.locatorHash); + if (fetchResult.releaseFs) { + fetchResult.releaseFs(); + } + }))); + if (firstError) { + throw firstError; + } + } + async linkEverything({ cache, report }) { + const fetcher = this.configuration.makeFetcher(); + const fetcherOptions = { checksums: this.storedChecksums, project: this, cache, fetcher, report }; + const linkers = this.configuration.getLinkers(); + const linkerOptions = { project: this, report }; + const installers = new Map(linkers.map(linker => { + return [linker, linker.makeInstaller(linkerOptions)]; + })); + const packageLinkers = new Map(); + const packageLocations = new Map(); + const packageBuildDirectives = new Map(); + // Step 1: Installing the packages on the disk + for (const pkg of this.storedPackages.values()) { + const linker = linkers.find(linker => linker.supportsPackage(pkg, linkerOptions)); + if (!linker) + throw new Report_1.ReportError(Report_1.MessageName.LINKER_NOT_FOUND, `${structUtils.prettyLocator(this.configuration, pkg)} isn't supported by any available linker`); + const installer = installers.get(linker); + if (!installer) + throw new Error(`Assertion failed: The installer should have been registered`); + const fetchResult = await fetcher.fetch(pkg, fetcherOptions); + let installStatus; + try { + installStatus = await installer.installPackage(pkg, fetchResult); + } + finally { + if (fetchResult.releaseFs) { + fetchResult.releaseFs(); + } + } + packageLinkers.set(pkg.locatorHash, linker); + packageLocations.set(pkg.locatorHash, installStatus.packageLocation); + if (installStatus.buildDirective) { + packageBuildDirectives.set(pkg.locatorHash, installStatus.buildDirective); + } + } + // Step 2: Link packages together + const externalDependents = new Map(); + for (const pkg of this.storedPackages.values()) { + const packageLinker = packageLinkers.get(pkg.locatorHash); + if (!packageLinker) + throw new Error(`Assertion failed: The linker should have been found`); + const installer = installers.get(packageLinker); + if (!installer) + throw new Error(`Assertion failed: The installer should have been registered`); + const packageLocation = packageLocations.get(pkg.locatorHash); + if (!packageLocation) + throw new Error(`Assertion failed: The package (${structUtils.prettyLocator(this.configuration, pkg)}) should have been registered`); + const internalDependencies = []; + for (const descriptor of pkg.dependencies.values()) { + const resolution = this.storedResolutions.get(descriptor.descriptorHash); + if (!resolution) + throw new Error(`Assertion failed: The resolution (${structUtils.prettyDescriptor(this.configuration, descriptor)}) should have been registered`); + const dependency = this.storedPackages.get(resolution); + if (!dependency) + throw new Error(`Assertion failed: The package (${resolution}, resolved from ${structUtils.prettyDescriptor(this.configuration, descriptor)}) should have been registered`); + const dependencyLinker = packageLinkers.get(resolution); + if (!dependencyLinker) + throw new Error(`Assertion failed: The package (${resolution}, resolved from ${structUtils.prettyDescriptor(this.configuration, descriptor)}) should have been registered`); + if (dependencyLinker === packageLinker) { + internalDependencies.push(dependency); + } + else { + let externalEntry = externalDependents.get(resolution); + if (!externalEntry) + externalDependents.set(resolution, externalEntry = []); + externalEntry.push(packageLocation); + } + } + await installer.attachInternalDependencies(pkg, internalDependencies); + } + for (const [locatorHash, dependentPaths] of externalDependents) { + const pkg = this.storedPackages.get(locatorHash); + if (!pkg) + throw new Error(`Assertion failed: The package should have been registered`); + const packageLinker = packageLinkers.get(pkg.locatorHash); + if (!packageLinker) + throw new Error(`Assertion failed: The linker should have been found`); + const installer = installers.get(packageLinker); + if (!installer) + throw new Error(`Assertion failed: The installer should have been registered`); + await installer.attachExternalDependents(pkg, dependentPaths); + } + // Step 3: Inform our linkers that they should have all the info needed + for (const installer of installers.values()) + await installer.finalizeInstall(); + // Step 4: Build the packages in multiple steps + const readyPackages = new Set(this.storedPackages.keys()); + const buildablePackages = new Set(packageBuildDirectives.keys()); + for (const locatorHash of buildablePackages) + readyPackages.delete(locatorHash); + // We'll use this function is order to compute a hash for each package + // that exposes a build directive. If the hash changes compared to the + // previous run, the package is rebuilt. This has the advantage of making + // the rebuilds much more predictable than before, and to give us the tools + // later to improve this further by explaining *why* a rebuild happened. + const getBuildHash = (locator) => { + const hash = crypto_1.createHmac(`sha512`, `berry`); + const traverse = (locatorHash, seenPackages = new Set()) => { + hash.update(locatorHash); + if (!seenPackages.has(locatorHash)) + seenPackages.add(locatorHash); + else + return; + const pkg = this.storedPackages.get(locatorHash); + if (!pkg) + throw new Error(`Assertion failed: The package should have been registered`); + for (const dependency of pkg.dependencies.values()) { + const resolution = this.storedResolutions.get(dependency.descriptorHash); + if (!resolution) + throw new Error(`Assertion failed: The resolution (${structUtils.prettyDescriptor(this.configuration, dependency)}) should have been registered`); + traverse(resolution, new Set(seenPackages)); + } + }; + traverse(locator.locatorHash); + return hash.digest(`hex`); + }; + const bstatePath = this.configuration.get(`bstatePath`); + const bstate = fslib_1.xfs.existsSync(bstatePath) + ? parsers_1.parseSyml(await fslib_1.xfs.readFilePromise(bstatePath, `utf8`)) + : {}; + while (buildablePackages.size > 0) { + const savedSize = buildablePackages.size; + const buildPromises = []; + for (const locatorHash of buildablePackages) { + const pkg = this.storedPackages.get(locatorHash); + if (!pkg) + throw new Error(`Assertion failed: The package should have been registered`); + let isBuildable = true; + for (const dependency of pkg.dependencies.values()) { + const resolution = this.storedResolutions.get(dependency.descriptorHash); + if (!resolution) + throw new Error(`Assertion failed: The resolution (${structUtils.prettyDescriptor(this.configuration, dependency)}) should have been registered`); + if (buildablePackages.has(resolution)) { + isBuildable = false; + break; + } + } + // Wait until all dependencies of the current package have been built + // before trying to build it (since it might need them to build itself) + if (!isBuildable) + continue; + buildablePackages.delete(locatorHash); + const buildHash = getBuildHash(pkg); + // No need to rebuild the package if its hash didn't change + if (Object.prototype.hasOwnProperty.call(bstate, pkg.locatorHash) && bstate[pkg.locatorHash] === buildHash) + continue; + if (Object.prototype.hasOwnProperty.call(bstate, pkg.locatorHash)) + report.reportInfo(Report_1.MessageName.MUST_REBUILD, `${structUtils.prettyLocator(this.configuration, pkg)} must be rebuilt because its dependency tree changed`); + else + report.reportInfo(Report_1.MessageName.MUST_BUILD, `${structUtils.prettyLocator(this.configuration, pkg)} must be built because it never did before or the last one failed`); + const buildDirective = packageBuildDirectives.get(pkg.locatorHash); + if (!buildDirective) + throw new Error(`Assertion failed: The build directive should have been registered`); + buildPromises.push((async () => { + for (const [buildType, scriptName] of buildDirective) { + const logFile = tmp_1.tmpNameSync({ + prefix: `buildfile-`, + postfix: `.log`, + }); + const stdin = null; + const stdout = fslib_1.xfs.createWriteStream(logFile); + const stderr = stdout; + stdout.write(`# This file contains the result of Yarn building a package (${structUtils.stringifyLocator(pkg)})\n`); + stdout.write(`\n`); + let exitCode; + if (buildType === Installer_1.BuildType.SCRIPT) + exitCode = await scriptUtils.executePackageScript(pkg, scriptName, [], { project: this, stdin, stdout, stderr }); + else if (buildType === Installer_1.BuildType.SHELLCODE) + exitCode = await scriptUtils.executePackageShellcode(pkg, scriptName, [], { project: this, stdin, stdout, stderr }); + if (exitCode === 0) { + bstate[pkg.locatorHash] = buildHash; + } + else { + report.reportError(Report_1.MessageName.BUILD_FAILED, `${structUtils.prettyLocator(this.configuration, pkg)} couldn't be built successfully (exit code ${exitCode}, logs can be found here: ${logFile})`); + delete bstate[pkg.locatorHash]; + break; + } + } + })()); + } + await Promise.all(buildPromises); + // If we reach this code, it means that we have circular dependencies + // somewhere. Worst, it means that the circular dependencies both have + // build scripts, making them unsatisfiable. + if (savedSize === buildablePackages.size) { + const prettyLocators = Array.from(buildablePackages).map(locatorHash => { + const pkg = this.storedPackages.get(locatorHash); + if (!pkg) + throw new Error(`Assertion failed: The package should have been registered`); + return structUtils.prettyLocator(this.configuration, pkg); + }).join(`, `); + report.reportError(Report_1.MessageName.CYCLIC_DEPENDENCIES, `Some packages have circular dependencies that make their build order unsatisfiable - as a result they won't be built (affected packages are: ${prettyLocators})`); + break; + } + } + const bstateHeader = `# Warning: This file is automatically generated. Removing it is fine, but will\n# cause all your builds to become invalidated.\n\n`; + await fslib_1.xfs.mkdirpPromise(path_1.posix.dirname(bstatePath)); + await fslib_1.xfs.changeFilePromise(bstatePath, bstateHeader + parsers_1.stringifySyml(bstate)); + } + async install(opts) { + await opts.report.startTimerPromise(`Resolution step`, async () => { + // If we operate with a frozen lockfile, we take a snapshot of it to later make sure it didn't change + const initialLockfile = opts.frozenLockfile ? this.generateLockfile() : null; + // Ensures that we notice it when dependencies are added / removed from all sources coming from the filesystem + if (!opts.lockfileOnly) + await this.forgetTransientResolutions(); + await this.resolveEverything(opts); + if (opts.frozenLockfile && this.generateLockfile() !== initialLockfile) { + throw new Report_1.ReportError(Report_1.MessageName.FROZEN_LOCKFILE_EXCEPTION, `The lockfile would have been modified by this install, which is explicitly forbidden`); + } + }); + await opts.report.startTimerPromise(`Fetch step`, async () => { + await this.fetchEverything(opts); + }); + await this.persist(); + await opts.report.startTimerPromise(`Link step`, async () => { + await this.linkEverything(opts); + }); + await this.configuration.triggerHook(hooks => { + return hooks.afterAllInstalled; + }, this); + } + generateLockfile() { + // We generate the data structure that will represent our lockfile. To do this, we create a + // reverse lookup table, where the key will be the resolved locator and the value will be a set + // of all the descriptors that resolved to it. Then we use it to construct an optimized version + // if the final object. + const reverseLookup = new Map(); + for (const [descriptorHash, locatorHash] of this.storedResolutions.entries()) { + let descriptorHashes = reverseLookup.get(locatorHash); + if (!descriptorHashes) + reverseLookup.set(locatorHash, descriptorHashes = new Set()); + descriptorHashes.add(descriptorHash); + } + const optimizedLockfile = {}; + optimizedLockfile[`__metadata`] = { + version: LOCKFILE_VERSION, + }; + for (const [locatorHash, descriptorHashes] of reverseLookup.entries()) { + const pkg = this.storedPackages.get(locatorHash); + if (!pkg) + throw new Error(`Assertion failed: The package should have been registered`); + // Virtual packages are not persisted into the lockfile: they need to be + // recomputed at runtime through "resolveEverything". We do this (instead + // of "forgetting" them when reading the file like for "link:" locators + // or workspaces) because it would otherwise be super annoying to manually + // change the resolutions from a lockfile (since you'd need to also update + // all its virtual instances). Also it would take a bunch of useless space. + if (structUtils.isVirtualLocator(pkg)) + continue; + const descriptors = []; + for (const descriptorHash of descriptorHashes) { + const descriptor = this.storedDescriptors.get(descriptorHash); + if (!descriptor) + throw new Error(`Assertion failed: The descriptor should have been registered`); + descriptors.push(descriptor); + } + const key = descriptors.map(descriptor => { + return structUtils.stringifyDescriptor(descriptor); + }).sort().join(`, `); + const manifest = new Manifest_1.Manifest(); + manifest.version = pkg.version; + manifest.languageName = pkg.languageName; + manifest.dependencies = new Map(pkg.dependencies); + manifest.peerDependencies = new Map(pkg.peerDependencies); + manifest.dependenciesMeta = new Map(pkg.dependenciesMeta); + manifest.peerDependenciesMeta = new Map(pkg.peerDependenciesMeta); + // Since we don't keep the virtual packages in the lockfile, we must make + // sure we don't reference them within the dependencies of our packages + for (const [identHash, descriptor] of manifest.dependencies) + if (structUtils.isVirtualDescriptor(descriptor)) + manifest.dependencies.set(identHash, structUtils.devirtualizeDescriptor(descriptor)); + const serialized = (() => { + // Remove the fields we're not interested in to only keep the ones we want + const { identHash, scope, name, locatorHash, reference, dependencies, peerDependencies } = pkg, rest = __rest(pkg, ["identHash", "scope", "name", "locatorHash", "reference", "dependencies", "peerDependencies"]); + return rest; + })(); + manifest.exportTo(serialized); + optimizedLockfile[key] = Object.assign({}, serialized, { resolution: structUtils.stringifyLocator(pkg), checksum: this.storedChecksums.get(pkg.locatorHash) }); + } + const header = [ + `# This file is generated by running "berry install" inside your project.\n`, + `# Manual changes might be lost - proceed with caution!\n` + ].join(``) + `\n`; + return header + parsers_1.stringifySyml(optimizedLockfile); + } + async persistLockfile() { + const lockfilePath = `${this.cwd}/${this.configuration.get(`lockfileFilename`)}`; + const lockfileContent = this.generateLockfile(); + await fslib_1.xfs.changeFilePromise(lockfilePath, lockfileContent); + } + async persist() { + await this.persistLockfile(); + for (const workspace of this.workspacesByCwd.values()) { + await workspace.persistManifest(); + } + } +} +exports.Project = Project; + + +/***/ }), +/* 280 */ +/***/ (function(module, exports, __webpack_require__) { + +var MiniSat = __webpack_require__(281); +var _ = __webpack_require__(283); +var Logic; +Logic = {}; + +////////// TYPE TESTERS + + +// Set the `description` property of a tester function and return the function. +var withDescription = function (description, tester) { + tester.description = description; + return tester; +}; + +// Create a function (x) => (x instanceof constructor), but possibly before +// constructor is available. For example, if Logic.Formula hasn't been +// assigned yet, passing Logic for `obj` and "Formula" for `constructorName` +// will still work. +var lazyInstanceofTester = function (description, obj, constructorName) { + return withDescription(description, function (x) { + return x instanceof obj[constructorName]; + }); +}; + + +///// PUBLIC TYPE TESTERS + +// All variables have a name and a number. The number is mainly used +// internally, and it's what's given to MiniSat. Names and numbers +// are interchangeable, which is convenient for doing manipulation +// of terms in a way that works before or after variable names are +// converted to numbers. + +// Term: a variable name or variable number, optionally +// negated (meaning "boolean not"). For example, +// `1`, `-1`, `"foo"`, or `"-foo"`. All variables have +// internal numbers that start at 1, so "foo" might be +// variable number 1, for example. Any number of leading +// "-" will be parsed in the string form, but we try to +// keep it to either one or zero of them. + +Logic.isNumTerm = withDescription('a NumTerm (non-zero integer)', + function (x) { + // 32-bit integer, but not 0 + return (x === (x | 0)) && x !== 0; + }); + +// NameTerm must not be empty, or just `-` characters, or look like a +// number. Specifically, it can't be zero or more `-` followed by +// zero or more digits. +Logic.isNameTerm = withDescription('a NameTerm (string)', + function (x) { + return (typeof x === 'string') && + ! /^-*[0-9]*$/.test(x); + }); + +Logic.isTerm = withDescription('a Term (appropriate string or number)', + function (x) { + return Logic.isNumTerm(x) || + Logic.isNameTerm(x); + }); + +// WholeNumber: a non-negative integer (0 is allowed) +Logic.isWholeNumber = withDescription('a whole number (integer >= 0)', + function (x) { + return (x === (x | 0)) && x >= 0; + }); + +Logic.isFormula = lazyInstanceofTester('a Formula', Logic, 'Formula'); +Logic.isClause = lazyInstanceofTester('a Clause', Logic, 'Clause'); +Logic.isBits = lazyInstanceofTester('a Bits', Logic, 'Bits'); + +///// UNDOCUMENTED TYPE TESTERS + +Logic._isInteger = withDescription( + 'an integer', function (x) { return x === (x | 0); }); + +Logic._isFunction = withDescription( + 'a Function', function (x) { return typeof x === 'function'; }); + +Logic._isString = withDescription( + 'a String', function (x) { return typeof x === 'string'; }); + +Logic._isArrayWhere = function (tester) { + var description = 'an array'; + if (tester.description) { + description += ' of ' + tester.description; + } + return withDescription(description, function (x) { + if (! _.isArray(x)) { + return false; + } else { + for (var i = 0; i < x.length; i++) { + if (! tester(x[i])) { + return false; + } + } + return true; + } + }); +}; + +Logic._isFormulaOrTerm = withDescription('a Formula or Term', + function (x) { + return Logic.isFormula(x) || + Logic.isTerm(x); + }); + + +Logic._isFormulaOrTermOrBits = withDescription('a Formula, Term, or Bits', + function (x) { + return Logic.isFormula(x) || + Logic.isBits(x) || + Logic.isTerm(x); + }); +Logic._MiniSat = MiniSat; // Expose for testing and poking around + +// import the private testers from types.js +var isInteger = Logic._isInteger; +var isFunction = Logic._isFunction; +var isString = Logic._isString; +var isArrayWhere = Logic._isArrayWhere; +var isFormulaOrTerm = Logic._isFormulaOrTerm; +var isFormulaOrTermOrBits = Logic._isFormulaOrTermOrBits; + +Logic._assert = function (value, tester, description) { + if (! tester(value)) { + var displayValue = (typeof value === 'string' ? JSON.stringify(value) : + value); + throw new Error(displayValue + " is not " + + (tester.description || description)); + } +}; + +// Call this as `if (assert) assertNumArgs(...)` +var assertNumArgs = function (actual, expected, funcName) { + if (actual !== expected) { + throw new Error("Expected " + expected + " args in " + funcName + + ", got " + actual); + } +}; + +// Call `assert` as: `if (assert) assert(...)`. +// This local variable temporarily set to `null` inside +// `Logic.disablingAssertions`. +var assert = Logic._assert; + +// Like `if (assert) assert(...)` but usable from other files in the package. +Logic._assertIfEnabled = function (value, tester, description) { + if (assert) assert(value, tester, description); +}; + +// Disabling runtime assertions speeds up clause generation. Assertions +// are disabled when the local variable `assert` is null instead of +// `Logic._assert`. +Logic.disablingAssertions = function (f) { + var oldAssert = assert; + try { + assert = null; + return f(); + } finally { + assert = oldAssert; + } +}; + +// Back-compat. +Logic._disablingTypeChecks = Logic.disablingAssertions; + +//////////////////// + +// Takes a Formula or Term, returns a Formula or Term. +// Unlike other operators, if you give it a Term, +// you will get a Term back (of the same type, NameTerm +// or NumTerm). +Logic.not = function (operand) { + if (assert) assert(operand, isFormulaOrTerm); + + if (operand instanceof Logic.Formula) { + return new Logic.NotFormula(operand); + } else { + // Term + if (typeof operand === 'number') { + return -operand; + } else if (operand.charAt(0) === '-') { + return operand.slice(1); + } else { + return '-' + operand; + } + } +}; + +Logic.NAME_FALSE = "$F"; +Logic.NAME_TRUE = "$T"; +Logic.NUM_FALSE = 1; +Logic.NUM_TRUE = 2; + +Logic.TRUE = Logic.NAME_TRUE; +Logic.FALSE = Logic.NAME_FALSE; + +// Abstract base class. Subclasses are created using _defineFormula. +Logic.Formula = function () {}; + +Logic._defineFormula = function (constructor, typeName, methods) { + if (assert) assert(constructor, isFunction); + if (assert) assert(typeName, isString); + + constructor.prototype = new Logic.Formula(); + constructor.prototype.type = typeName; + if (methods) { + _.extend(constructor.prototype, methods); + } +}; + +// Returns a list of Clauses that together require the Formula to be +// true, or false (depending on isTrue; both cases must be +// implemented). A single Clause may also be returned. The +// implementation should call the termifier to convert terms and +// formulas to NumTerms specific to a solver instance, and use them to +// construct a Logic.Clause. +Logic.Formula.prototype.generateClauses = function (isTrue, termifier) { + throw new Error("Cannot generate this Formula; it must be expanded"); +}; +// All Formulas have a globally-unique id so that Solvers can track them. +// It is assigned lazily. +Logic.Formula._nextGuid = 1; +Logic.Formula.prototype._guid = null; +Logic.Formula.prototype.guid = function () { + if (this._guid === null) { + this._guid = Logic.Formula._nextGuid++; + } + return this._guid; +}; + +// A "clause" is a disjunction of terms, e.g. "A or B or (not C)", +// which we write "A v B v -C". Logic.Clause is mainly an internal +// Solver data structure, which is the final result of formula +// generation and mapping variable names to numbers, before passing +// the clauses to MiniSat. +Logic.Clause = function (/*formulaOrArray, ...*/) { + var terms = _.flatten(arguments); + if (assert) assert(terms, isArrayWhere(Logic.isNumTerm)); + + this.terms = terms; // immutable [NumTerm] +}; + +// Returns a new Clause with the extra term or terms appended +Logic.Clause.prototype.append = function (/*formulaOrArray, ...*/) { + return new Logic.Clause(this.terms.concat(_.flatten(arguments))); +}; + +var FormulaInfo = function () { + // We generate a variable when a Formula is used. + this.varName = null; // string name of variable + this.varNum = null; // number of variable (always positive) + + // A formula variable that is used only in the positive or only + // in the negative doesn't need the full set of clauses that + // establish a bidirectional implication between the formula and the + // variable. For example, in the formula `Logic.or("A", "B")`, with the + // formula variable `$or1`, the full set of clauses is `A v B v + // -$or1; -A v $or1; -B v $or1`. If both `$or1` and `-$or1` appear + // elsewhere in the set of clauses, then all three of these clauses + // are required. However, somewhat surprisingly, if only `$or1` appears, + // then only the first is necessary. If only `-$or1` appears, then only + // the second and third are necessary. + // + // Suppose the formula A v B is represented by the variable $or1, + // and $or1 is only used positively. It's important that A v B being + // false forces $or1 to be false, so that when $or1 is used it has + // the appropriate effect. For example, if we have the clause $or1 v + // C, then A v B being false should force $or1 to be false, which + // forces C to be true. So we generate the clause A v B v + // -$or1. (The implications of this clause are: If A v B is false, + // $or1 must be false. If $or1 is true, A v B must be true.) + // + // However, in the case where A v B is true, we don't actually + // need to insist that the solver set $or1 to true, as long as we + // are ok with relaxing the relationship between A v B and $or1 + // and getting a "wrong" value for $or1 in the solution. Suppose + // the solver goes to work and at some point determines A v B to + // be true. It could set $or1 to true, satisfying all the clauses + // where it appears, or it could set $or1 to false, which only + // constrains the solution space and doesn't open up any new + // solutions for other variables. If the solver happens to find a + // solution where A v B is true and $or1 is false, we know there + // is a similar solution that makes all the same assignments + // except it assigns $or1 to true. + // + // If a formula is used only negatively, a similar argument applies + // but with signs flipped, and if it is used both positively and + // negatively, both kinds of clauses must be generated. + // + // See the mention of "polarity" in the MiniSat+ paper + // (http://minisat.se/downloads/MiniSat+.pdf). + // + // These flags are set when generation has been done for the positive + // case or the negative case, so that we only generate each one once. + this.occursPositively = false; + this.occursNegatively = false; + + // If a Formula has been directly required or forbidden, we can + // replace it by TRUE or FALSE in subsequent clauses. Track the + // information here. + this.isRequired = false; + this.isForbidden = false; +}; + + +// The "termifier" interface is provided to a Formula's +// generateClauses method, which must use it to generate Clause +// objects. +// +// The reason for this approach is that it gives the Formula control +// over the clauses returned, but it gives the Solver control over +// Formula generation. +Logic.Termifier = function (solver) { + this.solver = solver; +}; + +// The main entry point, the `clause` method takes a list of +// FormulaOrTerms and converts it to a Clause containing NumTerms, *by +// replacing Formulas with their variables*, creating the variable if +// necessary. For example, if an OrFormula is represented by the +// variable `$or1`, it will be replaced by the numeric version of +// `$or1` to make the Clause. When the Clause is actually used, it +// will trigger generation of the clauses that relate `$or1` to the +// operands of the OrFormula. +Logic.Termifier.prototype.clause = function (/*args*/) { + var self = this; + var formulas = _.flatten(arguments); + if (assert) assert(formulas, isArrayWhere(isFormulaOrTerm)); + + return new Logic.Clause(_.map(formulas, function (f) { + return self.term(f); + })); +}; + +// The `term` method performs the mapping from FormulaOrTerm to +// NumTerm. It's called by `clause` and could be called directly +// from a Formula's generateClauses if it was useful for some +// reason. +Logic.Termifier.prototype.term = function (formula) { + return this.solver._formulaToTerm(formula); +}; + +// The `generate` method generates clauses for a Formula (or +// Term). It should be used carefully, because it works quite +// differently from passing a Formula into `clause`, which is the +// normal way for one Formula to refer to another. When you use a +// Formula in `clause`, it is replaced by the Formula's variable, +// and the Solver handles generating the Formula's clauses once. +// When you use `generate`, this system is bypassed, and the +// Formula's generateClauses method is called pretty much directly, +// returning the array of Clauses. +Logic.Termifier.prototype.generate = function (isTrue, formula) { + return this.solver._generateFormula(isTrue, formula, this); +}; + + +Logic.Solver = function () { + var self = this; + + self.clauses = []; // mutable [Clause] + self._num2name = [null]; // no 0th var + self._name2num = {}; // (' '+vname) -> vnum + + // true and false + var F = self.getVarNum(Logic.NAME_FALSE, false, true); // 1 + var T = self.getVarNum(Logic.NAME_TRUE, false, true); // 2 + if (F !== Logic.NUM_FALSE || T !== Logic.NUM_TRUE) { + throw new Error("Assertion failure: $T and $F have wrong numeric value"); + } + self._F_used = false; + self._T_used = false; + // It's important that these clauses are elements 0 and 1 + // of the clauses array, so that they can optionally be stripped + // off. For example, _clauseData takes advantage of this fact. + self.clauses.push(new Logic.Clause(-Logic.NUM_FALSE)); + self.clauses.push(new Logic.Clause(Logic.NUM_TRUE)); + + self._formulaInfo = {}; // Formula guid -> FormulaInfo + // For generating formula variables like "$or1", "$or2", "$and1", "$and2" + self._nextFormulaNumByType = {}; // Formula type -> next var id + // Map of Formulas whose info has `false` for either + // `occursPositively` or `occursNegatively` + self._ungeneratedFormulas = {}; // varNum -> Formula + + self._numClausesAddedToMiniSat = 0; + self._unsat = false; // once true, no solution henceforth + self._minisat = new MiniSat(); // this takes some time + + self._termifier = new Logic.Termifier(self); +}; + +// Get a var number for vname, assigning it a number if it is new. +// Setting "noCreate" to true causes the function to return 0 instead of +// creating a new variable. +// Setting "_createInternals" to true grants the ability to create $ variables. +Logic.Solver.prototype.getVarNum = function (vname, noCreate, _createInternals) { + var key = ' '+vname; + if (_.has(this._name2num, key)) { + return this._name2num[key]; + } else if (noCreate) { + return 0; + } else { + if (vname.charAt(0) === "$" && ! _createInternals) { + throw new Error("Only generated variable names can start with $"); + } + var vnum = this._num2name.length; + this._name2num[key] = vnum; + this._num2name.push(vname); + return vnum; + } +}; + +Logic.Solver.prototype.getVarName = function (vnum) { + if (assert) assert(vnum, isInteger); + + var num2name = this._num2name; + if (vnum < 1 || vnum >= num2name.length) { + throw new Error("Bad variable num: " + vnum); + } else { + return num2name[vnum]; + } +}; + +// Converts a Term to a NumTerm (if it isn't already). This is done +// when a Formula creates Clauses for a Solver, since Clauses require +// NumTerms. NumTerms stay the same, while a NameTerm like "-foo" +// might become (say) the number -3. If a NameTerm names a variable +// that doesn't exist, it is automatically created, unless noCreate +// is passed, in which case 0 is returned instead. +Logic.Solver.prototype.toNumTerm = function (t, noCreate) { + var self = this; + + if (assert) assert(t, Logic.isTerm); + + if (typeof t === 'number') { + return t; + } else { // string + var not = false; + while (t.charAt(0) === '-') { + t = t.slice(1); + not = ! not; + } + var n = self.getVarNum(t, noCreate); + if (! n) { + return 0; // must be the noCreate case + } else { + return (not ? -n : n); + } + } +}; + +// Converts a Term to a NameTerm (if it isn't already). +Logic.Solver.prototype.toNameTerm = function (t) { + var self = this; + + if (assert) assert(t, Logic.isTerm); + + if (typeof t === 'string') { + // canonicalize, removing leading "--" + while (t.slice(0, 2) === '--') { + t = t.slice(2); + } + return t; + } else { // number + var not = false; + if (t < 0) { + not = true; + t = -t; + } + t = self.getVarName(t); + if (not) { + t = '-' + t; + } + return t; + } +}; + +Logic.Solver.prototype._addClause = function (cls, _extraTerms, + _useTermOverride) { + var self = this; + + if (assert) assert(cls, Logic.isClause); + + var extraTerms = null; + if (_extraTerms) { + extraTerms = _extraTerms; + if (assert) assert(extraTerms, isArrayWhere(Logic.isNumTerm)); + } + + var usedF = false; + var usedT = false; + + var numRealTerms = cls.terms.length; + if (extraTerms) { + // extraTerms are added to the clause as is. Formula variables in + // extraTerms do not cause Formula clause generation, which is + // necessary to implement Formula clause generation. + cls = cls.append(extraTerms); + } + + for (var i = 0; i < cls.terms.length; i++) { + var t = cls.terms[i]; + var v = (t < 0) ? -t : t; + if (v === Logic.NUM_FALSE) { + usedF = true; + } else if (v === Logic.NUM_TRUE) { + usedT = true; + } else if (v < 1 || v >= self._num2name.length) { + throw new Error("Bad variable number: " + v); + } else if (i < numRealTerms) { + if (_useTermOverride) { + _useTermOverride(t); + } else { + self._useFormulaTerm(t); + } + } + } + + this._F_used = (this._F_used || usedF); + this._T_used = (this._T_used || usedT); + + this.clauses.push(cls); +}; + +// When we actually use a Formula variable, generate clauses for it, +// based on whether the usage is positive or negative. For example, +// if the Formula `Logic.or("X", "Y")` is represented by `$or1`, which +// is variable number 5, then when you actually use 5 or -5 in a clause, +// the clauses "X v Y v -5" (when you use 5) or "-X v 5; -Y v 5" +// (when you use -5) will be generated. The clause "X v Y v -5" +// is equivalent to "5 => X v Y" (or -(X v Y) => -5), while the clauses +// "-X v 5; -Y v 5" are equivalent to "-5 => -X; -5 => -Y" (or +// "X => 5; Y => 5"). + +Logic.Solver.prototype._useFormulaTerm = function (t, _addClausesOverride) { + var self = this; + if (assert) assert(t, Logic.isNumTerm); + var v = (t < 0) ? -t : t; + + if (! _.has(self._ungeneratedFormulas, v)) { + return; + } + + // using a Formula's var; maybe have to generate clauses + // for the Formula + var formula = self._ungeneratedFormulas[v]; + var info = self._getFormulaInfo(formula); + var positive = t > 0; + + // To avoid overflowing the JS stack, defer calls to addClause. + // The way we get overflows is when Formulas are deeply nested + // (which happens naturally when you call Logic.sum or + // Logic.weightedSum on a long list of terms), which causes + // addClause to call useFormulaTerm to call addClause, and so + // on. Approach: The outermost useFormulaTerm keeps a list + // of clauses to add, and then adds them in a loop using a + // special argument to addClause that passes a special argument + // to useFormulaTerm that causes those clauses to go into the + // list too. Code outside of `_useFormulaTerm` and `_addClause(s)` + // does not have to pass these special arguments to call them. + var deferredAddClauses = null; + var addClauses; + if (! _addClausesOverride) { + deferredAddClauses = []; + addClauses = function (clauses, extraTerms) { + deferredAddClauses.push({clauses: clauses, + extraTerms: extraTerms}); + }; + } else { + addClauses = _addClausesOverride; + } + + if (positive && ! info.occursPositively) { + // generate clauses for the formula. + // Eg, if we use variable `X` which represents the formula + // `A v B`, add the clause `A v B v -X`. + // By using the extraTerms argument to addClauses, we avoid + // treating this as a negative occurrence of X. + info.occursPositively = true; + var clauses = self._generateFormula(true, formula); + addClauses(clauses, [-v]); + } else if ((! positive) && ! info.occursNegatively) { + // Eg, if we have the term `-X` where `X` represents the + // formula `A v B`, add the clauses `-A v X` and `-B v X`. + // By using the extraTerms argument to addClauses, we avoid + // treating this as a positive occurrence of X. + info.occursNegatively = true; + var clauses = self._generateFormula(false, formula); + addClauses(clauses, [v]); + } + if (info.occursPositively && info.occursNegatively) { + delete self._ungeneratedFormulas[v]; + } + + if (! (deferredAddClauses && deferredAddClauses.length)) { + return; + } + + var useTerm = function (t) { + self._useFormulaTerm(t, addClauses); + }; + // This is the loop that turns recursion into iteration. + // When addClauses calls useTerm, which calls useFormulaTerm, + // the nested useFormulaTerm will add any clauses to our + // own deferredAddClauses list. + while (deferredAddClauses.length) { + var next = deferredAddClauses.pop(); + self._addClauses(next.clauses, next.extraTerms, useTerm); + } +}; + +Logic.Solver.prototype._addClauses = function (array, _extraTerms, + _useTermOverride) { + if (assert) assert(array, isArrayWhere(Logic.isClause)); + var self = this; + _.each(array, function (cls) { + self._addClause(cls, _extraTerms, _useTermOverride); + }); +}; + +Logic.Solver.prototype.require = function (/*formulaOrArray, ...*/) { + this._requireForbidImpl(true, _.flatten(arguments)); +}; + +Logic.Solver.prototype.forbid = function (/*formulaOrArray, ...*/) { + this._requireForbidImpl(false, _.flatten(arguments)); +}; + +Logic.Solver.prototype._requireForbidImpl = function (isRequire, formulas) { + var self = this; + if (assert) assert(formulas, isArrayWhere(isFormulaOrTerm)); + + _.each(formulas, function (f) { + if (f instanceof Logic.NotFormula) { + self._requireForbidImpl(!isRequire, [f.operand]); + } else if (f instanceof Logic.Formula) { + var info = self._getFormulaInfo(f); + if (info.varNum !== null) { + var sign = isRequire ? 1 : -1; + self._addClause(new Logic.Clause(sign*info.varNum)); + } else { + self._addClauses(self._generateFormula(isRequire, f)); + } + if (isRequire) { + info.isRequired = true; + } else { + info.isForbidden = true; + } + } else { + self._addClauses(self._generateFormula(isRequire, f)); + } + }); +}; + +Logic.Solver.prototype._generateFormula = function (isTrue, formula, _termifier) { + var self = this; + if (assert) assert(formula, isFormulaOrTerm); + + if (formula instanceof Logic.NotFormula) { + return self._generateFormula(!isTrue, formula.operand); + } else if (formula instanceof Logic.Formula) { + var info = self._getFormulaInfo(formula); + if ((isTrue && info.isRequired) || + (!isTrue && info.isForbidden)) { + return []; + } else if ((isTrue && info.isForbidden) || + (!isTrue && info.isRequired)) { + return [new Logic.Clause()]; // never satisfied clause + } else { + var ret = formula.generateClauses(isTrue, + _termifier || self._termifier); + return _.isArray(ret) ? ret : [ret]; + } + } else { // Term + var t = self.toNumTerm(formula); + var sign = isTrue ? 1 : -1; + if (t === sign*Logic.NUM_TRUE || t === -sign*Logic.NUM_FALSE) { + return []; + } else if (t === sign*Logic.NUM_FALSE || t === -sign*Logic.NUM_TRUE) { + return [new Logic.Clause()]; // never satisfied clause + } else { + return [new Logic.Clause(sign*t)]; + } + } +}; + +// Get clause data as an array of arrays of integers, +// for testing and debugging purposes. +Logic.Solver.prototype._clauseData = function () { + var clauses = _.pluck(this.clauses, 'terms'); + if (! this._T_used) { + clauses.splice(1, 1); + } + if (! this._F_used) { + clauses.splice(0, 1); + } + return clauses; +}; + +// Get clause data as an array of human-readable strings, +// for testing and debugging purposes. +// A clause might look like "A v -B" (where "v" represents +// and OR operator). +Logic.Solver.prototype._clauseStrings = function () { + var self = this; + var clauseData = self._clauseData(); + return _.map(clauseData, function (clause) { + return _.map(clause, function (nterm) { + var str = self.toNameTerm(nterm); + if (/\s/.test(str)) { + // write name in quotes for readability. we don't bother + // making this string machine-parsable in the general case. + var sign = ''; + if (str.charAt(0) === '-') { + // temporarily remove '-' + sign = '-'; + str = str.slice(1); + } + str = sign + '"' + str + '"'; + } + return str; + }).join(' v '); + }); +}; + +Logic.Solver.prototype._getFormulaInfo = function (formula, _noCreate) { + var self = this; + var guid = formula.guid(); + if (! self._formulaInfo[guid]) { + if (_noCreate) { + return null; + } + self._formulaInfo[guid] = new FormulaInfo(); + } + return self._formulaInfo[guid]; +}; + +// Takes a Formula or an array of Formulas, returns a NumTerm or +// array of NumTerms. +Logic.Solver.prototype._formulaToTerm = function (formula) { + var self = this; + + if (_.isArray(formula)) { + if (assert) assert(formula, isArrayWhere(isFormulaOrTerm)); + return _.map(formula, _.bind(self._formulaToTerm, self)); + } else { + if (assert) assert(formula, isFormulaOrTerm); + } + + if (formula instanceof Logic.NotFormula) { + // shortcut that avoids creating a variable called + // something like "$not1" when you use Logic.not(formula). + return Logic.not(self._formulaToTerm(formula.operand)); + } else if (formula instanceof Logic.Formula) { + var info = this._getFormulaInfo(formula); + if (info.isRequired) { + return Logic.NUM_TRUE; + } else if (info.isForbidden) { + return Logic.NUM_FALSE; + } else if (info.varNum === null) { + // generate a Solver-local formula variable like "$or1" + var type = formula.type; + if (! this._nextFormulaNumByType[type]) { + this._nextFormulaNumByType[type] = 1; + } + var numForVarName = this._nextFormulaNumByType[type]++; + info.varName = "$" + formula.type + numForVarName; + info.varNum = this.getVarNum(info.varName, false, true); + this._ungeneratedFormulas[info.varNum] = formula; + } + return info.varNum; + } else { + // formula is a Term + return self.toNumTerm(formula); + } +}; + +Logic.or = function (/*formulaOrArray, ...*/) { + var args = _.flatten(arguments); + if (args.length === 0) { + return Logic.FALSE; + } else if (args.length === 1) { + if (assert) assert(args[0], isFormulaOrTerm); + return args[0]; + } else { + return new Logic.OrFormula(args); + } +}; + +Logic.OrFormula = function (operands) { + if (assert) assert(operands, isArrayWhere(isFormulaOrTerm)); + this.operands = operands; +}; + +Logic._defineFormula(Logic.OrFormula, 'or', { + generateClauses: function (isTrue, t) { + if (isTrue) { + // eg A v B v C + return t.clause(this.operands); + } else { + // eg -A; -B; -C + var result = []; + _.each(this.operands, function (o) { + result.push.apply(result, t.generate(false, o)); + }); + return result; + } + } +}); + +Logic.NotFormula = function (operand) { + if (assert) assert(operand, isFormulaOrTerm); + this.operand = operand; +}; + +// No generation or simplification for 'not'; it is +// simplified away by the solver itself. +Logic._defineFormula(Logic.NotFormula, 'not'); + +Logic.and = function (/*formulaOrArray, ...*/) { + var args = _.flatten(arguments); + if (args.length === 0) { + return Logic.TRUE; + } else if (args.length === 1) { + if (assert) assert(args[0], isFormulaOrTerm); + return args[0]; + } else { + return new Logic.AndFormula(args); + } +}; + +Logic.AndFormula = function (operands) { + if (assert) assert(operands, isArrayWhere(isFormulaOrTerm)); + this.operands = operands; +}; + +Logic._defineFormula(Logic.AndFormula, 'and', { + generateClauses: function (isTrue, t) { + if (isTrue) { + // eg A; B; C + var result = []; + _.each(this.operands, function (o) { + result.push.apply(result, t.generate(true, o)); + }); + return result; + } else { + // eg -A v -B v -C + return t.clause(_.map(this.operands, Logic.not)); + } + } +}); + +// Group `array` into groups of N, where the last group +// may be shorter than N. group([a,b,c,d,e], 3) => [[a,b,c],[d,e]] +var group = function (array, N) { + var ret = []; + for (var i = 0; i < array.length; i += N) { + ret.push(array.slice(i, i+N)); + } + return ret; +}; + +Logic.xor = function (/*formulaOrArray, ...*/) { + var args = _.flatten(arguments); + if (args.length === 0) { + return Logic.FALSE; + } else if (args.length === 1) { + if (assert) assert(args[0], isFormulaOrTerm); + return args[0]; + } else { + return new Logic.XorFormula(args); + } +}; + +Logic.XorFormula = function (operands) { + if (assert) assert(operands, isArrayWhere(isFormulaOrTerm)); + this.operands = operands; +}; + +Logic._defineFormula(Logic.XorFormula, 'xor', { + generateClauses: function (isTrue, t) { + var args = this.operands; + var not = Logic.not; + if (args.length > 3) { + return t.generate( + isTrue, + Logic.xor( + _.map(group(this.operands, 3), function (group) { + return Logic.xor(group); + }))); + } else if (isTrue) { // args.length <= 3 + if (args.length === 0) { + return t.clause(); // always fail + } else if (args.length === 1) { + return t.clause(args[0]); + } else if (args.length === 2) { + var A = args[0], B = args[1]; + return [t.clause(A, B), // A v B + t.clause(not(A), not(B))]; // -A v -B + } else if (args.length === 3) { + var A = args[0], B = args[1], C = args[2]; + return [t.clause(A, B, C), // A v B v C + t.clause(A, not(B), not(C)), // A v -B v -C + t.clause(not(A), B, not(C)), // -A v B v -C + t.clause(not(A), not(B), C)]; // -A v -B v C + } + } else { // !isTrue, args.length <= 3 + if (args.length === 0) { + return []; // always succeed + } else if (args.length === 1) { + return t.clause(not(args[0])); + } else if (args.length === 2) { + var A = args[0], B = args[1]; + return [t.clause(A, not(B)), // A v -B + t.clause(not(A), B)]; // -A v B + } else if (args.length === 3) { + var A = args[0], B = args[1], C = args[2]; + return [t.clause(not(A), not(B), not(C)), // -A v -B v -C + t.clause(not(A), B, C), // -A v B v C + t.clause(A, not(B), C), // A v -B v C + t.clause(A, B, not(C))]; // A v B v -C + } + } + } +}); + +Logic.atMostOne = function (/*formulaOrArray, ...*/) { + var args = _.flatten(arguments); + if (args.length <= 1) { + return Logic.TRUE; + } else { + return new Logic.AtMostOneFormula(args); + } +}; + +Logic.AtMostOneFormula = function (operands) { + if (assert) assert(operands, isArrayWhere(isFormulaOrTerm)); + this.operands = operands; +}; + +Logic._defineFormula(Logic.AtMostOneFormula, 'atMostOne', { + generateClauses: function (isTrue, t) { + var args = this.operands; + var not = Logic.not; + if (args.length <= 1) { + return []; // always succeed + } else if (args.length === 2) { + return t.generate(isTrue, Logic.not(Logic.and(args))); + } else if (isTrue && args.length === 3) { + // Pick any two args; at least one is false (they aren't + // both true). This strategy would also work for + // N>3, and could provide a speed-up by having more clauses + // (N^2) but fewer propagation steps. No speed-up was + // observed on the Sudoku test from using this strategy + // up to N=10. + var clauses = []; + for (var i = 0; i < args.length; i++) { + for (var j = i+1; j < args.length; j++) { + clauses.push(t.clause(not(args[i]), not(args[j]))); + } + } + return clauses; + } else if ((! isTrue) && args.length === 3) { + var A = args[0], B = args[1], C = args[2]; + // Pick any two args; at least one is true (they aren't + // both false). This only works for N=3. + return [t.clause(A, B), t.clause(A, C), t.clause(B, C)]; + } else { + // See the "commander variables" technique from: + // http://www.cs.cmu.edu/~wklieber/papers/2007_efficient-cnf-encoding-for-selecting-1.pdf + // But in short: At most one group has at least one "true", + // and each group has at most one "true". Formula generation + // automatically generates the right implications. + var groups = group(args, 3); + var ors = _.map(groups, function (g) { return Logic.or(g); }); + if (groups[groups.length - 1].length < 2) { + // Remove final group of length 1 so we don't generate + // no-op clauses of one sort or another + groups.pop(); + } + var atMostOnes = _.map(groups, function (g) { + return Logic.atMostOne(g); + }); + return t.generate(isTrue, Logic.and(Logic.atMostOne(ors), atMostOnes)); + } + } +}); + +Logic.implies = function (A, B) { + if (assert) assertNumArgs(arguments.length, 2, "Logic.implies"); + return new Logic.ImpliesFormula(A, B); +}; + +Logic.ImpliesFormula = function (A, B) { + if (assert) assert(A, isFormulaOrTerm); + if (assert) assert(B, isFormulaOrTerm); + if (assert) assertNumArgs(arguments.length, 2, "Logic.implies"); + this.A = A; + this.B = B; +}; + +Logic._defineFormula(Logic.ImpliesFormula, 'implies', { + generateClauses: function (isTrue, t) { + return t.generate(isTrue, Logic.or(Logic.not(this.A), this.B)); + } +}); + +Logic.equiv = function (A, B) { + if (assert) assertNumArgs(arguments.length, 2, "Logic.equiv"); + return new Logic.EquivFormula(A, B); +}; + +Logic.EquivFormula = function (A, B) { + if (assert) assert(A, isFormulaOrTerm); + if (assert) assert(B, isFormulaOrTerm); + if (assert) assertNumArgs(arguments.length, 2, "Logic.equiv"); + this.A = A; + this.B = B; +}; + +Logic._defineFormula(Logic.EquivFormula, 'equiv', { + generateClauses: function (isTrue, t) { + return t.generate(!isTrue, Logic.xor(this.A, this.B)); + } +}); + +Logic.exactlyOne = function (/*formulaOrArray, ...*/) { + var args = _.flatten(arguments); + if (args.length === 0) { + return Logic.FALSE; + } else if (args.length === 1) { + if (assert) assert(args[0], isFormulaOrTerm); + return args[0]; + } else { + return new Logic.ExactlyOneFormula(args); + } +}; + +Logic.ExactlyOneFormula = function (operands) { + if (assert) assert(operands, isArrayWhere(isFormulaOrTerm)); + this.operands = operands; +}; + +Logic._defineFormula(Logic.ExactlyOneFormula, 'exactlyOne', { + generateClauses: function (isTrue, t) { + var args = this.operands; + if (args.length < 3) { + return t.generate(isTrue, Logic.xor(args)); + } else { + return t.generate(isTrue, Logic.and(Logic.atMostOne(args), + Logic.or(args))); + } + } +}); + +// List of 0 or more formulas or terms, which together represent +// a non-negative integer. Least significant bit is first. That is, +// the kth array element has a place value of 2^k. +Logic.Bits = function (formulaArray) { + if (assert) assert(formulaArray, isArrayWhere(isFormulaOrTerm)); + this.bits = formulaArray; // public, immutable +}; + +Logic.constantBits = function (wholeNumber) { + if (assert) assert(wholeNumber, Logic.isWholeNumber); + var result = []; + while (wholeNumber) { + result.push((wholeNumber & 1) ? Logic.TRUE : Logic.FALSE); + wholeNumber >>>= 1; + } + return new Logic.Bits(result); +}; + +Logic.variableBits = function (baseName, nbits) { + if (assert) assert(nbits, Logic.isWholeNumber); + var result = []; + for (var i = 0; i < nbits; i++) { + result.push(baseName + '$' + i); + } + return new Logic.Bits(result); +}; + +// bits1 <= bits2 +Logic.lessThanOrEqual = function (bits1, bits2) { + return new Logic.LessThanOrEqualFormula(bits1, bits2); +}; + +Logic.LessThanOrEqualFormula = function (bits1, bits2) { + if (assert) assert(bits1, Logic.isBits); + if (assert) assert(bits2, Logic.isBits); + if (assert) assertNumArgs(arguments.length, 2, "Bits comparison function"); + this.bits1 = bits1; + this.bits2 = bits2; +}; + +var genLTE = function (bits1, bits2, t, notEqual) { + var ret = []; + // clone so we can mutate them in place + var A = bits1.bits.slice(); + var B = bits2.bits.slice(); + if (notEqual && ! bits2.bits.length) { + // can't be less than 0 + return t.clause(); + } + // if A is longer than B, the extra (high) bits + // must be 0. + while (A.length > B.length) { + var hi = A.pop(); + ret.push(t.clause(Logic.not(hi))); + } + // now B.length >= A.length + // Let xors[i] be (A[i] xor B[i]), or just + // B[i] if A is too short. + var xors = _.map(B, function (b, i) { + if (i < A.length) { + return Logic.xor(A[i], b); + } else { + return b; + } + }); + + // Suppose we are comparing 3-bit numbers, requiring + // that ABC <= XYZ. Here is what we require: + // + // * It is false that A=1 and X=0. + // * It is false that A=X, B=1, and Y=0. + // * It is false that A=X, B=Y, C=1, and Y=0. + // + // Translating these into clauses using DeMorgan's law: + // + // * A=0 or X=1 + // * (A xor X) or B=0 or Y=1 + // * (A xor X) or (B xor Y) or C=0 or Y=1 + // + // Since our arguments are LSB first, in the example + // we would be given [C, B, A] and [Z, Y, X] as input. + // We iterate over the first argument starting from + // the right, and build up a clause by iterating over + // the xors from the right. + // + // If we have ABC <= VWXYZ, then we still have three clauses, + // but each one is prefixed with "V or W or", because V and W + // are at the end of the xors array. This is equivalent to + // padding ABC with two zeros. + + for (var i = A.length-1; i >= 0; i--) { + ret.push(t.clause(xors.slice(i+1), Logic.not(A[i]), B[i])); + } + if (notEqual) { + ret.push.apply(ret, t.generate(true, Logic.or(xors))); + } + return ret; +}; + +Logic._defineFormula(Logic.LessThanOrEqualFormula, 'lte', { + generateClauses: function (isTrue, t) { + if (isTrue) { + // bits1 <= bits2 + return genLTE(this.bits1, this.bits2, t, false); + } else { + // bits2 < bits1 + return genLTE(this.bits2, this.bits1, t, true); + } + } +}); + +// bits1 < bits2 +Logic.lessThan = function (bits1, bits2) { + return new Logic.LessThanFormula(bits1, bits2); +}; + +Logic.LessThanFormula = function (bits1, bits2) { + if (assert) assert(bits1, Logic.isBits); + if (assert) assert(bits2, Logic.isBits); + if (assert) assertNumArgs(arguments.length, 2, "Bits comparison function"); + this.bits1 = bits1; + this.bits2 = bits2; +}; + +Logic._defineFormula(Logic.LessThanFormula, 'lt', { + generateClauses: function (isTrue, t) { + if (isTrue) { + // bits1 < bits2 + return genLTE(this.bits1, this.bits2, t, true); + } else { + // bits2 <= bits1 + return genLTE(this.bits2, this.bits1, t, false); + } + } +}); + +Logic.greaterThan = function (bits1, bits2) { + return Logic.lessThan(bits2, bits1); +}; + +Logic.greaterThanOrEqual = function (bits1, bits2) { + return Logic.lessThanOrEqual(bits2, bits1); +}; + +Logic.equalBits = function (bits1, bits2) { + return new Logic.EqualBitsFormula(bits1, bits2); +}; + +Logic.EqualBitsFormula = function (bits1, bits2) { + if (assert) assert(bits1, Logic.isBits); + if (assert) assert(bits2, Logic.isBits); + if (assert) assertNumArgs(arguments.length, 2, "Logic.equalBits"); + this.bits1 = bits1; + this.bits2 = bits2; +}; + +Logic._defineFormula(Logic.EqualBitsFormula, 'equalBits', { + generateClauses: function (isTrue, t) { + var A = this.bits1.bits; + var B = this.bits2.bits; + var nbits = Math.max(A.length, B.length); + var facts = []; + for (var i = 0; i < nbits; i++) { + if (i >= A.length) { + facts.push(Logic.not(B[i])); + } else if (i >= B.length) { + facts.push(Logic.not(A[i])); + } else { + facts.push(Logic.equiv(A[i], B[i])); + } + } + return t.generate(isTrue, Logic.and(facts)); + } +}); + +// Definition of full-adder and half-adder: +// +// A full-adder is a 3-input, 2-output gate producing the sum of its +// inputs as a 2-bit binary number. The most significant bit is called +// "carry", the least significant "sum". A half-adder does the same +// thing, but has only 2 inputs (and can therefore never output a +// "3"). +// +// The half-adder sum bit is really just an XOR, and the carry bit +// is really just an AND. However, they get their own formula types +// here to enhance readability of the generated clauses. + +Logic.HalfAdderSum = function (formula1, formula2) { + if (assert) assert(formula1, isFormulaOrTerm); + if (assert) assert(formula2, isFormulaOrTerm); + + if (assert) assertNumArgs(arguments.length, 2, "Logic.HalfAdderSum"); + this.a = formula1; + this.b = formula2; +}; + +Logic._defineFormula(Logic.HalfAdderSum, 'hsum', { + generateClauses: function (isTrue, t) { + return t.generate(isTrue, Logic.xor(this.a, this.b)); + } +}); + +Logic.HalfAdderCarry = function (formula1, formula2) { + if (assert) assert(formula1, isFormulaOrTerm); + if (assert) assert(formula2, isFormulaOrTerm); + if (assert) assertNumArgs(arguments.length, 2, "Logic.HalfAdderCarry"); + this.a = formula1; + this.b = formula2; +}; + +Logic._defineFormula(Logic.HalfAdderCarry, 'hcarry', { + generateClauses: function (isTrue, t) { + return t.generate(isTrue, Logic.and(this.a, this.b)); + } +}); + +Logic.FullAdderSum = function (formula1, formula2, formula3) { + if (assert) assert(formula1, isFormulaOrTerm); + if (assert) assert(formula2, isFormulaOrTerm); + if (assert) assert(formula3, isFormulaOrTerm); + if (assert) assertNumArgs(arguments.length, 3, "Logic.FullAdderSum"); + this.a = formula1; + this.b = formula2; + this.c = formula3; +}; + +Logic._defineFormula(Logic.FullAdderSum, 'fsum', { + generateClauses: function (isTrue, t) { + return t.generate(isTrue, Logic.xor(this.a, this.b, this.c)); + } +}); + +Logic.FullAdderCarry = function (formula1, formula2, formula3) { + if (assert) assert(formula1, isFormulaOrTerm); + if (assert) assert(formula2, isFormulaOrTerm); + if (assert) assert(formula3, isFormulaOrTerm); + if (assert) assertNumArgs(arguments.length, 3, "Logic.FullAdderCarry"); + this.a = formula1; + this.b = formula2; + this.c = formula3; +}; + +Logic._defineFormula(Logic.FullAdderCarry, 'fcarry', { + generateClauses: function (isTrue, t) { + return t.generate(! isTrue, + Logic.atMostOne(this.a, this.b, this.c)); + } +}); + +// Implements the Adder strategy from the MiniSat+ paper: +// http://minisat.se/downloads/MiniSat+.pdf +// "Translating Pseudo-boolean Constraints into SAT" +// +// Takes a list of list of Formulas. The first list is bits +// to give weight 1; the second is bits to give weight 2; +// the third is bits to give weight 4; and so on. +// +// Returns an array of Logic.FormulaOrTerm. +var binaryWeightedSum = function (varsByWeight) { + if (assert) assert(varsByWeight, + isArrayWhere(isArrayWhere(isFormulaOrTerm))); + // initialize buckets to a two-level clone of varsByWeight + var buckets = _.map(varsByWeight, _.clone); + var lowestWeight = 0; // index of the first non-empty array + var output = []; + while (lowestWeight < buckets.length) { + var bucket = buckets[lowestWeight]; + if (! bucket.length) { + output.push(Logic.FALSE); + lowestWeight++; + } else if (bucket.length === 1) { + output.push(bucket[0]); + lowestWeight++; + } else if (bucket.length === 2) { + var sum = new Logic.HalfAdderSum(bucket[0], bucket[1]); + var carry = new Logic.HalfAdderCarry(bucket[0], bucket[1]); + bucket.length = 0; + bucket.push(sum); + pushToNth(buckets, lowestWeight+1, carry); + } else { + // Whether we take variables from the start or end of the + // bucket (i.e. `pop` or `shift`) determines the shape of the tree. + // Empirically, some logic problems are faster with `shift` (2x or so), + // but `pop` gives an order-of-magnitude speed-up on the Meteor Version + // Solver "benchmark-tests" suite (Slava's benchmarks based on data from + // Rails). So, `pop` it is. + var c = bucket.pop(); + var b = bucket.pop(); + var a = bucket.pop(); + var sum = new Logic.FullAdderSum(a, b, c); + var carry = new Logic.FullAdderCarry(a, b, c); + bucket.push(sum); + pushToNth(buckets, lowestWeight+1, carry); + } + } + return output; +}; + +// Push `newItem` onto the array at arrayOfArrays[n], +// first ensuring that it exists by pushing empty +// arrays onto arrayOfArrays. +var pushToNth = function (arrayOfArrays, n, newItem) { + while (n >= arrayOfArrays.length) { + arrayOfArrays.push([]); + } + arrayOfArrays[n].push(newItem); +}; + +var checkWeightedSumArgs = function (formulas, weights) { + if (assert) assert(formulas, isArrayWhere(isFormulaOrTerm)); + if (typeof weights === 'number') { + if (assert) assert(weights, Logic.isWholeNumber); + } else { + if (assert) assert(weights, isArrayWhere(Logic.isWholeNumber)); + if (formulas.length !== weights.length) { + throw new Error("Formula array and weight array must be same length" + + "; they are " + formulas.length + " and " + weights.length); + } + } +}; + +Logic.weightedSum = function (formulas, weights) { + checkWeightedSumArgs(formulas, weights); + + if (formulas.length === 0) { + return new Logic.Bits([]); + } + + if (typeof weights === 'number') { + weights = _.map(formulas, function () { return weights; }); + } + + var binaryWeighted = []; + _.each(formulas, function (f, i) { + var w = weights[i]; + var whichBit = 0; + while (w) { + if (w & 1) { + pushToNth(binaryWeighted, whichBit, f); + } + w >>>= 1; + whichBit++; + } + }); + + return new Logic.Bits(binaryWeightedSum(binaryWeighted)); +}; + +Logic.sum = function (/*formulaOrBitsOrArray, ...*/) { + var things = _.flatten(arguments); + if (assert) assert(things, isArrayWhere(isFormulaOrTermOrBits)); + + var binaryWeighted = []; + _.each(things, function (x) { + if (x instanceof Logic.Bits) { + _.each(x.bits, function (b, i) { + pushToNth(binaryWeighted, i, b); + }); + } else { + pushToNth(binaryWeighted, 0, x); + } + }); + + return new Logic.Bits(binaryWeightedSum(binaryWeighted)); +}; + +//////////////////////////////////////// + +Logic.Solver.prototype.solve = function (_assumpVar) { + var self = this; + if (_assumpVar !== undefined) { + if (! (_assumpVar >= 1)) { + throw new Error("_assumpVar must be a variable number"); + } + } + + if (self._unsat) { + return null; + } + + while (self._numClausesAddedToMiniSat < self.clauses.length) { + var i = self._numClausesAddedToMiniSat; + var terms = self.clauses[i].terms; + if (assert) assert(terms, isArrayWhere(Logic.isNumTerm)); + var stillSat = self._minisat.addClause(terms); + self._numClausesAddedToMiniSat++; + if (! stillSat) { + self._unsat = true; + return null; + } + } + + if (assert) assert(this._num2name.length - 1, Logic.isWholeNumber); + self._minisat.ensureVar(this._num2name.length - 1); + + var stillSat = (_assumpVar ? + self._minisat.solveAssuming(_assumpVar) : + self._minisat.solve()); + if (! stillSat) { + if (! _assumpVar) { + self._unsat = true; + } + return null; + } + + return new Logic.Solution(self, self._minisat.getSolution()); +}; + +Logic.Solver.prototype.solveAssuming = function (formula) { + if (assert) assert(formula, isFormulaOrTerm); + + // Wrap the formula in a formula of type Assumption, so that + // we always generate a var like `$assump123`, regardless + // of whether `formula` is a Term, a NotFormula, an already + // required or forbidden Formula, etc. + var assump = new Logic.Assumption(formula); + var assumpVar = this._formulaToTerm(assump); + if (! (typeof assumpVar === 'number' && assumpVar > 0)) { + throw new Error("Assertion failure: not a positive numeric term"); + } + + // Generate clauses as if we used the assumption variable in a + // clause, in the positive. So if we assume "A v B", we might get a + // clause like "A v B v -$assump123" (or actually, "$or1 v + // -$assump123"), as if we had used $assump123 in a clause. Instead + // of using it in a clause, though, we temporarily assume it to be + // true. + this._useFormulaTerm(assumpVar); + + var result = this.solve(assumpVar); + // Tell MiniSat that we will never use assumpVar again. + // The formula may be used again, however. (For example, you + // can solve assuming a formula F, and if it works, require F.) + this._minisat.retireVar(assumpVar); + + return result; +}; + +Logic.Assumption = function (formula) { + if (assert) assert(formula, isFormulaOrTerm); + this.formula = formula; +}; + +Logic._defineFormula(Logic.Assumption, 'assump', { + generateClauses: function (isTrue, t) { + if (isTrue) { + return t.clause(this.formula); + } else { + return t.clause(Logic.not(this.formula)); + } + } +}); + +Logic.Solution = function (_solver, _assignment) { + var self = this; + self._solver = _solver; + self._assignment = _assignment; + + // save a snapshot of which formulas have variables designated + // for them, but where we haven't generated clauses that constrain + // those variables in both the positive and the negative direction. + self._ungeneratedFormulas = _.clone(_solver._ungeneratedFormulas); + + self._formulaValueCache = {}; + self._termifier = new Logic.Termifier(self._solver); + // Normally, when a Formula uses a Termifier to generate clauses that + // refer to other Formulas, the Termifier replaces the Formulas with + // their variables. We hijack this mechanism to replace the Formulas + // with their truth variables instead, leading to recursive evaluation. + // Note that we cache the evaluated truth values of Formulas to avoid + // redundant evaluation. + self._termifier.term = function (formula) { + return self.evaluate(formula) ? Logic.NUM_TRUE : Logic.NUM_FALSE; + }; + + // When true, evaluation doesn't throw errors when + // `evaluate` or `getWeightedSum` encounter named variables that are + // unknown or variables that weren't present when this Solution was + // generated. Instead, the unknown variables are assumed to be false. + self._ignoreUnknownVariables = false; +}; + +Logic.Solution.prototype.ignoreUnknownVariables = function () { + // We only make this settable one way (false to true). + // Setting it back and forth would be questionable, since we keep + // a cache of Formula evaluations. + this._ignoreUnknownVariables = true; +}; + +// Get a map of variables to their assignments, +// such as `{A: true, B: false, C: true}`. +// Internal variables are excluded. +Logic.Solution.prototype.getMap = function () { + var solver = this._solver; + var assignment = this._assignment; + var result = {}; + for (var i = 1; i < assignment.length; i++) { + var name = solver.getVarName(i); + if (name && name.charAt(0) !== '$') { + result[name] = assignment[i]; + } + } + return result; +}; + +// Get an array of variables that are assigned +// `true` by this solution, sorted by name. +// Internal variables are excluded. +Logic.Solution.prototype.getTrueVars = function () { + var solver = this._solver; + var assignment = this._assignment; + var result = []; + for (var i = 1; i < assignment.length; i++) { + if (assignment[i]) { + var name = solver.getVarName(i); + if (name && name.charAt(0) !== '$') { + result.push(name); + } + } + } + result.sort(); + return result; +}; + +// Get a Formula that says that the variables are assigned +// according to this solution. (Internal variables are +// excluded.) By forbidding this Formula and solving again, +// you can see if there are other solutions. +Logic.Solution.prototype.getFormula = function () { + var solver = this._solver; + var assignment = this._assignment; + var terms = []; + for (var i = 1; i < assignment.length; i++) { + var name = solver.getVarName(i); + if (name && name.charAt(0) !== '$') { + terms.push(assignment[i] ? i : -i); + } + } + return Logic.and(terms); +}; + +// Returns a boolean if the argument is a Formula (or Term), and an integer +// if the argument is a Logic.Bits. +Logic.Solution.prototype.evaluate = function (formulaOrBits) { + var self = this; + if (assert) assert(formulaOrBits, isFormulaOrTermOrBits); + + if (formulaOrBits instanceof Logic.Bits) { + // Evaluate to an integer + var ret = 0; + _.each(formulaOrBits.bits, function (f, i) { + if (self.evaluate(f)) { + ret += 1 << i; + } + }); + return ret; + } + + var solver = self._solver; + var ignoreUnknownVariables = self._ignoreUnknownVariables; + var assignment = self._assignment; + var formula = formulaOrBits; + if (formula instanceof Logic.NotFormula) { + return ! self.evaluate(formula.operand); + } else if (formula instanceof Logic.Formula) { + var cachedResult = self._formulaValueCache[formula.guid()]; + if (typeof cachedResult === 'boolean') { + return cachedResult; + } else { + var value; + var info = solver._getFormulaInfo(formula, true); + if (info && info.varNum && info.varNum < assignment.length && + ! _.has(self._ungeneratedFormulas, info.varNum)) { + // as an optimization, read the value of the formula directly + // from a variable if the formula's clauses were completely + // generated at the time of solving. (We must be careful, + // because if we didn't generate both the positive and the + // negative polarity clauses for the formula, then the formula + // variable is not actually constrained to have the right + // value.) + value = assignment[info.varNum]; + } else { + var clauses = solver._generateFormula(true, formula, self._termifier); + var value = _.all(clauses, function (cls) { + return _.any(cls.terms, function (t) { + return self.evaluate(t); + }); + }); + } + self._formulaValueCache[formula.guid()] = value; + return value; + } + } else { + // Term; convert to numeric (possibly negative), but throw + // an error if the name is not found. If `ignoreUnknownVariables` + // is set, return false instead. + var numTerm = solver.toNumTerm(formula, true); + if (! numTerm) { + if (ignoreUnknownVariables) { + return false; + } else { + // formula must be a NameTerm naming a variable that doesn't exist + var vname = String(formula).replace(/^-*/, ''); + throw new Error("No such variable: " + vname); + } + } + var v = numTerm; + var isNot = false; + if (numTerm < 0) { + v = -v; + isNot = true; + } + if (v < 1 || v >= assignment.length) { + var vname = v; + if (v >= 1 && v < solver._num2name.length) { + vname = solver._num2name[v]; + } + if (ignoreUnknownVariables) { + return false; + } else { + throw new Error("Variable not part of solution: " + vname); + } + } + var ret = assignment[v]; + if (isNot) { + ret = ! ret; + } + return ret; + } +}; + +Logic.Solution.prototype.getWeightedSum = function (formulas, weights) { + checkWeightedSumArgs(formulas, weights); + + var total = 0; + if (typeof weights === 'number') { + for (var i = 0; i < formulas.length; i++) { + total += weights * (this.evaluate(formulas[i]) ? 1 : 0); + } + } else { + for (var i = 0; i < formulas.length; i++) { + total += weights[i] * (this.evaluate(formulas[i]) ? 1 : 0); + } + } + return total; +}; +var getNonZeroWeightedTerms = function (costTerms, costWeights) { + if (typeof costWeights === 'number') { + return costWeights ? costTerms : []; + } else { + var terms = []; + for (var i = 0; i < costTerms.length; i++) { + if (costWeights[i]) { + terms.push(costTerms[i]); + } + } + return terms; + } +}; + +// See comments on minimizeWeightedSum and maximizeWeightedSum. +var minMaxWS = function (solver, solution, costTerms, costWeights, options, + isMin) { + var curSolution = solution; + var curCost = curSolution.getWeightedSum(costTerms, costWeights); + + var optFormula = options && options.formula; + var weightedSum = (optFormula || Logic.weightedSum(costTerms, costWeights)); + + var progress = options && options.progress; + var strategy = options && options.strategy; + + // array of terms with non-zero weights, populated on demand + var nonZeroTerms = null; + + if (isMin && curCost > 0) { + // try to skip straight to 0 cost, because if it works, it could + // save us some time + if (progress) { + progress('trying', 0); + } + var zeroSolution = null; + nonZeroTerms = getNonZeroWeightedTerms(costTerms, costWeights); + var zeroSolution = solver.solveAssuming(Logic.not(Logic.or(nonZeroTerms))); + if (zeroSolution) { + curSolution = zeroSolution; + curCost = 0; + } + } + + if (isMin && strategy === 'bottom-up') { + for (var trialCost = 1; trialCost < curCost; trialCost++) { + if (progress) { + progress('trying', trialCost); + } + var costIsTrialCost = Logic.equalBits( + weightedSum, Logic.constantBits(trialCost)); + var newSolution = solver.solveAssuming(costIsTrialCost); + if (newSolution) { + curSolution = newSolution; + curCost = trialCost; + break; + } + } + } else if (strategy && strategy !== 'default') { + throw new Error("Bad strategy: " + strategy); + } else { + strategy = 'default'; + } + + if (strategy === 'default') { + // for minimization, count down from current cost. for maximization, + // count up. + while (isMin ? curCost > 0 : true) { + if (progress) { + progress('improving', curCost); + } + var improvement = (isMin ? Logic.lessThan : Logic.greaterThan)( + weightedSum, Logic.constantBits(curCost)); + var newSolution = solver.solveAssuming(improvement); + if (! newSolution) { + break; + } + solver.require(improvement); + curSolution = newSolution; + curCost = curSolution.getWeightedSum(costTerms, costWeights); + } + } + + if (isMin && curCost === 0) { + // express the requirement that the weighted sum be 0 in an efficient + // way for the solver (all terms with non-zero weights must be 0) + if (! nonZeroTerms) { + nonZeroTerms = getNonZeroWeightedTerms(costTerms, costWeights); + } + solver.forbid(nonZeroTerms); + } else { + solver.require(Logic.equalBits(weightedSum, Logic.constantBits(curCost))); + } + + if (progress) { + progress('finished', curCost); + } + + return curSolution; +}; + +// Minimize (or maximize) the dot product of costTerms and +// costWeights, and further, require (as in solver.require) that the +// value of the dot product be equal to the optimum found. Returns a +// valid solution where this optimum is achieved. +// +// `solution` must be a current valid solution as returned from +// `solve` or `solveAssuming`. It is used as a starting point (to +// evaluate the current cost). +// +// costWeights is an array (of same length as costTerms) or a single +// WholeNumber. +// +// if the caller passes options.formula, it should be the formula +// Logic.weightedSum(costTerms, costWeights). The optimizer will use +// this existing formula rather than generating a new one (for +// efficiency). The optimizer still wants to know the terms and +// weights, because it is more efficient for it to evaluate the +// current cost using them directly rather than the formula. +// +// options.progress: a function that takes two arguments, to call at +// particular times during optimization. Called with arguments +// ('improving', cost) when about to search for a way to improve on +// `cost`, and called with arguments ('finished', cost) when the +// optimum is reached. There's also ('trying', cost) when a cost +// is tried directly (which is usually done with 0 right off the bat). +// +// options.strategy: a string hinting how to go about the optimization. +// the default strategy (option absent or 'default') is to work down +// from the current cost for minimization or up from the current cost +// for maximization, and iteratively insist that the cost be made lower +// if possible. For minimization, the alternate strategy 'bottom-up' is +// available, which starts at 0 and tries ever higher costs until one +// works. All strategies first try and see if a cost of 0 is possible. + +// ("costTerms" is kind of a misnomer since they may be Formulas or Terms.) +Logic.Solver.prototype.minimizeWeightedSum = function (solution, costTerms, + costWeights, options) { + return minMaxWS(this, solution, costTerms, costWeights, options, true); +}; + +Logic.Solver.prototype.maximizeWeightedSum = function (solution, costTerms, + costWeights, options) { + return minMaxWS(this, solution, costTerms, costWeights, options, false); +}; +module.exports = Logic; + + +/***/ }), +/* 281 */ +/***/ (function(module, exports, __webpack_require__) { + +var C_MINISAT = __webpack_require__(282); +var _ = __webpack_require__(283); +var MiniSat; +MiniSat = function () { + // A MiniSat object wraps an instance of "native" MiniSat. You can + // have as many MiniSat objects as you want, and they are all + // independent. + // + // C is the "module" object created by Emscripten. We wrap the + // output of Emscripten in a closure, so each call to C_MINISAT() + // actually instantiates a separate C environment, including + // the "native" heap. + // + // The methods available on `C` include the global functions we + // define in `logic-solver.cc`, each prefixed with `_`, and a varied + // assortment of helpers put there by Emscripten, some of which are + // documented here: + // http://kripken.github.io/emscripten-site/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html + // + // See the README in the meteor/minisat repo for more notes about + // our build of MiniSat. + var C = this._C = C_MINISAT(); + + this._native = { + getStackPointer: function () { + return C.Runtime.stackSave(); + }, + setStackPointer: function (ptr) { + C.Runtime.stackRestore(ptr); + }, + allocateBytes: function (len) { + return C.allocate(len, 'i8', C.ALLOC_STACK); + }, + pushString: function (str) { + return this.allocateBytes(C.intArrayFromString(str)); + }, + savingStack: function (func) { + var SP = this.getStackPointer(); + try { + return func(this, C); + } finally { + this.setStackPointer(SP); + } + } + }; + + C._createTheSolver(); + + // useful log for debugging and testing + this._clauses = []; +}; + + +// Make sure MiniSat has allocated space in its model for v, +// even if v is unused. If we have variables A,B,C,D which +// are numbers 1,2,3,4, for example, but we never actually use +// C and D, calling ensureVar(4) will make MiniSat give us +// solution values for them anyway. +MiniSat.prototype.ensureVar = function (v) { + this._C._ensureVar(v); +}; + +// Add a clause, in the form of an array of Logic.NumTerms. +// Returns true if the problem is still satisfiable +// (as far as we know without doing more work), and false if +// we can already tell that it is unsatisfiable. +MiniSat.prototype.addClause = function (terms) { + this._clauses.push(terms); + return this._native.savingStack(function (native, C) { + var termsPtr = C.allocate((terms.length+1)*4, 'i32', C.ALLOC_STACK); + _.each(terms, function (t, i) { + C.setValue(termsPtr + i*4, t, 'i32'); + }); + C.setValue(termsPtr + terms.length*4, 0, 'i32'); // 0-terminate + return C._addClause(termsPtr) ? true : false; + }); +}; + +MiniSat.prototype.solve = function () { + return this._C._solve() ? true : false; +}; + +MiniSat.prototype.solveAssuming = function (v) { + return this._C._solveAssuming(v) ? true : false; +}; + +MiniSat.prototype.getSolution = function () { + var solution = [null]; // no 0th var + var C = this._C; + var numVars = C._getNumVars(); + var solPtr = C._getSolution(); + for (var i = 0; i < numVars; i++) { + // 0 is Minisat::l_True (lifted "true"). + // Internally, Minisat has three states for a variable: + // true, false, and undetermined. It doesn't distinguish + // between "false" and "undetermined" in solutions though + // (I think it sets undetermined variables to false). + solution[i+1] = (C.getValue(solPtr+i, 'i8') === 0); + } + return solution; +}; + +MiniSat.prototype.retireVar = function (v) { + this._C._retireVar(v); +}; + +// The "conflict clause" feature of MiniSat is not what it sounds +// like, unfortunately -- it doesn't help explain conflicts. +// It only tells us which assumption vars are to blame for a failed +// solveAssuming (and we only ever pass one var). +// We keep this function around in case we discover a use for it. +MiniSat.prototype.getConflictClause = function () { + var C = this._C; + var numTerms = C._getConflictClauseSize(); + var clausePtr = C._getConflictClause(); + var terms = []; + for (var i = 0; i < numTerms; i++) { + var t = C.getValue(clausePtr + i*4, 'i32'); + var v = (t >>> 1); + var s = (t & 1) ? -1 : 1; + terms[i] = v * s; + } + return terms; +}; +module.exports = MiniSat; + + +/***/ }), +/* 282 */ +/***/ (function(module, exports, __webpack_require__) { + +var C_MINISAT; +// This file is generated by the meteor/minisat repo. +// See that repo's README for instructions for building it. +C_MINISAT=(function(){var module={};var require=(function(){});var process={argv:["node","minisat"],on:(function(){}),stdout:{write:(function(str){console.log("MINISAT-out:",str.replace(/\n$/,""))})},stderr:{write:(function(str){console.log("MINISAT-err:",str.replace(/\n$/,""))})}};var window=0;var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function";var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filename);if(!ret&&filename!=nodePath["resolve"](filename)){filename=path.join(__dirname,"..","src",filename);ret=nodeFS["readFileSync"](filename)}if(ret&&!binary)ret=ret.toString();return ret};Module["readBinary"]=function readBinary(filename){return Module["read"](filename,true)};Module["load"]=function load(f){globalEval(read(f))};if(process["argv"].length>1){Module["thisProgram"]=process["argv"][1].replace(/\\/g,"/")}else{Module["thisProgram"]="unknown-program"}Module["arguments"]=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",(function(ex){if(!(ex instanceof ExitStatus)){throw ex}}))}else if(ENVIRONMENT_IS_SHELL){if(!Module["print"])Module["print"]=print;if(typeof printErr!="undefined")Module["printErr"]=printErr;if(typeof read!="undefined"){Module["read"]=read}else{Module["read"]=function read(){throw"no read() available (jsc?)"}}Module["readBinary"]=function readBinary(f){if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}var data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){Module["arguments"]=scriptArgs}else if(typeof arguments!="undefined"){Module["arguments"]=arguments}this["Module"]=Module}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){Module["read"]=function read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(typeof arguments!="undefined"){Module["arguments"]=arguments}if(typeof console!=="undefined"){if(!Module["print"])Module["print"]=function print(x){console.log(x)};if(!Module["printErr"])Module["printErr"]=function printErr(x){console.log(x)}}else{var TRY_USE_DUMP=false;if(!Module["print"])Module["print"]=TRY_USE_DUMP&&typeof dump!=="undefined"?(function(x){dump(x)}):(function(x){})}if(ENVIRONMENT_IS_WEB){window["Module"]=Module}else{Module["load"]=importScripts}}else{throw"Unknown runtime environment. Where are we?"}function globalEval(x){eval.call(null,x)}if(!Module["load"]&&Module["read"]){Module["load"]=function load(f){globalEval(Module["read"](f))}}if(!Module["print"]){Module["print"]=(function(){})}if(!Module["printErr"]){Module["printErr"]=Module["print"]}if(!Module["arguments"]){Module["arguments"]=[]}if(!Module["thisProgram"]){Module["thisProgram"]="./this.program"}Module.print=Module["print"];Module.printErr=Module["printErr"];Module["preRun"]=[];Module["postRun"]=[];for(var key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}var Runtime={setTempRet0:(function(value){tempRet0=value}),getTempRet0:(function(){return tempRet0}),stackSave:(function(){return STACKTOP}),stackRestore:(function(stackTop){STACKTOP=stackTop}),getNativeTypeSize:(function(type){switch(type){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(type[type.length-1]==="*"){return Runtime.QUANTUM_SIZE}else if(type[0]==="i"){var bits=parseInt(type.substr(1));assert(bits%8===0);return bits/8}else{return 0}}}}),getNativeFieldSize:(function(type){return Math.max(Runtime.getNativeTypeSize(type),Runtime.QUANTUM_SIZE)}),STACK_ALIGN:16,getAlignSize:(function(type,size,vararg){if(!vararg&&(type=="i64"||type=="double"))return 8;if(!type)return Math.min(size,8);return Math.min(size||(type?Runtime.getNativeFieldSize(type):0),Runtime.QUANTUM_SIZE)}),dynCall:(function(sig,ptr,args){if(args&&args.length){if(!args.splice)args=Array.prototype.slice.call(args);args.splice(0,0,ptr);return Module["dynCall_"+sig].apply(null,args)}else{return Module["dynCall_"+sig].call(null,ptr)}}),functionPointers:[],addFunction:(function(func){for(var i=0;i0)return""}var c1=buffer[0];var c2=buffer[1];var c3=buffer[2];var c4=buffer[3];var ret;if(buffer.length==2){ret=String.fromCharCode((c1&31)<<6|c2&63)}else if(buffer.length==3){ret=String.fromCharCode((c1&15)<<12|(c2&63)<<6|c3&63)}else{var codePoint=(c1&7)<<18|(c2&63)<<12|(c3&63)<<6|c4&63;ret=String.fromCharCode(((codePoint-65536)/1024|0)+55296,(codePoint-65536)%1024+56320)}buffer.length=0;return ret});this.processJSString=function processJSString(string){string=unescape(encodeURIComponent(string));var ret=[];for(var i=0;i=TOTAL_MEMORY)enlargeMemory();return ret}),alignMemory:(function(size,quantum){var ret=size=Math.ceil(size/(quantum?quantum:16))*(quantum?quantum:16);return ret}),makeBigInt:(function(low,high,unsigned){var ret=unsigned?+(low>>>0)+ +(high>>>0)*+4294967296:+(low>>>0)+ +(high|0)*+4294967296;return ret}),GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module["Runtime"]=Runtime;var __THREW__=0;var ABORT=false;var EXITSTATUS=0;var undef=0;var tempValue,tempInt,tempBigInt,tempInt2,tempBigInt2,tempPair,tempBigIntI,tempBigIntR,tempBigIntS,tempBigIntP,tempBigIntD,tempDouble,tempFloat;var tempI64,tempI64b;var tempRet0,tempRet1,tempRet2,tempRet3,tempRet4,tempRet5,tempRet6,tempRet7,tempRet8,tempRet9;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var globalScope=this;function getCFunc(ident){var func=Module["_"+ident];if(!func){try{func=eval("_"+ident)}catch(e){}}assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)");return func}var cwrap,ccall;((function(){var JSfuncs={"stackSave":(function(){Runtime.stackSave()}),"stackRestore":(function(){Runtime.stackRestore()}),"arrayToC":(function(arr){var ret=Runtime.stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}),"stringToC":(function(str){var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=Runtime.stackAlloc((str.length<<2)+1);writeStringToMemory(str,ret)}return ret})};var toC={"string":JSfuncs["stringToC"],"array":JSfuncs["arrayToC"]};ccall=function ccallFunc(ident,returnType,argTypes,args){var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":tempI64=[value>>>0,(tempDouble=value,+Math_abs(tempDouble)>=+1?tempDouble>+0?(Math_min(+Math_floor(tempDouble/+4294967296),+4294967295)|0)>>>0:~~+Math_ceil((tempDouble- +(~~tempDouble>>>0))/+4294967296)>>>0:0)],HEAP32[ptr>>2]=tempI64[0],HEAP32[ptr+4>>2]=tempI64[1];break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;default:abort("invalid type for setValue: "+type)}}Module["setValue"]=setValue;function getValue(ptr,type,noSafe){type=type||"i8";if(type.charAt(type.length-1)==="*")type="i32";switch(type){case"i1":return HEAP8[ptr>>0];case"i8":return HEAP8[ptr>>0];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP32[ptr>>2];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];default:abort("invalid type for setValue: "+type)}return null}Module["getValue"]=getValue;var ALLOC_NORMAL=0;var ALLOC_STACK=1;var ALLOC_STATIC=2;var ALLOC_DYNAMIC=3;var ALLOC_NONE=4;Module["ALLOC_NORMAL"]=ALLOC_NORMAL;Module["ALLOC_STACK"]=ALLOC_STACK;Module["ALLOC_STATIC"]=ALLOC_STATIC;Module["ALLOC_DYNAMIC"]=ALLOC_DYNAMIC;Module["ALLOC_NONE"]=ALLOC_NONE;function allocate(slab,types,allocator,ptr){var zeroinit,size;if(typeof slab==="number"){zeroinit=true;size=slab}else{zeroinit=false;size=slab.length}var singleType=typeof types==="string"?types:null;var ret;if(allocator==ALLOC_NONE){ret=ptr}else{ret=[_malloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][allocator===undefined?ALLOC_STATIC:allocator](Math.max(size,singleType?1:types.length))}if(zeroinit){var ptr=ret,stop;assert((ret&3)==0);stop=ret+(size&~3);for(;ptr>2]=0}stop=ret+size;while(ptr>0]=0}return ret}if(singleType==="i8"){if(slab.subarray||slab.slice){HEAPU8.set(slab,ret)}else{HEAPU8.set(new Uint8Array(slab),ret)}return ret}var i=0,type,typeSize,previousType;while(i>0];if(t>=128)hasUtf=true;else if(t==0&&!length)break;i++;if(length&&i==length)break}if(!length)length=i;var ret="";if(!hasUtf){var MAX_CHUNK=1024;var curr;while(length>0){curr=String.fromCharCode.apply(String,HEAPU8.subarray(ptr,ptr+Math.min(length,MAX_CHUNK)));ret=ret?ret+curr:curr;ptr+=MAX_CHUNK;length-=MAX_CHUNK}return ret}var utf8=new Runtime.UTF8Processor;for(i=0;i>0];ret+=utf8.processCChar(t)}return ret}Module["Pointer_stringify"]=Pointer_stringify;function UTF16ToString(ptr){var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0)return str;++i;str+=String.fromCharCode(codeUnit)}}Module["UTF16ToString"]=UTF16ToString;function stringToUTF16(str,outPtr){for(var i=0;i>1]=codeUnit}HEAP16[outPtr+str.length*2>>1]=0}Module["stringToUTF16"]=stringToUTF16;function UTF32ToString(ptr){var i=0;var str="";while(1){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)return str;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}}Module["UTF32ToString"]=UTF32ToString;function stringToUTF32(str,outPtr){var iChar=0;for(var iCodeUnit=0;iCodeUnit=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++iCodeUnit);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr+iChar*4>>2]=codeUnit;++iChar}HEAP32[outPtr+iChar*4>>2]=0}Module["stringToUTF32"]=stringToUTF32;function demangle(func){var hasLibcxxabi=!!Module["___cxa_demangle"];if(hasLibcxxabi){try{var buf=_malloc(func.length);writeStringToMemory(func.substr(1),buf);var status=_malloc(4);var ret=Module["___cxa_demangle"](buf,0,0,status);if(getValue(status,"i32")===0&&ret){return Pointer_stringify(ret)}}catch(e){}finally{if(buf)_free(buf);if(status)_free(status);if(ret)_free(ret)}}var i=3;var basicTypes={"v":"void","b":"bool","c":"char","s":"short","i":"int","l":"long","f":"float","d":"double","w":"wchar_t","a":"signed char","h":"unsigned char","t":"unsigned short","j":"unsigned int","m":"unsigned long","x":"long long","y":"unsigned long long","z":"..."};var subs=[];var first=true;function dump(x){if(x)Module.print(x);Module.print(func);var pre="";for(var a=0;a"}else{ret=name}paramLoop:while(i0){var c=func[i++];if(c in basicTypes){list.push(basicTypes[c])}else{switch(c){case"P":list.push(parse(true,1,true)[0]+"*");break;case"R":list.push(parse(true,1,true)[0]+"&");break;case"L":{i++;var end=func.indexOf("E",i);var size=end-i;list.push(func.substr(i,size));i+=size+2;break};case"A":{var size=parseInt(func.substr(i));i+=size.toString().length;if(func[i]!=="_")throw"?";i++;list.push(parse(true,1,true)[0]+" ["+size+"]");break};case"E":break paramLoop;default:ret+="?"+c;break paramLoop}}}if(!allowVoid&&list.length===1&&list[0]==="void")list=[];if(rawList){if(ret){list.push(ret+"?")}return list}else{return ret+flushList()}}var parsed=func;try{if(func=="Object._main"||func=="_main"){return"main()"}if(typeof func==="number")func=Pointer_stringify(func);if(func[0]!=="_")return func;if(func[1]!=="_")return func;if(func[2]!=="Z")return func;switch(func[3]){case"n":return"operator new()";case"d":return"operator delete()"}parsed=parse()}catch(e){parsed+="?"}if(parsed.indexOf("?")>=0&&!hasLibcxxabi){Runtime.warnOnce("warning: a problem occurred in builtin C++ name demangling; build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling")}return parsed}function demangleAll(text){return text.replace(/__Z[\w\d_]+/g,(function(x){var y=demangle(x);return x===y?x:x+" ["+y+"]"}))}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error(0)}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){return demangleAll(jsStackTrace())}Module["stackTrace"]=stackTrace;var PAGE_SIZE=4096;function alignMemoryPage(x){return x+4095&-4096}var HEAP;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var STATIC_BASE=0,STATICTOP=0,staticSealed=false;var STACK_BASE=0,STACKTOP=0,STACK_MAX=0;var DYNAMIC_BASE=0,DYNAMICTOP=0;function enlargeMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.")}var TOTAL_STACK=Module["TOTAL_STACK"]||5242880;var TOTAL_MEMORY=Module["TOTAL_MEMORY"]||67108864;var FAST_MEMORY=Module["FAST_MEMORY"]||2097152;var totalMemory=64*1024;while(totalMemory0){var callback=callbacks.shift();if(typeof callback=="function"){callback();continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Runtime.dynCall("v",func)}else{Runtime.dynCall("vi",func,[callback.arg])}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){if(runtimeInitialized)return;runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__);runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}Module["addOnPreRun"]=Module.addOnPreRun=addOnPreRun;function addOnInit(cb){__ATINIT__.unshift(cb)}Module["addOnInit"]=Module.addOnInit=addOnInit;function addOnPreMain(cb){__ATMAIN__.unshift(cb)}Module["addOnPreMain"]=Module.addOnPreMain=addOnPreMain;function addOnExit(cb){__ATEXIT__.unshift(cb)}Module["addOnExit"]=Module.addOnExit=addOnExit;function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}Module["addOnPostRun"]=Module.addOnPostRun=addOnPostRun;function intArrayFromString(stringy,dontAddNull,length){var ret=(new Runtime.UTF8Processor).processJSString(stringy);if(length){ret.length=length}if(!dontAddNull){ret.push(0)}return ret}Module["intArrayFromString"]=intArrayFromString;function intArrayToString(array){var ret=[];for(var i=0;i255){chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}Module["intArrayToString"]=intArrayToString;function writeStringToMemory(string,buffer,dontAddNull){var array=intArrayFromString(string,dontAddNull);var i=0;while(i>0]=chr;i=i+1}}Module["writeStringToMemory"]=writeStringToMemory;function writeArrayToMemory(array,buffer){for(var i=0;i>0]=array[i]}}Module["writeArrayToMemory"]=writeArrayToMemory;function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer+str.length>>0]=0}Module["writeAsciiToMemory"]=writeAsciiToMemory;function unSign(value,bits,ignore){if(value>=0){return value}return bits<=32?2*Math.abs(1<=half&&(bits<=32||value>half)){value=-2*half+value}return value}if(!Math["imul"]||Math["imul"](4294967295,5)!==-5)Math["imul"]=function imul(a,b){var ah=a>>>16;var al=a&65535;var bh=b>>>16;var bl=b&65535;return al*bl+(ah*bl+al*bh<<16)|0};Math.imul=Math["imul"];var Math_abs=Math.abs;var Math_cos=Math.cos;var Math_sin=Math.sin;var Math_tan=Math.tan;var Math_acos=Math.acos;var Math_asin=Math.asin;var Math_atan=Math.atan;var Math_atan2=Math.atan2;var Math_exp=Math.exp;var Math_log=Math.log;var Math_sqrt=Math.sqrt;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_pow=Math.pow;var Math_imul=Math.imul;var Math_fround=Math.fround;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}Module["addRunDependency"]=addRunDependency;function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["removeRunDependency"]=removeRunDependency;Module["preloadedImages"]={};Module["preloadedAudios"]={};var memoryInitializer=null;STATIC_BASE=8;STATICTOP=STATIC_BASE+5664;__ATINIT__.push({func:(function(){__GLOBAL__I_a()})},{func:(function(){__GLOBAL__I_a127()})});allocate([78,55,77,105,110,105,115,97,116,50,48,79,117,116,79,102,77,101,109,111,114,121,69,120,99,101,112,116,105,111,110,69,0,0,0,0,0,0,0,0,88,18,0,0,8,0,0,0,78,55,77,105,110,105,115,97,116,54,79,112,116,105,111,110,69,0,0,0,0,0,0,0,88,18,0,0,56,0,0,0,10,32,32,32,32,32,32,32,32,37,115,10,0,0,0,0,0,0,0,0,80,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,200,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,1,0,0,0,78,55,77,105,110,105,115,97,116,49,48,66,111,111,108,79,112,116,105,111,110,69,0,0,128,18,0,0,176,0,0,0,80,0,0,0,0,0,0,0,32,32,45,37,115,44,32,45,110,111,45,37,115,0,0,0,40,100,101,102,97,117,108,116,58,32,37,115,41,10,0,0,111,110,0,0,0,0,0,0,111,102,102,0,0,0,0,0,110,111,45,0,0,0,0,0,0,0,0,0,64,1,0,0,1,0,0,0,4,0,0,0,2,0,0,0,2,0,0,0,78,55,77,105,110,105,115,97,116,57,73,110,116,79,112,116,105,111,110,69,0,0,0,0,128,18,0,0,40,1,0,0,80,0,0,0,0,0,0,0,32,32,45,37,45,49,50,115,32,61,32,37,45,56,115,32,91,0,0,0,0,0,0,0,105,109,105,110,0,0,0,0,37,52,100,0,0,0,0,0,32,46,46,32,0,0,0,0,105,109,97,120,0,0,0,0,93,32,40,100,101,102,97,117,108,116,58,32,37,100,41,10,0,0,0,0,0,0,0,0,69,82,82,79,82,33,32,118,97,108,117,101,32,60,37,115,62,32,105,115,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,111,112,116,105,111,110,32,34,37,115,34,46,10,0,0,0,0,0,0,0,0,69,82,82,79,82,33,32,118,97,108,117,101,32,60,37,115,62,32,105,115,32,116,111,111,32,115,109,97,108,108,32,102,111,114,32,111,112,116,105,111,110,32,34,37,115,34,46,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,97,114,45,100,101,99,97,121,0,0,0,0,0,0,0,84,104,101,32,118,97,114,105,97,98,108,101,32,97,99,116,105,118,105,116,121,32,100,101,99,97,121,32,102,97,99,116,111,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,108,97,45,100,101,99,97,121,0,0,0,0,0,0,0,84,104,101,32,99,108,97,117,115,101,32,97,99,116,105,118,105,116,121,32,100,101,99,97,121,32,102,97,99,116,111,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,110,100,45,102,114,101,113,0,0,0,0,0,0,0,0,84,104,101,32,102,114,101,113,117,101,110,99,121,32,119,105,116,104,32,119,104,105,99,104,32,116,104,101,32,100,101,99,105,115,105,111,110,32,104,101,117,114,105,115,116,105,99,32,116,114,105,101,115,32,116,111,32,99,104,111,111,115,101,32,97,32,114,97,110,100,111,109,32,118,97,114,105,97,98,108,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,110,100,45,115,101,101,100,0,0,0,0,0,0,0,0,85,115,101,100,32,98,121,32,116,104,101,32,114,97,110,100,111,109,32,118,97,114,105,97,98,108,101,32,115,101,108,101,99,116,105,111,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,99,109,105,110,45,109,111,100,101,0,0,0,0,0,0,67,111,110,116,114,111,108,115,32,99,111,110,102,108,105,99,116,32,99,108,97,117,115,101,32,109,105,110,105,109,105,122,97,116,105,111,110,32,40,48,61,110,111,110,101,44,32,49,61,98,97,115,105,99,44,32,50,61,100,101,101,112,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,104,97,115,101,45,115,97,118,105,110,103,0,0,0,0,67,111,110,116,114,111,108,115,32,116,104,101,32,108,101,118,101,108,32,111,102,32,112,104,97,115,101,32,115,97,118,105,110,103,32,40,48,61,110,111,110,101,44,32,49,61,108,105,109,105,116,101,100,44,32,50,61,102,117,108,108,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,110,100,45,105,110,105,116,0,0,0,0,0,0,0,0,82,97,110,100,111,109,105,122,101,32,116,104,101,32,105,110,105,116,105,97,108,32,97,99,116,105,118,105,116,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,117,98,121,0,0,0,0,85,115,101,32,116,104,101,32,76,117,98,121,32,114,101,115,116,97,114,116,32,115,101,113,117,101,110,99,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,102,105,114,115,116,0,0,84,104,101,32,98,97,115,101,32,114,101,115,116,97,114,116,32,105,110,116,101,114,118,97,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,105,110,99,0,0,0,0,82,101,115,116,97,114,116,32,105,110,116,101,114,118,97,108,32,105,110,99,114,101,97,115,101,32,102,97,99,116,111,114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,99,45,102,114,97,99,0,84,104,101,32,102,114,97,99,116,105,111,110,32,111,102,32,119,97,115,116,101,100,32,109,101,109,111,114,121,32,97,108,108,111,119,101,100,32,98,101,102,111,114,101,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,116,114,105,103,103,101,114,101,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,105,110,45,108,101,97,114,110,116,115,0,0,0,0,0,77,105,110,105,109,117,109,32,108,101,97,114,110,116,32,99,108,97,117,115,101,32,108,105,109,105,116,0,0,0,0,0,0,0,0,0,192,7,0,0,5,0,0,0,6,0,0,0,7,0,0,0,0,0,0,0,124,32,37,57,100,32,124,32,37,55,100,32,37,56,100,32,37,56,100,32,124,32,37,56,100,32,37,56,100,32,37,54,46,48,102,32,124,32,37,54,46,51,102,32,37,37,32,124,10,0,0,0,0,0,0,0,124,32,32,71,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,58,32,32,32,37,49,50,100,32,98,121,116,101,115,32,61,62,32,37,49,50,100,32,98,121,116,101,115,32,32,32,32,32,32,32,32,32,32,32,32,32,124,10,0,0,0,0,0,0,0,0,78,55,77,105,110,105,115,97,116,54,83,111,108,118,101,114,69,0,0,0,0,0,0,0,88,18,0,0,168,7,0,0,60,98,111,111,108,62,0,0,10,32,32,32,32,32,32,32,32,37,115,10,0,0,0,0,60,105,110,116,51,50,62,0,69,82,82,79,82,33,32,118,97,108,117,101,32,60,37,115,62,32,105,115,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,111,112,116,105,111,110,32,34,37,115,34,46,10,0,0,0,0,0,0,0,0,69,82,82,79,82,33,32,118,97,108,117,101,32,60,37,115,62,32,105,115,32,116,111,111,32,115,109,97,108,108,32,102,111,114,32,111,112,116,105,111,110,32,34,37,115,34,46,10,0,0,0,0,0,0,0,0,67,79,82,69,0,0,0,0,60,100,111,117,98,108,101,62,0,0,0,0,0,0,0,0,0,0,0,0,168,8,0,0,1,0,0,0,8,0,0,0,3,0,0,0,3,0,0,0,78,55,77,105,110,105,115,97,116,49,50,68,111,117,98,108,101,79,112,116,105,111,110,69,0,0,0,0,0,0,0,0,128,18,0,0,136,8,0,0,80,0,0,0,0,0,0,0,32,32,45,37,45,49,50,115,32,61,32,37,45,56,115,32,37,99,37,52,46,50,103,32,46,46,32,37,52,46,50,103,37,99,32,40,100,101,102,97,117,108,116,58,32,37,103,41,10,0,0,0,0,0,0,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,91,32,83,101,97,114,99,104,32,83,116,97,116,105,115,116,105,99,115,32,93,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,0,124,32,67,111,110,102,108,105,99,116,115,32,124,32,32,32,32,32,32,32,32,32,32,79,82,73,71,73,78,65,76,32,32,32,32,32,32,32,32,32,124,32,32,32,32,32,32,32,32,32,32,76,69,65,82,78,84,32,32,32,32,32,32,32,32,32,32,124,32,80,114,111,103,114,101,115,115,32,124,0,124,32,32,32,32,32,32,32,32,32,32,32,124,32,32,32,32,86,97,114,115,32,32,67,108,97,117,115,101,115,32,76,105,116,101,114,97,108,115,32,124,32,32,32,32,76,105,109,105,116,32,32,67,108,97,117,115,101,115,32,76,105,116,47,67,108,32,124,32,32,32,32,32,32,32,32,32,32,124,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,115,121,109,109,0,0,0,83,104,114,105,110,107,32,99,108,97,117,115,101,115,32,98,121,32,97,115,121,109,109,101,116,114,105,99,32,98,114,97,110,99,104,105,110,103,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,99,104,101,99,107,0,0,67,104,101,99,107,32,105,102,32,97,32,99,108,97,117,115,101,32,105,115,32,97,108,114,101,97,100,121,32,105,109,112,108,105,101,100,46,32,40,99,111,115,116,108,121,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,101,108,105,109,0,0,0,0,80,101,114,102,111,114,109,32,118,97,114,105,97,98,108,101,32,101,108,105,109,105,110,97,116,105,111,110,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,114,111,119,0,0,0,0,65,108,108,111,119,32,97,32,118,97,114,105,97,98,108,101,32,101,108,105,109,105,110,97,116,105,111,110,32,115,116,101,112,32,116,111,32,103,114,111,119,32,98,121,32,97,32,110,117,109,98,101,114,32,111,102,32,99,108,97,117,115,101,115,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,99,108,45,108,105,109,0,0,86,97,114,105,97,98,108,101,115,32,97,114,101,32,110,111,116,32,101,108,105,109,105,110,97,116,101,100,32,105,102,32,105,116,32,112,114,111,100,117,99,101,115,32,97,32,114,101,115,111,108,118,101,110,116,32,119,105,116,104,32,97,32,108,101,110,103,116,104,32,97,98,111,118,101,32,116,104,105,115,32,108,105,109,105,116,46,32,45,49,32,109,101,97,110,115,32,110,111,32,108,105,109,105,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,117,98,45,108,105,109,0,68,111,32,110,111,116,32,99,104,101,99,107,32,105,102,32,115,117,98,115,117,109,112,116,105,111,110,32,97,103,97,105,110,115,116,32,97,32,99,108,97,117,115,101,32,108,97,114,103,101,114,32,116,104,97,110,32,116,104,105,115,46,32,45,49,32,109,101,97,110,115,32,110,111,32,108,105,109,105,116,46,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,105,109,112,45,103,99,45,102,114,97,99,0,0,0,0,84,104,101,32,102,114,97,99,116,105,111,110,32,111,102,32,119,97,115,116,101,100,32,109,101,109,111,114,121,32,97,108,108,111,119,101,100,32,98,101,102,111,114,101,32,97,32,103,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,32,105,115,32,116,114,105,103,103,101,114,101,100,32,100,117,114,105,110,103,32,115,105,109,112,108,105,102,105,99,97,116,105,111,110,46,0,0,0,0,0,0,0,120,14,0,0,9,0,0,0,10,0,0,0,11,0,0,0,0,0,0,0,115,117,98,115,117,109,112,116,105,111,110,32,108,101,102,116,58,32,37,49,48,100,32,40,37,49,48,100,32,115,117,98,115,117,109,101,100,44,32,37,49,48,100,32,100,101,108,101,116,101,100,32,108,105,116,101,114,97,108,115,41,13,0,0,101,108,105,109,105,110,97,116,105,111,110,32,108,101,102,116,58,32,37,49,48,100,13,0,124,32,32,69,108,105,109,105,110,97,116,101,100,32,99,108,97,117,115,101,115,58,32,32,32,32,32,37,49,48,46,50,102,32,77,98,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,124,10,0,0,0,0,124,32,32,71,97,114,98,97,103,101,32,99,111,108,108,101,99,116,105,111,110,58,32,32,32,37,49,50,100,32,98,121,116,101,115,32,61,62,32,37,49,50,100,32,98,121,116,101,115,32,32,32,32,32,32,32,32,32,32,32,32,32,124,10,0,0,0,0,0,0,0,0,78,55,77,105,110,105,115,97,116,49,48,83,105,109,112,83,111,108,118,101,114,69,0,0,128,18,0,0,96,14,0,0,192,7,0,0,0,0,0,0,60,100,111,117,98,108,101,62,0,0,0,0,0,0,0,0,60,105,110,116,51,50,62,0,83,73,77,80,0,0,0,0,60,98,111,111,108,62,0,0,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,79,33,0,0,0,0,0,2,0,0,0,0,0,0,0,48,15,0,0,0,0,0,0,117,110,99,97,117,103,104,116,0,0,0,0,0,0,0,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,58,32,37,115,0,0,0,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,101,120,99,101,112,116,105,111,110,32,111,102,32,116,121,112,101,32,37,115,0,0,0,0,0,0,0,0,116,101,114,109,105,110,97,116,105,110,103,32,119,105,116,104,32,37,115,32,102,111,114,101,105,103,110,32,101,120,99,101,112,116,105,111,110,0,0,0,116,101,114,109,105,110,97,116,105,110,103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,116,104,114,101,97,100,95,111,110,99,101,32,102,97,105,108,117,114,101,32,105,110,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,95,102,97,115,116,40,41,0,0,0,0,0,0,0,0,99,97,110,110,111,116,32,99,114,101,97,116,101,32,112,116,104,114,101,97,100,32,107,101,121,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,0,0,0,0,0,0,99,97,110,110,111,116,32,122,101,114,111,32,111,117,116,32,116,104,114,101,97,100,32,118,97,108,117,101,32,102,111,114,32,95,95,99,120,97,95,103,101,116,95,103,108,111,98,97,108,115,40,41,0,0,0,0,0,0,0,0,200,16,0,0,12,0,0,0,13,0,0,0,1,0,0,0,0,0,0,0,115,116,100,58,58,98,97,100,95,97,108,108,111,99,0,0,83,116,57,98,97,100,95,97,108,108,111,99,0,0,0,0,128,18,0,0,184,16,0,0,80,17,0,0,0,0,0,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,114,101,116,117,114,110,101,100,0,116,101,114,109,105,110,97,116,101,95,104,97,110,100,108,101,114,32,117,110,101,120,112,101,99,116,101,100,108,121,32,116,104,114,101,119,32,97,110,32,101,120,99,101,112,116,105,111,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,83,116,57,101,120,99,101,112,116,105,111,110,0,0,0,0,88,18,0,0,64,17,0,0,83,116,57,116,121,112,101,95,105,110,102,111,0,0,0,0,88,18,0,0,88,17,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,54,95,95,115,104,105,109,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,0,128,18,0,0,112,17,0,0,104,17,0,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,128,18,0,0,168,17,0,0,152,17,0,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,57,95,95,112,111,105,110,116,101,114,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,49,55,95,95,112,98,97,115,101,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,0,0,0,128,18,0,0,8,18,0,0,152,17,0,0,0,0,0,0,128,18,0,0,224,17,0,0,48,18,0,0,0,0,0,0,0,0,0,0,208,17,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,200,18,0,0,14,0,0,0,18,0,0,0,16,0,0,0,17,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,78,49,48,95,95,99,120,120,97,98,105,118,49,50,48,95,95,115,105,95,99,108,97,115,115,95,116,121,112,101,95,105,110,102,111,69,0,0,0,0,128,18,0,0,160,18,0,0,208,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,1,2,3,4,5,6,7,8,9,255,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,1,2,4,7,3,6,5,0,0,0,0,0,0,0,0,105,110,102,105,110,105,116,121,0,0,0,0,0,0,0,0,110,97,110,0,0,0,0,0,95,112,137,0,255,9,47,15,10,0,0,0,100,0,0,0,232,3,0,0,16,39,0,0,160,134,1,0,64,66,15,0,128,150,152,0,0,225,245,5],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=Runtime.alignMemory(allocate(12,"i8",ALLOC_STATIC),8);assert(tempDoublePtr%8==0);function copyTempFloat(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3]}function copyTempDouble(ptr){HEAP8[tempDoublePtr]=HEAP8[ptr];HEAP8[tempDoublePtr+1]=HEAP8[ptr+1];HEAP8[tempDoublePtr+2]=HEAP8[ptr+2];HEAP8[tempDoublePtr+3]=HEAP8[ptr+3];HEAP8[tempDoublePtr+4]=HEAP8[ptr+4];HEAP8[tempDoublePtr+5]=HEAP8[ptr+5];HEAP8[tempDoublePtr+6]=HEAP8[ptr+6];HEAP8[tempDoublePtr+7]=HEAP8[ptr+7]}function _atexit(func,arg){__ATEXIT__.unshift({func:func,arg:arg})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}Module["_i64Subtract"]=_i64Subtract;var ___errno_state=0;function ___setErrNo(value){HEAP32[___errno_state>>2]=value;return value}var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _sysconf(name){switch(name){case 30:return PAGE_SIZE;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 79:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32;case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1e3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:{if(typeof navigator==="object")return navigator["hardwareConcurrency"]||1;return 1}}___setErrNo(ERRNO_CODES.EINVAL);return-1}function __ZSt18uncaught_exceptionv(){return!!__ZSt18uncaught_exceptionv.uncaught_exception}var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:(function(adjusted){if(!adjusted||EXCEPTIONS.infos[adjusted])return adjusted;for(var ptr in EXCEPTIONS.infos){var info=EXCEPTIONS.infos[ptr];if(info.adjusted===adjusted){return ptr}}return adjusted}),addRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount++}),decRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];assert(info.refcount>0);info.refcount--;if(info.refcount===0){if(info.destructor){Runtime.dynCall("vi",info.destructor,[ptr])}delete EXCEPTIONS.infos[ptr];___cxa_free_exception(ptr)}}),clearRef:(function(ptr){if(!ptr)return;var info=EXCEPTIONS.infos[ptr];info.refcount=0})};function ___resumeException(ptr){if(!EXCEPTIONS.last){EXCEPTIONS.last=ptr}EXCEPTIONS.clearRef(EXCEPTIONS.deAdjust(ptr));throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}function ___cxa_find_matching_catch(){var thrown=EXCEPTIONS.last;if(!thrown){return(asm["setTempRet0"](0),0)|0}var info=EXCEPTIONS.infos[thrown];var throwntype=info.type;if(!throwntype){return(asm["setTempRet0"](0),thrown)|0}var typeArray=Array.prototype.slice.call(arguments);var pointer=Module["___cxa_is_pointer_type"](throwntype);if(!___cxa_find_matching_catch.buffer)___cxa_find_matching_catch.buffer=_malloc(4);HEAP32[___cxa_find_matching_catch.buffer>>2]=thrown;thrown=___cxa_find_matching_catch.buffer;for(var i=0;i>2];info.adjusted=thrown;return(asm["setTempRet0"](typeArray[i]),thrown)|0}}thrown=HEAP32[thrown>>2];return(asm["setTempRet0"](throwntype),thrown)|0}function ___cxa_throw(ptr,type,destructor){EXCEPTIONS.infos[ptr]={ptr:ptr,adjusted:ptr,type:type,destructor:destructor,refcount:0};EXCEPTIONS.last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exception=1}else{__ZSt18uncaught_exceptionv.uncaught_exception++}throw ptr+" - Exception catching is disabled, this exception cannot be caught. Compile with -s DISABLE_EXCEPTION_CATCHING=0 or DISABLE_EXCEPTION_CATCHING=2 to catch."}Module["_memset"]=_memset;Module["_bitshift64Shl"]=_bitshift64Shl;function _abort(){Module["abort"]()}var FS=undefined;var SOCKFS=undefined;function _send(fd,buf,len,flags){var sock=SOCKFS.getSocket(fd);if(!sock){___setErrNo(ERRNO_CODES.EBADF);return-1}return _write(fd,buf,len)}function _pwrite(fildes,buf,nbyte,offset){var stream=FS.getStream(fildes);if(!stream){___setErrNo(ERRNO_CODES.EBADF);return-1}try{var slab=HEAP8;return FS.write(stream,slab,buf,nbyte,offset)}catch(e){FS.handleFSError(e);return-1}}function _write(fildes,buf,nbyte){var stream=FS.getStream(fildes);if(!stream){___setErrNo(ERRNO_CODES.EBADF);return-1}try{var slab=HEAP8;return FS.write(stream,slab,buf,nbyte)}catch(e){FS.handleFSError(e);return-1}}function _fileno(stream){stream=FS.getStreamFromPtr(stream);if(!stream)return-1;return stream.fd}function _fwrite(ptr,size,nitems,stream){var bytesToWrite=nitems*size;if(bytesToWrite==0)return 0;var fd=_fileno(stream);var bytesWritten=_write(fd,ptr,bytesToWrite);if(bytesWritten==-1){var streamObj=FS.getStreamFromPtr(stream);if(streamObj)streamObj.error=true;return 0}else{return bytesWritten/size|0}}Module["_strlen"]=_strlen;function __reallyNegative(x){return x<0||x===0&&1/x===-Infinity}function __formatString(format,varargs){var textIndex=format;var argIndex=0;function getNextArg(type){var ret;if(type==="double"){ret=(HEAP32[tempDoublePtr>>2]=HEAP32[varargs+argIndex>>2],HEAP32[tempDoublePtr+4>>2]=HEAP32[varargs+(argIndex+4)>>2],+HEAPF64[tempDoublePtr>>3])}else if(type=="i64"){ret=[HEAP32[varargs+argIndex>>2],HEAP32[varargs+(argIndex+4)>>2]]}else{type="i32";ret=HEAP32[varargs+argIndex>>2]}argIndex+=Runtime.getNativeFieldSize(type);return ret}var ret=[];var curr,next,currArg;while(1){var startTextIndex=textIndex;curr=HEAP8[textIndex>>0];if(curr===0)break;next=HEAP8[textIndex+1>>0];if(curr==37){var flagAlwaysSigned=false;var flagLeftAlign=false;var flagAlternative=false;var flagZeroPad=false;var flagPadSign=false;flagsLoop:while(1){switch(next){case 43:flagAlwaysSigned=true;break;case 45:flagLeftAlign=true;break;case 35:flagAlternative=true;break;case 48:if(flagZeroPad){break flagsLoop}else{flagZeroPad=true;break};case 32:flagPadSign=true;break;default:break flagsLoop}textIndex++;next=HEAP8[textIndex+1>>0]}var width=0;if(next==42){width=getNextArg("i32");textIndex++;next=HEAP8[textIndex+1>>0]}else{while(next>=48&&next<=57){width=width*10+(next-48);textIndex++;next=HEAP8[textIndex+1>>0]}}var precisionSet=false,precision=-1;if(next==46){precision=0;precisionSet=true;textIndex++;next=HEAP8[textIndex+1>>0];if(next==42){precision=getNextArg("i32");textIndex++}else{while(1){var precisionChr=HEAP8[textIndex+1>>0];if(precisionChr<48||precisionChr>57)break;precision=precision*10+(precisionChr-48);textIndex++}}next=HEAP8[textIndex+1>>0]}if(precision<0){precision=6;precisionSet=false}var argSize;switch(String.fromCharCode(next)){case"h":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==104){textIndex++;argSize=1}else{argSize=2}break;case"l":var nextNext=HEAP8[textIndex+2>>0];if(nextNext==108){textIndex++;argSize=8}else{argSize=4}break;case"L":case"q":case"j":argSize=8;break;case"z":case"t":case"I":argSize=4;break;default:argSize=null}if(argSize)textIndex++;next=HEAP8[textIndex+1>>0];switch(String.fromCharCode(next)){case"d":case"i":case"u":case"o":case"x":case"X":case"p":{var signed=next==100||next==105;argSize=argSize||4;var currArg=getNextArg("i"+argSize*8);var origArg=currArg;var argText;if(argSize==8){currArg=Runtime.makeBigInt(currArg[0],currArg[1],next==117)}if(argSize<=4){var limit=Math.pow(256,argSize)-1;currArg=(signed?reSign:unSign)(currArg&limit,argSize*8)}var currAbsArg=Math.abs(currArg);var prefix="";if(next==100||next==105){if(argSize==8&&i64Math)argText=i64Math.stringify(origArg[0],origArg[1],null);else argText=reSign(currArg,8*argSize,1).toString(10)}else if(next==117){if(argSize==8&&i64Math)argText=i64Math.stringify(origArg[0],origArg[1],true);else argText=unSign(currArg,8*argSize,1).toString(10);currArg=Math.abs(currArg)}else if(next==111){argText=(flagAlternative?"0":"")+currAbsArg.toString(8)}else if(next==120||next==88){prefix=flagAlternative&&currArg!=0?"0x":"";if(argSize==8&&i64Math){if(origArg[1]){argText=(origArg[1]>>>0).toString(16);var lower=(origArg[0]>>>0).toString(16);while(lower.length<8)lower="0"+lower;argText+=lower}else{argText=(origArg[0]>>>0).toString(16)}}else if(currArg<0){currArg=-currArg;argText=(currAbsArg-1).toString(16);var buffer=[];for(var i=0;i=0){if(flagAlwaysSigned){prefix="+"+prefix}else if(flagPadSign){prefix=" "+prefix}}if(argText.charAt(0)=="-"){prefix="-"+prefix;argText=argText.substr(1)}while(prefix.length+argText.lengthexponent&&exponent>=-4){next=(next==103?"f":"F").charCodeAt(0);precision-=exponent+1}else{next=(next==103?"e":"E").charCodeAt(0);precision--}effectivePrecision=Math.min(precision,20)}if(next==101||next==69){argText=currArg.toExponential(effectivePrecision);if(/[eE][-+]\d$/.test(argText)){argText=argText.slice(0,-1)+"0"+argText.slice(-1)}}else if(next==102||next==70){argText=currArg.toFixed(effectivePrecision);if(currArg===0&&__reallyNegative(currArg)){argText="-"+argText}}var parts=argText.split("e");if(isGeneral&&!flagAlternative){while(parts[0].length>1&&parts[0].indexOf(".")!=-1&&(parts[0].slice(-1)=="0"||parts[0].slice(-1)==".")){parts[0]=parts[0].slice(0,-1)}}else{if(flagAlternative&&argText.indexOf(".")==-1)parts[0]+=".";while(precision>effectivePrecision++)parts[0]+="0"}argText=parts[0]+(parts.length>1?"e"+parts[1]:"");if(next==69)argText=argText.toUpperCase();if(currArg>=0){if(flagAlwaysSigned){argText="+"+argText}else if(flagPadSign){argText=" "+argText}}}while(argText.length>0])}}else{ret=ret.concat(intArrayFromString("(null)".substr(0,argLength),true))}if(flagLeftAlign){while(argLength0){ret.push(32)}if(!flagLeftAlign)ret.push(getNextArg("i8"));break};case"n":{var ptr=getNextArg("i32*");HEAP32[ptr>>2]=ret.length;break};case"%":{ret.push(curr);break};default:{for(var i=startTextIndex;i>0])}}}textIndex+=2}else{ret.push(curr);textIndex+=1}}return ret}function _fprintf(stream,format,varargs){var result=__formatString(format,varargs);var stack=Runtime.stackSave();var ret=_fwrite(allocate(result,"i8",ALLOC_STACK),1,result.length,stream);Runtime.stackRestore(stack);return ret}function _printf(format,varargs){var result=__formatString(format,varargs);var string=intArrayToString(result);if(string[string.length-1]==="\n")string=string.substr(0,string.length-1);Module.print(string);return result.length}function _pthread_once(ptr,func){if(!_pthread_once.seen)_pthread_once.seen={};if(ptr in _pthread_once.seen)return;Runtime.dynCall("v",func);_pthread_once.seen[ptr]=1}function _fputc(c,stream){var chr=unSign(c&255);HEAP8[_fputc.ret>>0]=chr;var fd=_fileno(stream);var ret=_write(fd,_fputc.ret,1);if(ret==-1){var streamObj=FS.getStreamFromPtr(stream);if(streamObj)streamObj.error=true;return-1}else{return chr}}var PTHREAD_SPECIFIC={};function _pthread_getspecific(key){return PTHREAD_SPECIFIC[key]||0}Module["_i64Add"]=_i64Add;function _fputs(s,stream){var fd=_fileno(stream);return _write(fd,s,_strlen(s))}var _stdout=allocate(1,"i32*",ALLOC_STATIC);function _puts(s){var result=Pointer_stringify(s);var string=result.substr(0);if(string[string.length-1]==="\n")string=string.substr(0,string.length-1);Module.print(string);return result.length}function _pthread_setspecific(key,value){if(!(key in PTHREAD_SPECIFIC)){return ERRNO_CODES.EINVAL}PTHREAD_SPECIFIC[key]=value;return 0}function __exit(status){Module["exit"](status)}function _exit(status){__exit(status)}var _UItoD=true;function _malloc(bytes){var ptr=Runtime.dynamicAlloc(bytes+8);return ptr+8&4294967288}Module["_malloc"]=_malloc;function ___cxa_allocate_exception(size){return _malloc(size)}function _fmod(x,y){return x%y}function _fmodl(){return _fmod.apply(null,arguments)}Module["_bitshift64Lshr"]=_bitshift64Lshr;function ___cxa_pure_virtual(){ABORT=true;throw"Pure virtual function called!"}function _time(ptr){var ret=Date.now()/1e3|0;if(ptr){HEAP32[ptr>>2]=ret}return ret}var PTHREAD_SPECIFIC_NEXT_KEY=1;function _pthread_key_create(key,destructor){if(key==0){return ERRNO_CODES.EINVAL}HEAP32[key>>2]=PTHREAD_SPECIFIC_NEXT_KEY;PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY]=0;PTHREAD_SPECIFIC_NEXT_KEY++;return 0}function ___cxa_guard_acquire(variable){if(!HEAP8[variable>>0]){HEAP8[variable>>0]=1;return 1}return 0}function ___cxa_guard_release(){}function _vfprintf(s,f,va_arg){return _fprintf(s,f,HEAP32[va_arg>>2])}function ___cxa_begin_catch(ptr){__ZSt18uncaught_exceptionv.uncaught_exception--;EXCEPTIONS.caught.push(ptr);EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr));return ptr}function _emscripten_memcpy_big(dest,src,num){HEAPU8.set(HEAPU8.subarray(src,src+num),dest);return dest}Module["_memcpy"]=_memcpy;var _llvm_pow_f64=Math_pow;function _sbrk(bytes){var self=_sbrk;if(!self.called){DYNAMICTOP=alignMemoryPage(DYNAMICTOP);self.called=true;assert(Runtime.dynamicAlloc);self.alloc=Runtime.dynamicAlloc;Runtime.dynamicAlloc=(function(){abort("cannot dynamically allocate, sbrk now has control")})}var ret=DYNAMICTOP;if(bytes!=0)self.alloc(bytes);return ret}var _fabs=Math_abs;function ___errno_location(){return ___errno_state}var _BItoD=true;function _copysign(a,b){return __reallyNegative(a)===__reallyNegative(b)?a:-a}function _copysignl(){return _copysign.apply(null,arguments)}var ___dso_handle=allocate(1,"i32*",ALLOC_STATIC);var _stderr=allocate(1,"i32*",ALLOC_STATIC);___errno_state=Runtime.staticAlloc(4);HEAP32[___errno_state>>2]=0;_fputc.ret=allocate([0],"i8",ALLOC_STATIC);STACK_BASE=STACKTOP=Runtime.alignMemory(STATICTOP);staticSealed=true;STACK_MAX=STACK_BASE+TOTAL_STACK;DYNAMIC_BASE=DYNAMICTOP=Runtime.alignMemory(STACK_MAX);assert(DYNAMIC_BASE>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0]}function sb(b){b=b|0;a[k>>0]=a[b>>0];a[k+1>>0]=a[b+1>>0];a[k+2>>0]=a[b+2>>0];a[k+3>>0]=a[b+3>>0];a[k+4>>0]=a[b+4>>0];a[k+5>>0]=a[b+5>>0];a[k+6>>0]=a[b+6>>0];a[k+7>>0]=a[b+7>>0]}function tb(a){a=a|0;F=a}function ub(){return F|0}function vb(a){a=a|0;Ba(a|0)|0;ud()}function wb(a){a=a|0;return}function xb(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=i;c[b>>2]=112;c[b+4>>2]=d;c[b+8>>2]=e;c[b+12>>2]=f;c[b+16>>2]=g;if((a[144]|0)==0?(sa(144)|0)!=0:0){c[32]=0;c[33]=0;c[34]=0;Qa(19,128,o|0)|0;xa(144)}g=c[33]|0;if((g|0)==(c[34]|0)){f=(g>>1)+2&-2;f=(f|0)<2?2:f;if((f|0)>(2147483647-g|0)){d=va(1)|0;Ta(d|0,48,0)}e=c[32]|0;d=f+g|0;c[34]=d;d=Ud(e,d<<2)|0;c[32]=d;if((d|0)==0?(c[(Oa()|0)>>2]|0)==12:0){d=va(1)|0;Ta(d|0,48,0)}g=c[33]|0}c[33]=g+1;g=(c[32]|0)+(g<<2)|0;if(!g){i=h;return}c[g>>2]=b;i=h;return}function yb(a){a=a|0;var b=0;b=i;pd(a);i=b;return}function zb(a){a=a|0;var b=0,d=0;b=i;d=c[a>>2]|0;if(!d){i=b;return}c[a+4>>2]=0;Td(d);c[a>>2]=0;c[a+8>>2]=0;i=b;return}function Ab(a){a=a|0;var b=0;b=i;pd(a);i=b;return}function Bb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;if((a[d>>0]|0)!=45){k=0;i=e;return k|0}f=d+1|0;g=110;j=f;k=0;while(1){h=k+1|0;if((a[j>>0]|0)!=g<<24>>24){g=1;break}j=d+(k+2)|0;if((h|0)==3){g=0;f=j;break}else{g=a[264+h>>0]|0;k=h}}if(ee(f,c[b+4>>2]|0)|0){k=0;i=e;return k|0}a[b+20>>0]=g;k=1;i=e;return k|0}function Cb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0;h=i;i=i+16|0;e=h;f=c[p>>2]|0;g=b+4|0;j=c[g>>2]|0;c[e>>2]=j;c[e+4>>2]=j;Za(f|0,216,e|0)|0;j=0;while(1){k=j>>>0<(32-((me(c[g>>2]|0)|0)<<1)|0)>>>0;Sa(32,f|0)|0;if(k)j=j+1|0;else break}c[e>>2]=(a[b+20>>0]|0)!=0?248:256;Za(f|0,232,e|0)|0;if(!d){i=h;return}c[e>>2]=c[b+8>>2];Za(f|0,88,e|0)|0;Sa(10,f|0)|0;i=h;return}function Db(a){a=a|0;var b=0;b=i;pd(a);i=b;return}function Eb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;e=i;i=i+16|0;h=e;g=e+8|0;if((a[d>>0]|0)!=45){n=0;i=e;return n|0}l=d+1|0;f=b+4|0;j=c[f>>2]|0;k=a[j>>0]|0;a:do if(k<<24>>24){m=0;while(1){n=m;m=m+1|0;if((a[l>>0]|0)!=k<<24>>24){b=0;break}k=a[j+m>>0]|0;l=d+(n+2)|0;if(!(k<<24>>24))break a}i=e;return b|0}while(0);if((a[l>>0]|0)!=61){n=0;i=e;return n|0}d=l+1|0;j=de(d,g,10)|0;if(!(c[g>>2]|0)){n=0;i=e;return n|0}if((j|0)>(c[b+24>>2]|0)){n=c[p>>2]|0;m=c[f>>2]|0;c[h>>2]=d;c[h+4>>2]=m;Za(n|0,416,h|0)|0;ab(1)}if((j|0)<(c[b+20>>2]|0)){n=c[p>>2]|0;m=c[f>>2]|0;c[h>>2]=d;c[h+4>>2]=m;Za(n|0,472,h|0)|0;ab(1)}c[b+28>>2]=j;n=1;i=e;return n|0}function Fb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;i=i+16|0;e=d;f=c[p>>2]|0;g=c[a+16>>2]|0;c[e>>2]=c[a+4>>2];c[e+4>>2]=g;Za(f|0,336,e|0)|0;g=c[a+20>>2]|0;if((g|0)==-2147483648)Xa(360,4,1,f|0)|0;else{c[e>>2]=g;Za(f|0,368,e|0)|0}Xa(376,4,1,f|0)|0;g=c[a+24>>2]|0;if((g|0)==2147483647)Xa(384,4,1,f|0)|0;else{c[e>>2]=g;Za(f|0,368,e|0)|0}c[e>>2]=c[a+28>>2];Za(f|0,392,e|0)|0;if(!b){i=d;return}c[e>>2]=c[a+8>>2];Za(f|0,88,e|0)|0;Sa(10,f|0)|0;i=d;return}function Gb(b){b=b|0;var d=0,e=0,f=0,g=0,j=0;g=i;c[b>>2]=1816;f=b+4|0;e=b+32|0;j=b+48|0;c[f+0>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[e+0>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;h[j>>3]=+h[75];h[b+56>>3]=+h[89];h[b+64>>3]=+h[103];h[b+72>>3]=+h[123];a[b+80>>0]=a[1364]|0;c[b+84>>2]=c[269];c[b+88>>2]=c[297];a[b+92>>0]=0;a[b+93>>0]=a[1292]|0;h[b+96>>3]=+h[204];c[b+104>>2]=c[439];c[b+108>>2]=c[359];h[b+112>>3]=+h[191];h[b+120>>3]=.3333333333333333;h[b+128>>3]=1.1;c[b+136>>2]=100;h[b+144>>3]=1.5;j=b+316|0;c[b+332>>2]=0;c[b+336>>2]=0;c[b+340>>2]=0;c[b+348>>2]=0;c[b+352>>2]=0;c[b+356>>2]=0;c[b+364>>2]=0;c[b+368>>2]=0;c[b+372>>2]=0;c[b+380>>2]=0;c[b+384>>2]=0;c[b+388>>2]=0;c[b+396>>2]=0;c[b+400>>2]=0;c[b+404>>2]=0;e=b+544|0;c[b+412>>2]=0;c[b+416>>2]=0;c[b+420>>2]=0;c[b+428>>2]=0;c[b+432>>2]=0;c[b+436>>2]=0;c[b+444>>2]=0;c[b+448>>2]=0;c[b+452>>2]=0;ke(b+152|0,0,176)|0;c[b+456>>2]=e;f=b+460|0;c[f+0>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[b+488>>2]=j;a[b+492>>0]=1;h[b+496>>3]=1.0;h[b+504>>3]=1.0;c[b+512>>2]=0;c[b+516>>2]=-1;j=b+520|0;f=b+536|0;c[j+0>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;a[f>>0]=1;f=b+540|0;c[f+0>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;gc(e,1048576);a[b+560>>0]=0;e=b+604|0;f=b+664|0;j=b+564|0;d=j+36|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(d|0));j=e+0|0;d=j+36|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(d|0));j=b+680|0;c[f+0>>2]=-1;c[f+4>>2]=-1;c[f+8>>2]=-1;c[f+12>>2]=-1;a[j>>0]=0;i=g;return}function Hb(a){a=a|0;var b=0;b=i;Ib(a);pd(a);i=b;return}function Ib(a){a=a|0;var b=0,d=0,e=0;b=i;c[a>>2]=1816;d=a+628|0;e=c[d>>2]|0;if(e){c[a+632>>2]=0;Td(e);c[d>>2]=0;c[a+636>>2]=0}d=a+616|0;e=c[d>>2]|0;if(e){c[a+620>>2]=0;Td(e);c[d>>2]=0;c[a+624>>2]=0}d=a+604|0;e=c[d>>2]|0;if(e){c[a+608>>2]=0;Td(e);c[d>>2]=0;c[a+612>>2]=0}d=a+588|0;e=c[d>>2]|0;if(e){c[a+592>>2]=0;Td(e);c[d>>2]=0;c[a+596>>2]=0}d=a+576|0;e=c[d>>2]|0;if(e){c[a+580>>2]=0;Td(e);c[d>>2]=0;c[a+584>>2]=0}d=a+564|0;e=c[d>>2]|0;if(e){c[a+568>>2]=0;Td(e);c[d>>2]=0;c[a+572>>2]=0}d=c[a+544>>2]|0;if(d)Td(d);d=a+472|0;e=c[d>>2]|0;if(e){c[a+476>>2]=0;Td(e);c[d>>2]=0;c[a+480>>2]=0}d=a+460|0;e=c[d>>2]|0;if(e){c[a+464>>2]=0;Td(e);c[d>>2]=0;c[a+468>>2]=0}hc(a+412|0);d=a+396|0;e=c[d>>2]|0;if(e){c[a+400>>2]=0;Td(e);c[d>>2]=0;c[a+404>>2]=0}d=a+380|0;e=c[d>>2]|0;if(e){c[a+384>>2]=0;Td(e);c[d>>2]=0;c[a+388>>2]=0}e=a+364|0;d=c[e>>2]|0;if(d){c[a+368>>2]=0;Td(d);c[e>>2]=0;c[a+372>>2]=0}d=a+348|0;e=c[d>>2]|0;if(e){c[a+352>>2]=0;Td(e);c[d>>2]=0;c[a+356>>2]=0}d=a+332|0;e=c[d>>2]|0;if(e){c[a+336>>2]=0;Td(e);c[d>>2]=0;c[a+340>>2]=0}d=a+316|0;e=c[d>>2]|0;if(e){c[a+320>>2]=0;Td(e);c[d>>2]=0;c[a+324>>2]=0}d=a+304|0;e=c[d>>2]|0;if(e){c[a+308>>2]=0;Td(e);c[d>>2]=0;c[a+312>>2]=0}d=a+292|0;e=c[d>>2]|0;if(e){c[a+296>>2]=0;Td(e);c[d>>2]=0;c[a+300>>2]=0}d=a+280|0;e=c[d>>2]|0;if(e){c[a+284>>2]=0;Td(e);c[d>>2]=0;c[a+288>>2]=0}d=a+268|0;e=c[d>>2]|0;if(e){c[a+272>>2]=0;Td(e);c[d>>2]=0;c[a+276>>2]=0}d=a+256|0;e=c[d>>2]|0;if(e){c[a+260>>2]=0;Td(e);c[d>>2]=0;c[a+264>>2]=0}d=a+32|0;e=c[d>>2]|0;if(e){c[a+36>>2]=0;Td(e);c[d>>2]=0;c[a+40>>2]=0}d=a+16|0;e=c[d>>2]|0;if(e){c[a+20>>2]=0;Td(e);c[d>>2]=0;c[a+24>>2]=0}e=a+4|0;d=c[e>>2]|0;if(!d){i=b;return}c[a+8>>2]=0;Td(d);c[e>>2]=0;c[a+12>>2]=0;i=b;return}function Jb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,j=0,k=0,l=0.0,m=0,n=0,o=0,p=0,q=0,r=0;f=i;i=i+16|0;k=f+4|0;j=f;g=b+580|0;m=c[g>>2]|0;if((m|0)>0){o=m+ -1|0;p=c[(c[b+576>>2]|0)+(o<<2)>>2]|0;c[g>>2]=o;g=p}else{p=b+540|0;g=c[p>>2]|0;c[p>>2]=g+1}m=b+412|0;p=g<<1;c[k>>2]=p;ic(m,k);c[j>>2]=p|1;ic(m,j);k=b+332|0;m=a[544]|0;j=g+1|0;jc(k,j);a[(c[k>>2]|0)+g>>0]=m;k=b+396|0;m=b+400|0;if((c[m>>2]|0)<(j|0)){o=b+404|0;p=c[o>>2]|0;if((p|0)<(j|0)){q=g+2-p&-2;n=(p>>1)+2&-2;n=(q|0)>(n|0)?q:n;if((n|0)>(2147483647-p|0)){q=va(1)|0;Ta(q|0,48,0)}r=c[k>>2]|0;q=n+p|0;c[o>>2]=q;q=Ud(r,q<<3)|0;c[k>>2]=q;if((q|0)==0?(c[(Oa()|0)>>2]|0)==12:0){r=va(1)|0;Ta(r|0,48,0)}}o=c[m>>2]|0;if((o|0)<(j|0))do{n=(c[k>>2]|0)+(o<<3)|0;if(n){r=n;c[r>>2]=0;c[r+4>>2]=0}o=o+1|0}while((o|0)!=(j|0));c[m>>2]=j}m=(c[k>>2]|0)+(g<<3)|0;c[m>>2]=-1;c[m+4>>2]=0;m=b+316|0;if(!(a[b+93>>0]|0))l=0.0;else{r=b+72|0;l=+h[r>>3]*1389796.0;l=l- +(~~(l/2147483647.0)|0)*2147483647.0;h[r>>3]=l;l=l/2147483647.0*1.0e-5}k=b+320|0;if((c[k>>2]|0)<(j|0)){n=b+324|0;o=c[n>>2]|0;if((o|0)<(j|0)){r=g+2-o&-2;p=(o>>1)+2&-2;p=(r|0)>(p|0)?r:p;if((p|0)>(2147483647-o|0)){r=va(1)|0;Ta(r|0,48,0)}q=c[m>>2]|0;r=p+o|0;c[n>>2]=r;r=Ud(q,r<<3)|0;c[m>>2]=r;if((r|0)==0?(c[(Oa()|0)>>2]|0)==12:0){r=va(1)|0;Ta(r|0,48,0)}}p=c[k>>2]|0;if((p|0)<(j|0)){n=c[m>>2]|0;do{o=n+(p<<3)|0;if(o)h[o>>3]=0.0;p=p+1|0}while((p|0)!=(j|0))}c[k>>2]=j}h[(c[m>>2]|0)+(g<<3)>>3]=l;kc(b+588|0,g,0);kc(b+348|0,g,1);k=b+364|0;d=a[d>>0]|0;jc(k,j);a[(c[k>>2]|0)+g>>0]=d;k=b+380|0;d=b+384|0;if((c[d>>2]|0)<(j|0)){m=b+388|0;o=c[m>>2]|0;if((o|0)<(j|0)){r=g+2-o&-2;n=(o>>1)+2&-2;n=(r|0)>(n|0)?r:n;if((n|0)>(2147483647-o|0)){r=va(1)|0;Ta(r|0,48,0)}q=c[k>>2]|0;r=n+o|0;c[m>>2]=r;r=Ud(q,r)|0;c[k>>2]=r;if((r|0)==0?(c[(Oa()|0)>>2]|0)==12:0){r=va(1)|0;Ta(r|0,48,0)}}m=c[d>>2]|0;if((m|0)<(j|0))do{n=(c[k>>2]|0)+m|0;if(n)a[n>>0]=0;m=m+1|0}while((m|0)!=(j|0));c[d>>2]=j}d=b+288|0;k=c[d>>2]|0;if((k|0)<(j|0)){r=g+2-k&-2;j=(k>>1)+2&-2;j=(r|0)>(j|0)?r:j;if((j|0)>(2147483647-k|0)){r=va(1)|0;Ta(r|0,48,0)}q=b+280|0;p=c[q>>2]|0;r=j+k|0;c[d>>2]=r;r=Ud(p,r<<2)|0;c[q>>2]=r;if((r|0)==0?(c[(Oa()|0)>>2]|0)==12:0){r=va(1)|0;Ta(r|0,48,0)}}j=b+380|0;d=(c[j>>2]|0)+g|0;k=(a[d>>0]|0)==0;if(e){if(k){r=b+200|0;q=r;q=ne(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;c[r>>2]=q;c[r+4>>2]=F}}else if(!k){r=b+200|0;q=r;q=ne(c[q>>2]|0,c[q+4>>2]|0,-1,-1)|0;c[r>>2]=q;c[r+4>>2]=F}a[d>>0]=e&1;e=b+460|0;if((c[b+476>>2]|0)>(g|0)?(c[(c[b+472>>2]|0)+(g<<2)>>2]|0)>-1:0){i=f;return g|0}if(!(a[(c[j>>2]|0)+g>>0]|0)){i=f;return g|0}lc(e,g);i=f;return g|0}function Kb(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;f=i;i=i+16|0;k=f+1|0;j=f;g=b+492|0;if(!(a[g>>0]|0)){s=0;i=f;return s|0}s=c[e>>2]|0;h=e+4|0;l=c[h>>2]|0;a[k+0>>0]=a[j+0>>0]|0;oc(s,l,k);l=c[h>>2]|0;a:do if((l|0)>0){k=b+332|0;j=a[528]|0;m=0;n=0;p=-2;while(1){s=c[e>>2]|0;o=c[s+(m<<2)>>2]|0;r=d[(c[k>>2]|0)+(o>>1)>>0]|0;t=r^o&1;q=t&255;u=j&255;if((o|0)==(p^1|0)?1:(q<<24>>24==j<<24>>24&(u>>>1^1)|u&2&t|0)!=0){b=1;break}t=a[536]|0;u=t&255;if((o|0)!=(p|0)?((u>>>1^1)&q<<24>>24==t<<24>>24|r&2&u|0)==0:0){c[s+(n<<2)>>2]=o;l=c[h>>2]|0;n=n+1|0}else o=p;m=m+1|0;if((m|0)<(l|0))p=o;else break a}i=f;return b|0}else{m=0;n=0}while(0);j=m-n|0;if((j|0)>0){l=l-j|0;c[h>>2]=l}if(!l){a[g>>0]=0;u=0;i=f;return u|0}else if((l|0)==1){t=c[c[e>>2]>>2]|0;s=t>>1;a[(c[b+332>>2]|0)+s>>0]=(t&1^1)&255^1;u=c[b+296>>2]|0;s=(c[b+396>>2]|0)+(s<<3)|0;c[s>>2]=-1;c[s+4>>2]=u;s=b+284|0;u=c[s>>2]|0;c[s>>2]=u+1;c[(c[b+280>>2]|0)+(u<<2)>>2]=t;u=(Mb(b)|0)==-1;a[g>>0]=u&1;i=f;return u|0}else{e=pc(b+544|0,e,0)|0;h=b+256|0;g=b+260|0;k=c[g>>2]|0;j=b+264|0;if((k|0)==(c[j>>2]|0)){l=(k>>1)+2&-2;l=(l|0)<2?2:l;if((l|0)>(2147483647-k|0)){u=va(1)|0;Ta(u|0,48,0)}t=c[h>>2]|0;u=l+k|0;c[j>>2]=u;u=Ud(t,u<<2)|0;c[h>>2]=u;if((u|0)==0?(c[(Oa()|0)>>2]|0)==12:0){u=va(1)|0;Ta(u|0,48,0)}k=c[g>>2]|0}c[g>>2]=k+1;g=(c[h>>2]|0)+(k<<2)|0;if(g)c[g>>2]=e;Nb(b,e);u=1;i=f;return u|0}return 0}function Lb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[d>>2]|0;d=f>>1;a[(c[b+332>>2]|0)+d>>0]=(f&1^1)&255^1;g=c[b+296>>2]|0;d=(c[b+396>>2]|0)+(d<<3)|0;c[d>>2]=e;c[d+4>>2]=g;e=b+284|0;d=c[e>>2]|0;c[e>>2]=d+1;c[(c[b+280>>2]|0)+(d<<2)>>2]=f;return}function Mb(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;k=i;i=i+16|0;r=k;h=b+512|0;t=c[h>>2]|0;q=b+284|0;if((t|0)>=(c[q>>2]|0)){M=0;K=0;O=-1;N=b+184|0;I=N;L=I;L=c[L>>2]|0;I=I+4|0;I=c[I>>2]|0;I=ne(L|0,I|0,M|0,K|0)|0;L=F;J=N;c[J>>2]=I;N=N+4|0;c[N>>2]=L;N=b+520|0;L=N;J=L;J=c[J>>2]|0;L=L+4|0;L=c[L>>2]|0;K=je(J|0,L|0,M|0,K|0)|0;M=F;L=N;c[L>>2]=K;N=N+4|0;c[N>>2]=M;i=k;return O|0}o=b+280|0;j=b+428|0;g=b+412|0;l=b+332|0;m=b+544|0;n=r+4|0;e=b+396|0;p=b+296|0;f=b+456|0;z=-1;s=0;do{c[h>>2]=t+1;w=c[(c[o>>2]|0)+(t<<2)>>2]|0;if(a[(c[j>>2]|0)+w>>0]|0){u=c[g>>2]|0;t=u+(w*12|0)+4|0;y=c[t>>2]|0;if((y|0)>0){u=u+(w*12|0)|0;v=0;x=0;do{B=c[u>>2]|0;A=B+(v<<3)|0;if((c[(c[c[f>>2]>>2]|0)+(c[A>>2]<<2)>>2]&3|0)!=1){N=A;O=c[N+4>>2]|0;y=B+(x<<3)|0;c[y>>2]=c[N>>2];c[y+4>>2]=O;y=c[t>>2]|0;x=x+1|0}v=v+1|0}while((v|0)<(y|0))}else{v=0;x=0}u=v-x|0;if((u|0)>0)c[t>>2]=y-u;a[(c[j>>2]|0)+w>>0]=0}t=c[g>>2]|0;s=s+1|0;u=c[t+(w*12|0)>>2]|0;t=t+(w*12|0)+4|0;x=c[t>>2]|0;v=u+(x<<3)|0;a:do if(!x){v=u;y=u}else{w=w^1;x=(x<<3)+ -1|0;B=u;y=u;while(1){while(1){b:while(1){H=c[B+4>>2]|0;O=d[(c[l>>2]|0)+(H>>1)>>0]^H&1;J=a[528]|0;I=J&255;K=I&2;I=I>>>1^1;if((O&255)<<24>>24==J<<24>>24&I|K&O){E=19;break}A=c[B>>2]|0;E=c[m>>2]|0;G=E+(A<<2)|0;C=E+(A+1<<2)|0;D=c[C>>2]|0;if((D|0)==(w|0)){O=E+(A+2<<2)|0;D=c[O>>2]|0;c[C>>2]=D;c[O>>2]=w}C=B+8|0;c[r>>2]=A;c[n>>2]=D;if((D|0)!=(H|0)?(O=d[(c[l>>2]|0)+(D>>1)>>0]^D&1,((O&255)<<24>>24==J<<24>>24&I|K&O|0)!=0):0){E=27;break}K=c[G>>2]|0;if(K>>>0<=95){E=31;break}I=c[l>>2]|0;J=a[536]|0;H=J&255;O=H&2;H=H>>>1^1;N=2;while(1){L=G+(N<<2)+4|0;M=c[L>>2]|0;P=d[I+(M>>1)>>0]^M&1;N=N+1|0;if(!((P&255)<<24>>24==J<<24>>24&H|O&P))break;if((N|0)>=(K>>>5|0)){E=32;break b}}P=E+(A+2<<2)|0;c[P>>2]=M;c[L>>2]=w;qc((c[g>>2]|0)+((c[P>>2]^1)*12|0)|0,r);if((C|0)==(v|0))break a;else B=C}if((E|0)==19){E=0;N=B;O=c[N+4>>2]|0;P=y;c[P>>2]=c[N>>2];c[P+4>>2]=O;B=B+8|0;y=y+8|0}else if((E|0)==27){E=0;O=r;P=c[O+4>>2]|0;B=y;c[B>>2]=c[O>>2];c[B+4>>2]=P;B=C;y=y+8|0}else if((E|0)==31){J=a[536]|0;E=32}if((E|0)==32){E=y+8|0;G=r;I=c[G+4>>2]|0;H=y;c[H>>2]=c[G>>2];c[H+4>>2]=I;H=D>>1;I=D&1;G=(c[l>>2]|0)+H|0;P=d[G>>0]^I;O=J&255;if((P&255)<<24>>24==J<<24>>24&(O>>>1^1)|O&2&P)break;a[G>>0]=(I^1)&255^1;y=c[p>>2]|0;B=(c[e>>2]|0)+(H<<3)|0;c[B>>2]=A;c[B+4>>2]=y;B=c[q>>2]|0;c[q>>2]=B+1;c[(c[o>>2]|0)+(B<<2)>>2]=D;B=C;y=E}if((B|0)==(v|0))break a}c[h>>2]=c[q>>2];if(C>>>0>>0){z=(u+(x-C)|0)>>>3;while(1){N=C;C=C+8|0;O=c[N+4>>2]|0;P=E;c[P>>2]=c[N>>2];c[P+4>>2]=O;if(C>>>0>=v>>>0)break;else E=E+8|0}B=B+(z+2<<3)|0;y=y+(z+2<<3)|0}else{B=C;y=E}if((B|0)==(v|0)){z=A;break}else z=A}}while(0);u=v-y|0;if((u|0)>0)c[t>>2]=(c[t>>2]|0)-(u>>3);t=c[h>>2]|0}while((t|0)<(c[q>>2]|0));N=s;L=((s|0)<0)<<31>>31;P=z;O=b+184|0;J=O;M=J;M=c[M>>2]|0;J=J+4|0;J=c[J>>2]|0;J=ne(M|0,J|0,N|0,L|0)|0;M=F;K=O;c[K>>2]=J;O=O+4|0;c[O>>2]=M;O=b+520|0;M=O;K=M;K=c[K>>2]|0;M=M+4|0;M=c[M>>2]|0;L=je(K|0,M|0,N|0,L|0)|0;N=F;M=O;c[M>>2]=L;O=O+4|0;c[O>>2]=N;i=k;return P|0}function Nb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;i=i+16|0;k=d+8|0;f=d;g=c[a+544>>2]|0;e=g+(b<<2)|0;h=g+(b+1<<2)|0;j=a+412|0;l=(c[j>>2]|0)+((c[h>>2]^1)*12|0)|0;g=g+(b+2<<2)|0;m=c[g>>2]|0;c[k>>2]=b;c[k+4>>2]=m;qc(l,k);g=(c[j>>2]|0)+((c[g>>2]^1)*12|0)|0;h=c[h>>2]|0;c[f>>2]=b;c[f+4>>2]=h;qc(g,f);if(!(c[e>>2]&4)){m=a+208|0;l=m;l=ne(c[l>>2]|0,c[l+4>>2]|0,1,0)|0;c[m>>2]=l;c[m+4>>2]=F;m=a+224|0;l=m;l=ne((c[e>>2]|0)>>>5|0,0,c[l>>2]|0,c[l+4>>2]|0)|0;c[m>>2]=l;c[m+4>>2]=F;i=d;return}else{m=a+216|0;l=m;l=ne(c[l>>2]|0,c[l+4>>2]|0,1,0)|0;c[m>>2]=l;c[m+4>>2]=F;m=a+232|0;l=m;l=ne((c[e>>2]|0)>>>5|0,0,c[l>>2]|0,c[l+4>>2]|0)|0;c[m>>2]=l;c[m+4>>2]=F;i=d;return}}function Ob(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;g=i;i=i+16|0;l=g+4|0;j=g;h=c[b+544>>2]|0;f=h+(d<<2)|0;k=c[h+(d+1<<2)>>2]^1;if(!e){c[l>>2]=k;e=b+428|0;m=c[e>>2]|0;k=m+k|0;if(!(a[k>>0]|0)){a[k>>0]=1;mc(b+444|0,l);m=c[e>>2]|0}d=c[h+(d+2<<2)>>2]^1;c[j>>2]=d;d=m+d|0;if(!(a[d>>0]|0)){a[d>>0]=1;mc(b+444|0,j)}}else{j=b+412|0;e=c[j>>2]|0;l=e+(k*12|0)|0;h=h+(d+2<<2)|0;k=e+(k*12|0)+4|0;m=c[k>>2]|0;a:do if((m|0)>0){p=c[l>>2]|0;o=0;while(1){n=o+1|0;if((c[p+(o<<3)>>2]|0)==(d|0)){n=o;break a}if((n|0)<(m|0))o=n;else break}}else n=0;while(0);m=m+ -1|0;if((n|0)<(m|0)){do{e=c[l>>2]|0;m=n;n=n+1|0;o=e+(n<<3)|0;p=c[o+4>>2]|0;m=e+(m<<3)|0;c[m>>2]=c[o>>2];c[m+4>>2]=p;m=(c[k>>2]|0)+ -1|0}while((n|0)<(m|0));e=c[j>>2]|0}c[k>>2]=m;j=c[h>>2]^1;h=e+(j*12|0)|0;j=e+(j*12|0)+4|0;k=c[j>>2]|0;b:do if((k|0)>0){e=c[h>>2]|0;m=0;while(1){l=m+1|0;if((c[e+(m<<3)>>2]|0)==(d|0)){l=m;break b}if((l|0)<(k|0))m=l;else break}}else l=0;while(0);d=k+ -1|0;if((l|0)<(d|0))do{n=c[h>>2]|0;d=l;l=l+1|0;o=n+(l<<3)|0;p=c[o+4>>2]|0;d=n+(d<<3)|0;c[d>>2]=c[o>>2];c[d+4>>2]=p;d=(c[j>>2]|0)+ -1|0}while((l|0)<(d|0));c[j>>2]=d}if(!(c[f>>2]&4)){p=b+208|0;o=p;o=ne(c[o>>2]|0,c[o+4>>2]|0,-1,-1)|0;c[p>>2]=o;c[p+4>>2]=F;p=b+224|0;o=p;o=je(c[o>>2]|0,c[o+4>>2]|0,(c[f>>2]|0)>>>5|0,0)|0;c[p>>2]=o;c[p+4>>2]=F;i=g;return}else{p=b+216|0;o=p;o=ne(c[o>>2]|0,c[o+4>>2]|0,-1,-1)|0;c[p>>2]=o;c[p+4>>2]=F;p=b+232|0;o=p;o=je(c[o>>2]|0,c[o+4>>2]|0,(c[f>>2]|0)>>>5|0,0)|0;c[p>>2]=o;c[p+4>>2]=F;i=g;return}}function Pb(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;h=i;g=b+544|0;m=c[g>>2]|0;f=m+(e<<2)|0;Ob(b,e,0);m=c[m+(e+1<<2)>>2]|0;j=m>>1;m=(d[(c[b+332>>2]|0)+j>>0]|0)^m&1;o=a[528]|0;n=o&255;if((((m&255)<<24>>24==o<<24>>24&(n>>>1^1)|n&2&m|0)!=0?(k=(c[b+396>>2]|0)+(j<<3)|0,l=c[k>>2]|0,(l|0)!=-1):0)?((c[g>>2]|0)+(l<<2)|0)==(f|0):0)c[k>>2]=-1;c[f>>2]=c[f>>2]&-4|1;n=c[(c[g>>2]|0)+(e<<2)>>2]|0;o=b+556|0;c[o>>2]=((((n>>>3&1)+(n>>>5)<<2)+4|0)>>>2)+(c[o>>2]|0);i=h;return}function Qb(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;g=c[e>>2]|0;if(g>>>0<=31){l=0;i=f;return l|0}h=c[b+332>>2]|0;j=a[528]|0;k=j&255;l=k&2;k=k>>>1^1;b=0;while(1){m=c[e+(b<<2)+4>>2]|0;m=(d[h+(m>>1)>>0]|0)^m&1;b=b+1|0;if((m&255)<<24>>24==j<<24>>24&k|l&m){g=1;e=5;break}if((b|0)>=(g>>>5|0)){g=0;e=5;break}}if((e|0)==5){i=f;return g|0}return 0}function Rb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;g=i;e=b+296|0;if((c[e>>2]|0)<=(d|0)){i=g;return}f=b+284|0;s=c[f>>2]|0;j=b+292|0;t=c[j>>2]|0;u=c[t+(d<<2)>>2]|0;if((s|0)>(u|0)){r=b+280|0;m=b+332|0;l=b+88|0;k=b+348|0;n=b+460|0;p=b+476|0;q=b+472|0;o=b+380|0;do{s=s+ -1|0;u=c[(c[r>>2]|0)+(s<<2)>>2]>>1;a[(c[m>>2]|0)+u>>0]=a[544]|0;t=c[l>>2]|0;if((t|0)<=1){if((t|0)==1?(s|0)>(c[(c[j>>2]|0)+((c[e>>2]|0)+ -1<<2)>>2]|0):0)h=7}else h=7;if((h|0)==7){h=0;a[(c[k>>2]|0)+u>>0]=c[(c[r>>2]|0)+(s<<2)>>2]&1}if(!((c[p>>2]|0)>(u|0)?(c[(c[q>>2]|0)+(u<<2)>>2]|0)>-1:0))h=11;if((h|0)==11?(h=0,(a[(c[o>>2]|0)+u>>0]|0)!=0):0)lc(n,u);t=c[j>>2]|0;u=c[t+(d<<2)>>2]|0}while((s|0)>(u|0));s=c[f>>2]|0}c[b+512>>2]=u;b=c[t+(d<<2)>>2]|0;if((s-b|0)>0)c[f>>2]=b;if(((c[e>>2]|0)-d|0)<=0){i=g;return}c[e>>2]=d;i=g;return}function Sb(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0;d=i;f=b+72|0;q=+h[f>>3]*1389796.0;q=q- +(~~(q/2147483647.0)|0)*2147483647.0;h[f>>3]=q;l=b+464|0;if(q/2147483647.0<+h[b+64>>3]?(m=c[l>>2]|0,(m|0)!=0):0){q=q*1389796.0;q=q- +(~~(q/2147483647.0)|0)*2147483647.0;h[f>>3]=q;m=c[(c[b+460>>2]|0)+(~~(+(m|0)*(q/2147483647.0))<<2)>>2]|0;o=a[(c[b+332>>2]|0)+m>>0]|0;n=a[544]|0;p=n&255;if(((p>>>1^1)&o<<24>>24==n<<24>>24|o&2&p|0)!=0?(a[(c[b+380>>2]|0)+m>>0]|0)!=0:0){p=b+176|0;o=p;o=ne(c[o>>2]|0,c[o+4>>2]|0,1,0)|0;c[p>>2]=o;c[p+4>>2]=F}}else m=-1;n=b+460|0;p=b+332|0;o=b+380|0;while(1){if(((m|0)!=-1?(r=a[(c[p>>2]|0)+m>>0]|0,j=a[544]|0,e=j&255,g=e>>>1^1,(g&r<<24>>24==j<<24>>24|r&2&e|0)!=0):0)?(a[(c[o>>2]|0)+m>>0]|0)!=0:0)break;if(!(c[l>>2]|0)){e=-2;k=17;break}m=rc(n)|0}if((k|0)==17){i=d;return e|0}l=a[(c[b+364>>2]|0)+m>>0]|0;k=l&255;if(!(g&l<<24>>24==j<<24>>24|e&2&k)){p=a[528]|0;r=p&255;r=((r>>>1^1)&l<<24>>24==p<<24>>24|k&2&r|0)!=0|m<<1;i=d;return r|0}if(!(a[b+92>>0]|0)){r=(a[(c[b+348>>2]|0)+m>>0]|0)!=0|m<<1;i=d;return r|0}else{q=+h[f>>3]*1389796.0;q=q- +(~~(q/2147483647.0)|0)*2147483647.0;h[f>>3]=q;r=q/2147483647.0<.5|m<<1;i=d;return r|0}return 0}function Tb(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0.0,U=0;j=i;i=i+16|0;p=j+8|0;t=j+4|0;n=j;m=e+4|0;k=c[m>>2]|0;l=e+8|0;if((k|0)==(c[l>>2]|0)){q=(k>>1)+2&-2;q=(q|0)<2?2:q;if((q|0)>(2147483647-k|0)){S=va(1)|0;Ta(S|0,48,0)}R=c[e>>2]|0;S=q+k|0;c[l>>2]=S;S=Ud(R,S<<2)|0;c[e>>2]=S;if((S|0)==0?(c[(Oa()|0)>>2]|0)==12:0){S=va(1)|0;Ta(S|0,48,0)}k=c[m>>2]|0}l=(c[e>>2]|0)+(k<<2)|0;if(l){c[l>>2]=0;k=c[m>>2]|0}c[m>>2]=k+1;q=b+544|0;H=b+280|0;k=b+588|0;l=b+396|0;C=b+504|0;E=b+316|0;D=b+540|0;B=b+476|0;A=b+472|0;z=b+460|0;y=b+488|0;x=b+296|0;v=b+496|0;w=b+272|0;G=b+268|0;J=-2;I=(c[b+284>>2]|0)+ -1|0;K=0;do{L=c[q>>2]|0;d=L+(d<<2)|0;M=c[d>>2]|0;if((M&4|0)!=0?(r=+h[v>>3],S=d+(M>>>5<<2)+4|0,T=r+ +g[S>>2],g[S>>2]=T,T>1.0e20):0){O=c[w>>2]|0;if((O|0)>0){N=c[G>>2]|0;M=0;do{S=L+(c[N+(M<<2)>>2]<<2)|0;S=S+((c[S>>2]|0)>>>5<<2)+4|0;g[S>>2]=+g[S>>2]*1.0e-20;M=M+1|0}while((M|0)!=(O|0))}h[v>>3]=r*1.0e-20}J=(J|0)!=-2&1;if(J>>>0<(c[d>>2]|0)>>>5>>>0)do{M=c[d+(J<<2)+4>>2]|0;c[t>>2]=M;M=M>>1;L=(c[k>>2]|0)+M|0;do if((a[L>>0]|0)==0?(c[(c[l>>2]|0)+(M<<3)+4>>2]|0)>0:0){O=c[E>>2]|0;S=O+(M<<3)|0;T=+h[C>>3]+ +h[S>>3];h[S>>3]=T;if(T>1.0e+100){P=c[D>>2]|0;if((P|0)>0){N=0;do{S=O+(N<<3)|0;h[S>>3]=+h[S>>3]*1.0e-100;N=N+1|0}while((N|0)!=(P|0))}h[C>>3]=+h[C>>3]*1.0e-100}if((c[B>>2]|0)>(M|0)?(u=c[A>>2]|0,s=c[u+(M<<2)>>2]|0,(s|0)>-1):0){N=c[z>>2]|0;O=c[N+(s<<2)>>2]|0;a:do if(!s)R=0;else{S=s;while(1){R=S;S=S+ -1>>1;Q=N+(S<<2)|0;P=c[Q>>2]|0;U=c[c[y>>2]>>2]|0;if(!(+h[U+(O<<3)>>3]>+h[U+(P<<3)>>3]))break a;c[N+(R<<2)>>2]=P;c[u+(c[Q>>2]<<2)>>2]=R;if(!S){R=0;break}}}while(0);c[N+(R<<2)>>2]=O;c[u+(O<<2)>>2]=R}a[L>>0]=1;if((c[(c[l>>2]|0)+(M<<3)+4>>2]|0)<(c[x>>2]|0)){mc(e,t);break}else{K=K+1|0;break}}while(0);J=J+1|0}while((J|0)<((c[d>>2]|0)>>>5|0));d=c[H>>2]|0;L=c[k>>2]|0;do{J=I;I=I+ -1|0;J=c[d+(J<<2)>>2]|0;N=J>>1;M=L+N|0}while((a[M>>0]|0)==0);d=c[(c[l>>2]|0)+(N<<3)>>2]|0;a[M>>0]=0;K=K+ -1|0}while((K|0)>0);c[c[e>>2]>>2]=J^1;t=b+616|0;v=c[t>>2]|0;s=b+620|0;if(!v)w=c[s>>2]|0;else{c[s>>2]=0;w=0}u=c[m>>2]|0;if((w|0)<(u|0)){y=b+624|0;x=c[y>>2]|0;if((x|0)<(u|0)){U=u+1-x&-2;w=(x>>1)+2&-2;w=(U|0)>(w|0)?U:w;if((w|0)>(2147483647-x|0)){U=va(1)|0;Ta(U|0,48,0)}U=w+x|0;c[y>>2]=U;v=Ud(v,U<<2)|0;c[t>>2]=v;if((v|0)==0?(c[(Oa()|0)>>2]|0)==12:0){U=va(1)|0;Ta(U|0,48,0)}}w=c[s>>2]|0;b:do if((w|0)<(u|0))while(1){v=v+(w<<2)|0;if(v)c[v>>2]=0;w=w+1|0;if((w|0)==(u|0))break b;v=c[t>>2]|0}while(0);c[s>>2]=u;u=c[m>>2]|0}if((u|0)>0){w=c[t>>2]|0;v=c[e>>2]|0;x=0;do{c[w+(x<<2)>>2]=c[v+(x<<2)>>2];x=x+1|0;u=c[m>>2]|0}while((x|0)<(u|0))}v=c[b+84>>2]|0;if((v|0)==1)if((u|0)>1){n=c[e>>2]|0;o=1;v=1;while(1){u=c[n+(o<<2)>>2]|0;p=c[l>>2]|0;w=c[p+(u>>1<<3)>>2]|0;c:do if((w|0)!=-1){x=(c[q>>2]|0)+(w<<2)|0;y=c[x>>2]|0;if(y>>>0>63){w=c[k>>2]|0;z=1;while(1){U=c[x+(z<<2)+4>>2]>>1;if((a[w+U>>0]|0)==0?(c[p+(U<<3)+4>>2]|0)>0:0)break;z=z+1|0;if((z|0)>=(y>>>5|0))break c}c[n+(v<<2)>>2]=u;v=v+1|0}}else{c[n+(v<<2)>>2]=u;v=v+1|0}while(0);o=o+1|0;p=c[m>>2]|0;if((o|0)>=(p|0)){n=p;break}}}else{n=u;o=1;v=1}else if((v|0)==2)if((u|0)>1){q=1;v=1;do{w=c[e>>2]|0;u=c[w+(q<<2)>>2]|0;if((c[(c[l>>2]|0)+(u>>1<<3)>>2]|0)!=-1){c[n>>2]=u;c[p+0>>2]=c[n+0>>2];if(!(Ub(b,p)|0)){u=c[e>>2]|0;w=u;u=c[u+(q<<2)>>2]|0;o=62}}else o=62;if((o|0)==62){o=0;c[w+(v<<2)>>2]=u;v=v+1|0}q=q+1|0;u=c[m>>2]|0}while((q|0)<(u|0));n=u;o=q}else{n=u;o=1;v=1}else{n=u;o=u;v=u}U=b+240|0;S=U;S=ne(c[S>>2]|0,c[S+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;c[U>>2]=S;c[U+4>>2]=F;o=o-v|0;if((o|0)>0){n=n-o|0;c[m>>2]=n}U=b+248|0;S=U;S=ne(c[S>>2]|0,c[S+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;c[U>>2]=S;c[U+4>>2]=F;if((n|0)==1)e=0;else{e=c[e>>2]|0;if((n|0)>2){b=c[l>>2]|0;m=2;o=1;do{o=(c[b+(c[e+(m<<2)>>2]>>1<<3)+4>>2]|0)>(c[b+(c[e+(o<<2)>>2]>>1<<3)+4>>2]|0)?m:o;m=m+1|0}while((m|0)<(n|0))}else o=1;S=e+(o<<2)|0;U=c[S>>2]|0;e=e+4|0;c[S>>2]=c[e>>2];c[e>>2]=U;e=c[(c[l>>2]|0)+(U>>1<<3)+4>>2]|0}c[f>>2]=e;if((c[s>>2]|0)>0)f=0;else{i=j;return}do{a[(c[k>>2]|0)+(c[(c[t>>2]|0)+(f<<2)>>2]>>1)>>0]=0;f=f+1|0}while((f|0)<(c[s>>2]|0));i=j;return}function Ub(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=i;n=c[d>>2]|0;l=b+396|0;q=c[l>>2]|0;k=b+544|0;s=(c[k>>2]|0)+(c[q+(n>>1<<3)>>2]<<2)|0;h=b+604|0;f=b+608|0;if(c[h>>2]|0)c[f>>2]=0;g=b+588|0;j=b+612|0;b=b+616|0;o=1;while(1){if(o>>>0<(c[s>>2]|0)>>>5>>>0){r=c[s+(o<<2)+4>>2]|0;p=r>>1;if((c[q+(p<<3)+4>>2]|0)!=0?(m=a[(c[g>>2]|0)+p>>0]|0,(m+ -1<<24>>24&255)>=2):0){s=c[f>>2]|0;t=(s|0)==(c[j>>2]|0);if(m<<24>>24==3?1:(c[q+(p<<3)>>2]|0)==-1){k=8;break}if(t){q=(s>>1)+2&-2;q=(q|0)<2?2:q;if((q|0)>(2147483647-s|0)){k=24;break}u=c[h>>2]|0;t=q+s|0;c[j>>2]=t;t=Ud(u,t<<3)|0;c[h>>2]=t;if((t|0)==0?(c[(Oa()|0)>>2]|0)==12:0){k=24;break}s=c[f>>2]|0}c[f>>2]=s+1;q=(c[h>>2]|0)+(s<<3)|0;if(q){u=q;c[u>>2]=o;c[u+4>>2]=n}c[d>>2]=r;s=c[l>>2]|0;n=r;q=s;s=(c[k>>2]|0)+(c[s+(p<<3)>>2]<<2)|0;o=0}}else{n=(c[g>>2]|0)+(n>>1)|0;if(!(a[n>>0]|0)){a[n>>0]=2;mc(b,d)}n=c[f>>2]|0;if(!n){f=1;k=34;break}u=n+ -1|0;n=c[h>>2]|0;o=c[n+(u<<3)>>2]|0;n=c[n+(u<<3)+4>>2]|0;c[d>>2]=n;q=c[l>>2]|0;s=(c[k>>2]|0)+(c[q+(n>>1<<3)>>2]<<2)|0;c[f>>2]=u}o=o+1|0}if((k|0)==8){if(t){k=(s>>1)+2&-2;k=(k|0)<2?2:k;if((k|0)>(2147483647-s|0)){u=va(1)|0;Ta(u|0,48,0)}t=c[h>>2]|0;u=k+s|0;c[j>>2]=u;u=Ud(t,u<<3)|0;c[h>>2]=u;if((u|0)==0?(c[(Oa()|0)>>2]|0)==12:0){u=va(1)|0;Ta(u|0,48,0)}s=c[f>>2]|0}j=s+1|0;c[f>>2]=j;k=(c[h>>2]|0)+(s<<3)|0;if(k){j=k;c[j>>2]=0;c[j+4>>2]=n;j=c[f>>2]|0}if((j|0)>0)k=0;else{u=0;i=e;return u|0}do{l=(c[g>>2]|0)+(c[(c[h>>2]|0)+(k<<3)+4>>2]>>1)|0;if(!(a[l>>0]|0)){a[l>>0]=3;mc(b,(c[h>>2]|0)+(k<<3)+4|0);j=c[f>>2]|0}k=k+1|0}while((k|0)<(j|0));f=0;i=e;return f|0}else if((k|0)==24)Ta(va(1)|0,48,0);else if((k|0)==34){i=e;return f|0}return 0}function Vb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;j=i;i=i+32|0;h=j+16|0;g=j+12|0;k=j+8|0;f=j;n=e+20|0;l=e+16|0;if((c[n>>2]|0)>0){m=0;do{a[(c[e>>2]|0)+(c[(c[l>>2]|0)+(m<<2)>>2]|0)>>0]=0;m=m+1|0}while((m|0)<(c[n>>2]|0))}if(c[l>>2]|0)c[n>>2]=0;m=c[d>>2]|0;c[k>>2]=m;c[g>>2]=m;c[h+0>>2]=c[g+0>>2];sc(e,h,0);l=(c[e>>2]|0)+m|0;if(!(a[l>>0]|0)){a[l>>0]=1;mc(e+16|0,k)}if(!(c[b+296>>2]|0)){i=j;return}d=m>>1;o=b+588|0;a[(c[o>>2]|0)+d>>0]=1;p=c[b+284>>2]|0;n=b+292|0;s=c[c[n>>2]>>2]|0;if((p|0)>(s|0)){k=b+280|0;l=b+396|0;m=e+16|0;b=b+544|0;do{p=p+ -1|0;r=c[(c[k>>2]|0)+(p<<2)>>2]|0;q=r>>1;if(a[(c[o>>2]|0)+q>>0]|0){s=c[l>>2]|0;t=c[s+(q<<3)>>2]|0;a:do if((t|0)==-1){r=r^1;c[f>>2]=r;c[g>>2]=r;c[h+0>>2]=c[g+0>>2];sc(e,h,0);r=(c[e>>2]|0)+r|0;if(!(a[r>>0]|0)){a[r>>0]=1;mc(m,f)}}else{r=(c[b>>2]|0)+(t<<2)|0;t=c[r>>2]|0;if(t>>>0>63){u=1;while(1){v=c[r+(u<<2)+4>>2]>>1;if((c[s+(v<<3)+4>>2]|0)>0){a[(c[o>>2]|0)+v>>0]=1;t=c[r>>2]|0}u=u+1|0;if((u|0)>=(t>>>5|0))break a;s=c[l>>2]|0}}}while(0);a[(c[o>>2]|0)+q>>0]=0;s=c[c[n>>2]>>2]|0}}while((p|0)>(s|0))}a[(c[o>>2]|0)+d>>0]=0;i=j;return}function Wb(b){b=b|0;var e=0,f=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;f=i;i=i+16|0;p=f+4|0;u=f;e=b+272|0;w=c[e>>2]|0;n=+h[b+496>>3]/+(w|0);k=b+544|0;l=b+268|0;v=c[l>>2]|0;c[u>>2]=k;c[p+0>>2]=c[u+0>>2];tc(v,w,p);p=c[e>>2]|0;if((p|0)>0){m=b+332|0;o=b+396|0;q=0;v=0;do{t=c[l>>2]|0;u=c[t+(q<<2)>>2]|0;w=c[k>>2]|0;r=w+(u<<2)|0;s=c[r>>2]|0;do if(s>>>0>95){x=c[w+(u+1<<2)>>2]|0;w=x>>1;x=(d[(c[m>>2]|0)+w>>0]|0)^x&1;z=a[528]|0;y=z&255;if(((x&255)<<24>>24==z<<24>>24&(y>>>1^1)|y&2&x|0)!=0?(z=c[(c[o>>2]|0)+(w<<3)>>2]|0,(z|0)!=-1&(z|0)==(u|0)):0){j=9;break}if((q|0)>=((p|0)/2|0|0)?!(+g[r+(s>>>5<<2)+4>>2]>2]=u;v=v+1|0}q=q+1|0;p=c[e>>2]|0}while((q|0)<(p|0))}else{q=0;v=0}j=q-v|0;if((j|0)>0)c[e>>2]=p-j;if(!(+((c[b+556>>2]|0)>>>0)>+h[b+96>>3]*+((c[b+548>>2]|0)>>>0))){i=f;return}gb[c[(c[b>>2]|0)+8>>2]&31](b);i=f;return}function Xb(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;f=i;g=e+4|0;m=c[g>>2]|0;if((m|0)>0){j=b+544|0;h=b+332|0;k=0;l=0;do{u=c[e>>2]|0;p=c[u+(k<<2)>>2]|0;m=(c[j>>2]|0)+(p<<2)|0;o=c[m>>2]|0;do if(o>>>0>31){v=c[h>>2]|0;r=a[528]|0;q=r&255;w=q&2;q=q>>>1^1;s=o>>>5;t=0;do{x=c[m+(t<<2)+4>>2]|0;x=(d[v+(x>>1)>>0]|0)^x&1;t=t+1|0;if((x&255)<<24>>24==r<<24>>24&q|w&x){n=7;break}}while((t|0)<(s|0));if((n|0)==7){n=0;Pb(b,p);break}if(o>>>0>95){n=a[536]|0;q=o>>>5;p=2;do{r=m+(p<<2)+4|0;x=c[r>>2]|0;x=(d[(c[h>>2]|0)+(x>>1)>>0]|0)^x&1;w=n&255;if((x&255)<<24>>24==n<<24>>24&(w>>>1^1)|w&2&x){c[r>>2]=c[m+(q+ -1<<2)+4>>2];o=c[m>>2]|0;if(o&8){o=o>>>5;c[m+(o+ -1<<2)+4>>2]=c[m+(o<<2)+4>>2];o=c[m>>2]|0}o=o+ -32|0;c[m>>2]=o;p=p+ -1|0}p=p+1|0;q=o>>>5}while((p|0)<(q|0));p=c[e>>2]|0;u=p;p=c[p+(k<<2)>>2]|0;n=16}else n=16}else n=16;while(0);if((n|0)==16){n=0;c[u+(l<<2)>>2]=p;l=l+1|0}k=k+1|0;m=c[g>>2]|0}while((k|0)<(m|0))}else{k=0;l=0}e=k-l|0;if((e|0)<=0){i=f;return}c[g>>2]=m-e;i=f;return}function Yb(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g=i;i=i+16|0;e=g+4|0;h=g;c[e>>2]=0;d=e+4|0;c[d>>2]=0;f=e+8|0;c[f>>2]=0;c[h>>2]=0;j=b+540|0;n=c[j>>2]|0;if((n|0)>0){l=b+380|0;k=b+332|0;m=0;do{if((a[(c[l>>2]|0)+m>>0]|0)!=0?(p=a[(c[k>>2]|0)+m>>0]|0,q=a[544]|0,o=q&255,((o>>>1^1)&p<<24>>24==q<<24>>24|p&2&o|0)!=0):0){nc(e,h);n=c[j>>2]|0}m=m+1|0;c[h>>2]=m}while((m|0)<(n|0))}uc(b+460|0,e);b=c[e>>2]|0;if(!b){i=g;return}c[d>>2]=0;Td(b);c[e>>2]=0;c[f>>2]=0;i=g;return}function Zb(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;d=i;f=b+492|0;if((a[f>>0]|0)!=0?(Mb(b)|0)==-1:0){f=b+284|0;g=b+516|0;if((c[f>>2]|0)==(c[g>>2]|0)){s=1;i=d;return s|0}j=b+520|0;s=j;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0){s=1;i=d;return s|0}Xb(b,b+268|0);if(a[b+536>>0]|0){Xb(b,b+256|0);l=b+564|0;k=b+568|0;if((c[k>>2]|0)>0){n=b+588|0;m=0;do{a[(c[n>>2]|0)+(c[(c[l>>2]|0)+(m<<2)>>2]|0)>>0]=1;m=m+1|0}while((m|0)<(c[k>>2]|0))}p=c[f>>2]|0;if((p|0)>0){m=c[b+280>>2]|0;n=c[b+588>>2]|0;q=0;o=0;do{r=c[m+(q<<2)>>2]|0;if(!(a[n+(r>>1)>>0]|0)){c[m+(o<<2)>>2]=r;p=c[f>>2]|0;o=o+1|0}q=q+1|0}while((q|0)<(p|0))}else{q=0;o=0}m=q-o|0;if((m|0)>0){p=p-m|0;c[f>>2]=p}c[b+512>>2]=p;a:do if((c[k>>2]|0)>0){o=b+588|0;m=0;do{a[(c[o>>2]|0)+(c[(c[l>>2]|0)+(m<<2)>>2]|0)>>0]=0;m=m+1|0;n=c[k>>2]|0}while((m|0)<(n|0));if((n|0)>0){n=b+580|0;o=b+584|0;m=b+576|0;p=0;while(1){r=c[n>>2]|0;if((r|0)==(c[o>>2]|0)){q=(r>>1)+2&-2;q=(q|0)<2?2:q;if((q|0)>(2147483647-r|0)){e=28;break}s=c[m>>2]|0;q=q+r|0;c[o>>2]=q;q=Ud(s,q<<2)|0;c[m>>2]=q;if((q|0)==0?(c[(Oa()|0)>>2]|0)==12:0){e=28;break}r=c[n>>2]|0}else q=c[m>>2]|0;s=q+(r<<2)|0;if(s){c[s>>2]=0;r=c[n>>2]|0}c[n>>2]=r+1;s=c[l>>2]|0;c[q+(r<<2)>>2]=c[s+(p<<2)>>2];p=p+1|0;if((p|0)>=(c[k>>2]|0))break a}if((e|0)==28)Ta(va(1)|0,48,0)}else e=21}else e=21;while(0);if((e|0)==21)s=c[l>>2]|0;if(s)c[k>>2]=0}if(+((c[b+556>>2]|0)>>>0)>+h[b+96>>3]*+((c[b+548>>2]|0)>>>0))gb[c[(c[b>>2]|0)+8>>2]&31](b);Yb(b);c[g>>2]=c[f>>2];r=b+224|0;s=b+232|0;r=ne(c[s>>2]|0,c[s+4>>2]|0,c[r>>2]|0,c[r+4>>2]|0)|0;s=j;c[s>>2]=r;c[s+4>>2]=F;s=1;i=d;return s|0}a[f>>0]=0;s=0;i=d;return s|0}function _b(b,e,f){b=b|0;e=e|0;f=f|0;var j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0.0,ga=0,ha=0,ia=0,ja=0.0,ka=0,la=0,ma=0,na=0,oa=0,pa=0,qa=0.0,ra=0,sa=0,ta=0.0;n=i;i=i+64|0;_=n;G=n+60|0;B=n+56|0;j=n+44|0;$=n+40|0;c[j>>2]=0;m=j+4|0;c[m>>2]=0;l=j+8|0;c[l>>2]=0;N=e+160|0;M=N;M=ne(c[M>>2]|0,c[M+4>>2]|0,1,0)|0;c[N>>2]=M;c[N+4>>2]=F;N=(f|0)<0;M=e+680|0;L=e+664|0;K=e+672|0;q=e+296|0;w=e+272|0;o=e+284|0;I=e+640|0;E=e+308|0;D=e+304|0;r=e+332|0;H=e+292|0;ba=e+168|0;t=e+396|0;v=e+280|0;J=e+184|0;C=e+192|0;u=e+48|0;U=e+504|0;Y=e+56|0;aa=e+496|0;ca=e+656|0;O=e+144|0;P=e+648|0;Q=e+128|0;R=e+44|0;T=e+200|0;V=e+208|0;W=e+224|0;X=e+216|0;s=e+232|0;Z=e+540|0;p=e+292|0;x=e+544|0;z=e+276|0;y=e+268|0;A=e+268|0;da=0;a:while(1){ea=N|(da|0)<(f|0);while(1){ga=Mb(e)|0;if((ga|0)!=-1)break;if(!ea){ga=41;break a}if(a[M>>0]|0){ga=41;break a}ga=L;ha=c[ga+4>>2]|0;if((ha|0)>=0?(sa=C,ra=c[sa+4>>2]|0,!(ra>>>0>>0|((ra|0)==(ha|0)?(c[sa>>2]|0)>>>0<(c[ga>>2]|0)>>>0:0))):0){ga=41;break a}ga=K;ha=c[ga+4>>2]|0;if((ha|0)>=0?(sa=J,ra=c[sa+4>>2]|0,!(ra>>>0>>0|((ra|0)==(ha|0)?(c[sa>>2]|0)>>>0<(c[ga>>2]|0)>>>0:0))):0){ga=41;break a}if((c[q>>2]|0)==0?!(Zb(e)|0):0){ga=50;break a}if(+((c[w>>2]|0)-(c[o>>2]|0)|0)>=+h[I>>3])Wb(e);while(1){ga=c[q>>2]|0;if((ga|0)>=(c[E>>2]|0)){ga=59;break}ka=c[(c[D>>2]|0)+(ga<<2)>>2]|0;ha=d[(c[r>>2]|0)+(ka>>1)>>0]|0;sa=ha^ka&1;ia=sa&255;pa=a[528]|0;ra=pa&255;if(!(ia<<24>>24==pa<<24>>24&(ra>>>1^1)|ra&2&sa)){ga=56;break}c[G>>2]=c[o>>2];nc(H,G)}if((ga|0)==56){ga=0;ra=a[536]|0;sa=ra&255;if((sa>>>1^1)&ia<<24>>24==ra<<24>>24|ha&2&sa){ga=57;break a}if((ka|0)==-2)ga=59}if((ga|0)==59){sa=ba;sa=ne(c[sa>>2]|0,c[sa+4>>2]|0,1,0)|0;ka=ba;c[ka>>2]=sa;c[ka+4>>2]=F;ka=Sb(e)|0;if((ka|0)==-2){ga=60;break a}}c[_>>2]=c[o>>2];nc(H,_);sa=ka>>1;a[(c[r>>2]|0)+sa>>0]=(ka&1^1)&255^1;ra=c[q>>2]|0;sa=(c[t>>2]|0)+(sa<<3)|0;c[sa>>2]=-1;c[sa+4>>2]=ra;sa=c[o>>2]|0;c[o>>2]=sa+1;c[(c[v>>2]|0)+(sa<<2)>>2]=ka}ra=C;ra=ne(c[ra>>2]|0,c[ra+4>>2]|0,1,0)|0;sa=C;c[sa>>2]=ra;c[sa+4>>2]=F;da=da+1|0;if(!(c[q>>2]|0)){ga=5;break}if(c[j>>2]|0)c[m>>2]=0;Tb(e,ga,j,B);Rb(e,c[B>>2]|0);if((c[m>>2]|0)==1){ra=c[c[j>>2]>>2]|0;sa=ra>>1;a[(c[r>>2]|0)+sa>>0]=(ra&1^1)&255^1;pa=c[q>>2]|0;sa=(c[t>>2]|0)+(sa<<3)|0;c[sa>>2]=-1;c[sa+4>>2]=pa;sa=c[o>>2]|0;c[o>>2]=sa+1;c[(c[v>>2]|0)+(sa<<2)>>2]=ra}else{ea=pc(x,j,1)|0;ga=c[w>>2]|0;if((ga|0)==(c[z>>2]|0)){ha=(ga>>1)+2&-2;ha=(ha|0)<2?2:ha;if((ha|0)>(2147483647-ga|0)){ga=14;break}ra=c[y>>2]|0;sa=ha+ga|0;c[z>>2]=sa;sa=Ud(ra,sa<<2)|0;c[y>>2]=sa;if((sa|0)==0?(c[(Oa()|0)>>2]|0)==12:0){ga=14;break}ga=c[w>>2]|0}c[w>>2]=ga+1;ga=(c[y>>2]|0)+(ga<<2)|0;if(ga)c[ga>>2]=ea;Nb(e,ea);ia=c[x>>2]|0;sa=ia+(ea<<2)|0;fa=+h[aa>>3];sa=sa+((c[sa>>2]|0)>>>5<<2)+4|0;ta=fa+ +g[sa>>2];g[sa>>2]=ta;if(ta>1.0e20){ha=c[w>>2]|0;if((ha|0)>0){ga=c[A>>2]|0;ka=0;do{sa=ia+(c[ga+(ka<<2)>>2]<<2)|0;sa=sa+((c[sa>>2]|0)>>>5<<2)+4|0;g[sa>>2]=+g[sa>>2]*1.0e-20;ka=ka+1|0}while((ka|0)!=(ha|0))}h[aa>>3]=fa*1.0e-20}ra=c[c[j>>2]>>2]|0;sa=ra>>1;a[(c[r>>2]|0)+sa>>0]=(ra&1^1)&255^1;pa=c[q>>2]|0;sa=(c[t>>2]|0)+(sa<<3)|0;c[sa>>2]=ea;c[sa+4>>2]=pa;sa=c[o>>2]|0;c[o>>2]=sa+1;c[(c[v>>2]|0)+(sa<<2)>>2]=ra}h[U>>3]=1.0/+h[u>>3]*+h[U>>3];h[aa>>3]=1.0/+h[Y>>3]*+h[aa>>3];sa=(c[ca>>2]|0)+ -1|0;c[ca>>2]=sa;if(sa)continue;fa=+h[O>>3]*+h[P>>3];h[P>>3]=fa;c[ca>>2]=~~fa;fa=+h[Q>>3]*+h[I>>3];h[I>>3]=fa;if((c[R>>2]|0)<=0)continue;ga=c[C>>2]|0;ea=c[T>>2]|0;oa=c[q>>2]|0;if(!oa)ha=o;else ha=c[p>>2]|0;ha=c[ha>>2]|0;na=c[V>>2]|0;ma=c[W>>2]|0;la=c[X>>2]|0;ka=s;ia=c[ka>>2]|0;ka=c[ka+4>>2]|0;ja=+(c[Z>>2]|0);qa=1.0/ja;if((oa|0)<0)ta=0.0;else{pa=0;ta=0.0;while(1){if(!pa)ra=0;else ra=c[(c[p>>2]|0)+(pa+ -1<<2)>>2]|0;if((pa|0)==(oa|0))sa=o;else sa=(c[p>>2]|0)+(pa<<2)|0;ta=ta+ +S(+qa,+(+(pa|0)))*+((c[sa>>2]|0)-ra|0);if((pa|0)==(oa|0))break;else pa=pa+1|0}}c[_>>2]=ga;c[_+4>>2]=ea-ha;c[_+8>>2]=na;c[_+12>>2]=ma;c[_+16>>2]=~~fa;c[_+20>>2]=la;sa=_+24|0;h[k>>3]=(+(ia>>>0)+4294967296.0*+(ka>>>0))/+(la|0);c[sa>>2]=c[k>>2];c[sa+4>>2]=c[k+4>>2];sa=_+32|0;h[k>>3]=ta/ja*100.0;c[sa>>2]=c[k>>2];c[sa+4>>2]=c[k+4>>2];La(1832,_|0)|0}if((ga|0)==5)a[b>>0]=a[536]|0;else if((ga|0)==14)Ta(va(1)|0,48,0);else if((ga|0)==41){fa=+(c[Z>>2]|0);ja=1.0/fa;r=c[q>>2]|0;if((r|0)<0)qa=0.0;else{q=0;qa=0.0;while(1){if(!q)s=0;else s=c[(c[p>>2]|0)+(q+ -1<<2)>>2]|0;if((q|0)==(r|0))t=o;else t=(c[p>>2]|0)+(q<<2)|0;qa=qa+ +S(+ja,+(+(q|0)))*+((c[t>>2]|0)-s|0);if((q|0)==(r|0))break;else q=q+1|0}}h[e+528>>3]=qa/fa;Rb(e,0);a[b>>0]=a[544]|0}else if((ga|0)==50)a[b>>0]=a[536]|0;else if((ga|0)==57){c[$>>2]=ka^1;sa=e+16|0;c[_+0>>2]=c[$+0>>2];Vb(e,_,sa);a[b>>0]=a[536]|0}else if((ga|0)==60)a[b>>0]=a[528]|0;b=c[j>>2]|0;if(!b){i=n;return}c[m>>2]=0;Td(b);c[j>>2]=0;c[l>>2]=0;i=n;return}function $b(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0,y=0,z=0.0,A=0,B=0;f=i;i=i+16|0;j=f;e=d+4|0;if(c[e>>2]|0)c[d+8>>2]=0;g=d+36|0;k=d+32|0;if((c[g>>2]|0)>0){l=d+16|0;m=0;do{a[(c[l>>2]|0)+(c[(c[k>>2]|0)+(m<<2)>>2]|0)>>0]=0;m=m+1|0}while((m|0)<(c[g>>2]|0))}if(c[k>>2]|0)c[g>>2]=0;k=d+492|0;if(!(a[k>>0]|0)){a[b>>0]=a[536]|0;i=f;return}l=d+152|0;y=l;y=ne(c[y>>2]|0,c[y+4>>2]|0,1,0)|0;c[l>>2]=y;c[l+4>>2]=F;z=+h[d+120>>3]*+(c[d+208>>2]|0);l=d+640|0;h[l>>3]=z;v=+(c[d+104>>2]|0);if(z>3]=v;w=c[d+136>>2]|0;h[d+648>>3]=+(w|0);c[d+656>>2]=w;w=a[544]|0;l=d+44|0;if((c[l>>2]|0)>0){Ka(2288)|0;Ka(2368)|0;Ka(2448)|0;Ka(2528)|0;o=a[544]|0}else o=w;n=d+192|0;m=d+184|0;y=o&255;a:do if((y>>>1^1)&w<<24>>24==o<<24>>24|w&2&y){q=d+80|0;t=d+112|0;p=d+108|0;o=d+680|0;r=d+664|0;s=d+672|0;u=0;while(1){v=+h[t>>3];if(!(a[q>>0]|0))v=+S(+v,+(+(u|0)));else{y=u+1|0;if((u|0)>0){x=0;w=1;do{x=x+1|0;w=w<<1|1}while((w|0)<(y|0));y=w+ -1|0}else{x=0;y=0}if((y|0)!=(u|0)){w=u;do{A=y>>1;x=x+ -1|0;w=(w|0)%(A|0)|0;y=A+ -1|0}while((y|0)!=(w|0))}v=+S(+v,+(+(x|0)))}_b(j,d,~~(v*+(c[p>>2]|0)));w=a[j>>0]|0;if(a[o>>0]|0)break a;y=r;x=c[y+4>>2]|0;if((x|0)>=0?(A=n,B=c[A+4>>2]|0,!(B>>>0>>0|((B|0)==(x|0)?(c[A>>2]|0)>>>0<(c[y>>2]|0)>>>0:0))):0)break a;y=s;x=c[y+4>>2]|0;if((x|0)>=0?(B=m,A=c[B+4>>2]|0,!(A>>>0>>0|((A|0)==(x|0)?(c[B>>2]|0)>>>0<(c[y>>2]|0)>>>0:0))):0)break a;A=a[544]|0;B=A&255;if(!((B>>>1^1)&w<<24>>24==A<<24>>24|w&2&B))break;else u=u+1|0}}while(0);if((c[l>>2]|0)>0)Ka(2528)|0;A=a[528]|0;B=A&255;j=w&2;if(!((B>>>1^1)&w<<24>>24==A<<24>>24|j&B)){A=a[536]|0;B=A&255;if(((B>>>1^1)&w<<24>>24==A<<24>>24|j&B|0)!=0?(c[g>>2]|0)==0:0)a[k>>0]=0}else{g=d+540|0;jc(e,c[g>>2]|0);if((c[g>>2]|0)>0){j=d+332|0;k=0;do{a[(c[e>>2]|0)+k>>0]=a[(c[j>>2]|0)+k>>0]|0;k=k+1|0}while((k|0)<(c[g>>2]|0))}}Rb(d,0);a[b>>0]=w;i=f;return}function ac(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;f=i;h=b+412|0;vc(h);k=b+540|0;if((c[k>>2]|0)>0){j=b+544|0;g=0;do{l=g<<1;n=c[h>>2]|0;m=n+(l*12|0)+4|0;if((c[m>>2]|0)>0){p=n+(l*12|0)|0;o=0;do{s=(c[p>>2]|0)+(o<<3)|0;n=c[s>>2]|0;q=c[j>>2]|0;r=q+(n<<2)|0;if(!(c[r>>2]&16)){t=wc(e,r)|0;c[s>>2]=t;c[r>>2]=c[r>>2]|16;c[q+(n+1<<2)>>2]=t}else c[s>>2]=c[q+(n+1<<2)>>2];o=o+1|0}while((o|0)<(c[m>>2]|0));m=c[h>>2]|0}else m=n;n=l|1;l=m+(n*12|0)+4|0;if((c[l>>2]|0)>0){r=m+(n*12|0)|0;q=0;do{m=(c[r>>2]|0)+(q<<3)|0;p=c[m>>2]|0;o=c[j>>2]|0;n=o+(p<<2)|0;if(!(c[n>>2]&16)){t=wc(e,n)|0;c[m>>2]=t;c[n>>2]=c[n>>2]|16;c[o+(p+1<<2)>>2]=t}else c[m>>2]=c[o+(p+1<<2)>>2];q=q+1|0}while((q|0)<(c[l>>2]|0))}g=g+1|0}while((g|0)<(c[k>>2]|0))}g=b+284|0;if((c[g>>2]|0)>0){l=b+280|0;k=b+396|0;j=b+544|0;h=b+332|0;m=0;do{r=c[k>>2]|0;p=r+(c[(c[l>>2]|0)+(m<<2)>>2]>>1<<3)|0;q=c[p>>2]|0;do if((q|0)!=-1){t=c[j>>2]|0;s=t+(q<<2)|0;o=(c[s>>2]&16|0)==0;if(o){u=c[t+(q+1<<2)>>2]|0;n=u>>1;u=(d[(c[h>>2]|0)+n>>0]|0)^u&1;w=a[528]|0;v=w&255;if(!((u&255)<<24>>24==w<<24>>24&(v>>>1^1)|v&2&u))break;w=c[r+(n<<3)>>2]|0;if(!((w|0)!=-1&(w|0)==(q|0)))break;if(o){w=wc(e,s)|0;c[p>>2]=w;c[s>>2]=c[s>>2]|16;c[t+(q+1<<2)>>2]=w;break}}c[p>>2]=c[t+(q+1<<2)>>2]}while(0);m=m+1|0}while((m|0)<(c[g>>2]|0))}g=b+272|0;n=c[g>>2]|0;if((n|0)>0){j=b+268|0;h=b+544|0;m=c[j>>2]|0;k=0;l=0;do{p=m+(k<<2)|0;o=c[p>>2]|0;r=c[h>>2]|0;q=r+(o<<2)|0;s=c[q>>2]|0;if((s&3|0)!=1){if(!(s&16)){n=wc(e,q)|0;c[p>>2]=n;c[q>>2]=c[q>>2]|16;c[r+(o+1<<2)>>2]=n;n=c[j>>2]|0;m=n;n=c[n+(k<<2)>>2]|0}else{n=c[r+(o+1<<2)>>2]|0;c[p>>2]=n}c[m+(l<<2)>>2]=n;n=c[g>>2]|0;l=l+1|0}k=k+1|0}while((k|0)<(n|0))}else{k=0;l=0}h=k-l|0;if((h|0)>0)c[g>>2]=n-h;g=b+260|0;m=c[g>>2]|0;if((m|0)>0){h=b+256|0;b=b+544|0;l=c[h>>2]|0;j=0;k=0;do{n=l+(j<<2)|0;p=c[n>>2]|0;o=c[b>>2]|0;r=o+(p<<2)|0;q=c[r>>2]|0;if((q&3|0)!=1){if(!(q&16)){m=wc(e,r)|0;c[n>>2]=m;c[r>>2]=c[r>>2]|16;c[o+(p+1<<2)>>2]=m;m=c[h>>2]|0;l=m;m=c[m+(j<<2)>>2]|0}else{m=c[o+(p+1<<2)>>2]|0;c[n>>2]=m}c[l+(k<<2)>>2]=m;m=c[g>>2]|0;k=k+1|0}j=j+1|0}while((j|0)<(m|0))}else{j=0;k=0}e=j-k|0;if((e|0)<=0){i=f;return}c[g>>2]=m-e;i=f;return}function bc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;g=i;i=i+32|0;j=g;d=g+8|0;e=b+548|0;f=b+556|0;h=(c[e>>2]|0)-(c[f>>2]|0)|0;c[d+0>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;gc(d,h);h=d+16|0;a[h>>0]=0;ac(b,d);if((c[b+44>>2]|0)>1){k=c[d+4>>2]<<2;c[j>>2]=c[e>>2]<<2;c[j+4>>2]=k;La(1888,j|0)|0}a[b+560>>0]=a[h>>0]|0;h=b+544|0;j=c[h>>2]|0;if(j)Td(j);c[h>>2]=c[d>>2];c[e>>2]=c[d+4>>2];c[b+552>>2]=c[d+8>>2];c[f>>2]=c[d+12>>2];i=g;return}function cc(){var d=0,e=0,f=0;d=i;i=i+16|0;e=d;a[528]=0;a[536]=1;a[544]=2;xb(552,608,624,2136,2144);c[138]=2168;h[72]=0.0;h[73]=1.0;a[592]=0;a[593]=0;b[297]=b[e+0>>1]|0;b[298]=b[e+2>>1]|0;b[299]=b[e+4>>1]|0;h[75]=.95;xb(664,720,736,2136,2144);c[166]=2168;h[86]=0.0;h[87]=1.0;a[704]=0;a[705]=0;b[353]=b[e+0>>1]|0;b[354]=b[e+2>>1]|0;b[355]=b[e+4>>1]|0;h[89]=.999;xb(776,832,848,2136,2144);c[194]=2168;h[100]=0.0;h[101]=1.0;a[816]=1;a[817]=1;b[409]=b[e+0>>1]|0;b[410]=b[e+2>>1]|0;b[411]=b[e+4>>1]|0;h[103]=0.0;xb(936,992,1008,2136,2144);c[234]=2168;h[120]=0.0;h[121]=v;a[976]=0;a[977]=0;b[489]=b[e+0>>1]|0;b[490]=b[e+2>>1]|0;b[491]=b[e+4>>1]|0;h[123]=91648253.0;xb(1048,1080,1096,2136,2016);c[262]=280;f=1068|0;c[f>>2]=0;c[f+4>>2]=2;c[269]=2;xb(1160,1192,1208,2136,2016);c[290]=280;f=1180|0;c[f>>2]=0;c[f+4>>2]=2;c[297]=2;xb(1272,1296,1312,2136,1992);c[318]=160;a[1292]=0;xb(1344,1368,1376,2136,1992);c[336]=160;a[1364]=1;xb(1408,1440,1448,2136,2016);c[352]=280;f=1428|0;c[f>>2]=1;c[f+4>>2]=2147483647;c[359]=100;xb(1480,1536,1544,2136,2144);c[370]=2168;h[188]=1.0;h[189]=v;a[1520]=0;a[1521]=0;b[761]=b[e+0>>1]|0;b[762]=b[e+2>>1]|0;b[763]=b[e+4>>1]|0;h[191]=2.0;xb(1584,1640,1648,2136,2144);c[396]=2168;h[201]=0.0;h[202]=v;a[1624]=0;a[1625]=0;b[813]=b[e+0>>1]|0;b[814]=b[e+2>>1]|0;b[815]=b[e+4>>1]|0;h[204]=.2;xb(1728,1760,1776,2136,2016);c[432]=280;e=1748|0;c[e>>2]=0;c[e+4>>2]=2147483647;c[439]=0;i=d;return}function dc(a){a=a|0;var b=0;b=i;pd(a);i=b;return}function ec(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,q=0.0,r=0.0;e=i;i=i+16|0;j=e;g=e+8|0;if((a[d>>0]|0)!=45){o=0;i=e;return o|0}m=d+1|0;f=b+4|0;k=c[f>>2]|0;l=a[k>>0]|0;a:do if(l<<24>>24){n=0;while(1){o=n;n=n+1|0;if((a[m>>0]|0)!=l<<24>>24){b=0;break}l=a[k+n>>0]|0;m=d+(o+2)|0;if(!(l<<24>>24))break a}i=e;return b|0}while(0);if((a[m>>0]|0)!=61){o=0;i=e;return o|0}k=m+1|0;q=+ce(k,g);if(!(c[g>>2]|0)){o=0;i=e;return o|0}r=+h[b+32>>3];if(q>=r?(a[b+41>>0]|0)==0|q!=r:0){o=c[p>>2]|0;n=c[f>>2]|0;c[j>>2]=k;c[j+4>>2]=n;Za(o|0,2024,j|0)|0;ab(1)}r=+h[b+24>>3];if(q<=r?(a[b+40>>0]|0)==0|q!=r:0){o=c[p>>2]|0;n=c[f>>2]|0;c[j>>2]=k;c[j+4>>2]=n;Za(o|0,2080,j|0)|0;ab(1)}h[b+48>>3]=q;o=1;i=e;return o|0}function fc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,l=0.0,m=0,n=0.0,o=0.0,q=0;e=i;i=i+48|0;f=e;g=c[p>>2]|0;q=c[b+16>>2]|0;m=(a[b+40>>0]|0)!=0?91:40;o=+h[b+24>>3];n=+h[b+32>>3];j=(a[b+41>>0]|0)!=0?93:41;l=+h[b+48>>3];c[f>>2]=c[b+4>>2];c[f+4>>2]=q;c[f+8>>2]=m;m=f+12|0;h[k>>3]=o;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];m=f+20|0;h[k>>3]=n;c[m>>2]=c[k>>2];c[m+4>>2]=c[k+4>>2];c[f+28>>2]=j;j=f+32|0;h[k>>3]=l;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];Za(g|0,2232,f|0)|0;if(!d){i=e;return}c[f>>2]=c[b+8>>2];Za(g|0,2e3,f|0)|0;Sa(10,g|0)|0;i=e;return}function gc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=i;e=a+8|0;f=c[e>>2]|0;if(f>>>0>>0)h=f;else{i=d;return}while(1){if(h>>>0>=b>>>0)break;h=((h>>>3)+2+(h>>>1)&-2)+h|0;c[e>>2]=h;if(h>>>0<=f>>>0){g=4;break}}if((g|0)==4)Ta(va(1)|0,48,0);e=Ud(c[a>>2]|0,h<<2)|0;if((e|0)==0?(c[(Oa()|0)>>2]|0)==12:0)Ta(va(1)|0,48,0);c[a>>2]=e;i=d;return}function hc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;e=a+32|0;d=c[e>>2]|0;if(d){c[a+36>>2]=0;Td(d);c[e>>2]=0;c[a+40>>2]=0}e=a+16|0;d=c[e>>2]|0;if(d){c[a+20>>2]=0;Td(d);c[e>>2]=0;c[a+24>>2]=0}e=c[a>>2]|0;if(!e){i=b;return}d=a+4|0;g=c[d>>2]|0;if((g|0)>0){f=0;do{j=e+(f*12|0)|0;h=c[j>>2]|0;if(h){c[e+(f*12|0)+4>>2]=0;Td(h);c[j>>2]=0;c[e+(f*12|0)+8>>2]=0;e=c[a>>2]|0;g=c[d>>2]|0}f=f+1|0}while((f|0)<(g|0))}c[d>>2]=0;Td(e);c[a>>2]=0;c[a+8>>2]=0;i=b;return}function ic(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;f=i;i=i+16|0;e=f+4|0;d=f;l=c[b>>2]|0;h=l+1|0;g=a+4|0;if((c[g>>2]|0)<(h|0)){k=a+8|0;j=c[k>>2]|0;if((j|0)<(h|0)){m=l+2-j&-2;l=(j>>1)+2&-2;l=(m|0)>(l|0)?m:l;if((l|0)>(2147483647-j|0)){m=va(1)|0;Ta(m|0,48,0)}n=c[a>>2]|0;m=l+j|0;c[k>>2]=m;m=Ud(n,m*12|0)|0;c[a>>2]=m;if((m|0)==0?(c[(Oa()|0)>>2]|0)==12:0){n=va(1)|0;Ta(n|0,48,0)}}k=c[g>>2]|0;if((k|0)<(h|0)){j=c[a>>2]|0;do{l=j+(k*12|0)|0;if(l){c[l>>2]=0;c[j+(k*12|0)+4>>2]=0;c[j+(k*12|0)+8>>2]=0}k=k+1|0}while((k|0)!=(h|0))}c[g>>2]=h;l=c[b>>2]|0}g=c[a>>2]|0;if(!(c[g+(l*12|0)>>2]|0)){m=l;n=a+16|0;c[d>>2]=m;c[e+0>>2]=c[d+0>>2];sc(n,e,0);i=f;return}c[g+(l*12|0)+4>>2]=0;m=c[b>>2]|0;n=a+16|0;c[d>>2]=m;c[e+0>>2]=c[d+0>>2];sc(n,e,0);i=f;return}function jc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;f=i;e=b+4|0;if((c[e>>2]|0)>=(d|0)){i=f;return}h=b+8|0;g=c[h>>2]|0;if((g|0)<(d|0)){k=d+1-g&-2;j=(g>>1)+2&-2;j=(k|0)>(j|0)?k:j;if((j|0)>(2147483647-g|0)){k=va(1)|0;Ta(k|0,48,0)}l=c[b>>2]|0;k=j+g|0;c[h>>2]=k;k=Ud(l,k)|0;c[b>>2]=k;if((k|0)==0?(c[(Oa()|0)>>2]|0)==12:0){l=va(1)|0;Ta(l|0,48,0)}}g=c[e>>2]|0;if((g|0)<(d|0)){b=c[b>>2]|0;do{h=b+g|0;if(h)a[h>>0]=0;g=g+1|0}while((g|0)!=(d|0))}c[e>>2]=d;i=f;return}function kc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;h=i;g=d+1|0;f=b+4|0;if((c[f>>2]|0)>=(g|0)){l=c[b>>2]|0;l=l+d|0;a[l>>0]=e;i=h;return}k=b+8|0;j=c[k>>2]|0;if((j|0)<(g|0)){m=d+2-j&-2;l=(j>>1)+2&-2;l=(m|0)>(l|0)?m:l;if((l|0)>(2147483647-j|0)){m=va(1)|0;Ta(m|0,48,0)}n=c[b>>2]|0;m=l+j|0;c[k>>2]=m;m=Ud(n,m)|0;c[b>>2]=m;if((m|0)==0?(c[(Oa()|0)>>2]|0)==12:0){n=va(1)|0;Ta(n|0,48,0)}}j=c[f>>2]|0;if((j|0)<(g|0))do{k=(c[b>>2]|0)+j|0;if(k)a[k>>0]=0;j=j+1|0}while((j|0)!=(g|0));c[f>>2]=g;n=c[b>>2]|0;n=n+d|0;a[n>>0]=e;i=h;return}function lc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0;d=i;i=i+16|0;g=d;c[g>>2]=b;j=a+12|0;f=b+1|0;e=a+16|0;if((c[e>>2]|0)<(f|0)){l=a+20|0;k=c[l>>2]|0;if((k|0)<(f|0)){n=b+2-k&-2;m=(k>>1)+2&-2;m=(n|0)>(m|0)?n:m;if((m|0)>(2147483647-k|0)){n=va(1)|0;Ta(n|0,48,0)}o=c[j>>2]|0;n=m+k|0;c[l>>2]=n;n=Ud(o,n<<2)|0;c[j>>2]=n;if((n|0)==0?(c[(Oa()|0)>>2]|0)==12:0){o=va(1)|0;Ta(o|0,48,0)}}k=c[e>>2]|0;if((f|0)>(k|0))ke((c[j>>2]|0)+(k<<2)|0,-1,f-k<<2|0)|0;c[e>>2]=f}c[(c[j>>2]|0)+(b<<2)>>2]=c[a+4>>2];nc(a,g);e=c[j>>2]|0;g=c[e+(b<<2)>>2]|0;b=c[a>>2]|0;f=c[b+(g<<2)>>2]|0;if(!g){n=0;o=b+(n<<2)|0;c[o>>2]=f;o=e+(f<<2)|0;c[o>>2]=n;i=d;return}a=a+28|0;while(1){j=g;g=g+ -1>>1;k=b+(g<<2)|0;l=c[k>>2]|0;o=c[c[a>>2]>>2]|0;if(!(+h[o+(f<<3)>>3]>+h[o+(l<<3)>>3])){a=14;break}c[b+(j<<2)>>2]=l;c[e+(c[k>>2]<<2)>>2]=j;if(!g){j=0;a=14;break}}if((a|0)==14){o=b+(j<<2)|0;c[o>>2]=f;o=e+(f<<2)|0;c[o>>2]=j;i=d;return}}function mc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;e=a+4|0;f=c[e>>2]|0;g=a+8|0;h=c[g>>2]|0;if((f|0)==(h|0)&(h|0)<(f+1|0)){h=(f>>1)+2&-2;h=(h|0)<2?2:h;if((h|0)>(2147483647-f|0)){h=va(1)|0;Ta(h|0,48,0)}j=c[a>>2]|0;f=h+f|0;c[g>>2]=f;f=Ud(j,f<<2)|0;c[a>>2]=f;if((f|0)==0?(c[(Oa()|0)>>2]|0)==12:0){j=va(1)|0;Ta(j|0,48,0)}}else f=c[a>>2]|0;j=c[e>>2]|0;c[e>>2]=j+1;e=f+(j<<2)|0;if(!e){i=d;return}c[e>>2]=c[b>>2];i=d;return}function nc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;e=a+4|0;f=c[e>>2]|0;g=a+8|0;h=c[g>>2]|0;if((f|0)==(h|0)&(h|0)<(f+1|0)){h=(f>>1)+2&-2;h=(h|0)<2?2:h;if((h|0)>(2147483647-f|0)){h=va(1)|0;Ta(h|0,48,0)}j=c[a>>2]|0;f=h+f|0;c[g>>2]=f;f=Ud(j,f<<2)|0;c[a>>2]=f;if((f|0)==0?(c[(Oa()|0)>>2]|0)==12:0){j=va(1)|0;Ta(j|0,48,0)}}else f=c[a>>2]|0;j=c[e>>2]|0;c[e>>2]=j+1;e=f+(j<<2)|0;if(!e){i=d;return}c[e>>2]=c[b>>2];i=d;return}function oc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;e=i;i=i+16|0;f=e+2|0;h=e+1|0;g=e;if((d|0)<16){g=d+ -1|0;if((g|0)>0)h=0;else{i=e;return}do{f=h;h=h+1|0;if((h|0)<(d|0)){k=f;j=h;do{k=(c[b+(j<<2)>>2]|0)<(c[b+(k<<2)>>2]|0)?j:k;j=j+1|0}while((j|0)!=(d|0))}else k=f;n=b+(f<<2)|0;o=c[n>>2]|0;p=b+(k<<2)|0;c[n>>2]=c[p>>2];c[p>>2]=o}while((h|0)!=(g|0));i=e;return}j=c[b+(((d|0)/2|0)<<2)>>2]|0;m=-1;n=d;while(1){do{m=m+1|0;l=b+(m<<2)|0;k=c[l>>2]|0}while((k|0)<(j|0));do{n=n+ -1|0;o=b+(n<<2)|0;p=c[o>>2]|0}while((j|0)<(p|0));if((m|0)>=(n|0))break;c[l>>2]=p;c[o>>2]=k}a[f+0>>0]=a[h+0>>0]|0;oc(b,m,f);p=d-m|0;a[f+0>>0]=a[g+0>>0]|0;oc(l,p,f);i=e;return}function pc(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,h=0,j=0,k=0,l=0,m=0;f=i;k=e&1;j=d[a+16>>0]|0|k;h=b+4|0;l=((j+(c[h>>2]|0)<<2)+4|0)>>>2;m=a+4|0;gc(a,l+(c[m>>2]|0)|0);e=c[m>>2]|0;l=l+e|0;c[m>>2]=l;if(l>>>0>>0)Ta(va(1)|0,48,0);a=(c[a>>2]|0)+(e<<2)|0;if(!a){i=f;return e|0}j=j<<3|k<<2;c[a>>2]=c[a>>2]&-32|j;j=c[h>>2]<<5|j;c[a>>2]=j;if((c[h>>2]|0)>0){j=c[b>>2]|0;b=0;do{c[a+(b<<2)+4>>2]=c[j+(b<<2)>>2];b=b+1|0}while((b|0)<(c[h>>2]|0));j=c[a>>2]|0}if(!(j&8)){i=f;return e|0}h=j>>>5;if(j&4){g[a+(h<<2)+4>>2]=0.0;i=f;return e|0}if(!h){h=0;j=0}else{j=0;b=0;do{j=1<<((c[a+(b<<2)+4>>2]|0)>>>1&31)|j;b=b+1|0}while((b|0)<(h|0))}c[a+(h<<2)+4>>2]=j;i=f;return e|0}function qc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;e=a+4|0;f=c[e>>2]|0;g=a+8|0;h=c[g>>2]|0;if((f|0)==(h|0)&(h|0)<(f+1|0)){h=(f>>1)+2&-2;h=(h|0)<2?2:h;if((h|0)>(2147483647-f|0)){h=va(1)|0;Ta(h|0,48,0)}j=c[a>>2]|0;f=h+f|0;c[g>>2]=f;f=Ud(j,f<<3)|0;c[a>>2]=f;if((f|0)==0?(c[(Oa()|0)>>2]|0)==12:0){j=va(1)|0;Ta(j|0,48,0)}}else f=c[a>>2]|0;j=c[e>>2]|0;c[e>>2]=j+1;e=f+(j<<3)|0;if(!e){i=d;return}g=b;h=c[g+4>>2]|0;j=e;c[j>>2]=c[g>>2];c[j+4>>2]=h;i=d;return}function rc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;b=i;d=c[a>>2]|0;f=c[d>>2]|0;k=a+4|0;o=c[d+((c[k>>2]|0)+ -1<<2)>>2]|0;c[d>>2]=o;e=c[a+12>>2]|0;c[e+(o<<2)>>2]=0;c[e+(f<<2)>>2]=-1;o=(c[k>>2]|0)+ -1|0;c[k>>2]=o;if((o|0)<=1){i=b;return f|0}g=c[d>>2]|0;l=a+28|0;a=0;m=1;while(1){n=(a<<1)+2|0;if((n|0)<(o|0)){p=c[d+(n<<2)>>2]|0;s=c[d+(m<<2)>>2]|0;o=c[c[l>>2]>>2]|0;q=+h[o+(p<<3)>>3];r=+h[o+(s<<3)>>3];if(!(q>r)){p=s;q=r;j=6}}else{o=c[c[l>>2]>>2]|0;j=c[d+(m<<2)>>2]|0;p=j;q=+h[o+(j<<3)>>3];j=6}if((j|0)==6){j=0;n=m}if(!(q>+h[o+(g<<3)>>3]))break;c[d+(a<<2)>>2]=p;c[e+(p<<2)>>2]=a;m=n<<1|1;o=c[k>>2]|0;if((m|0)>=(o|0)){a=n;break}else a=n}c[d+(a<<2)>>2]=g;c[e+(g<<2)>>2]=a;i=b;return f|0}function sc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0;f=i;k=c[d>>2]|0;d=k+1|0;g=b+4|0;if((c[g>>2]|0)>=(d|0)){i=f;return}j=b+8|0;h=c[j>>2]|0;if((h|0)<(d|0)){l=k+2-h&-2;k=(h>>1)+2&-2;k=(l|0)>(k|0)?l:k;if((k|0)>(2147483647-h|0)){l=va(1)|0;Ta(l|0,48,0)}m=c[b>>2]|0;l=k+h|0;c[j>>2]=l;l=Ud(m,l)|0;c[b>>2]=l;if((l|0)==0?(c[(Oa()|0)>>2]|0)==12:0){m=va(1)|0;Ta(m|0,48,0)}}h=c[g>>2]|0;if((h|0)<(d|0))do{a[(c[b>>2]|0)+h>>0]=e;h=h+1|0}while((h|0)!=(d|0));c[g>>2]=d;i=f;return}function tc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;e=i;i=i+16|0;h=e+8|0;f=e+4|0;j=e;if((b|0)<16){f=b+ -1|0;if((f|0)<=0){i=e;return}h=c[d>>2]|0;d=0;do{j=d;d=d+1|0;if((d|0)<(b|0)){k=c[h>>2]|0;m=j;l=d;do{n=k+(c[a+(l<<2)>>2]<<2)|0;u=c[n>>2]|0;q=u>>>5;if(u>>>0>95){o=k+(c[a+(m<<2)>>2]<<2)|0;p=(c[o>>2]|0)>>>5;if((p|0)==2)m=l;else m=+g[n+(q<<2)+4>>2]<+g[o+(p<<2)+4>>2]?l:m}l=l+1|0}while((l|0)!=(b|0))}else m=j;s=a+(j<<2)|0;t=c[s>>2]|0;u=a+(m<<2)|0;c[s>>2]=c[u>>2];c[u>>2]=t}while((d|0)!=(f|0));i=e;return}k=c[a+(((b|0)/2|0)<<2)>>2]|0;q=-1;o=b;while(1){t=q+1|0;p=a+(t<<2)|0;u=c[p>>2]|0;l=c[d>>2]|0;m=c[l>>2]|0;s=m+(u<<2)|0;r=c[s>>2]|0;q=m+(k<<2)|0;n=c[q>>2]|0;a:do if(r>>>0>95)while(1){v=n>>>5;if((v|0)!=2?!(+g[s+(r>>>5<<2)+4>>2]<+g[q+(v<<2)+4>>2]):0){q=t;break a}t=t+1|0;p=a+(t<<2)|0;u=c[p>>2]|0;s=m+(u<<2)|0;r=c[s>>2]|0;if(r>>>0<=95){q=t;break}}else q=t;while(0);o=o+ -1|0;s=a+(o<<2)|0;r=m+(k<<2)|0;b:do if(n>>>0>95)while(1){t=m+(c[s>>2]<<2)|0;v=(c[t>>2]|0)>>>5;if((v|0)!=2?!(+g[r+(n>>>5<<2)+4>>2]<+g[t+(v<<2)+4>>2]):0)break b;v=o+ -1|0;s=a+(v<<2)|0;o=v}while(0);if((q|0)>=(o|0))break;c[p>>2]=c[s>>2];c[s>>2]=u}c[f>>2]=l;c[h+0>>2]=c[f+0>>2];tc(a,q,h);v=b-q|0;c[j>>2]=l;c[h+0>>2]=c[j+0>>2];tc(p,v,h);i=e;return}function uc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0;e=i;f=a+4|0;j=c[f>>2]|0;g=c[a>>2]|0;if((j|0)>0){l=c[a+12>>2]|0;k=0;do{c[l+(c[g+(k<<2)>>2]<<2)>>2]=-1;k=k+1|0;j=c[f>>2]|0}while((k|0)<(j|0))}if(g){c[f>>2]=0;j=0}g=b+4|0;if((c[g>>2]|0)>0){k=a+12|0;j=0;do{s=(c[b>>2]|0)+(j<<2)|0;c[(c[k>>2]|0)+(c[s>>2]<<2)>>2]=j;nc(a,s);j=j+1|0}while((j|0)<(c[g>>2]|0));j=c[f>>2]|0}if((j|0)<=1){i=e;return}g=c[a>>2]|0;b=a+28|0;a=a+12|0;o=j;k=(j|0)/2|0;while(1){k=k+ -1|0;j=c[g+(k<<2)>>2]|0;m=k<<1|1;a:do if((m|0)<(o|0)){l=k;while(1){n=(l<<1)+2|0;if((n|0)<(o|0)){p=c[g+(n<<2)>>2]|0;s=c[g+(m<<2)>>2]|0;o=c[c[b>>2]>>2]|0;q=+h[o+(p<<3)>>3];r=+h[o+(s<<3)>>3];if(!(q>r)){p=s;q=r;d=16}}else{o=c[c[b>>2]>>2]|0;d=c[g+(m<<2)>>2]|0;p=d;q=+h[o+(d<<3)>>3];d=16}if((d|0)==16){d=0;n=m}if(!(q>+h[o+(j<<3)>>3]))break a;c[g+(l<<2)>>2]=p;c[(c[a>>2]|0)+(p<<2)>>2]=l;m=n<<1|1;o=c[f>>2]|0;if((m|0)>=(o|0)){l=n;break}else l=n}}else l=k;while(0);c[g+(l<<2)>>2]=j;c[(c[a>>2]|0)+(j<<2)>>2]=l;if((k|0)<=0)break;o=c[f>>2]|0}i=e;return}function vc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;e=i;d=b+36|0;l=c[d>>2]|0;f=b+32|0;n=c[f>>2]|0;if((l|0)>0){h=b+16|0;g=b+44|0;j=0;do{k=n+(j<<2)|0;m=c[k>>2]|0;if(a[(c[h>>2]|0)+m>>0]|0){n=c[b>>2]|0;l=n+(m*12|0)+4|0;p=c[l>>2]|0;if((p|0)>0){m=n+(m*12|0)|0;n=0;o=0;do{q=c[m>>2]|0;r=q+(n<<3)|0;if((c[(c[c[g>>2]>>2]|0)+(c[r>>2]<<2)>>2]&3|0)!=1){s=r;r=c[s+4>>2]|0;p=q+(o<<3)|0;c[p>>2]=c[s>>2];c[p+4>>2]=r;p=c[l>>2]|0;o=o+1|0}n=n+1|0}while((n|0)<(p|0))}else{n=0;o=0}m=n-o|0;if((m|0)>0)c[l>>2]=p-m;a[(c[h>>2]|0)+(c[k>>2]|0)>>0]=0;l=c[d>>2]|0;n=c[f>>2]|0}j=j+1|0}while((j|0)<(l|0))}if(!n){i=e;return}c[d>>2]=0;i=e;return}function wc(a,b){a=a|0;b=b|0;var e=0,f=0,h=0,j=0,k=0;f=i;j=c[b>>2]|0;h=j>>>2&1|(d[a+16>>0]|0);j=((h+(j>>>5)<<2)+4|0)>>>2;k=a+4|0;gc(a,j+(c[k>>2]|0)|0);e=c[k>>2]|0;j=j+e|0;c[k>>2]=j;if(j>>>0>>0)Ta(va(1)|0,48,0);a=(c[a>>2]|0)+(e<<2)|0;if(!a){i=f;return e|0}h=c[b>>2]&-9|h<<3;c[a>>2]=h;if((c[b>>2]|0)>>>0>31){h=0;do{c[a+(h<<2)+4>>2]=c[b+(h<<2)+4>>2];h=h+1|0}while((h|0)<((c[b>>2]|0)>>>5|0));h=c[a>>2]|0}if(!(h&8)){i=f;return e|0}j=h>>>5;b=b+(j<<2)+4|0;if(!(h&4)){c[a+(j<<2)+4>>2]=c[b>>2];i=f;return e|0}else{g[a+(j<<2)+4>>2]=+g[b>>2];i=f;return e|0}return 0}function xc(b){b=b|0;var d=0,e=0,f=0,g=0,j=0,k=0;d=i;i=i+16|0;g=d;Gb(b);c[b>>2]=3424;c[b+684>>2]=c[719];c[b+688>>2]=c[747];c[b+692>>2]=c[785];h[b+696>>3]=+h[411];a[b+704>>0]=a[2652]|0;a[b+705>>0]=a[2724]|0;a[b+706>>0]=a[2804]|0;a[b+707>>0]=1;c[b+708>>2]=0;c[b+712>>2]=0;c[b+716>>2]=0;c[b+720>>2]=1;a[b+724>>0]=1;e=b+732|0;k=b+544|0;c[b+760>>2]=0;c[b+764>>2]=0;c[b+768>>2]=0;c[b+776>>2]=0;c[b+780>>2]=0;c[b+784>>2]=0;c[b+792>>2]=0;c[b+796>>2]=0;c[b+800>>2]=0;j=b+804|0;c[e+0>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[j>>2]=k;j=b+808|0;c[j>>2]=0;c[b+812>>2]=0;c[b+816>>2]=0;e=b+824|0;c[e+0>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;c[b+852>>2]=j;Qc(b+856|0,1);j=b+868|0;e=b+892|0;c[b+920>>2]=0;c[b+924>>2]=0;c[j+0>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[e+0>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+20>>2]=0;e=g+4|0;c[e>>2]=0;j=g+8|0;c[j>>2]=2;f=Ud(0,8)|0;c[g>>2]=f;if((f|0)==0?(c[(Oa()|0)>>2]|0)==12:0)Ta(va(1)|0,48,0);c[f>>2]=-2;c[e>>2]=1;a[b+560>>0]=1;c[b+928>>2]=pc(k,g,0)|0;a[b+536>>0]=0;if(!f){i=d;return}c[e>>2]=0;Td(f);c[g>>2]=0;c[j>>2]=0;i=d;return}function yc(a){a=a|0;var b=0;b=i;zc(a);pd(a);i=b;return}function zc(a){a=a|0;var b=0,d=0,e=0;b=i;c[a>>2]=3424;d=a+904|0;e=c[d>>2]|0;if(e){c[a+908>>2]=0;Td(e);c[d>>2]=0;c[a+912>>2]=0}d=a+892|0;e=c[d>>2]|0;if(e){c[a+896>>2]=0;Td(e);c[d>>2]=0;c[a+900>>2]=0}d=a+876|0;e=c[d>>2]|0;if(e){c[a+880>>2]=0;Td(e);c[d>>2]=0;c[a+884>>2]=0}d=a+856|0;e=c[d>>2]|0;if(e){c[a+860>>2]=0;Td(e);c[d>>2]=0;c[a+864>>2]=0}e=a+836|0;d=c[e>>2]|0;if(d){c[a+840>>2]=0;Td(d);c[e>>2]=0;c[a+844>>2]=0}d=a+824|0;e=c[d>>2]|0;if(e){c[a+828>>2]=0;Td(e);c[d>>2]=0;c[a+832>>2]=0}d=a+808|0;e=c[d>>2]|0;if(e){c[a+812>>2]=0;Td(e);c[d>>2]=0;c[a+816>>2]=0}Rc(a+760|0);d=a+744|0;e=c[d>>2]|0;if(e){c[a+748>>2]=0;Td(e);c[d>>2]=0;c[a+752>>2]=0}d=a+732|0;e=c[d>>2]|0;if(!e){Ib(a);i=b;return}c[a+736>>2]=0;Td(e);c[d>>2]=0;c[a+740>>2]=0;Ib(a);i=b;return}function Ac(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+32|0;h=f+12|0;k=f+8|0;l=f+16|0;g=f+4|0;j=f;a[l>>0]=a[d>>0]|0;a[h+0>>0]=a[l+0>>0]|0;e=Jb(b,h,e)|0;c[k>>2]=e;kc(b+876|0,e,0);kc(b+904|0,e,0);if(!(a[b+724>>0]|0)){i=f;return e|0}l=b+808|0;d=e<<1;c[g>>2]=d;c[h+0>>2]=c[g+0>>2];Sc(l,h,0);c[j>>2]=d|1;c[h+0>>2]=c[j+0>>2];Sc(l,h,0);Tc(b+760|0,k);kc(b+744|0,e,0);Uc(b+824|0,e);i=f;return e|0}function Bc(b,e,f,g){b=b|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;k=i;i=i+32|0;h=k+4|0;r=k;p=k+16|0;c[h>>2]=0;j=h+4|0;c[j>>2]=0;l=h+8|0;c[l>>2]=0;s=a[2608]|0;a[b>>0]=s;m=e+724|0;f=(d[m>>0]&(f&1)|0)!=0;if(f){u=e+308|0;x=c[u>>2]|0;if((x|0)>0){t=e+304|0;s=e+876|0;v=0;do{w=c[(c[t>>2]|0)+(v<<2)>>2]>>1;c[r>>2]=w;w=(c[s>>2]|0)+w|0;if(!(a[w>>0]|0)){a[w>>0]=1;nc(h,r);x=c[u>>2]|0}v=v+1|0}while((v|0)<(x|0))}r=(Cc(e,g)|0)&1^1;a[b>>0]=r;g=a[2608]|0}else{g=s;r=s}x=g&255;if(!((x>>>1^1)&r<<24>>24==g<<24>>24|x&2&(r&255))){if((c[e+44>>2]|0)>0)Ka(3760)|0}else{$b(p,e);r=a[p>>0]|0;a[b>>0]=r}w=a[2608]|0;x=w&255;if((((x>>>1^1)&r<<24>>24==w<<24>>24|x&2&(r&255)|0)!=0?(a[e+707>>0]|0)!=0:0)?(q=(c[e+736>>2]|0)+ -1|0,(q|0)>0):0){b=e+732|0;p=e+4|0;do{g=c[b>>2]|0;u=c[g+(q<<2)>>2]|0;v=q+ -1|0;w=c[g+(v<<2)>>2]|0;q=c[p>>2]|0;a:do if((u|0)>1){s=a[2616]|0;r=s&255;t=r&2;r=r>>>1^1;x=v;while(1){w=d[q+(w>>1)>>0]^w&1;v=u+ -1|0;if(!((w&255)<<24>>24==s<<24>>24&r|t&w))break a;u=x+ -1|0;w=c[g+(u<<2)>>2]|0;if((v|0)>1){x=u;u=v}else{x=u;u=v;o=20;break}}}else{x=v;o=20}while(0);if((o|0)==20){o=0;a[q+(w>>1)>>0]=(w&1^1)&255^1}q=x-u|0}while((q|0)>0)}if(f?(n=c[j>>2]|0,(n|0)>0):0){o=c[h>>2]|0;f=e+876|0;p=0;do{b=c[o+(p<<2)>>2]|0;a[(c[f>>2]|0)+b>>0]=0;if(a[m>>0]|0)Vc(e,b);p=p+1|0}while((p|0)<(n|0))}e=c[h>>2]|0;if(!e){i=k;return}c[j>>2]=0;Td(e);c[h>>2]=0;c[l>>2]=0;i=k;return}function Cc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,j=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;m=i;i=i+16|0;j=m;if(!(Zb(b)|0)){H=0;i=m;return H|0}l=b+724|0;if(!(a[l>>0]|0)){H=1;i=m;return H|0}x=b+924|0;v=b+872|0;w=b+868|0;u=b+860|0;r=b+680|0;y=b+824|0;g=b+828|0;o=b+836|0;z=b+904|0;A=b+332|0;e=b+44|0;B=b+704|0;D=b+706|0;E=b+696|0;p=b+556|0;q=b+548|0;C=b+876|0;s=b+920|0;t=b+284|0;a:while(1){if(((c[x>>2]|0)<=0?(c[s>>2]|0)>=(c[t>>2]|0):0)?(c[g>>2]|0)<=0:0)break;Ic(b);G=c[v>>2]|0;H=c[w>>2]|0;F=G-H|0;if((G|0)<(H|0))F=(c[u>>2]|0)+F|0;if(!((F|0)<=0?(c[s>>2]|0)>=(c[t>>2]|0):0))n=11;if((n|0)==11?(n=0,!(Jc(b,1)|0)):0){n=12;break}H=c[g>>2]|0;if(a[r>>0]|0){n=15;break}if(!H)continue;else F=0;while(1){J=c[y>>2]|0;G=c[J>>2]|0;I=c[J+(H+ -1<<2)>>2]|0;c[J>>2]=I;H=c[o>>2]|0;c[H+(I<<2)>>2]=0;c[H+(G<<2)>>2]=-1;H=(c[g>>2]|0)+ -1|0;c[g>>2]=H;if((H|0)>1)Wc(y,0);if(a[r>>0]|0)continue a;if((a[(c[z>>2]|0)+G>>0]|0)==0?(I=a[(c[A>>2]|0)+G>>0]|0,H=a[2624]|0,J=H&255,((J>>>1^1)&I<<24>>24==H<<24>>24|I&2&J|0)!=0):0){if((c[e>>2]|0)>1&((F|0)%100|0|0)==0){c[j>>2]=c[g>>2];La(3504,j|0)|0}if(a[B>>0]|0){J=(c[C>>2]|0)+G|0;H=a[J>>0]|0;a[J>>0]=1;if(!(Lc(b,G)|0)){n=29;break a}a[(c[C>>2]|0)+G>>0]=H<<24>>24!=0&1}if((((a[D>>0]|0)!=0?(I=a[(c[A>>2]|0)+G>>0]|0,H=a[2624]|0,J=H&255,((J>>>1^1)&I<<24>>24==H<<24>>24|I&2&J|0)!=0):0)?(a[(c[C>>2]|0)+G>>0]|0)==0:0)?!(Mc(b,G)|0):0){n=35;break a}if(+((c[p>>2]|0)>>>0)>+h[E>>3]*+((c[q>>2]|0)>>>0))gb[c[(c[b>>2]|0)+8>>2]&31](b)}H=c[g>>2]|0;if(!H)continue a;else F=F+1|0}}do if((n|0)==12)a[b+492>>0]=0;else if((n|0)==15){r=c[b+824>>2]|0;if((H|0)<=0){if(!r)break}else{t=c[o>>2]|0;s=0;do{c[t+(c[r+(s<<2)>>2]<<2)>>2]=-1;s=s+1|0}while((s|0)<(c[g>>2]|0))}c[g>>2]=0}else if((n|0)==29)a[b+492>>0]=0;else if((n|0)==35)a[b+492>>0]=0;while(0);if(!d){if(+((c[p>>2]|0)>>>0)>+h[b+96>>3]*+((c[q>>2]|0)>>>0))gb[c[(c[b>>2]|0)+8>>2]&31](b)}else{d=b+744|0;p=c[d>>2]|0;if(p){c[b+748>>2]=0;Td(p);c[d>>2]=0;c[b+752>>2]=0}Xc(b+760|0,1);d=b+808|0;p=c[d>>2]|0;if(p){c[b+812>>2]=0;Td(p);c[d>>2]=0;c[b+816>>2]=0}p=b+824|0;d=c[p>>2]|0;if((c[g>>2]|0)<=0){if(d)n=48}else{n=c[o>>2]|0;o=0;do{c[n+(c[d+(o<<2)>>2]<<2)>>2]=-1;o=o+1|0}while((o|0)<(c[g>>2]|0));n=48}if((n|0)==48){c[g>>2]=0;Td(d);c[p>>2]=0;c[b+832>>2]=0}Yc(b+856|0,1);a[l>>0]=0;a[b+536>>0]=1;a[b+560>>0]=0;c[b+728>>2]=c[b+540>>2];Yb(b);gb[c[(c[b>>2]|0)+8>>2]&31](b)}if((c[e>>2]|0)>0?(f=c[b+736>>2]|0,(f|0)>0):0){h[k>>3]=+(f<<2>>>0)*9.5367431640625e-7;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];La(3528,j|0)|0}J=(a[b+492>>0]|0)!=0;i=m;return J|0}function Dc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;e=i;i=i+16|0;g=e;j=b+256|0;k=b+260|0;h=c[k>>2]|0;if((a[b+705>>0]|0)!=0?Ec(b,d)|0:0){p=1;i=e;return p|0}if(!(Kb(b,d)|0)){p=0;i=e;return p|0}if(!(a[b+724>>0]|0)){p=1;i=e;return p|0}d=c[k>>2]|0;if((d|0)!=(h+1|0)){p=1;i=e;return p|0}p=c[(c[j>>2]|0)+(d+ -1<<2)>>2]|0;c[g>>2]=p;m=(c[b+544>>2]|0)+(p<<2)|0;Zc(b+856|0,p);if((c[m>>2]|0)>>>0<=31){p=1;i=e;return p|0}l=b+760|0;k=b+808|0;j=b+744|0;h=b+924|0;d=b+824|0;n=b+840|0;b=b+836|0;o=0;do{p=m+(o<<2)+4|0;_c((c[l>>2]|0)+((c[p>>2]>>1)*12|0)|0,g);q=(c[k>>2]|0)+(c[p>>2]<<2)|0;c[q>>2]=(c[q>>2]|0)+1;a[(c[j>>2]|0)+(c[p>>2]>>1)>>0]=1;c[h>>2]=(c[h>>2]|0)+1;p=c[p>>2]>>1;if((c[n>>2]|0)>(p|0)?(f=c[(c[b>>2]|0)+(p<<2)>>2]|0,(f|0)>-1):0)Wc(d,f);o=o+1|0}while((o|0)<((c[m>>2]|0)>>>5|0));f=1;i=e;return f|0}function Ec(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;k=i;i=i+16|0;h=k+8|0;j=k+4|0;g=k;c[j>>2]=c[b+284>>2];nc(b+292|0,j);j=e+4|0;m=c[j>>2]|0;a:do if((m|0)>0){f=b+332|0;l=0;while(1){n=c[(c[e>>2]|0)+(l<<2)>>2]|0;p=d[(c[f>>2]|0)+(n>>1)>>0]|0;q=p^n&1;o=q&255;s=a[2608]|0;r=s&255;if(o<<24>>24==s<<24>>24&(r>>>1^1)|r&2&q)break;r=a[2616]|0;s=r&255;if(!((s>>>1^1)&o<<24>>24==r<<24>>24|p&2&s)){c[g>>2]=n^1;c[h+0>>2]=c[g+0>>2];Lb(b,h,-1);m=c[j>>2]|0}l=l+1|0;if((l|0)>=(m|0))break a}Rb(b,0);s=1;i=k;return s|0}while(0);s=(Mb(b)|0)!=-1;Rb(b,0);i=k;return s|0}function Fc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0;e=i;i=i+16|0;g=e;f=(c[b+544>>2]|0)+(d<<2)|0;if(!(a[b+724>>0]|0)){Pb(b,d);i=e;return}if((c[f>>2]|0)>>>0<=31){Pb(b,d);i=e;return}j=b+808|0;k=b+776|0;h=b+792|0;l=0;do{m=f+(l<<2)+4|0;n=(c[j>>2]|0)+(c[m>>2]<<2)|0;c[n>>2]=(c[n>>2]|0)+ -1;Vc(b,c[m>>2]>>1);m=c[m>>2]>>1;c[g>>2]=m;m=(c[k>>2]|0)+m|0;if(!(a[m>>0]|0)){a[m>>0]=1;nc(h,g)}l=l+1|0}while((l|0)<((c[f>>2]|0)>>>5|0));Pb(b,d);i=e;return}function Gc(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;g=i;i=i+16|0;j=g+4|0;h=g;l=c[b+544>>2]|0;k=l+(e<<2)|0;Zc(b+856|0,e);if((c[k>>2]&-32|0)==64){Fc(b,e);p=c[f>>2]|0;f=c[k>>2]|0;a:do if(f>>>0>31){m=f>>>5;n=0;while(1){o=n+1|0;if((c[k+(n<<2)+4>>2]|0)==(p|0)){o=n;break a}if((o|0)<(m|0))n=o;else break}}else{m=0;o=0}while(0);n=m+ -1|0;if((o|0)<(n|0))do{f=o;o=o+1|0;c[k+(f<<2)+4>>2]=c[k+(o<<2)+4>>2];f=c[k>>2]|0;m=f>>>5;n=m+ -1|0}while((o|0)<(n|0));if(f&8){c[k+(n<<2)+4>>2]=c[k+(m<<2)+4>>2];f=c[k>>2]|0}m=f+ -32|0;c[k>>2]=m;m=m>>>5;if(!m){m=0;f=0}else{f=0;n=0;do{f=1<<((c[k+(n<<2)+4>>2]|0)>>>1&31)|f;n=n+1|0}while((n|0)<(m|0))}c[k+(m<<2)+4>>2]=f}else{Ob(b,e,1);f=c[f>>2]|0;n=c[k>>2]|0;b:do if(n>>>0>31){m=n>>>5;o=0;while(1){p=o+1|0;if((c[k+(o<<2)+4>>2]|0)==(f|0)){p=o;break b}if((p|0)<(m|0))o=p;else break}}else{m=0;p=0}while(0);o=m+ -1|0;if((p|0)<(o|0))do{n=p;p=p+1|0;c[k+(n<<2)+4>>2]=c[k+(p<<2)+4>>2];n=c[k>>2]|0;m=n>>>5;o=m+ -1|0}while((p|0)<(o|0));if(n&8){c[k+(o<<2)+4>>2]=c[k+(m<<2)+4>>2];n=c[k>>2]|0}o=n+ -32|0;c[k>>2]=o;o=o>>>5;if(!o){o=0;m=0}else{m=0;n=0;do{m=1<<((c[k+(n<<2)+4>>2]|0)>>>1&31)|m;n=n+1|0}while((n|0)<(o|0))}c[k+(o<<2)+4>>2]=m;Nb(b,e);m=f>>1;n=c[b+760>>2]|0;o=n+(m*12|0)|0;n=n+(m*12|0)+4|0;p=c[n>>2]|0;c:do if((p|0)>0){s=c[o>>2]|0;q=0;while(1){r=q+1|0;if((c[s+(q<<2)>>2]|0)==(e|0))break c;if((r|0)<(p|0))q=r;else{q=r;break}}}else q=0;while(0);p=p+ -1|0;if((q|0)<(p|0)){o=c[o>>2]|0;do{p=q;q=q+1|0;c[o+(p<<2)>>2]=c[o+(q<<2)>>2];p=(c[n>>2]|0)+ -1|0}while((q|0)<(p|0))}c[n>>2]=p;s=(c[b+808>>2]|0)+(f<<2)|0;c[s>>2]=(c[s>>2]|0)+ -1;Vc(b,m)}if((c[k>>2]&-32|0)!=32){s=1;i=g;return s|0}l=c[l+(e+1<<2)>>2]|0;k=d[(c[b+332>>2]|0)+(l>>1)>>0]|0;s=k^l&1;e=s&255;q=a[2624]|0;r=q&255;if(!(e<<24>>24==q<<24>>24&(r>>>1^1)|r&2&s)){r=a[2616]|0;s=r&255;if((s>>>1^1)&e<<24>>24==r<<24>>24|k&2&s){s=0;i=g;return s|0}}else{c[h>>2]=l;c[j+0>>2]=c[h+0>>2];Lb(b,j,-1)}s=(Mb(b)|0)==-1;i=g;return s|0}function Hc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;g=i;i=i+16|0;j=g+4|0;h=g;o=a+708|0;c[o>>2]=(c[o>>2]|0)+1;if(c[f>>2]|0)c[f+4>>2]=0;k=(c[b>>2]|0)>>>5>>>0<(c[d>>2]|0)>>>5>>>0;a=k?d:b;b=k?b:d;k=c[b>>2]|0;a:do if(k>>>0>31){d=0;b:while(1){l=c[b+(d<<2)+4>>2]|0;c:do if((l>>1|0)!=(e|0)){m=c[a>>2]|0;d:do if(m>>>0>31){n=0;while(1){o=c[a+(n<<2)+4>>2]|0;n=n+1|0;if((l^o)>>>0<2)break;if((n|0)>=(m>>>5|0))break d}if((o|0)==(l^1|0)){f=0;break b}else break c}while(0);c[j>>2]=l;mc(f,j);k=c[b>>2]|0}while(0);d=d+1|0;if((d|0)>=(k>>>5|0))break a}i=g;return f|0}while(0);d=c[a>>2]|0;if(d>>>0<=31){o=1;i=g;return o|0}j=0;do{b=c[a+(j<<2)+4>>2]|0;if((b>>1|0)!=(e|0)){c[h>>2]=b;mc(f,h);d=c[a>>2]|0}j=j+1|0}while((j|0)<(d>>>5|0));f=1;i=g;return f|0}function Ic(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;d=i;k=b+924|0;if(!(c[k>>2]|0)){i=d;return}h=b+856|0;e=b+872|0;f=b+868|0;j=b+860|0;g=b+544|0;l=0;while(1){w=c[e>>2]|0;m=c[f>>2]|0;n=w-m|0;if((w|0)<(m|0))n=(c[j>>2]|0)+n|0;if((l|0)>=(n|0))break;n=(c[g>>2]|0)+(c[(c[h>>2]|0)+(((m+l|0)%(c[j>>2]|0)|0)<<2)>>2]<<2)|0;m=c[n>>2]|0;if(!(m&3))c[n>>2]=m&-4|2;l=l+1|0}l=b+540|0;q=c[l>>2]|0;if((q|0)>0){n=b+744|0;o=b+776|0;m=b+760|0;b=b+804|0;p=0;do{if(a[(c[n>>2]|0)+p>>0]|0){r=(c[o>>2]|0)+p|0;if(a[r>>0]|0){s=c[m>>2]|0;q=s+(p*12|0)+4|0;u=c[q>>2]|0;if((u|0)>0){s=c[s+(p*12|0)>>2]|0;v=0;t=0;do{w=c[s+(v<<2)>>2]|0;if((c[(c[c[b>>2]>>2]|0)+(w<<2)>>2]&3|0)!=1){c[s+(t<<2)>>2]=w;u=c[q>>2]|0;t=t+1|0}v=v+1|0}while((v|0)<(u|0))}else{v=0;t=0}s=v-t|0;if((s|0)>0)c[q>>2]=u-s;a[r>>0]=0}r=c[m>>2]|0;q=r+(p*12|0)+4|0;t=c[q>>2]|0;if((t|0)>0){r=r+(p*12|0)|0;s=0;do{u=c[(c[r>>2]|0)+(s<<2)>>2]|0;if(!(c[(c[g>>2]|0)+(u<<2)>>2]&3)){Zc(h,u);t=(c[g>>2]|0)+(c[(c[r>>2]|0)+(s<<2)>>2]<<2)|0;c[t>>2]=c[t>>2]&-4|2;t=c[q>>2]|0}s=s+1|0}while((s|0)<(t|0))}a[(c[n>>2]|0)+p>>0]=0;q=c[l>>2]|0}p=p+1|0}while((p|0)<(q|0));l=0}else l=0;while(1){w=c[e>>2]|0;m=c[f>>2]|0;n=w-m|0;if((w|0)<(m|0))n=(c[j>>2]|0)+n|0;if((l|0)>=(n|0))break;m=(c[g>>2]|0)+(c[(c[h>>2]|0)+(((m+l|0)%(c[j>>2]|0)|0)<<2)>>2]<<2)|0;n=c[m>>2]|0;if((n&3|0)==2)c[m>>2]=n&-4;l=l+1|0}c[k>>2]=0;i=d;return}function Jc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0;e=i;i=i+16|0;m=e;x=e+12|0;g=b+856|0;l=b+872|0;q=b+868|0;j=b+860|0;u=b+680|0;f=b+920|0;h=b+284|0;t=b+280|0;r=b+544|0;s=b+928|0;o=b+44|0;n=b+776|0;v=b+692|0;p=b+804|0;k=b+760|0;C=0;F=0;D=0;a:while(1){E=c[q>>2]|0;do{A=c[l>>2]|0;B=(A|0)<(E|0);A=A-E|0;if(B)G=(c[j>>2]|0)+A|0;else G=A;if((G|0)<=0?(c[f>>2]|0)>=(c[h>>2]|0):0){f=1;j=53;break a}if(a[u>>0]|0){j=8;break a}if(B)A=(c[j>>2]|0)+A|0;if((A|0)==0?(z=c[f>>2]|0,(z|0)<(c[h>>2]|0)):0){c[f>>2]=z+1;c[(c[r>>2]|0)+((c[s>>2]|0)+1<<2)>>2]=c[(c[t>>2]|0)+(z<<2)>>2];A=(c[r>>2]|0)+(c[s>>2]<<2)|0;B=(c[A>>2]|0)>>>5;if(!B){B=0;G=0}else{G=0;E=0;do{G=1<<((c[A+(E<<2)+4>>2]|0)>>>1&31)|G;E=E+1|0}while((E|0)<(B|0))}c[A+(B<<2)+4>>2]=G;Zc(g,c[s>>2]|0);E=c[q>>2]|0}A=c[(c[g>>2]|0)+(E<<2)>>2]|0;E=E+1|0;J=c[j>>2]|0;E=(E|0)==(J|0)?0:E;c[q>>2]=E;G=c[r>>2]|0;B=G+(A<<2)|0;I=c[B>>2]|0}while((I&3|0)!=0);if(d?(c[o>>2]|0)>1:0){H=C+1|0;if(!((C|0)%1e3|0)){I=c[l>>2]|0;c[m>>2]=I-E+((I|0)<(E|0)?J:0);c[m+4>>2]=D;c[m+8>>2]=F;La(3440,m|0)|0;I=c[B>>2]|0;C=H}else C=H}E=G+(A+1<<2)|0;G=c[E>>2]>>1;if(I>>>0>63){H=c[k>>2]|0;I=I>>>5;J=1;do{P=c[B+(J<<2)+4>>2]>>1;G=(c[H+(P*12|0)+4>>2]|0)<(c[H+(G*12|0)+4>>2]|0)?P:G;J=J+1|0}while((J|0)<(I|0))}I=(c[n>>2]|0)+G|0;if(a[I>>0]|0){J=c[k>>2]|0;H=J+(G*12|0)+4|0;M=c[H>>2]|0;if((M|0)>0){J=c[J+(G*12|0)>>2]|0;L=0;K=0;do{N=c[J+(L<<2)>>2]|0;if((c[(c[c[p>>2]>>2]|0)+(N<<2)>>2]&3|0)!=1){c[J+(K<<2)>>2]=N;M=c[H>>2]|0;K=K+1|0}L=L+1|0}while((L|0)<(M|0))}else{L=0;K=0}J=L-K|0;if((J|0)>0)c[H>>2]=M-J;a[I>>0]=0}I=c[k>>2]|0;H=c[I+(G*12|0)>>2]|0;I=I+(G*12|0)+4|0;if((c[I>>2]|0)>0)J=0;else continue;while(1){N=c[B>>2]|0;if(N&3)continue a;K=c[H+(J<<2)>>2]|0;L=c[r>>2]|0;O=L+(K<<2)|0;M=c[O>>2]|0;b:do if(((!((M&3|0)!=0|(K|0)==(A|0))?(P=c[v>>2]|0,y=M>>>5,(P|0)==-1|(y|0)<(P|0)):0)?(w=N>>>5,y>>>0>=w>>>0):0)?(c[B+(w<<2)+4>>2]&~c[O+(y<<2)+4>>2]|0)==0:0){L=L+(K+1<<2)|0;do if(N>>>0>31){if(M>>>0>31){O=-2;M=0}else break b;while(1){N=c[E+(M<<2)>>2]|0;c:do if((O|0)==-2){P=0;while(1){O=c[L+(P<<2)>>2]|0;if((N|0)==(O|0)){N=-2;break c}P=P+1|0;if((N|0)==(O^1|0))break c;if(P>>>0>=y>>>0)break b}}else{P=0;while(1){if((N|0)==(c[L+(P<<2)>>2]|0)){N=O;break c}P=P+1|0;if(P>>>0>=y>>>0)break b}}while(0);M=M+1|0;if(M>>>0>=w>>>0)break;else O=N}if((N|0)==-2)break;else if((N|0)==-1)break b;c[x>>2]=N^1;c[m+0>>2]=c[x+0>>2];if(!(Gc(b,K,m)|0)){f=0;j=53;break a}F=F+1|0;J=(((N>>1|0)==(G|0))<<31>>31)+J|0;break b}while(0);Fc(b,K);D=D+1|0}while(0);J=J+1|0;if((J|0)>=(c[I>>2]|0))continue a}}if((j|0)==8){Yc(g,0);c[f>>2]=c[h>>2];P=1;i=e;return P|0}else if((j|0)==53){i=e;return f|0}return 0}function Kc(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;h=i;i=i+16|0;g=h+12|0;m=h+8|0;k=h+4|0;j=h;l=(c[b+544>>2]|0)+(f<<2)|0;if(c[l>>2]&3){r=1;i=h;return r|0}if(Qb(b,l)|0){r=1;i=h;return r|0}c[m>>2]=c[b+284>>2];nc(b+292|0,m);p=c[l>>2]|0;if(p>>>0>31){m=b+332|0;n=0;o=-2;do{q=c[l+(n<<2)+4>>2]|0;r=q>>1;if((r|0)!=(e|0)?(r=(d[(c[m>>2]|0)+r>>0]|0)^q&1,t=a[2616]|0,s=t&255,((r&255)<<24>>24==t<<24>>24&(s>>>1^1)|s&2&r|0)==0):0){c[k>>2]=q^1;c[g+0>>2]=c[k+0>>2];Lb(b,g,-1);p=c[l>>2]|0}else o=q;n=n+1|0}while((n|0)<(p>>>5|0))}else o=-2;t=(Mb(b)|0)==-1;Rb(b,0);if(!t){t=b+712|0;c[t>>2]=(c[t>>2]|0)+1;c[j>>2]=o;c[g+0>>2]=c[j+0>>2];if(!(Gc(b,f,g)|0)){t=0;i=h;return t|0}}t=1;i=h;return t|0}function Lc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0;e=i;h=(c[b+776>>2]|0)+d|0;f=b+760|0;if(a[h>>0]|0){k=c[f>>2]|0;g=k+(d*12|0)+4|0;n=c[g>>2]|0;if((n|0)>0){j=b+804|0;k=c[k+(d*12|0)>>2]|0;m=0;l=0;do{o=c[k+(m<<2)>>2]|0;if((c[(c[c[j>>2]>>2]|0)+(o<<2)>>2]&3|0)!=1){c[k+(l<<2)>>2]=o;n=c[g>>2]|0;l=l+1|0}m=m+1|0}while((m|0)<(n|0))}else{m=0;l=0}j=m-l|0;if((j|0)>0)c[g>>2]=n-j;a[h>>0]=0}g=c[f>>2]|0;n=a[(c[b+332>>2]|0)+d>>0]|0;m=a[2624]|0;o=m&255;if(!((o>>>1^1)&n<<24>>24==m<<24>>24|n&2&o)){o=1;i=e;return o|0}f=g+(d*12|0)+4|0;h=c[f>>2]|0;if(!h){o=1;i=e;return o|0}a:do if((h|0)>0){g=g+(d*12|0)|0;h=0;while(1){if(!(Kc(b,d,c[(c[g>>2]|0)+(h<<2)>>2]|0)|0)){b=0;break}h=h+1|0;if((h|0)>=(c[f>>2]|0))break a}i=e;return b|0}while(0);o=Jc(b,0)|0;i=e;return o|0}function Mc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;e=i;i=i+48|0;s=e+36|0;r=e+32|0;t=e+28|0;u=e+24|0;f=e+12|0;g=e;n=(c[b+776>>2]|0)+d|0;m=b+760|0;if(a[n>>0]|0){q=c[m>>2]|0;o=q+(d*12|0)+4|0;y=c[o>>2]|0;if((y|0)>0){p=b+804|0;q=c[q+(d*12|0)>>2]|0;w=0;v=0;do{z=c[q+(w<<2)>>2]|0;if((c[(c[c[p>>2]>>2]|0)+(z<<2)>>2]&3|0)!=1){c[q+(v<<2)>>2]=z;y=c[o>>2]|0;v=v+1|0}w=w+1|0}while((w|0)<(y|0))}else{w=0;v=0}p=w-v|0;if((p|0)>0)c[o>>2]=y-p;a[n>>0]=0}v=c[m>>2]|0;w=v+(d*12|0)|0;c[f>>2]=0;n=f+4|0;c[n>>2]=0;o=f+8|0;c[o>>2]=0;c[g>>2]=0;q=g+4|0;c[q>>2]=0;p=g+8|0;c[p>>2]=0;v=v+(d*12|0)+4|0;a:do if((c[v>>2]|0)>0){y=b+544|0;B=d<<1;A=0;do{C=(c[w>>2]|0)+(A<<2)|0;E=(c[y>>2]|0)+(c[C>>2]<<2)|0;Z=c[E>>2]|0;z=Z>>>5;b:do if(Z>>>0>31){G=0;while(1){D=G+1|0;if((c[E+(G<<2)+4>>2]|0)==(B|0)){D=G;break b}if((D|0)<(z|0))G=D;else break}}else D=0;while(0);_c((D|0)<(z|0)?f:g,C);A=A+1|0;z=c[v>>2]|0}while((A|0)<(z|0));y=c[n>>2]|0;B=(y|0)>0;if(B){C=c[q>>2]|0;K=(C|0)>0;J=b+544|0;D=c[f>>2]|0;A=c[g>>2]|0;E=b+708|0;I=b+684|0;H=b+688|0;P=0;G=0;while(1){if(K){M=D+(G<<2)|0;L=c[J>>2]|0;N=c[E>>2]|0;O=0;do{S=L+(c[M>>2]<<2)|0;U=L+(c[A+(O<<2)>>2]<<2)|0;N=N+1|0;c[E>>2]=N;Q=(c[S>>2]|0)>>>5>>>0<(c[U>>2]|0)>>>5>>>0;R=Q?U:S;U=Q?S:U;S=R+4|0;Q=U+4|0;R=c[R>>2]|0;T=R>>>5;W=T+ -1|0;U=c[U>>2]|0;c:do if(U>>>0>31){V=0;while(1){Z=c[Q+(V<<2)>>2]|0;d:do if((Z>>1|0)!=(d|0)){e:do if(R>>>0>31){Y=0;while(1){X=c[S+(Y<<2)>>2]|0;Y=Y+1|0;if((X^Z)>>>0<2)break;if((Y|0)>=(T|0))break e}if((X|0)==(Z^1|0))break c;else break d}while(0);W=W+1|0}while(0);V=V+1|0;if((V|0)>=(U>>>5|0)){x=28;break}}}else x=28;while(0);if((x|0)==28){x=0;if((P|0)>=((c[I>>2]|0)+z|0)){b=1;break a}Z=c[H>>2]|0;if((Z|0)!=-1&(W|0)>(Z|0)){b=1;break a}else P=P+1|0}O=O+1|0}while((O|0)<(C|0))}G=G+1|0;if((G|0)>=(y|0)){x=32;break}}}else{B=0;x=32}}else{y=0;B=0;x=32}while(0);f:do if((x|0)==32){a[(c[b+904>>2]|0)+d>>0]=1;z=b+380|0;A=(c[z>>2]|0)+d|0;if(a[A>>0]|0){Z=b+200|0;Y=Z;Y=ne(c[Y>>2]|0,c[Y+4>>2]|0,-1,-1)|0;c[Z>>2]=Y;c[Z+4>>2]=F}a[A>>0]=0;A=b+460|0;if(!((c[b+476>>2]|0)>(d|0)?(c[(c[b+472>>2]|0)+(d<<2)>>2]|0)>-1:0))x=36;if((x|0)==36?(a[(c[z>>2]|0)+d>>0]|0)!=0:0)lc(A,d);x=b+716|0;c[x>>2]=(c[x>>2]|0)+1;x=c[q>>2]|0;if((y|0)>(x|0)){A=b+732|0;if((x|0)>0){u=b+544|0;t=c[g>>2]|0;E=b+736|0;D=0;do{C=(c[u>>2]|0)+(c[t+(D<<2)>>2]<<2)|0;z=c[E>>2]|0;if((c[C>>2]|0)>>>0>31){G=0;H=-1;do{Z=C+(G<<2)+4|0;c[s>>2]=c[Z>>2];_c(A,s);H=(c[Z>>2]>>1|0)==(d|0)?G+z|0:H;G=G+1|0}while((G|0)<((c[C>>2]|0)>>>5|0))}else H=-1;Z=c[A>>2]|0;X=Z+(H<<2)|0;Y=c[X>>2]|0;Z=Z+(z<<2)|0;c[X>>2]=c[Z>>2];c[Z>>2]=Y;c[r>>2]=(c[C>>2]|0)>>>5;_c(A,r);D=D+1|0}while((D|0)<(x|0))}c[s>>2]=d<<1;_c(A,s);c[r>>2]=1;_c(A,r)}else{D=b+732|0;if(B){G=b+544|0;E=c[f>>2]|0;z=b+736|0;H=0;do{C=(c[G>>2]|0)+(c[E+(H<<2)>>2]<<2)|0;A=c[z>>2]|0;if((c[C>>2]|0)>>>0>31){I=0;J=-1;do{Z=C+(I<<2)+4|0;c[s>>2]=c[Z>>2];_c(D,s);J=(c[Z>>2]>>1|0)==(d|0)?I+A|0:J;I=I+1|0}while((I|0)<((c[C>>2]|0)>>>5|0))}else J=-1;Z=c[D>>2]|0;X=Z+(J<<2)|0;Y=c[X>>2]|0;Z=Z+(A<<2)|0;c[X>>2]=c[Z>>2];c[Z>>2]=Y;c[r>>2]=(c[C>>2]|0)>>>5;_c(D,r);H=H+1|0}while((H|0)<(y|0))}c[t>>2]=d<<1|1;_c(D,t);c[u>>2]=1;_c(D,u)}if((c[v>>2]|0)>0){r=0;do{Fc(b,c[(c[w>>2]|0)+(r<<2)>>2]|0);r=r+1|0}while((r|0)<(c[v>>2]|0))}r=b+628|0;g:do if(B){s=b+544|0;w=c[f>>2]|0;A=c[g>>2]|0;if((x|0)>0)v=0;else{r=0;while(1){r=r+1|0;if((r|0)>=(y|0))break g}}do{u=w+(v<<2)|0;t=0;do{Z=c[s>>2]|0;if(Hc(b,Z+(c[u>>2]<<2)|0,Z+(c[A+(t<<2)>>2]<<2)|0,d,r)|0?!(Dc(b,r)|0):0){b=0;break f}t=t+1|0}while((t|0)<(x|0));v=v+1|0}while((v|0)<(y|0))}while(0);r=c[m>>2]|0;m=r+(d*12|0)|0;s=c[m>>2]|0;if(s){c[r+(d*12|0)+4>>2]=0;Td(s);c[m>>2]=0;c[r+(d*12|0)+8>>2]=0}m=b+412|0;d=d<<1;s=c[m>>2]|0;r=s+(d*12|0)+4|0;if((c[r>>2]|0)==0?(l=s+(d*12|0)|0,k=c[l>>2]|0,(k|0)!=0):0){c[r>>2]=0;Td(k);c[l>>2]=0;c[s+(d*12|0)+8>>2]=0;s=c[m>>2]|0}k=d|1;l=s+(k*12|0)+4|0;if((c[l>>2]|0)==0?(j=s+(k*12|0)|0,h=c[j>>2]|0,(h|0)!=0):0){c[l>>2]=0;Td(h);c[j>>2]=0;c[s+(k*12|0)+8>>2]=0}b=Jc(b,0)|0;A=c[g>>2]|0}while(0);if(A){c[q>>2]=0;Td(A);c[g>>2]=0;c[p>>2]=0}g=c[f>>2]|0;if(!g){i=e;return b|0}c[n>>2]=0;Td(g);c[f>>2]=0;c[o>>2]=0;i=e;return b|0}function Nc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;e=i;if(!(a[b+724>>0]|0)){i=e;return}l=b+540|0;if((c[l>>2]|0)>0){j=b+760|0;f=b+804|0;g=b+776|0;k=b+544|0;h=0;do{n=c[j>>2]|0;m=n+(h*12|0)+4|0;p=c[m>>2]|0;if((p|0)>0){n=c[n+(h*12|0)>>2]|0;q=0;o=0;do{r=c[n+(q<<2)>>2]|0;if((c[(c[c[f>>2]>>2]|0)+(r<<2)>>2]&3|0)!=1){c[n+(o<<2)>>2]=r;p=c[m>>2]|0;o=o+1|0}q=q+1|0}while((q|0)<(p|0))}else{q=0;o=0}n=q-o|0;if((n|0)>0)c[m>>2]=p-n;a[(c[g>>2]|0)+h>>0]=0;n=c[j>>2]|0;m=n+(h*12|0)+4|0;if((c[m>>2]|0)>0){r=n+(h*12|0)|0;p=0;do{n=(c[r>>2]|0)+(p<<2)|0;o=c[n>>2]|0;q=c[k>>2]|0;s=q+(o<<2)|0;if(!(c[s>>2]&16)){t=wc(d,s)|0;c[n>>2]=t;c[s>>2]=c[s>>2]|16;c[q+(o+1<<2)>>2]=t}else c[n>>2]=c[q+(o+1<<2)>>2];p=p+1|0}while((p|0)<(c[m>>2]|0))}h=h+1|0}while((h|0)<(c[l>>2]|0))}f=b+856|0;t=c[b+872>>2]|0;g=b+868|0;m=c[g>>2]|0;k=t-m|0;if((t|0)<(m|0))k=(c[b+860>>2]|0)+k|0;a:do if((k|0)>0){h=b+860|0;j=b+544|0;while(1){l=c[(c[f>>2]|0)+(m<<2)>>2]|0;n=m+1|0;c[g>>2]=(n|0)==(c[h>>2]|0)?0:n;n=c[j>>2]|0;o=n+(l<<2)|0;m=c[o>>2]|0;if(!(m&3)){if(!(m&16)){t=wc(d,o)|0;c[o>>2]=c[o>>2]|16;c[n+(l+1<<2)>>2]=t;l=t}else l=c[n+(l+1<<2)>>2]|0;Zc(f,l)}k=k+ -1|0;if((k|0)<=0)break a;m=c[g>>2]|0}}else j=b+544|0;while(0);b=b+928|0;f=c[b>>2]|0;h=c[j>>2]|0;g=h+(f<<2)|0;if(!(c[g>>2]&16)){t=wc(d,g)|0;c[b>>2]=t;c[g>>2]=c[g>>2]|16;c[h+(f+1<<2)>>2]=t;i=e;return}else{c[b>>2]=c[h+(f+1<<2)>>2];i=e;return}}function Oc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;h=i;i=i+32|0;l=h;d=h+8|0;e=b+544|0;f=b+548|0;g=b+556|0;j=(c[f>>2]|0)-(c[g>>2]|0)|0;c[d+0>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;gc(d,j);j=d+16|0;k=b+560|0;a[j>>0]=a[k>>0]|0;Nc(b,d);ac(b,d);if((c[b+44>>2]|0)>1){m=c[d+4>>2]<<2;c[l>>2]=c[f>>2]<<2;c[l+4>>2]=m;La(3608,l|0)|0}a[k>>0]=a[j>>0]|0;j=c[e>>2]|0;if(j)Td(j);c[e>>2]=c[d>>2];c[f>>2]=c[d+4>>2];c[b+552>>2]=c[d+8>>2];c[g>>2]=c[d+12>>2];i=h;return}function Pc(){var d=0,e=0,f=0;d=i;i=i+16|0;e=d;a[2608]=0;a[2616]=1;a[2624]=2;xb(2632,2656,2664,3744,3752);c[658]=160;a[2652]=0;xb(2704,2728,2736,3744,3752);c[676]=160;a[2724]=0;xb(2784,2808,2816,3744,3752);c[696]=160;a[2804]=1;xb(2848,2880,2888,3744,3736);c[712]=280;f=2868|0;c[f>>2]=-2147483648;c[f+4>>2]=2147483647;c[719]=0;xb(2960,2992,3e3,3744,3736);c[740]=280;f=2980|0;c[f>>2]=-1;c[f+4>>2]=2147483647;c[747]=20;xb(3112,3144,3152,3744,3736);c[778]=280;f=3132|0;c[f>>2]=-1;c[f+4>>2]=2147483647;c[785]=1e3;xb(3240,3296,3312,3744,3720);c[810]=2168;h[408]=0.0;h[409]=v;a[3280]=0;a[3281]=0;b[1641]=b[e+0>>1]|0;b[1642]=b[e+2>>1]|0;b[1643]=b[e+4>>1]|0;h[411]=.5;i=d;return}function Qc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;c[a>>2]=0;e=a+4|0;c[e>>2]=0;f=a+8|0;c[f>>2]=0;if((b|0)<=0){i=d;return}g=b+1&-2;g=(g|0)>2?g:2;c[f>>2]=g;f=Ud(0,g<<2)|0;c[a>>2]=f;if((f|0)==0?(c[(Oa()|0)>>2]|0)==12:0)Ta(va(1)|0,48,0);a=c[e>>2]|0;if((a|0)<(b|0))do{g=f+(a<<2)|0;if(g)c[g>>2]=0;a=a+1|0}while((a|0)!=(b|0));c[e>>2]=b;i=d;return}function Rc(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0;b=i;e=a+32|0;d=c[e>>2]|0;if(d){c[a+36>>2]=0;Td(d);c[e>>2]=0;c[a+40>>2]=0}e=a+16|0;d=c[e>>2]|0;if(d){c[a+20>>2]=0;Td(d);c[e>>2]=0;c[a+24>>2]=0}e=c[a>>2]|0;if(!e){i=b;return}d=a+4|0;g=c[d>>2]|0;if((g|0)>0){f=0;do{j=e+(f*12|0)|0;h=c[j>>2]|0;if(h){c[e+(f*12|0)+4>>2]=0;Td(h);c[j>>2]=0;c[e+(f*12|0)+8>>2]=0;e=c[a>>2]|0;g=c[d>>2]|0}f=f+1|0}while((f|0)<(g|0))}c[d>>2]=0;Td(e);c[a>>2]=0;c[a+8>>2]=0;i=b;return}function Sc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;b=c[b>>2]|0;g=b+1|0;f=a+4|0;if((c[f>>2]|0)>=(g|0)){k=c[a>>2]|0;k=k+(b<<2)|0;c[k>>2]=d;i=e;return}h=a+8|0;k=c[h>>2]|0;if((k|0)<(g|0)){l=b+2-k&-2;j=(k>>1)+2&-2;j=(l|0)>(j|0)?l:j;if((j|0)>(2147483647-k|0)){l=va(1)|0;Ta(l|0,48,0)}m=c[a>>2]|0;l=j+k|0;c[h>>2]=l;l=Ud(m,l<<2)|0;c[a>>2]=l;if((l|0)==0?(c[(Oa()|0)>>2]|0)==12:0){m=va(1)|0;Ta(m|0,48,0)}}k=c[f>>2]|0;if((k|0)<(g|0)){h=c[a>>2]|0;do{j=h+(k<<2)|0;if(j)c[j>>2]=0;k=k+1|0}while((k|0)!=(g|0))}c[f>>2]=g;m=c[a>>2]|0;m=m+(b<<2)|0;c[m>>2]=d;i=e;return}function Tc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;k=c[d>>2]|0;g=k+1|0;f=b+4|0;if((c[f>>2]|0)<(g|0)){j=b+8|0;h=c[j>>2]|0;if((h|0)<(g|0)){l=k+2-h&-2;k=(h>>1)+2&-2;k=(l|0)>(k|0)?l:k;if((k|0)>(2147483647-h|0)){l=va(1)|0;Ta(l|0,48,0)}m=c[b>>2]|0;l=k+h|0;c[j>>2]=l;l=Ud(m,l*12|0)|0;c[b>>2]=l;if((l|0)==0?(c[(Oa()|0)>>2]|0)==12:0){m=va(1)|0;Ta(m|0,48,0)}}j=c[f>>2]|0;if((j|0)<(g|0)){h=c[b>>2]|0;do{k=h+(j*12|0)|0;if(k){c[k>>2]=0;c[h+(j*12|0)+4>>2]=0;c[h+(j*12|0)+8>>2]=0}j=j+1|0}while((j|0)!=(g|0))}c[f>>2]=g;h=c[d>>2]|0}else h=k;f=c[b>>2]|0;if(c[f+(h*12|0)>>2]|0){c[f+(h*12|0)+4>>2]=0;h=c[d>>2]|0}d=b+16|0;f=h+1|0;g=b+20|0;if((c[g>>2]|0)>=(f|0)){i=e;return}j=b+24|0;b=c[j>>2]|0;if((b|0)<(f|0)){m=h+2-b&-2;h=(b>>1)+2&-2;h=(m|0)>(h|0)?m:h;if((h|0)>(2147483647-b|0)){m=va(1)|0;Ta(m|0,48,0)}l=c[d>>2]|0;m=h+b|0;c[j>>2]=m;m=Ud(l,m)|0;c[d>>2]=m;if((m|0)==0?(c[(Oa()|0)>>2]|0)==12:0){m=va(1)|0;Ta(m|0,48,0)}}b=c[g>>2]|0;if((b|0)<(f|0))do{a[(c[d>>2]|0)+b>>0]=0;b=b+1|0}while((b|0)!=(f|0));c[g>>2]=f;i=e;return}function Uc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;i=i+16|0;g=d;c[g>>2]=b;f=a+12|0;e=b+1|0;h=a+16|0;if((c[h>>2]|0)<(e|0)){k=a+20|0;j=c[k>>2]|0;if((j|0)<(e|0)){m=b+2-j&-2;l=(j>>1)+2&-2;l=(m|0)>(l|0)?m:l;if((l|0)>(2147483647-j|0)){m=va(1)|0;Ta(m|0,48,0)}n=c[f>>2]|0;m=l+j|0;c[k>>2]=m;m=Ud(n,m<<2)|0;c[f>>2]=m;if((m|0)==0?(c[(Oa()|0)>>2]|0)==12:0){n=va(1)|0;Ta(n|0,48,0)}}j=c[h>>2]|0;if((e|0)>(j|0))ke((c[f>>2]|0)+(j<<2)|0,-1,e-j<<2|0)|0;c[h>>2]=e}c[(c[f>>2]|0)+(b<<2)>>2]=c[a+4>>2];nc(a,g);e=c[f>>2]|0;j=c[e+(b<<2)>>2]|0;b=c[a>>2]|0;f=c[b+(j<<2)>>2]|0;if(!j){m=0;n=b+(m<<2)|0;c[n>>2]=f;n=e+(f<<2)|0;c[n>>2]=m;i=d;return}a=a+28|0;g=f<<1;h=g|1;while(1){m=j;j=j+ -1>>1;l=b+(j<<2)|0;k=c[l>>2]|0;r=c[c[a>>2]>>2]|0;o=c[r+(g<<2)>>2]|0;q=c[r+(h<<2)>>2]|0;o=we(q|0,((q|0)<0)<<31>>31|0,o|0,((o|0)<0)<<31>>31|0)|0;q=F;p=k<<1;n=c[r+(p<<2)>>2]|0;p=c[r+((p|1)<<2)>>2]|0;n=we(p|0,((p|0)<0)<<31>>31|0,n|0,((n|0)<0)<<31>>31|0)|0;p=F;if(!(q>>>0

>>0|(q|0)==(p|0)&o>>>0>>0)){a=14;break}c[b+(m<<2)>>2]=k;c[e+(c[l>>2]<<2)>>2]=m;if(!j){m=0;a=14;break}}if((a|0)==14){r=b+(m<<2)|0;c[r>>2]=f;r=e+(f<<2)|0;c[r>>2]=m;i=d;return}}function Vc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;e=i;h=b+824|0;l=(c[b+840>>2]|0)>(d|0);if(l?(c[(c[b+836>>2]|0)+(d<<2)>>2]|0)>-1:0)j=7;else j=3;do if((j|0)==3){if(a[(c[b+876>>2]|0)+d>>0]|0){i=e;return}if(a[(c[b+904>>2]|0)+d>>0]|0){i=e;return}o=a[(c[b+332>>2]|0)+d>>0]|0;n=a[2624]|0;p=n&255;if((p>>>1^1)&o<<24>>24==n<<24>>24|o&2&p)if(l){j=7;break}else break;else{i=e;return}}while(0);if((j|0)==7?(f=c[b+836>>2]|0,g=f+(d<<2)|0,k=c[g>>2]|0,(k|0)>-1):0){d=c[h>>2]|0;j=c[d+(k<<2)>>2]|0;a:do if(!k)o=0;else{l=b+852|0;m=j<<1;b=m|1;while(1){o=k;k=k+ -1>>1;p=d+(k<<2)|0;n=c[p>>2]|0;u=c[c[l>>2]>>2]|0;r=c[u+(m<<2)>>2]|0;t=c[u+(b<<2)>>2]|0;r=we(t|0,((t|0)<0)<<31>>31|0,r|0,((r|0)<0)<<31>>31|0)|0;t=F;s=n<<1;q=c[u+(s<<2)>>2]|0;s=c[u+((s|1)<<2)>>2]|0;q=we(s|0,((s|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;s=F;if(!(t>>>0>>0|(t|0)==(s|0)&r>>>0>>0))break a;c[d+(o<<2)>>2]=n;c[f+(c[p>>2]<<2)>>2]=o;if(!k){o=0;break}}}while(0);c[d+(o<<2)>>2]=j;c[f+(j<<2)>>2]=o;Wc(h,c[g>>2]|0);i=e;return}Uc(h,d);i=e;return}function Wc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;d=i;e=c[a>>2]|0;f=c[e+(b<<2)>>2]|0;m=b<<1|1;l=a+4|0;o=c[l>>2]|0;if((m|0)>=(o|0)){p=b;q=a+12|0;o=e+(p<<2)|0;c[o>>2]=f;q=c[q>>2]|0;q=q+(f<<2)|0;c[q>>2]=p;i=d;return}h=a+28|0;k=f<<1;j=k|1;a=a+12|0;while(1){n=(b<<1)+2|0;if((n|0)<(o|0)){p=c[e+(n<<2)>>2]|0;q=c[e+(m<<2)>>2]|0;u=p<<1;o=c[c[h>>2]>>2]|0;s=c[o+(u<<2)>>2]|0;u=c[o+((u|1)<<2)>>2]|0;s=we(u|0,((u|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;u=F;t=q<<1;r=c[o+(t<<2)>>2]|0;t=c[o+((t|1)<<2)>>2]|0;r=we(t|0,((t|0)<0)<<31>>31|0,r|0,((r|0)<0)<<31>>31|0)|0;t=F;if(!(u>>>0>>0|(u|0)==(t|0)&s>>>0>>0)){p=q;g=7}}else{p=c[e+(m<<2)>>2]|0;o=c[c[h>>2]>>2]|0;g=7}if((g|0)==7){g=0;n=m}r=p<<1;t=c[o+(r<<2)>>2]|0;r=c[o+((r|1)<<2)>>2]|0;t=we(r|0,((r|0)<0)<<31>>31|0,t|0,((t|0)<0)<<31>>31|0)|0;r=F;u=c[o+(k<<2)>>2]|0;s=c[o+(j<<2)>>2]|0;u=we(s|0,((s|0)<0)<<31>>31|0,u|0,((u|0)<0)<<31>>31|0)|0;s=F;if(!(r>>>0>>0|(r|0)==(s|0)&t>>>0>>0)){g=10;break}c[e+(b<<2)>>2]=p;c[(c[a>>2]|0)+(p<<2)>>2]=b;m=n<<1|1;o=c[l>>2]|0;if((m|0)>=(o|0)){b=n;g=10;break}else b=n}if((g|0)==10){u=e+(b<<2)|0;c[u>>2]=f;u=c[a>>2]|0;u=u+(f<<2)|0;c[u>>2]=b;i=d;return}}function Xc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0;d=i;h=c[a>>2]|0;if(h){e=a+4|0;f=c[e>>2]|0;a:do if((f|0)>0){g=0;while(1){j=h+(g*12|0)|0;k=c[j>>2]|0;if(k){c[h+(g*12|0)+4>>2]=0;Td(k);c[j>>2]=0;c[h+(g*12|0)+8>>2]=0;f=c[e>>2]|0}g=g+1|0;if((g|0)>=(f|0))break a;h=c[a>>2]|0}}while(0);c[e>>2]=0;if(b){Td(c[a>>2]|0);c[a>>2]=0;c[a+8>>2]=0}}e=a+16|0;f=c[e>>2]|0;if((f|0)!=0?(c[a+20>>2]=0,b):0){Td(f);c[e>>2]=0;c[a+24>>2]=0}f=a+32|0;e=c[f>>2]|0;if(!e){i=d;return}c[a+36>>2]=0;if(!b){i=d;return}Td(e);c[f>>2]=0;c[a+40>>2]=0;i=d;return}function Yc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;e=i;f=c[a>>2]|0;d=a+4|0;if(f){c[d>>2]=0;if(b){Td(f);c[a>>2]=0;c[a+8>>2]=0;f=0}}else f=0;if((c[d>>2]|0)>=1){h=a+16|0;c[h>>2]=0;h=a+12|0;c[h>>2]=0;i=e;return}h=a+8|0;g=c[h>>2]|0;if((g|0)<1){j=2-g&-2;b=(g>>1)+2&-2;b=(j|0)>(b|0)?j:b;if((b|0)>(2147483647-g|0)){j=va(1)|0;Ta(j|0,48,0)}j=b+g|0;c[h>>2]=j;f=Ud(f,j<<2)|0;c[a>>2]=f;if((f|0)==0?(c[(Oa()|0)>>2]|0)==12:0){j=va(1)|0;Ta(j|0,48,0)}}b=c[d>>2]|0;if((b|0)<1)while(1){g=f+(b<<2)|0;if(g)c[g>>2]=0;if(!b)break;else b=b+1|0}c[d>>2]=1;j=a+16|0;c[j>>2]=0;j=a+12|0;c[j>>2]=0;i=e;return}function Zc(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;e=i;i=i+16|0;d=e;f=a+16|0;j=c[f>>2]|0;c[f>>2]=j+1;c[(c[a>>2]|0)+(j<<2)>>2]=b;j=c[f>>2]|0;b=a+4|0;h=c[b>>2]|0;if((j|0)==(h|0)){c[f>>2]=0;j=0}g=a+12|0;if((c[g>>2]|0)!=(j|0)){i=e;return}Qc(d,(h*3|0)+1>>1);l=c[g>>2]|0;m=c[b>>2]|0;if((l|0)<(m|0)){j=c[a>>2]|0;k=c[d>>2]|0;m=0;while(1){h=m+1|0;c[k+(m<<2)>>2]=c[j+(l<<2)>>2];l=l+1|0;m=c[b>>2]|0;if((l|0)>=(m|0)){k=h;break}else m=h}}else k=0;h=c[a>>2]|0;if((c[f>>2]|0)>0){j=c[d>>2]|0;l=0;while(1){c[j+(k<<2)>>2]=c[h+(l<<2)>>2];l=l+1|0;if((l|0)>=(c[f>>2]|0))break;else k=k+1|0}m=c[b>>2]|0}c[g>>2]=0;c[f>>2]=m;if(!h)f=a+8|0;else{c[b>>2]=0;Td(h);c[a>>2]=0;f=a+8|0;c[f>>2]=0}c[a>>2]=c[d>>2];l=d+4|0;c[b>>2]=c[l>>2];m=d+8|0;c[f>>2]=c[m>>2];c[d>>2]=0;c[l>>2]=0;c[m>>2]=0;i=e;return}function _c(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;e=a+4|0;f=c[e>>2]|0;g=a+8|0;h=c[g>>2]|0;if((f|0)==(h|0)&(h|0)<(f+1|0)){h=(f>>1)+2&-2;h=(h|0)<2?2:h;if((h|0)>(2147483647-f|0)){h=va(1)|0;Ta(h|0,48,0)}j=c[a>>2]|0;f=h+f|0;c[g>>2]=f;f=Ud(j,f<<2)|0;c[a>>2]=f;if((f|0)==0?(c[(Oa()|0)>>2]|0)==12:0){j=va(1)|0;Ta(j|0,48,0)}}else f=c[a>>2]|0;j=c[e>>2]|0;c[e>>2]=j+1;e=f+(j<<2)|0;if(!e){i=d;return}c[e>>2]=c[b>>2];i=d;return}function $c(){var a=0,b=0;b=i;Ka(3864)|0;a=od(936)|0;xc(a);i=b;return a|0}function ad(a){a=a|0;var b=0;b=i;if(!a){i=b;return}gb[c[(c[a>>2]|0)+4>>2]&31](a);i=b;return}function bd(){var b=0,d=0,e=0;b=i;i=i+16|0;d=b;e=od(936)|0;xc(e);c[964]=e;Cc(e,1)|0;e=c[964]|0;a[d+0>>0]=a[3840]|0;Ac(e,d,1)|0;i=b;return}function cd(b){b=b|0;var d=0,e=0,f=0;d=i;i=i+16|0;e=d;if((c[962]|0)>=(b|0)){i=d;return}do{f=c[964]|0;a[e+0>>0]=a[3840]|0;Ac(f,e,1)|0;f=(c[962]|0)+1|0;c[962]=f}while((f|0)<(b|0));i=d;return}function dd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;g=i;i=i+32|0;h=g+16|0;e=g+4|0;j=g;c[e>>2]=0;f=e+4|0;c[f>>2]=0;d=e+8|0;c[d>>2]=0;k=c[b>>2]|0;if(k)do{l=(k|0)<0?0-k|0:k;if((c[962]|0)<(l|0))do{m=c[964]|0;a[h+0>>0]=a[3840]|0;Ac(m,h,1)|0;m=(c[962]|0)+1|0;c[962]=m}while((m|0)<(l|0));c[j>>2]=l<<1|k>>>31;mc(e,j);b=b+4|0;k=c[b>>2]|0}while((k|0)!=0);j=c[964]|0;h=j+628|0;ld(e,h);h=Dc(j,h)|0;j=c[e>>2]|0;if(!j){i=g;return h|0}c[f>>2]=0;Td(j);c[e>>2]=0;c[d>>2]=0;i=g;return h|0}function ed(){var b=0,d=0,e=0,f=0;d=i;i=i+16|0;b=d;e=c[964]|0;f=e+664|0;c[f+0>>2]=-1;c[f+4>>2]=-1;c[f+8>>2]=-1;c[f+12>>2]=-1;if(c[e+304>>2]|0)c[e+308>>2]=0;Bc(b,e,1,0);i=d;return(a[b>>0]|0)==0|0}function fd(){return(c[(c[964]|0)+4>>2]|0)+1|0}function gd(){return c[962]|0}function hd(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0;d=i;i=i+32|0;h=d+16|0;f=d+4|0;j=d;c[f>>2]=0;e=f+4|0;c[e>>2]=0;g=f+8|0;c[g>>2]=0;c[j>>2]=b<<1;mc(f,j);b=c[964]|0;j=b+664|0;c[j+0>>2]=-1;c[j+4>>2]=-1;c[j+8>>2]=-1;c[j+12>>2]=-1;ld(f,b+304|0);Bc(h,b,1,0);b=(a[h>>0]|0)==0;h=c[f>>2]|0;if(!h){i=d;return b|0}c[e>>2]=0;Td(h);c[f>>2]=0;c[g>>2]=0;i=d;return b|0}function id(a){a=a|0;var b=0,d=0,e=0;b=i;i=i+16|0;e=b;d=c[964]|0;c[e>>2]=a<<1|1;a=d+628|0;if(c[a>>2]|0)c[d+632>>2]=0;mc(a,e);Dc(d,a)|0;i=b;return}function jd(){return c[(c[964]|0)+36>>2]|0}function kd(){return c[(c[964]|0)+32>>2]|0}function ld(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0;d=i;h=c[b>>2]|0;e=b+4|0;if(!h)j=c[e>>2]|0;else{c[e>>2]=0;j=0}e=a+4|0;f=c[e>>2]|0;g=b+4|0;if((j|0)<(f|0)){k=b+8|0;j=c[k>>2]|0;if((j|0)<(f|0)){m=f+1-j&-2;l=(j>>1)+2&-2;l=(m|0)>(l|0)?m:l;if((l|0)>(2147483647-j|0)){m=va(1)|0;Ta(m|0,48,0)}m=l+j|0;c[k>>2]=m;h=Ud(h,m<<2)|0;c[b>>2]=h;if((h|0)==0?(c[(Oa()|0)>>2]|0)==12:0){m=va(1)|0;Ta(m|0,48,0)}}j=c[g>>2]|0;a:do if((j|0)<(f|0))while(1){h=h+(j<<2)|0;if(h)c[h>>2]=0;j=j+1|0;if((j|0)==(f|0))break a;h=c[b>>2]|0}while(0);c[g>>2]=f;f=c[e>>2]|0}if((f|0)<=0){i=d;return}b=c[b>>2]|0;a=c[a>>2]|0;f=0;do{c[b+(f<<2)>>2]=c[a+(f<<2)>>2];f=f+1|0}while((f|0)<(c[e>>2]|0));i=d;return}function md(a,b){a=a|0;b=b|0;var d=0;d=i;i=i+16|0;c[d>>2]=b;b=c[p>>2]|0;ua(b|0,a|0,d|0)|0;Sa(10,b|0)|0;Wa()}function nd(){var a=0,b=0;a=i;i=i+16|0;if(!(Ja(4064,3)|0)){b=Ha(c[1014]|0)|0;i=a;return b|0}else md(4072,a);return 0}function od(a){a=a|0;var b=0,d=0;b=i;a=(a|0)==0?1:a;d=Sd(a)|0;if(d){i=b;return d|0}while(1){d=vd()|0;if(!d){a=4;break}jb[d&3]();d=Sd(a)|0;if(d){a=5;break}}if((a|0)==4){d=va(4)|0;c[d>>2]=4248;Ta(d|0,4296,12)}else if((a|0)==5){i=b;return d|0}return 0}function pd(a){a=a|0;var b=0;b=i;Td(a);i=b;return}function qd(a){a=a|0;var b=0;b=i;pd(a);i=b;return}function rd(a){a=a|0;return}function sd(a){a=a|0;return 4264}function td(a){a=a|0;var b=0;b=i;i=i+16|0;jb[a&3]();md(4312,b)}function ud(){var a=0,b=0;b=nd()|0;if(((b|0)!=0?(a=c[b>>2]|0,(a|0)!=0):0)?(b=a+48|0,(c[b>>2]&-256|0)==1126902528?(c[b+4>>2]|0)==1129074247:0):0)td(c[a+12>>2]|0);b=c[968]|0;c[968]=b+0;td(b)}function vd(){var a=0;a=c[1102]|0;c[1102]=a+0;return a|0}function wd(a){a=a|0;return}function xd(a){a=a|0;return}function yd(a){a=a|0;return}function zd(a){a=a|0;return}function Ad(a){a=a|0;return}function Bd(a){a=a|0;var b=0;b=i;pd(a);i=b;return}function Cd(a){a=a|0;var b=0;b=i;pd(a);i=b;return}function Dd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=i;i=i+64|0;f=e;if((a|0)==(b|0)){h=1;i=e;return h|0}if(!b){h=0;i=e;return h|0}b=Hd(b,4504,4560,0)|0;if(!b){h=0;i=e;return h|0}h=f+0|0;g=h+56|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(g|0));c[f>>2]=b;c[f+8>>2]=a;c[f+12>>2]=-1;c[f+48>>2]=1;mb[c[(c[b>>2]|0)+28>>2]&3](b,f,c[d>>2]|0,1);if((c[f+24>>2]|0)!=1){h=0;i=e;return h|0}c[d>>2]=c[f+16>>2];h=1;i=e;return h|0}function Ed(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;b=i;g=d+16|0;h=c[g>>2]|0;if(!h){c[g>>2]=e;c[d+24>>2]=f;c[d+36>>2]=1;i=b;return}if((h|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;c[d+24>>2]=2;a[d+54>>0]=1;i=b;return}e=d+24|0;if((c[e>>2]|0)!=2){i=b;return}c[e>>2]=f;i=b;return}function Fd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=i;if((c[b+8>>2]|0)!=(a|0)){i=f;return}Ed(0,b,d,e);i=f;return}function Gd(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=i;if((a|0)==(c[b+8>>2]|0)){Ed(0,b,d,e);i=f;return}else{a=c[a+8>>2]|0;mb[c[(c[a>>2]|0)+28>>2]&3](a,b,d,e);i=f;return}}function Hd(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;h=i;i=i+64|0;j=h;k=c[d>>2]|0;l=d+(c[k+ -8>>2]|0)|0;k=c[k+ -4>>2]|0;c[j>>2]=f;c[j+4>>2]=d;c[j+8>>2]=e;c[j+12>>2]=g;n=j+16|0;o=j+20|0;e=j+24|0;m=j+28|0;g=j+32|0;d=j+40|0;p=(k|0)==(f|0);q=n+0|0;f=q+36|0;do{c[q>>2]=0;q=q+4|0}while((q|0)<(f|0));b[n+36>>1]=0;a[n+38>>0]=0;if(p){c[j+48>>2]=1;kb[c[(c[k>>2]|0)+20>>2]&3](k,j,l,l,1,0);q=(c[e>>2]|0)==1?l:0;i=h;return q|0}fb[c[(c[k>>2]|0)+24>>2]&3](k,j,l,1,0);j=c[j+36>>2]|0;if(!j){q=(c[d>>2]|0)==1&(c[m>>2]|0)==1&(c[g>>2]|0)==1?c[o>>2]|0:0;i=h;return q|0}else if((j|0)==1){if((c[e>>2]|0)!=1?!((c[d>>2]|0)==0&(c[m>>2]|0)==1&(c[g>>2]|0)==1):0){q=0;i=h;return q|0}q=c[n>>2]|0;i=h;return q|0}else{q=0;i=h;return q|0}return 0}function Id(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;b=i;a[d+53>>0]=1;if((c[d+4>>2]|0)!=(f|0)){i=b;return}a[d+52>>0]=1;f=d+16|0;h=c[f>>2]|0;if(!h){c[f>>2]=e;c[d+24>>2]=g;c[d+36>>2]=1;if(!((g|0)==1?(c[d+48>>2]|0)==1:0)){i=b;return}a[d+54>>0]=1;i=b;return}if((h|0)!=(e|0)){h=d+36|0;c[h>>2]=(c[h>>2]|0)+1;a[d+54>>0]=1;i=b;return}e=d+24|0;f=c[e>>2]|0;if((f|0)==2)c[e>>2]=g;else g=f;if(!((g|0)==1?(c[d+48>>2]|0)==1:0)){i=b;return}a[d+54>>0]=1;i=b;return}function Jd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,j=0,k=0,l=0,m=0;h=i;if((b|0)==(c[d+8>>2]|0)){if((c[d+4>>2]|0)!=(e|0)){i=h;return}j=d+28|0;if((c[j>>2]|0)==1){i=h;return}c[j>>2]=f;i=h;return}if((b|0)!=(c[d>>2]|0)){l=c[b+8>>2]|0;fb[c[(c[l>>2]|0)+24>>2]&3](l,d,e,f,g);i=h;return}if((c[d+16>>2]|0)!=(e|0)?(k=d+20|0,(c[k>>2]|0)!=(e|0)):0){c[d+32>>2]=f;f=d+44|0;if((c[f>>2]|0)==4){i=h;return}l=d+52|0;a[l>>0]=0;m=d+53|0;a[m>>0]=0;b=c[b+8>>2]|0;kb[c[(c[b>>2]|0)+20>>2]&3](b,d,e,e,1,g);if(a[m>>0]|0){if(!(a[l>>0]|0)){b=1;j=13}}else{b=0;j=13}do if((j|0)==13){c[k>>2]=e;m=d+40|0;c[m>>2]=(c[m>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(b)break}else j=16;if((j|0)==16?b:0)break;c[f>>2]=4;i=h;return}while(0);c[f>>2]=3;i=h;return}if((f|0)!=1){i=h;return}c[d+32>>2]=1;i=h;return}function Kd(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;g=i;if((c[d+8>>2]|0)==(b|0)){if((c[d+4>>2]|0)!=(e|0)){i=g;return}d=d+28|0;if((c[d>>2]|0)==1){i=g;return}c[d>>2]=f;i=g;return}if((c[d>>2]|0)!=(b|0)){i=g;return}if((c[d+16>>2]|0)!=(e|0)?(h=d+20|0,(c[h>>2]|0)!=(e|0)):0){c[d+32>>2]=f;c[h>>2]=e;b=d+40|0;c[b>>2]=(c[b>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;i=g;return}if((f|0)!=1){i=g;return}c[d+32>>2]=1;i=g;return}function Ld(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=i;if((a|0)==(c[b+8>>2]|0)){Id(0,b,d,e,f);i=h;return}else{a=c[a+8>>2]|0;kb[c[(c[a>>2]|0)+20>>2]&3](a,b,d,e,f,g);i=h;return}}function Md(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;g=i;if((c[b+8>>2]|0)!=(a|0)){i=g;return}Id(0,b,d,e,f);i=g;return}function Nd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=i;i=i+16|0;f=e;c[f>>2]=c[d>>2];a=eb[c[(c[a>>2]|0)+16>>2]&1](a,b,f)|0;b=a&1;if(!a){i=e;return b|0}c[d>>2]=c[f>>2];i=e;return b|0}function Od(a){a=a|0;var b=0;b=i;if(!a)a=0;else a=(Hd(a,4504,4672,0)|0)!=0;i=b;return a&1|0}function Pd(){var a=0,b=0,d=0,e=0,f=0;a=i;i=i+16|0;b=a;a=a+12|0;d=nd()|0;if(!d)md(4040,b);d=c[d>>2]|0;if(!d)md(4040,b);f=d+48|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if(!((e&-256|0)==1126902528&(f|0)==1129074247)){c[b>>2]=c[970];md(4e3,b)}if((e|0)==1126902529&(f|0)==1129074247)e=c[d+44>>2]|0;else e=d+80|0;c[a>>2]=e;f=c[d>>2]|0;d=c[f+4>>2]|0;if(eb[c[(c[4432>>2]|0)+16>>2]&1](4432,f,a)|0){f=c[a>>2]|0;e=c[970]|0;f=ib[c[(c[f>>2]|0)+8>>2]&1](f)|0;c[b>>2]=e;c[b+4>>2]=d;c[b+8>>2]=f;md(3904,b)}else{c[b>>2]=c[970];c[b+4>>2]=d;md(3952,b)}}function Qd(){var a=0;a=i;i=i+16|0;if(!(Ma(4056,20)|0)){i=a;return}else md(4128,a)}function Rd(a){a=a|0;var b=0;b=i;i=i+16|0;Td(a);if(!(Pa(c[1014]|0,0)|0)){i=b;return}else md(4184,b)}function Sd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;b=i;do if(a>>>0<245){if(a>>>0<11)a=16;else a=a+11&-8;x=a>>>3;p=c[1206]|0;w=p>>>x;if(w&3){g=(w&1^1)+x|0;f=g<<1;d=4864+(f<<2)|0;f=4864+(f+2<<2)|0;h=c[f>>2]|0;j=h+8|0;e=c[j>>2]|0;do if((d|0)!=(e|0)){if(e>>>0<(c[1210]|0)>>>0)Wa();k=e+12|0;if((c[k>>2]|0)==(h|0)){c[k>>2]=d;c[f>>2]=e;break}else Wa()}else c[1206]=p&~(1<>2]=H|3;H=h+(H|4)|0;c[H>>2]=c[H>>2]|1;H=j;i=b;return H|0}v=c[1208]|0;if(a>>>0>v>>>0){if(w){h=2<>>12&16;h=h>>>d;j=h>>>5&8;h=h>>>j;f=h>>>2&4;h=h>>>f;g=h>>>1&2;h=h>>>g;e=h>>>1&1;e=(j|d|f|g|e)+(h>>>e)|0;h=e<<1;g=4864+(h<<2)|0;h=4864+(h+2<<2)|0;f=c[h>>2]|0;d=f+8|0;j=c[d>>2]|0;do if((g|0)!=(j|0)){if(j>>>0<(c[1210]|0)>>>0)Wa();k=j+12|0;if((c[k>>2]|0)==(f|0)){c[k>>2]=g;c[h>>2]=j;E=c[1208]|0;break}else Wa()}else{c[1206]=p&~(1<>2]=a|3;g=f+a|0;c[f+(a|4)>>2]=e|1;c[f+H>>2]=e;if(E){f=c[1211]|0;l=E>>>3;j=l<<1;h=4864+(j<<2)|0;k=c[1206]|0;l=1<>2]|0;if(k>>>0<(c[1210]|0)>>>0)Wa();else{D=j;C=k}}else{c[1206]=k|l;D=4864+(j+2<<2)|0;C=h}c[D>>2]=f;c[C+12>>2]=f;c[f+8>>2]=C;c[f+12>>2]=h}c[1208]=e;c[1211]=g;H=d;i=b;return H|0}p=c[1207]|0;if(p){d=(p&0-p)+ -1|0;G=d>>>12&16;d=d>>>G;F=d>>>5&8;d=d>>>F;H=d>>>2&4;d=d>>>H;f=d>>>1&2;d=d>>>f;e=d>>>1&1;e=c[5128+((F|G|H|f|e)+(d>>>e)<<2)>>2]|0;d=(c[e+4>>2]&-8)-a|0;f=e;while(1){g=c[f+16>>2]|0;if(!g){g=c[f+20>>2]|0;if(!g)break}f=(c[g+4>>2]&-8)-a|0;H=f>>>0>>0;d=H?f:d;f=g;e=H?g:e}h=c[1210]|0;if(e>>>0>>0)Wa();f=e+a|0;if(e>>>0>=f>>>0)Wa();g=c[e+24>>2]|0;k=c[e+12>>2]|0;do if((k|0)==(e|0)){k=e+20|0;j=c[k>>2]|0;if(!j){k=e+16|0;j=c[k>>2]|0;if(!j){B=0;break}}while(1){l=j+20|0;m=c[l>>2]|0;if(m){j=m;k=l;continue}l=j+16|0;m=c[l>>2]|0;if(!m)break;else{j=m;k=l}}if(k>>>0>>0)Wa();else{c[k>>2]=0;B=j;break}}else{j=c[e+8>>2]|0;if(j>>>0>>0)Wa();h=j+12|0;if((c[h>>2]|0)!=(e|0))Wa();l=k+8|0;if((c[l>>2]|0)==(e|0)){c[h>>2]=k;c[l>>2]=j;B=k;break}else Wa()}while(0);do if(g){j=c[e+28>>2]|0;h=5128+(j<<2)|0;if((e|0)==(c[h>>2]|0)){c[h>>2]=B;if(!B){c[1207]=c[1207]&~(1<>>0<(c[1210]|0)>>>0)Wa();h=g+16|0;if((c[h>>2]|0)==(e|0))c[h>>2]=B;else c[g+20>>2]=B;if(!B)break}h=c[1210]|0;if(B>>>0>>0)Wa();c[B+24>>2]=g;g=c[e+16>>2]|0;do if(g)if(g>>>0>>0)Wa();else{c[B+16>>2]=g;c[g+24>>2]=B;break}while(0);g=c[e+20>>2]|0;if(g)if(g>>>0<(c[1210]|0)>>>0)Wa();else{c[B+20>>2]=g;c[g+24>>2]=B;break}}while(0);if(d>>>0<16){H=d+a|0;c[e+4>>2]=H|3;H=e+(H+4)|0;c[H>>2]=c[H>>2]|1}else{c[e+4>>2]=a|3;c[e+(a|4)>>2]=d|1;c[e+(d+a)>>2]=d;h=c[1208]|0;if(h){g=c[1211]|0;k=h>>>3;l=k<<1;h=4864+(l<<2)|0;j=c[1206]|0;k=1<>2]|0;if(k>>>0<(c[1210]|0)>>>0)Wa();else{A=j;z=k}}else{c[1206]=j|k;A=4864+(l+2<<2)|0;z=h}c[A>>2]=g;c[z+12>>2]=g;c[g+8>>2]=z;c[g+12>>2]=h}c[1208]=d;c[1211]=f}H=e+8|0;i=b;return H|0}}}else if(a>>>0<=4294967231){z=a+11|0;a=z&-8;B=c[1207]|0;if(B){A=0-a|0;z=z>>>8;if(z)if(a>>>0>16777215)C=31;else{G=(z+1048320|0)>>>16&8;H=z<>>16&4;H=H<>>16&2;C=14-(F|G|C)+(H<>>15)|0;C=a>>>(C+7|0)&1|C<<1}else C=0;D=c[5128+(C<<2)>>2]|0;a:do if(!D){F=0;z=0}else{if((C|0)==31)z=0;else z=25-(C>>>1)|0;F=0;E=a<>2]&-8;H=G-a|0;if(H>>>0>>0)if((G|0)==(a|0)){A=H;F=D;z=D;break a}else{A=H;z=D}H=c[D+20>>2]|0;D=c[D+(E>>>31<<2)+16>>2]|0;F=(H|0)==0|(H|0)==(D|0)?F:H;if(!D)break;else E=E<<1}}while(0);if((F|0)==0&(z|0)==0){H=2<>>12&16;H=H>>>D;C=H>>>5&8;H=H>>>C;E=H>>>2&4;H=H>>>E;G=H>>>1&2;H=H>>>G;F=H>>>1&1;F=c[5128+((C|D|E|G|F)+(H>>>F)<<2)>>2]|0}if(F)while(1){H=(c[F+4>>2]&-8)-a|0;B=H>>>0>>0;A=B?H:A;z=B?F:z;B=c[F+16>>2]|0;if(B){F=B;continue}F=c[F+20>>2]|0;if(!F)break}if((z|0)!=0?A>>>0<((c[1208]|0)-a|0)>>>0:0){f=c[1210]|0;if(z>>>0>>0)Wa();d=z+a|0;if(z>>>0>=d>>>0)Wa();e=c[z+24>>2]|0;g=c[z+12>>2]|0;do if((g|0)==(z|0)){h=z+20|0;g=c[h>>2]|0;if(!g){h=z+16|0;g=c[h>>2]|0;if(!g){x=0;break}}while(1){j=g+20|0;k=c[j>>2]|0;if(k){g=k;h=j;continue}j=g+16|0;k=c[j>>2]|0;if(!k)break;else{g=k;h=j}}if(h>>>0>>0)Wa();else{c[h>>2]=0;x=g;break}}else{h=c[z+8>>2]|0;if(h>>>0>>0)Wa();j=h+12|0;if((c[j>>2]|0)!=(z|0))Wa();f=g+8|0;if((c[f>>2]|0)==(z|0)){c[j>>2]=g;c[f>>2]=h;x=g;break}else Wa()}while(0);do if(e){f=c[z+28>>2]|0;g=5128+(f<<2)|0;if((z|0)==(c[g>>2]|0)){c[g>>2]=x;if(!x){c[1207]=c[1207]&~(1<>>0<(c[1210]|0)>>>0)Wa();f=e+16|0;if((c[f>>2]|0)==(z|0))c[f>>2]=x;else c[e+20>>2]=x;if(!x)break}f=c[1210]|0;if(x>>>0>>0)Wa();c[x+24>>2]=e;e=c[z+16>>2]|0;do if(e)if(e>>>0>>0)Wa();else{c[x+16>>2]=e;c[e+24>>2]=x;break}while(0);e=c[z+20>>2]|0;if(e)if(e>>>0<(c[1210]|0)>>>0)Wa();else{c[x+20>>2]=e;c[e+24>>2]=x;break}}while(0);b:do if(A>>>0>=16){c[z+4>>2]=a|3;c[z+(a|4)>>2]=A|1;c[z+(A+a)>>2]=A;f=A>>>3;if(A>>>0<256){h=f<<1;e=4864+(h<<2)|0;g=c[1206]|0;f=1<>2]|0;if(g>>>0>=(c[1210]|0)>>>0){w=f;v=g;break}Wa()}while(0);c[w>>2]=d;c[v+12>>2]=d;c[z+(a+8)>>2]=v;c[z+(a+12)>>2]=e;break}e=A>>>8;if(e)if(A>>>0>16777215)e=31;else{G=(e+1048320|0)>>>16&8;H=e<>>16&4;H=H<>>16&2;e=14-(F|G|e)+(H<>>15)|0;e=A>>>(e+7|0)&1|e<<1}else e=0;f=5128+(e<<2)|0;c[z+(a+28)>>2]=e;c[z+(a+20)>>2]=0;c[z+(a+16)>>2]=0;g=c[1207]|0;h=1<>2]=d;c[z+(a+24)>>2]=f;c[z+(a+12)>>2]=d;c[z+(a+8)>>2]=d;break}h=c[f>>2]|0;if((e|0)==31)e=0;else e=25-(e>>>1)|0;c:do if((c[h+4>>2]&-8|0)!=(A|0)){e=A<>>31<<2)+16|0;f=c[g>>2]|0;if(!f)break;if((c[f+4>>2]&-8|0)==(A|0)){p=f;break c}else{e=e<<1;h=f}}if(g>>>0<(c[1210]|0)>>>0)Wa();else{c[g>>2]=d;c[z+(a+24)>>2]=h;c[z+(a+12)>>2]=d;c[z+(a+8)>>2]=d;break b}}else p=h;while(0);f=p+8|0;e=c[f>>2]|0;H=c[1210]|0;if(p>>>0>=H>>>0&e>>>0>=H>>>0){c[e+12>>2]=d;c[f>>2]=d;c[z+(a+8)>>2]=e;c[z+(a+12)>>2]=p;c[z+(a+24)>>2]=0;break}else Wa()}else{H=A+a|0;c[z+4>>2]=H|3;H=z+(H+4)|0;c[H>>2]=c[H>>2]|1}while(0);H=z+8|0;i=b;return H|0}}}else a=-1;while(0);p=c[1208]|0;if(p>>>0>=a>>>0){e=p-a|0;d=c[1211]|0;if(e>>>0>15){c[1211]=d+a;c[1208]=e;c[d+(a+4)>>2]=e|1;c[d+p>>2]=e;c[d+4>>2]=a|3}else{c[1208]=0;c[1211]=0;c[d+4>>2]=p|3;H=d+(p+4)|0;c[H>>2]=c[H>>2]|1}H=d+8|0;i=b;return H|0}p=c[1209]|0;if(p>>>0>a>>>0){G=p-a|0;c[1209]=G;H=c[1212]|0;c[1212]=H+a;c[H+(a+4)>>2]=G|1;c[H+4>>2]=a|3;H=H+8|0;i=b;return H|0}do if(!(c[1324]|0)){p=Ga(30)|0;if(!(p+ -1&p)){c[1326]=p;c[1325]=p;c[1327]=-1;c[1328]=-1;c[1329]=0;c[1317]=0;c[1324]=(Ya(0)|0)&-16^1431655768;break}else Wa()}while(0);x=a+48|0;p=c[1326]|0;w=a+47|0;A=p+w|0;p=0-p|0;v=A&p;if(v>>>0<=a>>>0){H=0;i=b;return H|0}z=c[1316]|0;if((z|0)!=0?(G=c[1314]|0,H=G+v|0,H>>>0<=G>>>0|H>>>0>z>>>0):0){H=0;i=b;return H|0}d:do if(!(c[1317]&4)){B=c[1212]|0;e:do if(B){z=5272|0;while(1){C=c[z>>2]|0;if(C>>>0<=B>>>0?(y=z+4|0,(C+(c[y>>2]|0)|0)>>>0>B>>>0):0)break;z=c[z+8>>2]|0;if(!z){o=181;break e}}if(z){A=A-(c[1209]|0)&p;if(A>>>0<2147483647){p=Aa(A|0)|0;if((p|0)==((c[z>>2]|0)+(c[y>>2]|0)|0)){z=A;o=190}else{z=A;o=191}}else z=0}else o=181}else o=181;while(0);do if((o|0)==181){y=Aa(0)|0;if((y|0)!=(-1|0)){A=y;z=c[1325]|0;p=z+ -1|0;if(!(p&A))z=v;else z=v-A+(p+A&0-z)|0;p=c[1314]|0;A=p+z|0;if(z>>>0>a>>>0&z>>>0<2147483647){H=c[1316]|0;if((H|0)!=0?A>>>0<=p>>>0|A>>>0>H>>>0:0){z=0;break}p=Aa(z|0)|0;if((p|0)==(y|0)){p=y;o=190}else o=191}else z=0}else z=0}while(0);f:do if((o|0)==190){if((p|0)!=(-1|0)){q=z;o=201;break d}}else if((o|0)==191){o=0-z|0;do if((p|0)!=(-1|0)&z>>>0<2147483647&x>>>0>z>>>0?(u=c[1326]|0,u=w-z+u&0-u,u>>>0<2147483647):0)if((Aa(u|0)|0)==(-1|0)){Aa(o|0)|0;z=0;break f}else{z=u+z|0;break}while(0);if((p|0)==(-1|0))z=0;else{q=z;o=201;break d}}while(0);c[1317]=c[1317]|4;o=198}else{z=0;o=198}while(0);if((((o|0)==198?v>>>0<2147483647:0)?(t=Aa(v|0)|0,s=Aa(0)|0,(t|0)!=(-1|0)&(s|0)!=(-1|0)&t>>>0>>0):0)?(r=s-t|0,q=r>>>0>(a+40|0)>>>0,q):0){p=t;q=q?r:z;o=201}if((o|0)==201){r=(c[1314]|0)+q|0;c[1314]=r;if(r>>>0>(c[1315]|0)>>>0)c[1315]=r;r=c[1212]|0;g:do if(r){t=5272|0;while(1){s=c[t>>2]|0;v=t+4|0;w=c[v>>2]|0;if((p|0)==(s+w|0)){o=213;break}u=c[t+8>>2]|0;if(!u)break;else t=u}if(((o|0)==213?(c[t+12>>2]&8|0)==0:0)?r>>>0>=s>>>0&r>>>0

>>0:0){c[v>>2]=w+q;d=(c[1209]|0)+q|0;e=r+8|0;if(!(e&7))e=0;else e=0-e&7;H=d-e|0;c[1212]=r+e;c[1209]=H;c[r+(e+4)>>2]=H|1;c[r+(d+4)>>2]=40;c[1213]=c[1328];break}s=c[1210]|0;if(p>>>0>>0){c[1210]=p;s=p}v=p+q|0;t=5272|0;while(1){if((c[t>>2]|0)==(v|0)){o=223;break}u=c[t+8>>2]|0;if(!u)break;else t=u}if((o|0)==223?(c[t+12>>2]&8|0)==0:0){c[t>>2]=p;h=t+4|0;c[h>>2]=(c[h>>2]|0)+q;h=p+8|0;if(!(h&7))h=0;else h=0-h&7;j=p+(q+8)|0;if(!(j&7))n=0;else n=0-j&7;o=p+(n+q)|0;k=h+a|0;j=p+k|0;m=o-(p+h)-a|0;c[p+(h+4)>>2]=a|3;h:do if((o|0)!=(r|0)){if((o|0)==(c[1211]|0)){H=(c[1208]|0)+m|0;c[1208]=H;c[1211]=j;c[p+(k+4)>>2]=H|1;c[p+(H+k)>>2]=H;break}r=q+4|0;u=c[p+(r+n)>>2]|0;if((u&3|0)==1){a=u&-8;t=u>>>3;i:do if(u>>>0>=256){l=c[p+((n|24)+q)>>2]|0;t=c[p+(q+12+n)>>2]|0;do if((t|0)==(o|0)){v=n|16;u=p+(r+v)|0;t=c[u>>2]|0;if(!t){u=p+(v+q)|0;t=c[u>>2]|0;if(!t){g=0;break}}while(1){w=t+20|0;v=c[w>>2]|0;if(v){t=v;u=w;continue}w=t+16|0;v=c[w>>2]|0;if(!v)break;else{t=v;u=w}}if(u>>>0>>0)Wa();else{c[u>>2]=0;g=t;break}}else{u=c[p+((n|8)+q)>>2]|0;if(u>>>0>>0)Wa();v=u+12|0;if((c[v>>2]|0)!=(o|0))Wa();s=t+8|0;if((c[s>>2]|0)==(o|0)){c[v>>2]=t;c[s>>2]=u;g=t;break}else Wa()}while(0);if(!l)break;s=c[p+(q+28+n)>>2]|0;t=5128+(s<<2)|0;do if((o|0)!=(c[t>>2]|0)){if(l>>>0<(c[1210]|0)>>>0)Wa();s=l+16|0;if((c[s>>2]|0)==(o|0))c[s>>2]=g;else c[l+20>>2]=g;if(!g)break i}else{c[t>>2]=g;if(g)break;c[1207]=c[1207]&~(1<>>0>>0)Wa();c[g+24>>2]=l;s=n|16;l=c[p+(s+q)>>2]|0;do if(l)if(l>>>0>>0)Wa();else{c[g+16>>2]=l;c[l+24>>2]=g;break}while(0);l=c[p+(r+s)>>2]|0;if(!l)break;if(l>>>0<(c[1210]|0)>>>0)Wa();else{c[g+20>>2]=l;c[l+24>>2]=g;break}}else{g=c[p+((n|8)+q)>>2]|0;r=c[p+(q+12+n)>>2]|0;u=4864+(t<<1<<2)|0;do if((g|0)!=(u|0)){if(g>>>0>>0)Wa();if((c[g+12>>2]|0)==(o|0))break;Wa()}while(0);if((r|0)==(g|0)){c[1206]=c[1206]&~(1<>>0>>0)Wa();s=r+8|0;if((c[s>>2]|0)==(o|0)){l=s;break}Wa()}while(0);c[g+12>>2]=r;c[l>>2]=g}while(0);o=p+((a|n)+q)|0;m=a+m|0}g=o+4|0;c[g>>2]=c[g>>2]&-2;c[p+(k+4)>>2]=m|1;c[p+(m+k)>>2]=m;g=m>>>3;if(m>>>0<256){l=g<<1;d=4864+(l<<2)|0;m=c[1206]|0;g=1<>2]|0;if(g>>>0>=(c[1210]|0)>>>0){f=l;e=g;break}Wa()}while(0);c[f>>2]=j;c[e+12>>2]=j;c[p+(k+8)>>2]=e;c[p+(k+12)>>2]=d;break}e=m>>>8;do if(!e)e=0;else{if(m>>>0>16777215){e=31;break}G=(e+1048320|0)>>>16&8;H=e<>>16&4;H=H<>>16&2;e=14-(F|G|e)+(H<>>15)|0;e=m>>>(e+7|0)&1|e<<1}while(0);l=5128+(e<<2)|0;c[p+(k+28)>>2]=e;c[p+(k+20)>>2]=0;c[p+(k+16)>>2]=0;g=c[1207]|0;f=1<>2]=j;c[p+(k+24)>>2]=l;c[p+(k+12)>>2]=j;c[p+(k+8)>>2]=j;break}f=c[l>>2]|0;if((e|0)==31)e=0;else e=25-(e>>>1)|0;j:do if((c[f+4>>2]&-8|0)!=(m|0)){e=m<>>31<<2)+16|0;l=c[g>>2]|0;if(!l)break;if((c[l+4>>2]&-8|0)==(m|0)){d=l;break j}else{e=e<<1;f=l}}if(g>>>0<(c[1210]|0)>>>0)Wa();else{c[g>>2]=j;c[p+(k+24)>>2]=f;c[p+(k+12)>>2]=j;c[p+(k+8)>>2]=j;break h}}else d=f;while(0);e=d+8|0;f=c[e>>2]|0;H=c[1210]|0;if(d>>>0>=H>>>0&f>>>0>=H>>>0){c[f+12>>2]=j;c[e>>2]=j;c[p+(k+8)>>2]=f;c[p+(k+12)>>2]=d;c[p+(k+24)>>2]=0;break}else Wa()}else{H=(c[1209]|0)+m|0;c[1209]=H;c[1212]=j;c[p+(k+4)>>2]=H|1}while(0);H=p+(h|8)|0;i=b;return H|0}e=5272|0;while(1){d=c[e>>2]|0;if(d>>>0<=r>>>0?(n=c[e+4>>2]|0,m=d+n|0,m>>>0>r>>>0):0)break;e=c[e+8>>2]|0}e=d+(n+ -39)|0;if(!(e&7))e=0;else e=0-e&7;d=d+(n+ -47+e)|0;d=d>>>0<(r+16|0)>>>0?r:d;e=d+8|0;f=p+8|0;if(!(f&7))f=0;else f=0-f&7;H=q+ -40-f|0;c[1212]=p+f;c[1209]=H;c[p+(f+4)>>2]=H|1;c[p+(q+ -36)>>2]=40;c[1213]=c[1328];c[d+4>>2]=27;c[e+0>>2]=c[1318];c[e+4>>2]=c[1319];c[e+8>>2]=c[1320];c[e+12>>2]=c[1321];c[1318]=p;c[1319]=q;c[1321]=0;c[1320]=e;e=d+28|0;c[e>>2]=7;if((d+32|0)>>>0>>0)do{H=e;e=e+4|0;c[e>>2]=7}while((H+8|0)>>>0>>0);if((d|0)!=(r|0)){d=d-r|0;e=r+(d+4)|0;c[e>>2]=c[e>>2]&-2;c[r+4>>2]=d|1;c[r+d>>2]=d;e=d>>>3;if(d>>>0<256){f=e<<1;d=4864+(f<<2)|0;g=c[1206]|0;e=1<>2]|0;if(e>>>0>=(c[1210]|0)>>>0){k=f;j=e;break}Wa()}while(0);c[k>>2]=r;c[j+12>>2]=r;c[r+8>>2]=j;c[r+12>>2]=d;break}e=d>>>8;if(e)if(d>>>0>16777215)e=31;else{G=(e+1048320|0)>>>16&8;H=e<>>16&4;H=H<>>16&2;e=14-(F|G|e)+(H<>>15)|0;e=d>>>(e+7|0)&1|e<<1}else e=0;j=5128+(e<<2)|0;c[r+28>>2]=e;c[r+20>>2]=0;c[r+16>>2]=0;f=c[1207]|0;g=1<>2]=r;c[r+24>>2]=j;c[r+12>>2]=r;c[r+8>>2]=r;break}f=c[j>>2]|0;if((e|0)==31)e=0;else e=25-(e>>>1)|0;k:do if((c[f+4>>2]&-8|0)!=(d|0)){e=d<>>31<<2)+16|0;g=c[f>>2]|0;if(!g)break;if((c[g+4>>2]&-8|0)==(d|0)){h=g;break k}else{e=e<<1;j=g}}if(f>>>0<(c[1210]|0)>>>0)Wa();else{c[f>>2]=r;c[r+24>>2]=j;c[r+12>>2]=r;c[r+8>>2]=r;break g}}else h=f;while(0);e=h+8|0;d=c[e>>2]|0;H=c[1210]|0;if(h>>>0>=H>>>0&d>>>0>=H>>>0){c[d+12>>2]=r;c[e>>2]=r;c[r+8>>2]=d;c[r+12>>2]=h;c[r+24>>2]=0;break}else Wa()}}else{H=c[1210]|0;if((H|0)==0|p>>>0>>0)c[1210]=p;c[1318]=p;c[1319]=q;c[1321]=0;c[1215]=c[1324];c[1214]=-1;d=0;do{H=d<<1;G=4864+(H<<2)|0;c[4864+(H+3<<2)>>2]=G;c[4864+(H+2<<2)>>2]=G;d=d+1|0}while((d|0)!=32);d=p+8|0;if(!(d&7))d=0;else d=0-d&7;H=q+ -40-d|0;c[1212]=p+d;c[1209]=H;c[p+(d+4)>>2]=H|1;c[p+(q+ -36)>>2]=40;c[1213]=c[1328]}while(0);d=c[1209]|0;if(d>>>0>a>>>0){G=d-a|0;c[1209]=G;H=c[1212]|0;c[1212]=H+a;c[H+(a+4)>>2]=G|1;c[H+4>>2]=a|3;H=H+8|0;i=b;return H|0}}c[(Oa()|0)>>2]=12;H=0;i=b;return H|0}function Td(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;b=i;if(!a){i=b;return}q=a+ -8|0;r=c[1210]|0;if(q>>>0>>0)Wa();n=c[a+ -4>>2]|0;m=n&3;if((m|0)==1)Wa();j=n&-8;h=a+(j+ -8)|0;do if(!(n&1)){u=c[q>>2]|0;if(!m){i=b;return}q=-8-u|0;n=a+q|0;m=u+j|0;if(n>>>0>>0)Wa();if((n|0)==(c[1211]|0)){e=a+(j+ -4)|0;o=c[e>>2]|0;if((o&3|0)!=3){e=n;o=m;break}c[1208]=m;c[e>>2]=o&-2;c[a+(q+4)>>2]=m|1;c[h>>2]=m;i=b;return}t=u>>>3;if(u>>>0<256){e=c[a+(q+8)>>2]|0;o=c[a+(q+12)>>2]|0;p=4864+(t<<1<<2)|0;if((e|0)!=(p|0)){if(e>>>0>>0)Wa();if((c[e+12>>2]|0)!=(n|0))Wa()}if((o|0)==(e|0)){c[1206]=c[1206]&~(1<>>0>>0)Wa();p=o+8|0;if((c[p>>2]|0)==(n|0))s=p;else Wa()}else s=o+8|0;c[e+12>>2]=o;c[s>>2]=e;e=n;o=m;break}s=c[a+(q+24)>>2]|0;t=c[a+(q+12)>>2]|0;do if((t|0)==(n|0)){u=a+(q+20)|0;t=c[u>>2]|0;if(!t){u=a+(q+16)|0;t=c[u>>2]|0;if(!t){p=0;break}}while(1){v=t+20|0;w=c[v>>2]|0;if(w){t=w;u=v;continue}v=t+16|0;w=c[v>>2]|0;if(!w)break;else{t=w;u=v}}if(u>>>0>>0)Wa();else{c[u>>2]=0;p=t;break}}else{u=c[a+(q+8)>>2]|0;if(u>>>0>>0)Wa();r=u+12|0;if((c[r>>2]|0)!=(n|0))Wa();v=t+8|0;if((c[v>>2]|0)==(n|0)){c[r>>2]=t;c[v>>2]=u;p=t;break}else Wa()}while(0);if(s){r=c[a+(q+28)>>2]|0;t=5128+(r<<2)|0;if((n|0)==(c[t>>2]|0)){c[t>>2]=p;if(!p){c[1207]=c[1207]&~(1<>>0<(c[1210]|0)>>>0)Wa();r=s+16|0;if((c[r>>2]|0)==(n|0))c[r>>2]=p;else c[s+20>>2]=p;if(!p){e=n;o=m;break}}r=c[1210]|0;if(p>>>0>>0)Wa();c[p+24>>2]=s;s=c[a+(q+16)>>2]|0;do if(s)if(s>>>0>>0)Wa();else{c[p+16>>2]=s;c[s+24>>2]=p;break}while(0);q=c[a+(q+20)>>2]|0;if(q)if(q>>>0<(c[1210]|0)>>>0)Wa();else{c[p+20>>2]=q;c[q+24>>2]=p;e=n;o=m;break}else{e=n;o=m}}else{e=n;o=m}}else{e=q;o=j}while(0);if(e>>>0>=h>>>0)Wa();m=a+(j+ -4)|0;n=c[m>>2]|0;if(!(n&1))Wa();if(!(n&2)){if((h|0)==(c[1212]|0)){w=(c[1209]|0)+o|0;c[1209]=w;c[1212]=e;c[e+4>>2]=w|1;if((e|0)!=(c[1211]|0)){i=b;return}c[1211]=0;c[1208]=0;i=b;return}if((h|0)==(c[1211]|0)){w=(c[1208]|0)+o|0;c[1208]=w;c[1211]=e;c[e+4>>2]=w|1;c[e+w>>2]=w;i=b;return}o=(n&-8)+o|0;m=n>>>3;do if(n>>>0>=256){l=c[a+(j+16)>>2]|0;m=c[a+(j|4)>>2]|0;do if((m|0)==(h|0)){n=a+(j+12)|0;m=c[n>>2]|0;if(!m){n=a+(j+8)|0;m=c[n>>2]|0;if(!m){k=0;break}}while(1){q=m+20|0;p=c[q>>2]|0;if(p){m=p;n=q;continue}p=m+16|0;q=c[p>>2]|0;if(!q)break;else{m=q;n=p}}if(n>>>0<(c[1210]|0)>>>0)Wa();else{c[n>>2]=0;k=m;break}}else{n=c[a+j>>2]|0;if(n>>>0<(c[1210]|0)>>>0)Wa();p=n+12|0;if((c[p>>2]|0)!=(h|0))Wa();q=m+8|0;if((c[q>>2]|0)==(h|0)){c[p>>2]=m;c[q>>2]=n;k=m;break}else Wa()}while(0);if(l){m=c[a+(j+20)>>2]|0;n=5128+(m<<2)|0;if((h|0)==(c[n>>2]|0)){c[n>>2]=k;if(!k){c[1207]=c[1207]&~(1<>>0<(c[1210]|0)>>>0)Wa();m=l+16|0;if((c[m>>2]|0)==(h|0))c[m>>2]=k;else c[l+20>>2]=k;if(!k)break}h=c[1210]|0;if(k>>>0>>0)Wa();c[k+24>>2]=l;l=c[a+(j+8)>>2]|0;do if(l)if(l>>>0>>0)Wa();else{c[k+16>>2]=l;c[l+24>>2]=k;break}while(0);h=c[a+(j+12)>>2]|0;if(h)if(h>>>0<(c[1210]|0)>>>0)Wa();else{c[k+20>>2]=h;c[h+24>>2]=k;break}}}else{k=c[a+j>>2]|0;j=c[a+(j|4)>>2]|0;a=4864+(m<<1<<2)|0;if((k|0)!=(a|0)){if(k>>>0<(c[1210]|0)>>>0)Wa();if((c[k+12>>2]|0)!=(h|0))Wa()}if((j|0)==(k|0)){c[1206]=c[1206]&~(1<>>0<(c[1210]|0)>>>0)Wa();a=j+8|0;if((c[a>>2]|0)==(h|0))l=a;else Wa()}else l=j+8|0;c[k+12>>2]=j;c[l>>2]=k}while(0);c[e+4>>2]=o|1;c[e+o>>2]=o;if((e|0)==(c[1211]|0)){c[1208]=o;i=b;return}}else{c[m>>2]=n&-2;c[e+4>>2]=o|1;c[e+o>>2]=o}h=o>>>3;if(o>>>0<256){j=h<<1;d=4864+(j<<2)|0;k=c[1206]|0;h=1<>2]|0;if(h>>>0<(c[1210]|0)>>>0)Wa();else{f=j;g=h}}else{c[1206]=k|h;f=4864+(j+2<<2)|0;g=d}c[f>>2]=e;c[g+12>>2]=e;c[e+8>>2]=g;c[e+12>>2]=d;i=b;return}f=o>>>8;if(f)if(o>>>0>16777215)f=31;else{v=(f+1048320|0)>>>16&8;w=f<>>16&4;w=w<>>16&2;f=14-(u|v|f)+(w<>>15)|0;f=o>>>(f+7|0)&1|f<<1}else f=0;g=5128+(f<<2)|0;c[e+28>>2]=f;c[e+20>>2]=0;c[e+16>>2]=0;j=c[1207]|0;h=1<>2]|0;if((f|0)==31)f=0;else f=25-(f>>>1)|0;b:do if((c[g+4>>2]&-8|0)!=(o|0)){f=o<>>31<<2)+16|0;h=c[j>>2]|0;if(!h)break;if((c[h+4>>2]&-8|0)==(o|0)){d=h;break b}else{f=f<<1;g=h}}if(j>>>0<(c[1210]|0)>>>0)Wa();else{c[j>>2]=e;c[e+24>>2]=g;c[e+12>>2]=e;c[e+8>>2]=e;break a}}else d=g;while(0);g=d+8|0;f=c[g>>2]|0;w=c[1210]|0;if(d>>>0>=w>>>0&f>>>0>=w>>>0){c[f+12>>2]=e;c[g>>2]=e;c[e+8>>2]=f;c[e+12>>2]=d;c[e+24>>2]=0;break}else Wa()}else{c[1207]=j|h;c[g>>2]=e;c[e+24>>2]=g;c[e+12>>2]=e;c[e+8>>2]=e}while(0);w=(c[1214]|0)+ -1|0;c[1214]=w;if(!w)d=5280|0;else{i=b;return}while(1){d=c[d>>2]|0;if(!d)break;else d=d+8|0}c[1214]=-1;i=b;return}function Ud(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=i;do if(a){if(b>>>0>4294967231){c[(Oa()|0)>>2]=12;e=0;break}if(b>>>0<11)e=16;else e=b+11&-8;e=fe(a+ -8|0,e)|0;if(e){e=e+8|0;break}e=Sd(b)|0;if(!e)e=0;else{f=c[a+ -4>>2]|0;f=(f&-8)-((f&3|0)==0?8:4)|0;pe(e|0,a|0,(f>>>0>>0?f:b)|0)|0;Td(a)}}else e=Sd(b)|0;while(0);i=d;return e|0}function Vd(a){a=a|0;if((a|0)==32)a=1;else a=(a+ -9|0)>>>0<5;return a&1|0}function Wd(b,e,f,g,h){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;j=i;if(e>>>0>36){c[(Oa()|0)>>2]=22;s=0;t=0;F=s;i=j;return t|0}k=b+4|0;l=b+100|0;do{m=c[k>>2]|0;if(m>>>0<(c[l>>2]|0)>>>0){c[k>>2]=m+1;o=d[m>>0]|0}else o=Zd(b)|0}while((Vd(o)|0)!=0);do if((o|0)==43|(o|0)==45){m=((o|0)==45)<<31>>31;n=c[k>>2]|0;if(n>>>0<(c[l>>2]|0)>>>0){c[k>>2]=n+1;o=d[n>>0]|0;break}else{o=Zd(b)|0;break}}else m=0;while(0);n=(e|0)==0;do if((e&-17|0)==0&(o|0)==48){o=c[k>>2]|0;if(o>>>0<(c[l>>2]|0)>>>0){c[k>>2]=o+1;o=d[o>>0]|0}else o=Zd(b)|0;if((o|32|0)!=120)if(n){e=8;f=46;break}else{f=32;break}e=c[k>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[k>>2]=e+1;o=d[e>>0]|0}else o=Zd(b)|0;if((d[o+5321>>0]|0)>15){g=(c[l>>2]|0)==0;if(!g)c[k>>2]=(c[k>>2]|0)+ -1;if(!f){Yd(b,0);s=0;t=0;F=s;i=j;return t|0}if(g){s=0;t=0;F=s;i=j;return t|0}c[k>>2]=(c[k>>2]|0)+ -1;s=0;t=0;F=s;i=j;return t|0}else{e=16;f=46}}else{e=n?10:e;if((d[o+5321>>0]|0)>>>0>>0)f=32;else{if(c[l>>2]|0)c[k>>2]=(c[k>>2]|0)+ -1;Yd(b,0);c[(Oa()|0)>>2]=22;s=0;t=0;F=s;i=j;return t|0}}while(0);if((f|0)==32)if((e|0)==10){e=o+ -48|0;if(e>>>0<10){n=0;do{n=(n*10|0)+e|0;e=c[k>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[k>>2]=e+1;o=d[e>>0]|0}else o=Zd(b)|0;e=o+ -48|0}while(e>>>0<10&n>>>0<429496729);p=0}else{n=0;p=0}e=o+ -48|0;if(e>>>0<10){do{q=we(n|0,p|0,10,0)|0;r=F;s=((e|0)<0)<<31>>31;t=~s;if(r>>>0>t>>>0|(r|0)==(t|0)&q>>>0>~e>>>0)break;n=ne(q|0,r|0,e|0,s|0)|0;p=F;e=c[k>>2]|0;if(e>>>0<(c[l>>2]|0)>>>0){c[k>>2]=e+1;o=d[e>>0]|0}else o=Zd(b)|0;e=o+ -48|0}while(e>>>0<10&(p>>>0<429496729|(p|0)==429496729&n>>>0<2576980378));if(e>>>0<=9){e=10;f=72}}}else f=46;a:do if((f|0)==46){if(!(e+ -1&e)){f=a[5584+((e*23|0)>>>5&7)>>0]|0;r=a[o+5321>>0]|0;n=r&255;if(n>>>0>>0){o=n;n=0;do{n=o|n<>2]|0;if(o>>>0<(c[l>>2]|0)>>>0){c[k>>2]=o+1;s=d[o>>0]|0}else s=Zd(b)|0;r=a[s+5321>>0]|0;o=r&255}while(o>>>0>>0&n>>>0<134217728);p=0}else{p=0;n=0;s=o}o=oe(-1,-1,f|0)|0;q=F;if((r&255)>>>0>=e>>>0|(p>>>0>q>>>0|(p|0)==(q|0)&n>>>0>o>>>0)){o=s;f=72;break}while(1){n=le(n|0,p|0,f|0)|0;p=F;n=r&255|n;r=c[k>>2]|0;if(r>>>0<(c[l>>2]|0)>>>0){c[k>>2]=r+1;s=d[r>>0]|0}else s=Zd(b)|0;r=a[s+5321>>0]|0;if((r&255)>>>0>=e>>>0|(p>>>0>q>>>0|(p|0)==(q|0)&n>>>0>o>>>0)){o=s;f=72;break a}}}r=a[o+5321>>0]|0;f=r&255;if(f>>>0>>0){n=0;do{n=f+(ba(n,e)|0)|0;f=c[k>>2]|0;if(f>>>0<(c[l>>2]|0)>>>0){c[k>>2]=f+1;q=d[f>>0]|0}else q=Zd(b)|0;r=a[q+5321>>0]|0;f=r&255}while(f>>>0>>0&n>>>0<119304647);p=0}else{n=0;p=0;q=o}if((r&255)>>>0>>0){f=xe(-1,-1,e|0,0)|0;o=F;while(1){if(p>>>0>o>>>0|(p|0)==(o|0)&n>>>0>f>>>0){o=q;f=72;break a}s=we(n|0,p|0,e|0,0)|0;t=F;r=r&255;if(t>>>0>4294967295|(t|0)==-1&s>>>0>~r>>>0){o=q;f=72;break a}n=ne(r|0,0,s|0,t|0)|0;p=F;q=c[k>>2]|0;if(q>>>0<(c[l>>2]|0)>>>0){c[k>>2]=q+1;q=d[q>>0]|0}else q=Zd(b)|0;r=a[q+5321>>0]|0;if((r&255)>>>0>=e>>>0){o=q;f=72;break}}}else{o=q;f=72}}while(0);if((f|0)==72)if((d[o+5321>>0]|0)>>>0>>0){do{f=c[k>>2]|0;if(f>>>0<(c[l>>2]|0)>>>0){c[k>>2]=f+1;f=d[f>>0]|0}else f=Zd(b)|0}while((d[f+5321>>0]|0)>>>0>>0);c[(Oa()|0)>>2]=34;p=h;n=g}if(c[l>>2]|0)c[k>>2]=(c[k>>2]|0)+ -1;if(!(p>>>0>>0|(p|0)==(h|0)&n>>>0>>0)){if(!((g&1|0)!=0|0!=0|(m|0)!=0)){c[(Oa()|0)>>2]=34;t=ne(g|0,h|0,-1,-1)|0;s=F;F=s;i=j;return t|0}if(p>>>0>h>>>0|(p|0)==(h|0)&n>>>0>g>>>0){c[(Oa()|0)>>2]=34;s=h;t=g;F=s;i=j;return t|0}}t=((m|0)<0)<<31>>31;t=je(n^m|0,p^t|0,m|0,t|0)|0;s=F;F=s;i=j;return t|0} + + + +function Xd(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0.0,H=0,I=0.0,J=0.0,K=0.0,L=0.0;g=i;i=i+512|0;k=g;if(!e){e=24;j=-149}else if((e|0)==2){e=53;j=-1074}else if((e|0)==1){e=53;j=-1074}else{J=0.0;i=g;return+J}n=b+4|0;o=b+100|0;do{h=c[n>>2]|0;if(h>>>0<(c[o>>2]|0)>>>0){c[n>>2]=h+1;w=d[h>>0]|0}else w=Zd(b)|0}while((Vd(w)|0)!=0);do if((w|0)==43|(w|0)==45){h=1-(((w|0)==45&1)<<1)|0;m=c[n>>2]|0;if(m>>>0<(c[o>>2]|0)>>>0){c[n>>2]=m+1;w=d[m>>0]|0;break}else{w=Zd(b)|0;break}}else h=1;while(0);r=0;do{if((w|32|0)!=(a[5600+r>>0]|0))break;do if(r>>>0<7){m=c[n>>2]|0;if(m>>>0<(c[o>>2]|0)>>>0){c[n>>2]=m+1;w=d[m>>0]|0;break}else{w=Zd(b)|0;break}}while(0);r=r+1|0}while(r>>>0<8);do if((r|0)==3)p=23;else if((r|0)!=8){m=(f|0)!=0;if(r>>>0>3&m)if((r|0)==8)break;else{p=23;break}a:do if(!r){r=0;do{if((w|32|0)!=(a[5616+r>>0]|0))break a;do if(r>>>0<2){s=c[n>>2]|0;if(s>>>0<(c[o>>2]|0)>>>0){c[n>>2]=s+1;w=d[s>>0]|0;break}else{w=Zd(b)|0;break}}while(0);r=r+1|0}while(r>>>0<3)}while(0);if(!r){do if((w|0)==48){m=c[n>>2]|0;if(m>>>0<(c[o>>2]|0)>>>0){c[n>>2]=m+1;m=d[m>>0]|0}else m=Zd(b)|0;if((m|32|0)!=120){if(!(c[o>>2]|0)){w=48;break}c[n>>2]=(c[n>>2]|0)+ -1;w=48;break}k=c[n>>2]|0;if(k>>>0<(c[o>>2]|0)>>>0){c[n>>2]=k+1;z=d[k>>0]|0;x=0}else{z=Zd(b)|0;x=0}while(1){if((z|0)==46){p=70;break}else if((z|0)!=48){k=0;m=0;s=0;r=0;w=0;y=0;G=1.0;t=0;q=0.0;break}k=c[n>>2]|0;if(k>>>0<(c[o>>2]|0)>>>0){c[n>>2]=k+1;z=d[k>>0]|0;x=1;continue}else{z=Zd(b)|0;x=1;continue}}if((p|0)==70){k=c[n>>2]|0;if(k>>>0<(c[o>>2]|0)>>>0){c[n>>2]=k+1;z=d[k>>0]|0}else z=Zd(b)|0;if((z|0)==48){s=0;r=0;do{k=c[n>>2]|0;if(k>>>0<(c[o>>2]|0)>>>0){c[n>>2]=k+1;z=d[k>>0]|0}else z=Zd(b)|0;s=ne(s|0,r|0,-1,-1)|0;r=F}while((z|0)==48);k=0;m=0;x=1;w=1;y=0;G=1.0;t=0;q=0.0}else{k=0;m=0;s=0;r=0;w=1;y=0;G=1.0;t=0;q=0.0}}b:while(1){B=z+ -48|0;do if(B>>>0>=10){A=z|32;C=(z|0)==46;if(!((A+ -97|0)>>>0<6|C))break b;if(C)if(!w){s=m;r=k;w=1;break}else{z=46;break b}else{B=(z|0)>57?A+ -87|0:B;p=83;break}}else p=83;while(0);if((p|0)==83){p=0;do if(!((k|0)<0|(k|0)==0&m>>>0<8)){if((k|0)<0|(k|0)==0&m>>>0<14){J=G*.0625;I=J;q=q+J*+(B|0);break}if((B|0)==0|(y|0)!=0)I=G;else{y=1;I=G;q=q+G*.5}}else{I=G;t=B+(t<<4)|0}while(0);m=ne(m|0,k|0,1,0)|0;k=F;x=1;G=I}z=c[n>>2]|0;if(z>>>0<(c[o>>2]|0)>>>0){c[n>>2]=z+1;z=d[z>>0]|0;continue}else{z=Zd(b)|0;continue}}if(!x){e=(c[o>>2]|0)==0;if(!e)c[n>>2]=(c[n>>2]|0)+ -1;if(f){if(!e?(l=c[n>>2]|0,c[n>>2]=l+ -1,(w|0)!=0):0)c[n>>2]=l+ -2}else Yd(b,0);J=+(h|0)*0.0;i=g;return+J}p=(w|0)==0;l=p?m:s;p=p?k:r;if((k|0)<0|(k|0)==0&m>>>0<8)do{t=t<<4;m=ne(m|0,k|0,1,0)|0;k=F}while((k|0)<0|(k|0)==0&m>>>0<8);do if((z|32|0)==112){m=he(b,f)|0;k=F;if((m|0)==0&(k|0)==-2147483648)if(!f){Yd(b,0);J=0.0;i=g;return+J}else{if(!(c[o>>2]|0)){m=0;k=0;break}c[n>>2]=(c[n>>2]|0)+ -1;m=0;k=0;break}}else if(!(c[o>>2]|0)){m=0;k=0}else{c[n>>2]=(c[n>>2]|0)+ -1;m=0;k=0}while(0);l=le(l|0,p|0,2)|0;l=ne(l|0,F|0,-32,-1)|0;k=ne(l|0,F|0,m|0,k|0)|0;l=F;if(!t){J=+(h|0)*0.0;i=g;return+J}if((l|0)>0|(l|0)==0&k>>>0>(0-j|0)>>>0){c[(Oa()|0)>>2]=34;J=+(h|0)*1.7976931348623157e+308*1.7976931348623157e+308;i=g;return+J}H=j+ -106|0;E=((H|0)<0)<<31>>31;if((l|0)<(E|0)|(l|0)==(E|0)&k>>>0>>0){c[(Oa()|0)>>2]=34;J=+(h|0)*2.2250738585072014e-308*2.2250738585072014e-308;i=g;return+J}if((t|0)>-1)do{t=t<<1;if(!(q>=.5))G=q;else{G=q+-1.0;t=t|1}q=q+G;k=ne(k|0,l|0,-1,-1)|0;l=F}while((t|0)>-1);j=je(32,0,j|0,((j|0)<0)<<31>>31|0)|0;j=ne(k|0,l|0,j|0,F|0)|0;H=F;if(0>(H|0)|0==(H|0)&e>>>0>j>>>0)if((j|0)<0){e=0;p=126}else{e=j;p=124}else p=124;if((p|0)==124)if((e|0)<53)p=126;else{j=e;G=+(h|0);I=0.0}if((p|0)==126){I=+(h|0);j=e;G=I;I=+Va(+(+_d(1.0,84-e|0)),+I)}H=(j|0)<32&q!=0.0&(t&1|0)==0;q=G*(H?0.0:q)+(I+G*+(((H&1)+t|0)>>>0))-I;if(!(q!=0.0))c[(Oa()|0)>>2]=34;J=+$d(q,k);i=g;return+J}while(0);m=j+e|0;l=0-m|0;B=0;while(1){if((w|0)==46){p=137;break}else if((w|0)!=48){D=0;C=0;A=0;break}r=c[n>>2]|0;if(r>>>0<(c[o>>2]|0)>>>0){c[n>>2]=r+1;w=d[r>>0]|0;B=1;continue}else{w=Zd(b)|0;B=1;continue}}if((p|0)==137){p=c[n>>2]|0;if(p>>>0<(c[o>>2]|0)>>>0){c[n>>2]=p+1;w=d[p>>0]|0}else w=Zd(b)|0;if((w|0)==48){D=0;C=0;do{D=ne(D|0,C|0,-1,-1)|0;C=F;p=c[n>>2]|0;if(p>>>0<(c[o>>2]|0)>>>0){c[n>>2]=p+1;w=d[p>>0]|0}else w=Zd(b)|0}while((w|0)==48);B=1;A=1}else{D=0;C=0;A=1}}c[k>>2]=0;z=w+ -48|0;E=(w|0)==46;c:do if(z>>>0<10|E){p=k+496|0;y=0;x=0;t=0;s=0;r=0;d:while(1){do if(E)if(!A){D=y;C=x;A=1}else break d;else{E=ne(y|0,x|0,1,0)|0;x=F;H=(w|0)!=48;if((s|0)>=125){if(!H){y=E;break}c[p>>2]=c[p>>2]|1;y=E;break}y=k+(s<<2)|0;if(t)z=w+ -48+((c[y>>2]|0)*10|0)|0;c[y>>2]=z;t=t+1|0;z=(t|0)==9;y=E;B=1;t=z?0:t;s=(z&1)+s|0;r=H?E:r}while(0);w=c[n>>2]|0;if(w>>>0<(c[o>>2]|0)>>>0){c[n>>2]=w+1;w=d[w>>0]|0}else w=Zd(b)|0;z=w+ -48|0;E=(w|0)==46;if(!(z>>>0<10|E)){p=160;break c}}z=(B|0)!=0;p=168}else{y=0;x=0;t=0;s=0;r=0;p=160}while(0);do if((p|0)==160){z=(A|0)==0;D=z?y:D;C=z?x:C;z=(B|0)!=0;if(!(z&(w|32|0)==101))if((w|0)>-1){p=168;break}else{p=170;break}z=he(b,f)|0;w=F;do if((z|0)==0&(w|0)==-2147483648)if(!f){Yd(b,0);J=0.0;i=g;return+J}else{if(!(c[o>>2]|0)){z=0;w=0;break}c[n>>2]=(c[n>>2]|0)+ -1;z=0;w=0;break}while(0);b=ne(z|0,w|0,D|0,C|0)|0;C=F}while(0);if((p|0)==168)if(c[o>>2]|0){c[n>>2]=(c[n>>2]|0)+ -1;if(z)b=D;else p=171}else p=170;if((p|0)==170)if(z)b=D;else p=171;if((p|0)==171){c[(Oa()|0)>>2]=22;Yd(b,0);J=0.0;i=g;return+J}n=c[k>>2]|0;if(!n){J=+(h|0)*0.0;i=g;return+J}if((b|0)==(y|0)&(C|0)==(x|0)&((x|0)<0|(x|0)==0&y>>>0<10)?e>>>0>30|(n>>>e|0)==0:0){J=+(h|0)*+(n>>>0);i=g;return+J}H=(j|0)/-2|0;E=((H|0)<0)<<31>>31;if((C|0)>(E|0)|(C|0)==(E|0)&b>>>0>H>>>0){c[(Oa()|0)>>2]=34;J=+(h|0)*1.7976931348623157e+308*1.7976931348623157e+308;i=g;return+J}H=j+ -106|0;E=((H|0)<0)<<31>>31;if((C|0)<(E|0)|(C|0)==(E|0)&b>>>0>>0){c[(Oa()|0)>>2]=34;J=+(h|0)*2.2250738585072014e-308*2.2250738585072014e-308;i=g;return+J}if(t){if((t|0)<9){n=k+(s<<2)|0;o=c[n>>2]|0;do{o=o*10|0;t=t+1|0}while((t|0)!=9);c[n>>2]=o}s=s+1|0}if((r|0)<9?(r|0)<=(b|0)&(b|0)<18:0){if((b|0)==9){J=+(h|0)*+((c[k>>2]|0)>>>0);i=g;return+J}if((b|0)<9){J=+(h|0)*+((c[k>>2]|0)>>>0)/+(c[5632+(8-b<<2)>>2]|0);i=g;return+J}H=e+27+(ba(b,-3)|0)|0;n=c[k>>2]|0;if((H|0)>30|(n>>>H|0)==0){J=+(h|0)*+(n>>>0)*+(c[5632+(b+ -10<<2)>>2]|0);i=g;return+J}}n=(b|0)%9|0;if(!n){n=0;o=0}else{f=(b|0)>-1?n:n+9|0;p=c[5632+(8-f<<2)>>2]|0;if(s){r=1e9/(p|0)|0;n=0;o=0;t=0;do{D=k+(t<<2)|0;E=c[D>>2]|0;H=((E>>>0)/(p>>>0)|0)+o|0;c[D>>2]=H;o=ba((E>>>0)%(p>>>0)|0,r)|0;E=t;t=t+1|0;if((E|0)==(n|0)&(H|0)==0){n=t&127;b=b+ -9|0}}while((t|0)!=(s|0));if(o){c[k+(s<<2)>>2]=o;s=s+1|0}}else{n=0;s=0}o=0;b=9-f+b|0}e:while(1){f=k+(n<<2)|0;if((b|0)<18){do{r=0;f=s+127|0;while(1){f=f&127;p=k+(f<<2)|0;t=le(c[p>>2]|0,0,29)|0;t=ne(t|0,F|0,r|0,0)|0;r=F;if(r>>>0>0|(r|0)==0&t>>>0>1e9){H=xe(t|0,r|0,1e9,0)|0;t=ye(t|0,r|0,1e9,0)|0;r=H}else r=0;c[p>>2]=t;p=(f|0)==(n|0);if(!((f|0)!=(s+127&127|0)|p))s=(t|0)==0?f:s;if(p)break;else f=f+ -1|0}o=o+ -29|0}while((r|0)==0)}else{if((b|0)!=18)break;do{if((c[f>>2]|0)>>>0>=9007199){b=18;break e}r=0;p=s+127|0;while(1){p=p&127;t=k+(p<<2)|0;w=le(c[t>>2]|0,0,29)|0;w=ne(w|0,F|0,r|0,0)|0;r=F;if(r>>>0>0|(r|0)==0&w>>>0>1e9){H=xe(w|0,r|0,1e9,0)|0;w=ye(w|0,r|0,1e9,0)|0;r=H}else r=0;c[t>>2]=w;t=(p|0)==(n|0);if(!((p|0)!=(s+127&127|0)|t))s=(w|0)==0?p:s;if(t)break;else p=p+ -1|0}o=o+ -29|0}while((r|0)==0)}n=n+127&127;if((n|0)==(s|0)){H=s+127&127;s=k+((s+126&127)<<2)|0;c[s>>2]=c[s>>2]|c[k+(H<<2)>>2];s=H}c[k+(n<<2)>>2]=r;b=b+9|0}f:while(1){f=s+1&127;p=k+((s+127&127)<<2)|0;while(1){t=(b|0)==18;r=(b|0)>27?9:1;while(1){w=0;while(1){x=w+n&127;if((x|0)==(s|0)){w=2;break}y=c[k+(x<<2)>>2]|0;z=c[5624+(w<<2)>>2]|0;if(y>>>0>>0){w=2;break}x=w+1|0;if(y>>>0>z>>>0)break;if((x|0)<2)w=x;else{w=x;break}}if((w|0)==2&t)break f;o=r+o|0;if((n|0)==(s|0))n=s;else break}t=(1<>>r;x=n;y=0;do{D=k+(n<<2)|0;E=c[D>>2]|0;H=(E>>>r)+y|0;c[D>>2]=H;y=ba(E&t,w)|0;H=(n|0)==(x|0)&(H|0)==0;n=n+1&127;b=H?b+ -9|0:b;x=H?n:x}while((n|0)!=(s|0));if(!y){n=x;continue}if((f|0)!=(x|0))break;c[p>>2]=c[p>>2]|1;n=x}c[k+(s<<2)>>2]=y;n=x;s=f}b=n&127;if((b|0)==(s|0)){c[k+(f+ -1<<2)>>2]=0;s=f}G=+((c[k+(b<<2)>>2]|0)>>>0);b=n+1&127;if((b|0)==(s|0)){s=s+1&127;c[k+(s+ -1<<2)>>2]=0}q=+(h|0);I=q*(G*1.0e9+ +((c[k+(b<<2)>>2]|0)>>>0));h=o+53|0;j=h-j|0;if((j|0)<(e|0))if((j|0)<0){e=0;b=1;p=244}else{e=j;b=1;p=243}else{b=0;p=243}if((p|0)==243)if((e|0)<53)p=244;else{G=0.0;J=0.0}if((p|0)==244){L=+Va(+(+_d(1.0,105-e|0)),+I);K=+cb(+I,+(+_d(1.0,53-e|0)));G=L;J=K;I=L+(I-K)}f=n+2&127;do if((f|0)!=(s|0)){k=c[k+(f<<2)>>2]|0;do if(k>>>0>=5e8){if(k>>>0>5e8){J=q*.75+J;break}if((n+3&127|0)==(s|0)){J=q*.5+J;break}else{J=q*.75+J;break}}else{if((k|0)==0?(n+3&127|0)==(s|0):0)break;J=q*.25+J}while(0);if((53-e|0)<=1)break;if(+cb(+J,1.0)!=0.0)break;J=J+1.0}while(0);q=I+J-G;do if((h&2147483647|0)>(-2-m|0)){if(+Q(+q)>=9007199254740992.0){b=(b|0)!=0&(e|0)==(j|0)?0:b;o=o+1|0;q=q*.5}if((o+50|0)<=(l|0)?!((b|0)!=0&J!=0.0):0)break;c[(Oa()|0)>>2]=34}while(0);L=+$d(q,o);i=g;return+L}else if((r|0)==3){e=c[n>>2]|0;if(e>>>0<(c[o>>2]|0)>>>0){c[n>>2]=e+1;e=d[e>>0]|0}else e=Zd(b)|0;if((e|0)==40)e=1;else{if(!(c[o>>2]|0)){L=u;i=g;return+L}c[n>>2]=(c[n>>2]|0)+ -1;L=u;i=g;return+L}while(1){h=c[n>>2]|0;if(h>>>0<(c[o>>2]|0)>>>0){c[n>>2]=h+1;h=d[h>>0]|0}else h=Zd(b)|0;if(!((h+ -48|0)>>>0<10|(h+ -65|0)>>>0<26)?!((h+ -97|0)>>>0<26|(h|0)==95):0)break;e=e+1|0}if((h|0)==41){L=u;i=g;return+L}h=(c[o>>2]|0)==0;if(!h)c[n>>2]=(c[n>>2]|0)+ -1;if(!m){c[(Oa()|0)>>2]=22;Yd(b,0);L=0.0;i=g;return+L}if((e|0)==0|h){L=u;i=g;return+L}do{e=e+ -1|0;c[n>>2]=(c[n>>2]|0)+ -1}while((e|0)!=0);q=u;i=g;return+q}else{if(c[o>>2]|0)c[n>>2]=(c[n>>2]|0)+ -1;c[(Oa()|0)>>2]=22;Yd(b,0);L=0.0;i=g;return+L}}while(0);if((p|0)==23){e=(c[o>>2]|0)==0;if(!e)c[n>>2]=(c[n>>2]|0)+ -1;if(!(r>>>0<4|(f|0)==0|e))do{c[n>>2]=(c[n>>2]|0)+ -1;r=r+ -1|0}while(r>>>0>3)}L=+(h|0)*v;i=g;return+L}function Yd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=i;c[a+104>>2]=b;f=c[a+8>>2]|0;e=c[a+4>>2]|0;g=f-e|0;c[a+108>>2]=g;if((b|0)!=0&(g|0)>(b|0)){c[a+100>>2]=e+b;i=d;return}else{c[a+100>>2]=f;i=d;return}}function Zd(b){b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0,l=0;f=i;j=b+104|0;l=c[j>>2]|0;if(!((l|0)!=0?(c[b+108>>2]|0)>=(l|0):0))k=3;if((k|0)==3?(e=be(b)|0,(e|0)>=0):0){k=c[j>>2]|0;j=c[b+8>>2]|0;if((k|0)!=0?(g=c[b+4>>2]|0,h=k-(c[b+108>>2]|0)+ -1|0,(j-g|0)>(h|0)):0)c[b+100>>2]=g+h;else c[b+100>>2]=j;g=c[b+4>>2]|0;if(j){l=b+108|0;c[l>>2]=j+1-g+(c[l>>2]|0)}b=g+ -1|0;if((d[b>>0]|0|0)==(e|0)){l=e;i=f;return l|0}a[b>>0]=e;l=e;i=f;return l|0}c[b+100>>2]=0;l=-1;i=f;return l|0}function _d(a,b){a=+a;b=b|0;var d=0,e=0;d=i;if((b|0)>1023){a=a*8.98846567431158e+307;e=b+ -1023|0;if((e|0)>1023){b=b+ -2046|0;b=(b|0)>1023?1023:b;a=a*8.98846567431158e+307}else b=e}else if((b|0)<-1022){a=a*2.2250738585072014e-308;e=b+1022|0;if((e|0)<-1022){b=b+2044|0;b=(b|0)<-1022?-1022:b;a=a*2.2250738585072014e-308}else b=e}b=le(b+1023|0,0,52)|0;e=F;c[k>>2]=b;c[k+4>>2]=e;a=a*+h[k>>3];i=d;return+a}function $d(a,b){a=+a;b=b|0;var c=0;c=i;a=+_d(a,b);i=c;return+a}function ae(b){b=b|0;var d=0,e=0,f=0;e=i;f=b+74|0;d=a[f>>0]|0;a[f>>0]=d+255|d;f=b+20|0;d=b+44|0;if((c[f>>2]|0)>>>0>(c[d>>2]|0)>>>0)eb[c[b+36>>2]&1](b,0,0)|0;c[b+16>>2]=0;c[b+28>>2]=0;c[f>>2]=0;f=c[b>>2]|0;if(!(f&20)){f=c[d>>2]|0;c[b+8>>2]=f;c[b+4>>2]=f;f=0;i=e;return f|0}if(!(f&4)){f=-1;i=e;return f|0}c[b>>2]=f|32;f=-1;i=e;return f|0}function be(a){a=a|0;var b=0,e=0;b=i;i=i+16|0;e=b;if((c[a+8>>2]|0)==0?(ae(a)|0)!=0:0)a=-1;else if((eb[c[a+32>>2]&1](a,e,1)|0)==1)a=d[e>>0]|0;else a=-1;i=b;return a|0}function ce(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,g=0,h=0;d=i;i=i+112|0;e=d;h=e+0|0;g=h+112|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(g|0));g=e+4|0;c[g>>2]=a;h=e+8|0;c[h>>2]=-1;c[e+44>>2]=a;c[e+76>>2]=-1;Yd(e,0);f=+Xd(e,1,1);e=(c[g>>2]|0)-(c[h>>2]|0)+(c[e+108>>2]|0)|0;if(!b){i=d;return+f}if(e)a=a+e|0;c[b>>2]=a;i=d;return+f}function de(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=i;i=i+112|0;g=e;c[g>>2]=0;f=g+4|0;c[f>>2]=a;c[g+44>>2]=a;if((a|0)<0)c[g+8>>2]=-1;else c[g+8>>2]=a+2147483647;c[g+76>>2]=-1;Yd(g,0);d=Wd(g,d,1,-2147483648,0)|0;if(!b){i=e;return d|0}c[b>>2]=a+((c[f>>2]|0)+(c[g+108>>2]|0)-(c[g+8>>2]|0));i=e;return d|0}function ee(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=i;f=a[b>>0]|0;e=a[c>>0]|0;if(f<<24>>24==0?1:f<<24>>24!=e<<24>>24)c=f;else{do{b=b+1|0;c=c+1|0;f=a[b>>0]|0;e=a[c>>0]|0}while(!(f<<24>>24==0?1:f<<24>>24!=e<<24>>24));c=f}i=d;return(c&255)-(e&255)|0}function fe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;d=i;f=a+4|0;e=c[f>>2]|0;l=e&-8;j=a+l|0;m=c[1210]|0;h=e&3;if(!((h|0)!=1&a>>>0>=m>>>0&a>>>0>>0))Wa();g=a+(l|4)|0;p=c[g>>2]|0;if(!(p&1))Wa();if(!h){if(b>>>0<256){r=0;i=d;return r|0}if(l>>>0>=(b+4|0)>>>0?(l-b|0)>>>0<=c[1326]<<1>>>0:0){r=a;i=d;return r|0}r=0;i=d;return r|0}if(l>>>0>=b>>>0){h=l-b|0;if(h>>>0<=15){r=a;i=d;return r|0}c[f>>2]=e&1|b|2;c[a+(b+4)>>2]=h|3;c[g>>2]=c[g>>2]|1;ge(a+b|0,h);r=a;i=d;return r|0}if((j|0)==(c[1212]|0)){g=(c[1209]|0)+l|0;if(g>>>0<=b>>>0){r=0;i=d;return r|0}r=g-b|0;c[f>>2]=e&1|b|2;c[a+(b+4)>>2]=r|1;c[1212]=a+b;c[1209]=r;r=a;i=d;return r|0}if((j|0)==(c[1211]|0)){h=(c[1208]|0)+l|0;if(h>>>0>>0){r=0;i=d;return r|0}g=h-b|0;if(g>>>0>15){c[f>>2]=e&1|b|2;c[a+(b+4)>>2]=g|1;c[a+h>>2]=g;e=a+(h+4)|0;c[e>>2]=c[e>>2]&-2;e=a+b|0}else{c[f>>2]=e&1|h|2;e=a+(h+4)|0;c[e>>2]=c[e>>2]|1;e=0;g=0}c[1208]=g;c[1211]=e;r=a;i=d;return r|0}if(p&2){r=0;i=d;return r|0}g=(p&-8)+l|0;if(g>>>0>>0){r=0;i=d;return r|0}h=g-b|0;o=p>>>3;do if(p>>>0>=256){n=c[a+(l+24)>>2]|0;o=c[a+(l+12)>>2]|0;do if((o|0)==(j|0)){p=a+(l+20)|0;o=c[p>>2]|0;if(!o){p=a+(l+16)|0;o=c[p>>2]|0;if(!o){k=0;break}}while(1){r=o+20|0;q=c[r>>2]|0;if(q){o=q;p=r;continue}q=o+16|0;r=c[q>>2]|0;if(!r)break;else{o=r;p=q}}if(p>>>0>>0)Wa();else{c[p>>2]=0;k=o;break}}else{p=c[a+(l+8)>>2]|0;if(p>>>0>>0)Wa();m=p+12|0;if((c[m>>2]|0)!=(j|0))Wa();q=o+8|0;if((c[q>>2]|0)==(j|0)){c[m>>2]=o;c[q>>2]=p;k=o;break}else Wa()}while(0);if(n){m=c[a+(l+28)>>2]|0;o=5128+(m<<2)|0;if((j|0)==(c[o>>2]|0)){c[o>>2]=k;if(!k){c[1207]=c[1207]&~(1<>>0<(c[1210]|0)>>>0)Wa();m=n+16|0;if((c[m>>2]|0)==(j|0))c[m>>2]=k;else c[n+20>>2]=k;if(!k)break}j=c[1210]|0;if(k>>>0>>0)Wa();c[k+24>>2]=n;m=c[a+(l+16)>>2]|0;do if(m)if(m>>>0>>0)Wa();else{c[k+16>>2]=m;c[m+24>>2]=k;break}while(0);j=c[a+(l+20)>>2]|0;if(j)if(j>>>0<(c[1210]|0)>>>0)Wa();else{c[k+20>>2]=j;c[j+24>>2]=k;break}}}else{k=c[a+(l+8)>>2]|0;l=c[a+(l+12)>>2]|0;p=4864+(o<<1<<2)|0;if((k|0)!=(p|0)){if(k>>>0>>0)Wa();if((c[k+12>>2]|0)!=(j|0))Wa()}if((l|0)==(k|0)){c[1206]=c[1206]&~(1<>>0>>0)Wa();m=l+8|0;if((c[m>>2]|0)==(j|0))n=m;else Wa()}else n=l+8|0;c[k+12>>2]=l;c[n>>2]=k}while(0);if(h>>>0<16){c[f>>2]=g|e&1|2;r=a+(g|4)|0;c[r>>2]=c[r>>2]|1;r=a;i=d;return r|0}else{c[f>>2]=e&1|b|2;c[a+(b+4)>>2]=h|3;r=a+(g|4)|0;c[r>>2]=c[r>>2]|1;ge(a+b|0,h);r=a;i=d;return r|0}return 0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;d=i;h=a+b|0;l=c[a+4>>2]|0;do if(!(l&1)){p=c[a>>2]|0;if(!(l&3)){i=d;return}l=a+(0-p)|0;m=p+b|0;r=c[1210]|0;if(l>>>0>>0)Wa();if((l|0)==(c[1211]|0)){e=a+(b+4)|0;n=c[e>>2]|0;if((n&3|0)!=3){e=l;n=m;break}c[1208]=m;c[e>>2]=n&-2;c[a+(4-p)>>2]=m|1;c[h>>2]=m;i=d;return}s=p>>>3;if(p>>>0<256){e=c[a+(8-p)>>2]|0;n=c[a+(12-p)>>2]|0;o=4864+(s<<1<<2)|0;if((e|0)!=(o|0)){if(e>>>0>>0)Wa();if((c[e+12>>2]|0)!=(l|0))Wa()}if((n|0)==(e|0)){c[1206]=c[1206]&~(1<>>0>>0)Wa();o=n+8|0;if((c[o>>2]|0)==(l|0))q=o;else Wa()}else q=n+8|0;c[e+12>>2]=n;c[q>>2]=e;e=l;n=m;break}q=c[a+(24-p)>>2]|0;s=c[a+(12-p)>>2]|0;do if((s|0)==(l|0)){u=16-p|0;t=a+(u+4)|0;s=c[t>>2]|0;if(!s){t=a+u|0;s=c[t>>2]|0;if(!s){o=0;break}}while(1){v=s+20|0;u=c[v>>2]|0;if(u){s=u;t=v;continue}u=s+16|0;v=c[u>>2]|0;if(!v)break;else{s=v;t=u}}if(t>>>0>>0)Wa();else{c[t>>2]=0;o=s;break}}else{t=c[a+(8-p)>>2]|0;if(t>>>0>>0)Wa();r=t+12|0;if((c[r>>2]|0)!=(l|0))Wa();u=s+8|0;if((c[u>>2]|0)==(l|0)){c[r>>2]=s;c[u>>2]=t;o=s;break}else Wa()}while(0);if(q){s=c[a+(28-p)>>2]|0;r=5128+(s<<2)|0;if((l|0)==(c[r>>2]|0)){c[r>>2]=o;if(!o){c[1207]=c[1207]&~(1<>>0<(c[1210]|0)>>>0)Wa();r=q+16|0;if((c[r>>2]|0)==(l|0))c[r>>2]=o;else c[q+20>>2]=o;if(!o){e=l;n=m;break}}r=c[1210]|0;if(o>>>0>>0)Wa();c[o+24>>2]=q;p=16-p|0;q=c[a+p>>2]|0;do if(q)if(q>>>0>>0)Wa();else{c[o+16>>2]=q;c[q+24>>2]=o;break}while(0);p=c[a+(p+4)>>2]|0;if(p)if(p>>>0<(c[1210]|0)>>>0)Wa();else{c[o+20>>2]=p;c[p+24>>2]=o;e=l;n=m;break}else{e=l;n=m}}else{e=l;n=m}}else{e=a;n=b}while(0);l=c[1210]|0;if(h>>>0>>0)Wa();m=a+(b+4)|0;o=c[m>>2]|0;if(!(o&2)){if((h|0)==(c[1212]|0)){v=(c[1209]|0)+n|0;c[1209]=v;c[1212]=e;c[e+4>>2]=v|1;if((e|0)!=(c[1211]|0)){i=d;return}c[1211]=0;c[1208]=0;i=d;return}if((h|0)==(c[1211]|0)){v=(c[1208]|0)+n|0;c[1208]=v;c[1211]=e;c[e+4>>2]=v|1;c[e+v>>2]=v;i=d;return}n=(o&-8)+n|0;m=o>>>3;do if(o>>>0>=256){k=c[a+(b+24)>>2]|0;o=c[a+(b+12)>>2]|0;do if((o|0)==(h|0)){o=a+(b+20)|0;m=c[o>>2]|0;if(!m){o=a+(b+16)|0;m=c[o>>2]|0;if(!m){j=0;break}}while(1){p=m+20|0;q=c[p>>2]|0;if(q){m=q;o=p;continue}q=m+16|0;p=c[q>>2]|0;if(!p)break;else{m=p;o=q}}if(o>>>0>>0)Wa();else{c[o>>2]=0;j=m;break}}else{m=c[a+(b+8)>>2]|0;if(m>>>0>>0)Wa();p=m+12|0;if((c[p>>2]|0)!=(h|0))Wa();l=o+8|0;if((c[l>>2]|0)==(h|0)){c[p>>2]=o;c[l>>2]=m;j=o;break}else Wa()}while(0);if(k){m=c[a+(b+28)>>2]|0;l=5128+(m<<2)|0;if((h|0)==(c[l>>2]|0)){c[l>>2]=j;if(!j){c[1207]=c[1207]&~(1<>>0<(c[1210]|0)>>>0)Wa();l=k+16|0;if((c[l>>2]|0)==(h|0))c[l>>2]=j;else c[k+20>>2]=j;if(!j)break}h=c[1210]|0;if(j>>>0>>0)Wa();c[j+24>>2]=k;k=c[a+(b+16)>>2]|0;do if(k)if(k>>>0>>0)Wa();else{c[j+16>>2]=k;c[k+24>>2]=j;break}while(0);h=c[a+(b+20)>>2]|0;if(h)if(h>>>0<(c[1210]|0)>>>0)Wa();else{c[j+20>>2]=h;c[h+24>>2]=j;break}}}else{j=c[a+(b+8)>>2]|0;a=c[a+(b+12)>>2]|0;b=4864+(m<<1<<2)|0;if((j|0)!=(b|0)){if(j>>>0>>0)Wa();if((c[j+12>>2]|0)!=(h|0))Wa()}if((a|0)==(j|0)){c[1206]=c[1206]&~(1<>>0>>0)Wa();b=a+8|0;if((c[b>>2]|0)==(h|0))k=b;else Wa()}else k=a+8|0;c[j+12>>2]=a;c[k>>2]=j}while(0);c[e+4>>2]=n|1;c[e+n>>2]=n;if((e|0)==(c[1211]|0)){c[1208]=n;i=d;return}}else{c[m>>2]=o&-2;c[e+4>>2]=n|1;c[e+n>>2]=n}b=n>>>3;if(n>>>0<256){a=b<<1;h=4864+(a<<2)|0;j=c[1206]|0;b=1<>2]|0;if(j>>>0<(c[1210]|0)>>>0)Wa();else{g=a;f=j}}else{c[1206]=j|b;g=4864+(a+2<<2)|0;f=h}c[g>>2]=e;c[f+12>>2]=e;c[e+8>>2]=f;c[e+12>>2]=h;i=d;return}f=n>>>8;if(f)if(n>>>0>16777215)f=31;else{u=(f+1048320|0)>>>16&8;v=f<>>16&4;v=v<>>16&2;f=14-(t|u|f)+(v<>>15)|0;f=n>>>(f+7|0)&1|f<<1}else f=0;g=5128+(f<<2)|0;c[e+28>>2]=f;c[e+20>>2]=0;c[e+16>>2]=0;a=c[1207]|0;h=1<>2]=e;c[e+24>>2]=g;c[e+12>>2]=e;c[e+8>>2]=e;i=d;return}g=c[g>>2]|0;if((f|0)==31)f=0;else f=25-(f>>>1)|0;a:do if((c[g+4>>2]&-8|0)!=(n|0)){f=n<>>31<<2)+16|0;g=c[h>>2]|0;if(!g)break;if((c[g+4>>2]&-8|0)==(n|0))break a;else{f=f<<1;a=g}}if(h>>>0<(c[1210]|0)>>>0)Wa();c[h>>2]=e;c[e+24>>2]=a;c[e+12>>2]=e;c[e+8>>2]=e;i=d;return}while(0);f=g+8|0;h=c[f>>2]|0;v=c[1210]|0;if(!(g>>>0>=v>>>0&h>>>0>=v>>>0))Wa();c[h+12>>2]=e;c[f>>2]=e;c[e+8>>2]=h;c[e+12>>2]=g;c[e+24>>2]=0;i=d;return}function he(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,j=0,k=0;e=i;g=a+4|0;h=c[g>>2]|0;f=a+100|0;if(h>>>0<(c[f>>2]|0)>>>0){c[g>>2]=h+1;j=d[h>>0]|0}else j=Zd(a)|0;if((j|0)==43|(j|0)==45){k=c[g>>2]|0;h=(j|0)==45&1;if(k>>>0<(c[f>>2]|0)>>>0){c[g>>2]=k+1;j=d[k>>0]|0}else j=Zd(a)|0;if((j+ -48|0)>>>0>9&(b|0)!=0?(c[f>>2]|0)!=0:0)c[g>>2]=(c[g>>2]|0)+ -1}else h=0;if((j+ -48|0)>>>0>9){if(!(c[f>>2]|0)){j=-2147483648;k=0;F=j;i=e;return k|0}c[g>>2]=(c[g>>2]|0)+ -1;j=-2147483648;k=0;F=j;i=e;return k|0}else b=0;do{b=j+ -48+(b*10|0)|0;j=c[g>>2]|0;if(j>>>0<(c[f>>2]|0)>>>0){c[g>>2]=j+1;j=d[j>>0]|0}else j=Zd(a)|0}while((j+ -48|0)>>>0<10&(b|0)<214748364);k=((b|0)<0)<<31>>31;if((j+ -48|0)>>>0<10)do{k=we(b|0,k|0,10,0)|0;b=F;j=ne(j|0,((j|0)<0)<<31>>31|0,-48,-1)|0;b=ne(j|0,F|0,k|0,b|0)|0;k=F;j=c[g>>2]|0;if(j>>>0<(c[f>>2]|0)>>>0){c[g>>2]=j+1;j=d[j>>0]|0}else j=Zd(a)|0}while((j+ -48|0)>>>0<10&((k|0)<21474836|(k|0)==21474836&b>>>0<2061584302));if((j+ -48|0)>>>0<10)do{j=c[g>>2]|0;if(j>>>0<(c[f>>2]|0)>>>0){c[g>>2]=j+1;j=d[j>>0]|0}else j=Zd(a)|0}while((j+ -48|0)>>>0<10);if(c[f>>2]|0)c[g>>2]=(c[g>>2]|0)+ -1;g=(h|0)!=0;h=je(0,0,b|0,k|0)|0;j=g?F:k;k=g?h:b;F=j;i=e;return k|0}function ie(){}function je(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;b=b-d-(c>>>0>a>>>0|0)>>>0;return(F=b,a-c>>>0|0)|0}function ke(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=b+e|0;if((e|0)>=20){d=d&255;i=b&3;h=d|d<<8|d<<16|d<<24;g=f&~3;if(i){i=b+4-i|0;while((b|0)<(i|0)){a[b>>0]=d;b=b+1|0}}while((b|0)<(g|0)){c[b>>2]=h;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return b-e|0}function le(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){F=b<>>32-c;return a<>0]|0)c=c+1|0;return c-b|0}function ne(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return(F=b+d+(c>>>0>>0|0)>>>0,c|0)|0}function oe(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){F=b>>>c;return a>>>c|(b&(1<>>c-32|0}function pe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;if((e|0)>=4096)return Ca(b|0,d|0,e|0)|0;f=b|0;if((b&3)==(d&3)){while(b&3){if(!e)return f|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}while((e|0)>=4){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0;e=e-4|0}}while((e|0)>0){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}return f|0}function qe(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){F=b>>c;return a>>>c|(b&(1<>c-32|0}function re(b){b=b|0;var c=0;c=a[n+(b>>>24)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+16|0;return(a[n+(b&255)>>0]|0)+24|0}function se(b){b=b|0;var c=0;c=a[m+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[m+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[m+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return(a[m+(b>>>24)>>0]|0)+24|0}function te(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;d=b&65535;c=ba(d,f)|0;e=a>>>16;d=(c>>>16)+(ba(d,e)|0)|0;b=b>>>16;a=ba(b,f)|0;return(F=(d>>>16)+(ba(b,e)|0)+(((d&65535)+a|0)>>>16)|0,d+a<<16|c&65535|0)|0}function ue(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=je(j^a,i^b,j,i)|0;g=F;b=f^j;a=e^i;a=je((ze(h,g,je(f^c,e^d,f,e)|0,F,0)|0)^b,F^a,b,a)|0;return a|0}function ve(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,j=0,k=0,l=0;f=i;i=i+8|0;j=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;l=e>>31|((e|0)<0?-1:0)<<1;k=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;b=je(h^a,g^b,h,g)|0;a=F;ze(b,a,je(l^d,k^e,l,k)|0,F,j)|0;a=je(c[j>>2]^h,c[j+4>>2]^g,h,g)|0;b=F;i=f;return(F=b,a)|0}function we(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=a;f=c;a=te(e,f)|0;c=F;return(F=(ba(b,f)|0)+(ba(d,e)|0)+c|c&0,a|0|0)|0}function xe(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;a=ze(a,b,c,d,0)|0;return a|0}function ye(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=i;i=i+8|0;f=g|0;ze(a,b,d,e,f)|0;i=g;return(F=c[f+4>>2]|0,c[f>>2]|0)|0}function ze(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;h=a;j=b;i=j;l=d;g=e;k=g;if(!i){g=(f|0)!=0;if(!k){if(g){c[f>>2]=(h>>>0)%(l>>>0);c[f+4>>2]=0}k=0;m=(h>>>0)/(l>>>0)>>>0;return(F=k,m)|0}else{if(!g){l=0;m=0;return(F=l,m)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;l=0;m=0;return(F=l,m)|0}}m=(k|0)==0;do if(l){if(!m){k=(re(k|0)|0)-(re(i|0)|0)|0;if(k>>>0<=31){m=k+1|0;l=31-k|0;a=k-31>>31;j=m;b=h>>>(m>>>0)&a|i<>>(m>>>0)&a;k=0;l=h<>2]=a|0;c[f+4>>2]=j|b&0;l=0;m=0;return(F=l,m)|0}k=l-1|0;if(k&l){l=(re(l|0)|0)+33-(re(i|0)|0)|0;p=64-l|0;m=32-l|0;n=m>>31;o=l-32|0;a=o>>31;j=l;b=m-1>>31&i>>>(o>>>0)|(i<>>(l>>>0))&a;a=a&i>>>(l>>>0);k=h<>>(o>>>0))&n|h<>31;break}if(f){c[f>>2]=k&h;c[f+4>>2]=0}if((l|0)==1){o=j|b&0;p=a|0|0;return(F=o,p)|0}else{p=se(l|0)|0;o=i>>>(p>>>0)|0;p=i<<32-p|h>>>(p>>>0)|0;return(F=o,p)|0}}else{if(m){if(f){c[f>>2]=(i>>>0)%(l>>>0);c[f+4>>2]=0}o=0;p=(i>>>0)/(l>>>0)>>>0;return(F=o,p)|0}if(!h){if(f){c[f>>2]=0;c[f+4>>2]=(i>>>0)%(k>>>0)}o=0;p=(i>>>0)/(k>>>0)>>>0;return(F=o,p)|0}l=k-1|0;if(!(l&k)){if(f){c[f>>2]=a|0;c[f+4>>2]=l&i|b&0}o=0;p=i>>>((se(k|0)|0)>>>0);return(F=o,p)|0}k=(re(k|0)|0)-(re(i|0)|0)|0;if(k>>>0<=30){a=k+1|0;l=31-k|0;j=a;b=i<>>(a>>>0);a=i>>>(a>>>0);k=0;l=h<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return(F=o,p)|0}while(0);if(!j){g=l;e=0;i=0}else{h=d|0|0;g=g|e&0;e=ne(h,g,-1,-1)|0;d=F;i=0;do{m=l;l=k>>>31|l<<1;k=i|k<<1;m=b<<1|m>>>31|0;n=b>>>31|a<<1|0;je(e,d,m,n)|0;p=F;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;b=je(m,n,o&h,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&g)|0;a=F;j=j-1|0}while((j|0)!=0);g=l;e=0}h=0;if(f){c[f>>2]=b;c[f+4>>2]=a}o=(k|0)>>>31|(g|h)<<1|(h<<1|k>>>31)&0|e;p=(k<<1|0>>>31)&-2|i;return(F=o,p)|0}function Ae(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return eb[a&1](b|0,c|0,d|0)|0}function Be(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;fb[a&3](b|0,c|0,d|0,e|0,f|0)}function Ce(a,b){a=a|0;b=b|0;gb[a&31](b|0)}function De(a,b,c){a=a|0;b=b|0;c=c|0;hb[a&3](b|0,c|0)}function Ee(a,b){a=a|0;b=b|0;return ib[a&1](b|0)|0}function Fe(a){a=a|0;jb[a&3]()}function Ge(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;kb[a&3](b|0,c|0,d|0,e|0,f|0,g|0)}function He(a,b,c){a=a|0;b=b|0;c=c|0;return lb[a&3](b|0,c|0)|0}function Ie(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;mb[a&3](b|0,c|0,d|0,e|0)}function Je(a,b,c){a=a|0;b=b|0;c=c|0;ca(0);return 0}function Ke(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;ca(1)}function Le(a){a=a|0;ca(2)}function Me(a,b){a=a|0;b=b|0;ca(3)}function Ne(a){a=a|0;ca(4);return 0}function Oe(){ca(5)}function Pe(){bb()}function Qe(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;ca(6)}function Re(a,b){a=a|0;b=b|0;ca(7);return 0}function Se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;ca(8)} + + + + +// EMSCRIPTEN_END_FUNCS +// (start of meteor/midamble.js) +// This "midamble" is hacked into the output JS in a place +// where it has access to the inner function generated +// by Emscripten, the one that starts with "use asm". +// NOTE: This doesn't work with minification on! +/////setInnerMalloc = function (hookedMalloc) { +///// _malloc = hookedMalloc; +/////}; +/////setInnerFree = function (hookedFree) { +///// _free = hookedFree; +/////}; +// (end of meteor/midamble.js) +var eb=[Je,Dd];var fb=[Ke,Kd,Jd,Ke];var gb=[Le,wb,yb,Ab,Db,Ib,Hb,bc,dc,zc,yc,Oc,rd,qd,yd,Bd,zd,Ad,Cd,zb,Rd,Le,Le,Le,Le,Le,Le,Le,Le,Le,Le,Le];var hb=[Me,Cb,Fb,fc];var ib=[Ne,sd];var jb=[Oe,Pe,Pd,Qd];var kb=[Qe,Md,Ld,Qe];var lb=[Re,Bb,Eb,ec];var mb=[Se,Fd,Gd,Se];return{_yo:$c,_strlen:me,_retireVar:id,_bitshift64Lshr:oe,_unyo:ad,_solve:ed,_bitshift64Shl:le,_getSolution:fd,___cxa_is_pointer_type:Od,_memset:ke,_getNumVars:gd,_memcpy:pe,_getConflictClauseSize:jd,_addClause:dd,_i64Subtract:je,_createTheSolver:bd,_realloc:Ud,_i64Add:ne,_solveAssuming:hd,___cxa_can_catch:Nd,_ensureVar:cd,_getConflictClause:kd,_free:Td,_malloc:Sd,__GLOBAL__I_a:cc,__GLOBAL__I_a127:Pc,runPostSets:ie,stackAlloc:nb,stackSave:ob,stackRestore:pb,setThrew:qb,setTempRet0:tb,getTempRet0:ub,dynCall_iiii:Ae,dynCall_viiiii:Be,dynCall_vi:Ce,dynCall_vii:De,dynCall_ii:Ee,dynCall_v:Fe,dynCall_viiiiii:Ge,dynCall_iii:He,dynCall_viiii:Ie}}) + + +// EMSCRIPTEN_END_ASM +(Module.asmGlobalArg,Module.asmLibraryArg,buffer);var _yo=Module["_yo"]=asm["_yo"];var _strlen=Module["_strlen"]=asm["_strlen"];var _retireVar=Module["_retireVar"]=asm["_retireVar"];var _bitshift64Lshr=Module["_bitshift64Lshr"]=asm["_bitshift64Lshr"];var _unyo=Module["_unyo"]=asm["_unyo"];var _solve=Module["_solve"]=asm["_solve"];var _bitshift64Shl=Module["_bitshift64Shl"]=asm["_bitshift64Shl"];var _getSolution=Module["_getSolution"]=asm["_getSolution"];var ___cxa_is_pointer_type=Module["___cxa_is_pointer_type"]=asm["___cxa_is_pointer_type"];var _memset=Module["_memset"]=asm["_memset"];var _getNumVars=Module["_getNumVars"]=asm["_getNumVars"];var _memcpy=Module["_memcpy"]=asm["_memcpy"];var _getConflictClauseSize=Module["_getConflictClauseSize"]=asm["_getConflictClauseSize"];var _addClause=Module["_addClause"]=asm["_addClause"];var _i64Subtract=Module["_i64Subtract"]=asm["_i64Subtract"];var _createTheSolver=Module["_createTheSolver"]=asm["_createTheSolver"];var _realloc=Module["_realloc"]=asm["_realloc"];var _i64Add=Module["_i64Add"]=asm["_i64Add"];var _solveAssuming=Module["_solveAssuming"]=asm["_solveAssuming"];var ___cxa_can_catch=Module["___cxa_can_catch"]=asm["___cxa_can_catch"];var _ensureVar=Module["_ensureVar"]=asm["_ensureVar"];var _getConflictClause=Module["_getConflictClause"]=asm["_getConflictClause"];var _free=Module["_free"]=asm["_free"];var _malloc=Module["_malloc"]=asm["_malloc"];var __GLOBAL__I_a=Module["__GLOBAL__I_a"]=asm["__GLOBAL__I_a"];var __GLOBAL__I_a127=Module["__GLOBAL__I_a127"]=asm["__GLOBAL__I_a127"];var runPostSets=Module["runPostSets"]=asm["runPostSets"];var dynCall_iiii=Module["dynCall_iiii"]=asm["dynCall_iiii"];var dynCall_viiiii=Module["dynCall_viiiii"]=asm["dynCall_viiiii"];var dynCall_vi=Module["dynCall_vi"]=asm["dynCall_vi"];var dynCall_vii=Module["dynCall_vii"]=asm["dynCall_vii"];var dynCall_ii=Module["dynCall_ii"]=asm["dynCall_ii"];var dynCall_v=Module["dynCall_v"]=asm["dynCall_v"];var dynCall_viiiiii=Module["dynCall_viiiiii"]=asm["dynCall_viiiiii"];var dynCall_iii=Module["dynCall_iii"]=asm["dynCall_iii"];var dynCall_viiii=Module["dynCall_viiii"]=asm["dynCall_viiii"];Runtime.stackAlloc=asm["stackAlloc"];Runtime.stackSave=asm["stackSave"];Runtime.stackRestore=asm["stackRestore"];Runtime.setTempRet0=asm["setTempRet0"];Runtime.getTempRet0=asm["getTempRet0"];var i64Math=(function(){var goog={math:{}};goog.math.Long=(function(low,high){this.low_=low|0;this.high_=high|0});goog.math.Long.IntCache_={};goog.math.Long.fromInt=(function(value){if(-128<=value&&value<128){var cachedObj=goog.math.Long.IntCache_[value];if(cachedObj){return cachedObj}}var obj=new goog.math.Long(value|0,value<0?-1:0);if(-128<=value&&value<128){goog.math.Long.IntCache_[value]=obj}return obj});goog.math.Long.fromNumber=(function(value){if(isNaN(value)||!isFinite(value)){return goog.math.Long.ZERO}else if(value<=-goog.math.Long.TWO_PWR_63_DBL_){return goog.math.Long.MIN_VALUE}else if(value+1>=goog.math.Long.TWO_PWR_63_DBL_){return goog.math.Long.MAX_VALUE}else if(value<0){return goog.math.Long.fromNumber(-value).negate()}else{return new goog.math.Long(value%goog.math.Long.TWO_PWR_32_DBL_|0,value/goog.math.Long.TWO_PWR_32_DBL_|0)}});goog.math.Long.fromBits=(function(lowBits,highBits){return new goog.math.Long(lowBits,highBits)});goog.math.Long.fromString=(function(str,opt_radix){if(str.length==0){throw Error("number format error: empty string")}var radix=opt_radix||10;if(radix<2||36=0){throw Error('number format error: interior "-" character: '+str)}var radixToPower=goog.math.Long.fromNumber(Math.pow(radix,8));var result=goog.math.Long.ZERO;for(var i=0;i=0?this.low_:goog.math.Long.TWO_PWR_32_DBL_+this.low_});goog.math.Long.prototype.getNumBitsAbs=(function(){if(this.isNegative()){if(this.equals(goog.math.Long.MIN_VALUE)){return 64}else{return this.negate().getNumBitsAbs()}}else{var val=this.high_!=0?this.high_:this.low_;for(var bit=31;bit>0;bit--){if((val&1<0});goog.math.Long.prototype.greaterThanOrEqual=(function(other){return this.compare(other)>=0});goog.math.Long.prototype.compare=(function(other){if(this.equals(other)){return 0}var thisNeg=this.isNegative();var otherNeg=other.isNegative();if(thisNeg&&!otherNeg){return-1}if(!thisNeg&&otherNeg){return 1}if(this.subtract(other).isNegative()){return-1}else{return 1}});goog.math.Long.prototype.negate=(function(){if(this.equals(goog.math.Long.MIN_VALUE)){return goog.math.Long.MIN_VALUE}else{return this.not().add(goog.math.Long.ONE)}});goog.math.Long.prototype.add=(function(other){var a48=this.high_>>>16;var a32=this.high_&65535;var a16=this.low_>>>16;var a00=this.low_&65535;var b48=other.high_>>>16;var b32=other.high_&65535;var b16=other.low_>>>16;var b00=other.low_&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00+b00;c16+=c00>>>16;c00&=65535;c16+=a16+b16;c32+=c16>>>16;c16&=65535;c32+=a32+b32;c48+=c32>>>16;c32&=65535;c48+=a48+b48;c48&=65535;return goog.math.Long.fromBits(c16<<16|c00,c48<<16|c32)});goog.math.Long.prototype.subtract=(function(other){return this.add(other.negate())});goog.math.Long.prototype.multiply=(function(other){if(this.isZero()){return goog.math.Long.ZERO}else if(other.isZero()){return goog.math.Long.ZERO}if(this.equals(goog.math.Long.MIN_VALUE)){return other.isOdd()?goog.math.Long.MIN_VALUE:goog.math.Long.ZERO}else if(other.equals(goog.math.Long.MIN_VALUE)){return this.isOdd()?goog.math.Long.MIN_VALUE:goog.math.Long.ZERO}if(this.isNegative()){if(other.isNegative()){return this.negate().multiply(other.negate())}else{return this.negate().multiply(other).negate()}}else if(other.isNegative()){return this.multiply(other.negate()).negate()}if(this.lessThan(goog.math.Long.TWO_PWR_24_)&&other.lessThan(goog.math.Long.TWO_PWR_24_)){return goog.math.Long.fromNumber(this.toNumber()*other.toNumber())}var a48=this.high_>>>16;var a32=this.high_&65535;var a16=this.low_>>>16;var a00=this.low_&65535;var b48=other.high_>>>16;var b32=other.high_&65535;var b16=other.low_>>>16;var b00=other.low_&65535;var c48=0,c32=0,c16=0,c00=0;c00+=a00*b00;c16+=c00>>>16;c00&=65535;c16+=a16*b00;c32+=c16>>>16;c16&=65535;c16+=a00*b16;c32+=c16>>>16;c16&=65535;c32+=a32*b00;c48+=c32>>>16;c32&=65535;c32+=a16*b16;c48+=c32>>>16;c32&=65535;c32+=a00*b32;c48+=c32>>>16;c32&=65535;c48+=a48*b00+a32*b16+a16*b32+a00*b48;c48&=65535;return goog.math.Long.fromBits(c16<<16|c00,c48<<16|c32)});goog.math.Long.prototype.div=(function(other){if(other.isZero()){throw Error("division by zero")}else if(this.isZero()){return goog.math.Long.ZERO}if(this.equals(goog.math.Long.MIN_VALUE)){if(other.equals(goog.math.Long.ONE)||other.equals(goog.math.Long.NEG_ONE)){return goog.math.Long.MIN_VALUE}else if(other.equals(goog.math.Long.MIN_VALUE)){return goog.math.Long.ONE}else{var halfThis=this.shiftRight(1);var approx=halfThis.div(other).shiftLeft(1);if(approx.equals(goog.math.Long.ZERO)){return other.isNegative()?goog.math.Long.ONE:goog.math.Long.NEG_ONE}else{var rem=this.subtract(other.multiply(approx));var result=approx.add(rem.div(other));return result}}}else if(other.equals(goog.math.Long.MIN_VALUE)){return goog.math.Long.ZERO}if(this.isNegative()){if(other.isNegative()){return this.negate().div(other.negate())}else{return this.negate().div(other).negate()}}else if(other.isNegative()){return this.div(other.negate()).negate()}var res=goog.math.Long.ZERO;var rem=this;while(rem.greaterThanOrEqual(other)){var approx=Math.max(1,Math.floor(rem.toNumber()/other.toNumber()));var log2=Math.ceil(Math.log(approx)/Math.LN2);var delta=log2<=48?1:Math.pow(2,log2-48);var approxRes=goog.math.Long.fromNumber(approx);var approxRem=approxRes.multiply(other);while(approxRem.isNegative()||approxRem.greaterThan(rem)){approx-=delta;approxRes=goog.math.Long.fromNumber(approx);approxRem=approxRes.multiply(other)}if(approxRes.isZero()){approxRes=goog.math.Long.ONE}res=res.add(approxRes);rem=rem.subtract(approxRem)}return res});goog.math.Long.prototype.modulo=(function(other){return this.subtract(this.div(other).multiply(other))});goog.math.Long.prototype.not=(function(){return goog.math.Long.fromBits(~this.low_,~this.high_)});goog.math.Long.prototype.and=(function(other){return goog.math.Long.fromBits(this.low_&other.low_,this.high_&other.high_)});goog.math.Long.prototype.or=(function(other){return goog.math.Long.fromBits(this.low_|other.low_,this.high_|other.high_)});goog.math.Long.prototype.xor=(function(other){return goog.math.Long.fromBits(this.low_^other.low_,this.high_^other.high_)});goog.math.Long.prototype.shiftLeft=(function(numBits){numBits&=63;if(numBits==0){return this}else{var low=this.low_;if(numBits<32){var high=this.high_;return goog.math.Long.fromBits(low<>>32-numBits)}else{return goog.math.Long.fromBits(0,low<>>numBits|high<<32-numBits,high>>numBits)}else{return goog.math.Long.fromBits(high>>numBits-32,high>=0?0:-1)}}});goog.math.Long.prototype.shiftRightUnsigned=(function(numBits){numBits&=63;if(numBits==0){return this}else{var high=this.high_;if(numBits<32){var low=this.low_;return goog.math.Long.fromBits(low>>>numBits|high<<32-numBits,high>>>numBits)}else if(numBits==32){return goog.math.Long.fromBits(high,0)}else{return goog.math.Long.fromBits(high>>>numBits-32,0)}}});var navigator={appName:"Modern Browser"};var dbits;var canary=0xdeadbeefcafe;var j_lm=(canary&16777215)==15715070;function BigInteger(a,b,c){if(a!=null)if("number"==typeof a)this.fromNumber(a,b,c);else if(b==null&&"string"!=typeof a)this.fromString(a,256);else this.fromString(a,b)}function nbi(){return new BigInteger(null)}function am1(i,x,w,j,c,n){while(--n>=0){var v=x*this[i++]+w[j]+c;c=Math.floor(v/67108864);w[j++]=v&67108863}return c}function am2(i,x,w,j,c,n){var xl=x&32767,xh=x>>15;while(--n>=0){var l=this[i]&32767;var h=this[i++]>>15;var m=xh*l+h*xl;l=xl*l+((m&32767)<<15)+w[j]+(c&1073741823);c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);w[j++]=l&1073741823}return c}function am3(i,x,w,j,c,n){var xl=x&16383,xh=x>>14;while(--n>=0){var l=this[i]&16383;var h=this[i++]>>14;var m=xh*l+h*xl;l=xl*l+((m&16383)<<14)+w[j]+c;c=(l>>28)+(m>>14)+xh*h;w[j++]=l&268435455}return c}if(j_lm&&navigator.appName=="Microsoft Internet Explorer"){BigInteger.prototype.am=am2;dbits=30}else if(j_lm&&navigator.appName!="Netscape"){BigInteger.prototype.am=am1;dbits=26}else{BigInteger.prototype.am=am3;dbits=28}BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=(1<=0;--i)r[i]=this[i];r.t=this.t;r.s=this.s}function bnpFromInt(x){this.t=1;this.s=x<0?-1:0;if(x>0)this[0]=x;else if(x<-1)this[0]=x+DV;else this.t=0}function nbv(i){var r=nbi();r.fromInt(i);return r}function bnpFromString(s,b){var k;if(b==16)k=4;else if(b==8)k=3;else if(b==256)k=8;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else{this.fromRadix(s,b);return}this.t=0;this.s=0;var i=s.length,mi=false,sh=0;while(--i>=0){var x=k==8?s[i]&255:intAt(s,i);if(x<0){if(s.charAt(i)=="-")mi=true;continue}mi=false;if(sh==0)this[this.t++]=x;else if(sh+k>this.DB){this[this.t-1]|=(x&(1<>this.DB-sh}else this[this.t-1]|=x<=this.DB)sh-=this.DB}if(k==8&&(s[0]&128)!=0){this.s=-1;if(sh>0)this[this.t-1]|=(1<0&&this[this.t-1]==c)--this.t}function bnToString(b){if(this.s<0)return"-"+this.negate().toString(b);var k;if(b==16)k=4;else if(b==8)k=3;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else return this.toRadix(b);var km=(1<0){if(p>p)>0){m=true;r=int2char(d)}while(i>=0){if(p>(p+=this.DB-k)}else{d=this[i]>>(p-=k)&km;if(p<=0){p+=this.DB;--i}}if(d>0)m=true;if(m)r+=int2char(d)}}return m?r:"0"}function bnNegate(){var r=nbi();BigInteger.ZERO.subTo(this,r);return r}function bnAbs(){return this.s<0?this.negate():this}function bnCompareTo(a){var r=this.s-a.s;if(r!=0)return r;var i=this.t;r=i-a.t;if(r!=0)return this.s<0?-r:r;while(--i>=0)if((r=this[i]-a[i])!=0)return r;return 0}function nbits(x){var r=1,t;if((t=x>>>16)!=0){x=t;r+=16}if((t=x>>8)!=0){x=t;r+=8}if((t=x>>4)!=0){x=t;r+=4}if((t=x>>2)!=0){x=t;r+=2}if((t=x>>1)!=0){x=t;r+=1}return r}function bnBitLength(){if(this.t<=0)return 0;return this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)}function bnpDLShiftTo(n,r){var i;for(i=this.t-1;i>=0;--i)r[i+n]=this[i];for(i=n-1;i>=0;--i)r[i]=0;r.t=this.t+n;r.s=this.s}function bnpDRShiftTo(n,r){for(var i=n;i=0;--i){r[i+ds+1]=this[i]>>cbs|c;c=(this[i]&bm)<=0;--i)r[i]=0;r[ds]=c;r.t=this.t+ds+1;r.s=this.s;r.clamp()}function bnpRShiftTo(n,r){r.s=this.s;var ds=Math.floor(n/this.DB);if(ds>=this.t){r.t=0;return}var bs=n%this.DB;var cbs=this.DB-bs;var bm=(1<>bs;for(var i=ds+1;i>bs}if(bs>0)r[this.t-ds-1]|=(this.s&bm)<>=this.DB}if(a.t>=this.DB}c+=this.s}else{c+=this.s;while(i>=this.DB}c-=a.s}r.s=c<0?-1:0;if(c<-1)r[i++]=this.DV+c;else if(c>0)r[i++]=c;r.t=i;r.clamp()}function bnpMultiplyTo(a,r){var x=this.abs(),y=a.abs();var i=x.t;r.t=i+y.t;while(--i>=0)r[i]=0;for(i=0;i=0)r[i]=0;for(i=0;i=x.DV){r[i+x.t]-=x.DV;r[i+x.t+1]=1}}if(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.clamp()}function bnpDivRemTo(m,q,r){var pm=m.abs();if(pm.t<=0)return;var pt=this.abs();if(pt.t0){pm.lShiftTo(nsh,y);pt.lShiftTo(nsh,r)}else{pm.copyTo(y);pt.copyTo(r)}var ys=y.t;var y0=y[ys-1];if(y0==0)return;var yt=y0*(1<1?y[ys-2]>>this.F2:0);var d1=this.FV/yt,d2=(1<=0){r[r.t++]=1;r.subTo(t,r)}BigInteger.ONE.dlShiftTo(ys,t);t.subTo(y,y);while(y.t=0){var qd=r[--i]==y0?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);if((r[i]+=y.am(0,qd,r,j,0,ys))0)r.rShiftTo(nsh,r);if(ts<0)BigInteger.ZERO.subTo(r,r)}function bnMod(a){var r=nbi();this.abs().divRemTo(a,null,r);if(this.s<0&&r.compareTo(BigInteger.ZERO)>0)a.subTo(r,r);return r}function Classic(m){this.m=m}function cConvert(x){if(x.s<0||x.compareTo(this.m)>=0)return x.mod(this.m);else return x}function cRevert(x){return x}function cReduce(x){x.divRemTo(this.m,null,x)}function cMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r)}function cSqrTo(x,r){x.squareTo(r);this.reduce(r)}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo=cSqrTo;function bnpInvDigit(){if(this.t<1)return 0;var x=this[0];if((x&1)==0)return 0;var y=x&3;y=y*(2-(x&15)*y)&15;y=y*(2-(x&255)*y)&255;y=y*(2-((x&65535)*y&65535))&65535;y=y*(2-x*y%this.DV)%this.DV;return y>0?this.DV-y:-y}function Montgomery(m){this.m=m;this.mp=m.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<0)this.m.subTo(r,r);return r}function montRevert(x){var r=nbi();x.copyTo(r);this.reduce(r);return r}function montReduce(x){while(x.t<=this.mt2)x[x.t++]=0;for(var i=0;i>15)*this.mpl&this.um)<<15)&x.DM;j=i+this.m.t;x[j]+=this.m.am(0,u0,x,i,0,this.m.t);while(x[j]>=x.DV){x[j]-=x.DV;x[++j]++}}x.clamp();x.drShiftTo(this.m.t,x);if(x.compareTo(this.m)>=0)x.subTo(this.m,x)}function montSqrTo(x,r){x.squareTo(r);this.reduce(r)}function montMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r)}Montgomery.prototype.convert=montConvert;Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return(this.t>0?this[0]&1:this.s)==0}function bnpExp(e,z){if(e>4294967295||e<1)return BigInteger.ONE;var r=nbi(),r2=nbi(),g=z.convert(this),i=nbits(e)-1;g.copyTo(r);while(--i>=0){z.sqrTo(r,r2);if((e&1<0)z.mulTo(r2,g,r);else{var t=r;r=r2;r2=t}}return z.revert(r)}function bnModPowInt(e,m){var z;if(e<256||m.isEven())z=new Classic(m);else z=new Montgomery(m);return this.exp(e,z)}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;BigInteger.prototype.clamp=bnpClamp;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.prototype.drShiftTo=bnpDRShiftTo;BigInteger.prototype.lShiftTo=bnpLShiftTo;BigInteger.prototype.rShiftTo=bnpRShiftTo;BigInteger.prototype.subTo=bnpSubTo;BigInteger.prototype.multiplyTo=bnpMultiplyTo;BigInteger.prototype.squareTo=bnpSquareTo;BigInteger.prototype.divRemTo=bnpDivRemTo;BigInteger.prototype.invDigit=bnpInvDigit;BigInteger.prototype.isEven=bnpIsEven;BigInteger.prototype.exp=bnpExp;BigInteger.prototype.toString=bnToString;BigInteger.prototype.negate=bnNegate;BigInteger.prototype.abs=bnAbs;BigInteger.prototype.compareTo=bnCompareTo;BigInteger.prototype.bitLength=bnBitLength;BigInteger.prototype.mod=bnMod;BigInteger.prototype.modPowInt=bnModPowInt;BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1);function bnpFromRadix(s,b){this.fromInt(0);if(b==null)b=10;var cs=this.chunkSize(b);var d=Math.pow(b,cs),mi=false,j=0,w=0;for(var i=0;i=cs){this.dMultiply(d);this.dAddOffset(w,0);j=0;w=0}}if(j>0){this.dMultiply(Math.pow(b,j));this.dAddOffset(w,0)}if(mi)BigInteger.ZERO.subTo(this,this)}function bnpChunkSize(r){return Math.floor(Math.LN2*this.DB/Math.log(r))}function bnSigNum(){if(this.s<0)return-1;else if(this.t<=0||this.t==1&&this[0]<=0)return 0;else return 1}function bnpDMultiply(n){this[this.t]=this.am(0,n-1,this,0,0,this.t);++this.t;this.clamp()}function bnpDAddOffset(n,w){if(n==0)return;while(this.t<=w)this[this.t++]=0;this[w]+=n;while(this[w]>=this.DV){this[w]-=this.DV;if(++w>=this.t)this[this.t++]=0;++this[w]}}function bnpToRadix(b){if(b==null)b=10;if(this.signum()==0||b<2||b>36)return"0";var cs=this.chunkSize(b);var a=Math.pow(b,cs);var d=nbv(a),y=nbi(),z=nbi(),r="";this.divRemTo(d,y,z);while(y.signum()>0){r=(a+z.intValue()).toString(b).substr(1)+r;y.divRemTo(d,y,z)}return z.intValue().toString(b)+r}function bnIntValue(){if(this.s<0){if(this.t==1)return this[0]-this.DV;else if(this.t==0)return-1}else if(this.t==1)return this[0];else if(this.t==0)return 0;return(this[1]&(1<<32-this.DB)-1)<>=this.DB}if(a.t>=this.DB}c+=this.s}else{c+=this.s;while(i>=this.DB}c+=a.s}r.s=c<0?-1:0;if(c>0)r[i++]=c;else if(c<-1)r[i++]=this.DV+c;r.t=i;r.clamp()}BigInteger.prototype.fromRadix=bnpFromRadix;BigInteger.prototype.chunkSize=bnpChunkSize;BigInteger.prototype.signum=bnSigNum;BigInteger.prototype.dMultiply=bnpDMultiply;BigInteger.prototype.dAddOffset=bnpDAddOffset;BigInteger.prototype.toRadix=bnpToRadix;BigInteger.prototype.intValue=bnIntValue;BigInteger.prototype.addTo=bnpAddTo;var Wrapper={abs:(function(l,h){var x=new goog.math.Long(l,h);var ret;if(x.isNegative()){ret=x.negate()}else{ret=x}HEAP32[tempDoublePtr>>2]=ret.low_;HEAP32[tempDoublePtr+4>>2]=ret.high_}),ensureTemps:(function(){if(Wrapper.ensuredTemps)return;Wrapper.ensuredTemps=true;Wrapper.two32=new BigInteger;Wrapper.two32.fromString("4294967296",10);Wrapper.two64=new BigInteger;Wrapper.two64.fromString("18446744073709551616",10);Wrapper.temp1=new BigInteger;Wrapper.temp2=new BigInteger}),lh2bignum:(function(l,h){var a=new BigInteger;a.fromString(h.toString(),10);var b=new BigInteger;a.multiplyTo(Wrapper.two32,b);var c=new BigInteger;c.fromString(l.toString(),10);var d=new BigInteger;c.addTo(b,d);return d}),stringify:(function(l,h,unsigned){var ret=(new goog.math.Long(l,h)).toString();if(unsigned&&ret[0]=="-"){Wrapper.ensureTemps();var bignum=new BigInteger;bignum.fromString(ret,10);ret=new BigInteger;Wrapper.two64.addTo(bignum,ret);ret=ret.toString(10)}return ret}),fromString:(function(str,base,min,max,unsigned){Wrapper.ensureTemps();var bignum=new BigInteger;bignum.fromString(str,base);var bigmin=new BigInteger;bigmin.fromString(min,10);var bigmax=new BigInteger;bigmax.fromString(max,10);if(unsigned&&bignum.compareTo(BigInteger.ZERO)<0){var temp=new BigInteger;bignum.addTo(Wrapper.two64,temp);bignum=temp}var error=false;if(bignum.compareTo(bigmin)<0){bignum=bigmin;error=true}else if(bignum.compareTo(bigmax)>0){bignum=bigmax;error=true}var ret=goog.math.Long.fromString(bignum.toString());HEAP32[tempDoublePtr>>2]=ret.low_;HEAP32[tempDoublePtr+4>>2]=ret.high_;if(error)throw"range error"})};return Wrapper})();if(memoryInitializer){if(typeof Module["locateFile"]==="function"){memoryInitializer=Module["locateFile"](memoryInitializer)}else if(Module["memoryInitializerPrefixURL"]){memoryInitializer=Module["memoryInitializerPrefixURL"]+memoryInitializer}if(ENVIRONMENT_IS_NODE||ENVIRONMENT_IS_SHELL){var data=Module["readBinary"](memoryInitializer);HEAPU8.set(data,STATIC_BASE)}else{addRunDependency("memory initializer");Browser.asyncLoad(memoryInitializer,(function(data){HEAPU8.set(data,STATIC_BASE);removeRunDependency("memory initializer")}),(function(data){throw"could not load memory initializer "+memoryInitializer}))}}function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}ExitStatus.prototype=new Error;ExitStatus.prototype.constructor=ExitStatus;var initialStackTop;var preloadStartTime=null;var calledMain=false;dependenciesFulfilled=function runCaller(){if(!Module["calledRun"]&&shouldRunNow)run();if(!Module["calledRun"])dependenciesFulfilled=runCaller};Module["callMain"]=Module.callMain=function callMain(args){assert(runDependencies==0,"cannot call main when async dependencies remain! (listen on __ATMAIN__)");assert(__ATPRERUN__.length==0,"cannot call main when preRun functions remain to be called");args=args||[];ensureInitRuntime();var argc=args.length+1;function pad(){for(var i=0;i<4-1;i++){argv.push(0)}}var argv=[allocate(intArrayFromString(Module["thisProgram"]),"i8",ALLOC_NORMAL)];pad();for(var i=0;i0){return}preRun();if(runDependencies>0)return;if(Module["calledRun"])return;function doRun(){if(Module["calledRun"])return;Module["calledRun"]=true;if(ABORT)return;ensureInitRuntime();preMain();if(ENVIRONMENT_IS_WEB&&preloadStartTime!==null){Module.printErr("pre-main prep time: "+(Date.now()-preloadStartTime)+" ms")}if(Module["_main"]&&shouldRunNow){Module["callMain"](args)}postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout((function(){setTimeout((function(){Module["setStatus"]("")}),1);doRun()}),1)}else{doRun()}}Module["run"]=Module.run=run;function exit(status){if(Module["noExitRuntime"]){return}ABORT=true;EXITSTATUS=status;STACKTOP=initialStackTop;exitRuntime();if(ENVIRONMENT_IS_NODE){process["stdout"]["once"]("drain",(function(){process["exit"](status)}));console.log(" ");setTimeout((function(){process["exit"](status)}),500)}else if(ENVIRONMENT_IS_SHELL&&typeof quit==="function"){quit(status)}throw new ExitStatus(status)}Module["exit"]=Module.exit=exit;function abort(text){if(text){Module.print(text);Module.printErr(text)}ABORT=true;EXITSTATUS=1;var extra="\nIf this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.";throw"abort() at "+stackTrace()+extra}Module["abort"]=Module.abort=abort;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"]){shouldRunNow=false}run();var origMalloc=Module._malloc;var origFree=Module._free;var MEMSTATS={totalMemory:Module.HEAPU8.length,heapUsed:0};var MEMSTATS_DATA={pointerToSizeMap:{},getSizeOfPointer:(function(ptr){return MEMSTATS_DATA.pointerToSizeMap[ptr]})};Module.MEMSTATS=MEMSTATS;Module.MEMSTATS_DATA=MEMSTATS_DATA;var hookedMalloc=(function(size){var ptr=origMalloc(size);if(!ptr){return 0}MEMSTATS.heapUsed+=size;MEMSTATS_DATA.pointerToSizeMap[ptr]=size;return ptr});var hookedFree=(function(ptr){if(ptr){MEMSTATS.heapUsed-=MEMSTATS_DATA.getSizeOfPointer(ptr)||0;delete MEMSTATS_DATA.pointerToSizeMap[ptr]}return origFree(ptr)});Module._malloc=hookedMalloc;Module._free=hookedFree;_malloc=hookedMalloc;_free=hookedFree;var setInnerMalloc,setInnerFree;if(setInnerMalloc){setInnerMalloc(hookedMalloc);setInnerFree(hookedFree)}return module.exports});if(true){module.exports=C_MINISAT} + + + + + + +/***/ }), +/* 283 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Underscore.js 1.9.1 +// http://underscorejs.org +// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` (`self`) in the browser, `global` + // on the server, or `this` in some virtual machines. We use `self` + // instead of `window` for `WebWorker` support. + var root = typeof self == 'object' && self.self === self && self || + typeof global == 'object' && global.global === global && global || + this || + {}; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype; + var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeCreate = Object.create; + + // Naked function reference for surrogate-prototype-swapping. + var Ctor = function(){}; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for their old module API. If we're in + // the browser, add `_` as a global object. + // (`nodeType` is checked to ensure that `module` + // and `exports` are not HTML elements.) + if ( true && !exports.nodeType) { + if ( true && !module.nodeType && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.9.1'; + + // Internal function that returns an efficient (for current engines) version + // of the passed-in callback, to be repeatedly applied in other Underscore + // functions. + var optimizeCb = function(func, context, argCount) { + if (context === void 0) return func; + switch (argCount == null ? 3 : argCount) { + case 1: return function(value) { + return func.call(context, value); + }; + // The 2-argument case is omitted because we’re not using it. + case 3: return function(value, index, collection) { + return func.call(context, value, index, collection); + }; + case 4: return function(accumulator, value, index, collection) { + return func.call(context, accumulator, value, index, collection); + }; + } + return function() { + return func.apply(context, arguments); + }; + }; + + var builtinIteratee; + + // An internal function to generate callbacks that can be applied to each + // element in a collection, returning the desired result — either `identity`, + // an arbitrary callback, a property matcher, or a property accessor. + var cb = function(value, context, argCount) { + if (_.iteratee !== builtinIteratee) return _.iteratee(value, context); + if (value == null) return _.identity; + if (_.isFunction(value)) return optimizeCb(value, context, argCount); + if (_.isObject(value) && !_.isArray(value)) return _.matcher(value); + return _.property(value); + }; + + // External wrapper for our callback generator. Users may customize + // `_.iteratee` if they want additional predicate/iteratee shorthand styles. + // This abstraction hides the internal-only argCount argument. + _.iteratee = builtinIteratee = function(value, context) { + return cb(value, context, Infinity); + }; + + // Some functions take a variable number of arguments, or a few expected + // arguments at the beginning and then a variable number of values to operate + // on. This helper accumulates all remaining arguments past the function’s + // argument length (or an explicit `startIndex`), into an array that becomes + // the last argument. Similar to ES6’s "rest parameter". + var restArguments = function(func, startIndex) { + startIndex = startIndex == null ? func.length - 1 : +startIndex; + return function() { + var length = Math.max(arguments.length - startIndex, 0), + rest = Array(length), + index = 0; + for (; index < length; index++) { + rest[index] = arguments[index + startIndex]; + } + switch (startIndex) { + case 0: return func.call(this, rest); + case 1: return func.call(this, arguments[0], rest); + case 2: return func.call(this, arguments[0], arguments[1], rest); + } + var args = Array(startIndex + 1); + for (index = 0; index < startIndex; index++) { + args[index] = arguments[index]; + } + args[startIndex] = rest; + return func.apply(this, args); + }; + }; + + // An internal function for creating a new object that inherits from another. + var baseCreate = function(prototype) { + if (!_.isObject(prototype)) return {}; + if (nativeCreate) return nativeCreate(prototype); + Ctor.prototype = prototype; + var result = new Ctor; + Ctor.prototype = null; + return result; + }; + + var shallowProperty = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; + + var has = function(obj, path) { + return obj != null && hasOwnProperty.call(obj, path); + } + + var deepGet = function(obj, path) { + var length = path.length; + for (var i = 0; i < length; i++) { + if (obj == null) return void 0; + obj = obj[path[i]]; + } + return length ? obj : void 0; + }; + + // Helper for collection methods to determine whether a collection + // should be iterated as an array or as an object. + // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength + // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094 + var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = shallowProperty('length'); + var isArrayLike = function(collection) { + var length = getLength(collection); + return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; + }; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles raw objects in addition to array-likes. Treats all + // sparse array-likes as if they were dense. + _.each = _.forEach = function(obj, iteratee, context) { + iteratee = optimizeCb(iteratee, context); + var i, length; + if (isArrayLike(obj)) { + for (i = 0, length = obj.length; i < length; i++) { + iteratee(obj[i], i, obj); + } + } else { + var keys = _.keys(obj); + for (i = 0, length = keys.length; i < length; i++) { + iteratee(obj[keys[i]], keys[i], obj); + } + } + return obj; + }; + + // Return the results of applying the iteratee to each element. + _.map = _.collect = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + results = Array(length); + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + results[index] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Create a reducing function iterating left or right. + var createReduce = function(dir) { + // Wrap code that reassigns argument variables in a separate function than + // the one that accesses `arguments.length` to avoid a perf hit. (#1991) + var reducer = function(obj, iteratee, memo, initial) { + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length, + index = dir > 0 ? 0 : length - 1; + if (!initial) { + memo = obj[keys ? keys[index] : index]; + index += dir; + } + for (; index >= 0 && index < length; index += dir) { + var currentKey = keys ? keys[index] : index; + memo = iteratee(memo, obj[currentKey], currentKey, obj); + } + return memo; + }; + + return function(obj, iteratee, memo, context) { + var initial = arguments.length >= 3; + return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial); + }; + }; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. + _.reduce = _.foldl = _.inject = createReduce(1); + + // The right-associative version of reduce, also known as `foldr`. + _.reduceRight = _.foldr = createReduce(-1); + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, predicate, context) { + var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey; + var key = keyFinder(obj, predicate, context); + if (key !== void 0 && key !== -1) return obj[key]; + }; + + // Return all the elements that pass a truth test. + // Aliased as `select`. + _.filter = _.select = function(obj, predicate, context) { + var results = []; + predicate = cb(predicate, context); + _.each(obj, function(value, index, list) { + if (predicate(value, index, list)) results.push(value); + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, predicate, context) { + return _.filter(obj, _.negate(cb(predicate)), context); + }; + + // Determine whether all of the elements match a truth test. + // Aliased as `all`. + _.every = _.all = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (!predicate(obj[currentKey], currentKey, obj)) return false; + } + return true; + }; + + // Determine if at least one element in the object matches a truth test. + // Aliased as `any`. + _.some = _.any = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = !isArrayLike(obj) && _.keys(obj), + length = (keys || obj).length; + for (var index = 0; index < length; index++) { + var currentKey = keys ? keys[index] : index; + if (predicate(obj[currentKey], currentKey, obj)) return true; + } + return false; + }; + + // Determine if the array or object contains a given item (using `===`). + // Aliased as `includes` and `include`. + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = restArguments(function(obj, path, args) { + var contextPath, func; + if (_.isFunction(path)) { + func = path; + } else if (_.isArray(path)) { + contextPath = path.slice(0, -1); + path = path[path.length - 1]; + } + return _.map(obj, function(context) { + var method = func; + if (!method) { + if (contextPath && contextPath.length) { + context = deepGet(context, contextPath); + } + if (context == null) return void 0; + method = context[path]; + } + return method == null ? method : method.apply(context, args); + }); + }); + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, _.property(key)); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs) { + return _.filter(obj, _.matcher(attrs)); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.find(obj, _.matcher(attrs)); + }; + + // Return the maximum element (or element-based computation). + _.max = function(obj, iteratee, context) { + var result = -Infinity, lastComputed = -Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value > result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed > lastComputed || computed === -Infinity && result === -Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iteratee, context) { + var result = Infinity, lastComputed = Infinity, + value, computed; + if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) { + obj = isArrayLike(obj) ? obj : _.values(obj); + for (var i = 0, length = obj.length; i < length; i++) { + value = obj[i]; + if (value != null && value < result) { + result = value; + } + } + } else { + iteratee = cb(iteratee, context); + _.each(obj, function(v, index, list) { + computed = iteratee(v, index, list); + if (computed < lastComputed || computed === Infinity && result === Infinity) { + result = v; + lastComputed = computed; + } + }); + } + return result; + }; + + // Shuffle a collection. + _.shuffle = function(obj) { + return _.sample(obj, Infinity); + }; + + // Sample **n** random values from a collection using the modern version of the + // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle). + // If **n** is not specified, returns a single random element. + // The internal `guard` argument allows it to work with `map`. + _.sample = function(obj, n, guard) { + if (n == null || guard) { + if (!isArrayLike(obj)) obj = _.values(obj); + return obj[_.random(obj.length - 1)]; + } + var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj); + var length = getLength(sample); + n = Math.max(Math.min(n, length), 0); + var last = length - 1; + for (var index = 0; index < n; index++) { + var rand = _.random(index, last); + var temp = sample[index]; + sample[index] = sample[rand]; + sample[rand] = temp; + } + return sample.slice(0, n); + }; + + // Sort the object's values by a criterion produced by an iteratee. + _.sortBy = function(obj, iteratee, context) { + var index = 0; + iteratee = cb(iteratee, context); + return _.pluck(_.map(obj, function(value, key, list) { + return { + value: value, + index: index++, + criteria: iteratee(value, key, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index - right.index; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(behavior, partition) { + return function(obj, iteratee, context) { + var result = partition ? [[], []] : {}; + iteratee = cb(iteratee, context); + _.each(obj, function(value, index) { + var key = iteratee(value, index, obj); + behavior(result, value, key); + }); + return result; + }; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = group(function(result, value, key) { + if (has(result, key)) result[key].push(value); else result[key] = [value]; + }); + + // Indexes the object's values by a criterion, similar to `groupBy`, but for + // when you know that your index values will be unique. + _.indexBy = group(function(result, value, key) { + result[key] = value; + }); + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = group(function(result, value, key) { + if (has(result, key)) result[key]++; else result[key] = 1; + }); + + var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g; + // Safely create a real, live array from anything iterable. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (_.isString(obj)) { + // Keep surrogate pair characters together + return obj.match(reStrSymbol); + } + if (isArrayLike(obj)) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return isArrayLike(obj) ? obj.length : _.keys(obj).length; + }; + + // Split a collection into two arrays: one whose elements all satisfy the given + // predicate, and one whose elements all do not satisfy the predicate. + _.partition = group(function(result, value, pass) { + result[pass ? 0 : 1].push(value); + }, true); + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null || array.length < 1) return n == null ? void 0 : []; + if (n == null || guard) return array[0]; + return _.initial(array, array.length - n); + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. + _.initial = function(array, n, guard) { + return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n))); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. + _.last = function(array, n, guard) { + if (array == null || array.length < 1) return n == null ? void 0 : []; + if (n == null || guard) return array[array.length - 1]; + return _.rest(array, Math.max(0, array.length - n)); + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, n == null || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, Boolean); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, strict, output) { + output = output || []; + var idx = output.length; + for (var i = 0, length = getLength(input); i < length; i++) { + var value = input[i]; + if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { + // Flatten current level of array or arguments object. + if (shallow) { + var j = 0, len = value.length; + while (j < len) output[idx++] = value[j++]; + } else { + flatten(value, shallow, strict, output); + idx = output.length; + } + } else if (!strict) { + output[idx++] = value; + } + } + return output; + }; + + // Flatten out an array, either recursively (by default), or just one level. + _.flatten = function(array, shallow) { + return flatten(array, shallow, false); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = restArguments(function(array, otherArrays) { + return _.difference(array, otherArrays); + }); + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // The faster algorithm will not work with an iteratee if the iteratee + // is not a one-to-one function, so providing an iteratee will disable + // the faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iteratee, context) { + if (!_.isBoolean(isSorted)) { + context = iteratee; + iteratee = isSorted; + isSorted = false; + } + if (iteratee != null) iteratee = cb(iteratee, context); + var result = []; + var seen = []; + for (var i = 0, length = getLength(array); i < length; i++) { + var value = array[i], + computed = iteratee ? iteratee(value, i, array) : value; + if (isSorted && !iteratee) { + if (!i || seen !== computed) result.push(value); + seen = computed; + } else if (iteratee) { + if (!_.contains(seen, computed)) { + seen.push(computed); + result.push(value); + } + } else if (!_.contains(result, value)) { + result.push(value); + } + } + return result; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = restArguments(function(arrays) { + return _.uniq(flatten(arrays, true, true)); + }); + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var result = []; + var argsLength = arguments.length; + for (var i = 0, length = getLength(array); i < length; i++) { + var item = array[i]; + if (_.contains(result, item)) continue; + var j; + for (j = 1; j < argsLength; j++) { + if (!_.contains(arguments[j], item)) break; + } + if (j === argsLength) result.push(item); + } + return result; + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = restArguments(function(array, rest) { + rest = flatten(rest, true, true); + return _.filter(array, function(value){ + return !_.contains(rest, value); + }); + }); + + // Complement of _.zip. Unzip accepts an array of arrays and groups + // each array's elements on shared indices. + _.unzip = function(array) { + var length = array && _.max(array, getLength).length || 0; + var result = Array(length); + + for (var index = 0; index < length; index++) { + result[index] = _.pluck(array, index); + } + return result; + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = restArguments(_.unzip); + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. Passing by pairs is the reverse of _.pairs. + _.object = function(list, values) { + var result = {}; + for (var i = 0, length = getLength(list); i < length; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // Generator function to create the findIndex and findLastIndex functions. + var createPredicateIndexFinder = function(dir) { + return function(array, predicate, context) { + predicate = cb(predicate, context); + var length = getLength(array); + var index = dir > 0 ? 0 : length - 1; + for (; index >= 0 && index < length; index += dir) { + if (predicate(array[index], index, array)) return index; + } + return -1; + }; + }; + + // Returns the first index on an array-like that passes a predicate test. + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iteratee, context) { + iteratee = cb(iteratee, context, 1); + var value = iteratee(obj); + var low = 0, high = getLength(array); + while (low < high) { + var mid = Math.floor((low + high) / 2); + if (iteratee(array[mid]) < value) low = mid + 1; else high = mid; + } + return low; + }; + + // Generator function to create the indexOf and lastIndexOf functions. + var createIndexFinder = function(dir, predicateFind, sortedIndex) { + return function(array, item, idx) { + var i = 0, length = getLength(array); + if (typeof idx == 'number') { + if (dir > 0) { + i = idx >= 0 ? idx : Math.max(idx + length, i); + } else { + length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1; + } + } else if (sortedIndex && idx && length) { + idx = sortedIndex(array, item); + return array[idx] === item ? idx : -1; + } + if (item !== item) { + idx = predicateFind(slice.call(array, i, length), _.isNaN); + return idx >= 0 ? idx + i : -1; + } + for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) { + if (array[idx] === item) return idx; + } + return -1; + }; + }; + + // Return the position of the first occurrence of an item in an array, + // or -1 if the item is not included in the array. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (stop == null) { + stop = start || 0; + start = 0; + } + if (!step) { + step = stop < start ? -1 : 1; + } + + var length = Math.max(Math.ceil((stop - start) / step), 0); + var range = Array(length); + + for (var idx = 0; idx < length; idx++, start += step) { + range[idx] = start; + } + + return range; + }; + + // Chunk a single array into multiple arrays, each containing `count` or fewer + // items. + _.chunk = function(array, count) { + if (count == null || count < 1) return []; + var result = []; + var i = 0, length = array.length; + while (i < length) { + result.push(slice.call(array, i, i += count)); + } + return result; + }; + + // Function (ahem) Functions + // ------------------ + + // Determines whether to execute a function as a constructor + // or a normal function with the provided arguments. + var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { + if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); + var self = baseCreate(sourceFunc.prototype); + var result = sourceFunc.apply(self, args); + if (_.isObject(result)) return result; + return self; + }; + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = restArguments(function(func, context, args) { + if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function'); + var bound = restArguments(function(callArgs) { + return executeBound(func, bound, context, this, args.concat(callArgs)); + }); + return bound; + }); + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. _ acts + // as a placeholder by default, allowing any combination of arguments to be + // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument. + _.partial = restArguments(function(func, boundArgs) { + var placeholder = _.partial.placeholder; + var bound = function() { + var position = 0, length = boundArgs.length; + var args = Array(length); + for (var i = 0; i < length; i++) { + args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i]; + } + while (position < arguments.length) args.push(arguments[position++]); + return executeBound(func, bound, this, this, args); + }; + return bound; + }); + + _.partial.placeholder = _; + + // Bind a number of an object's methods to that object. Remaining arguments + // are the method names to be bound. Useful for ensuring that all callbacks + // defined on an object belong to it. + _.bindAll = restArguments(function(obj, keys) { + keys = flatten(keys, false, false); + var index = keys.length; + if (index < 1) throw new Error('bindAll must be passed function names'); + while (index--) { + var key = keys[index]; + obj[key] = _.bind(obj[key], obj); + } + }); + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memoize = function(key) { + var cache = memoize.cache; + var address = '' + (hasher ? hasher.apply(this, arguments) : key); + if (!has(cache, address)) cache[address] = func.apply(this, arguments); + return cache[address]; + }; + memoize.cache = {}; + return memoize; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = restArguments(function(func, wait, args) { + return setTimeout(function() { + return func.apply(null, args); + }, wait); + }); + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = _.partial(_.delay, _, 1); + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. + _.throttle = function(func, wait, options) { + var timeout, context, args, result; + var previous = 0; + if (!options) options = {}; + + var later = function() { + previous = options.leading === false ? 0 : _.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + + var throttled = function() { + var now = _.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + if (timeout) { + clearTimeout(timeout); + timeout = null; + } + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + + throttled.cancel = function() { + clearTimeout(timeout); + previous = 0; + timeout = context = args = null; + }; + + return throttled; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, result; + + var later = function(context, args) { + timeout = null; + if (args) result = func.apply(context, args); + }; + + var debounced = restArguments(function(args) { + if (timeout) clearTimeout(timeout); + if (immediate) { + var callNow = !timeout; + timeout = setTimeout(later, wait); + if (callNow) result = func.apply(this, args); + } else { + timeout = _.delay(later, wait, this, args); + } + + return result; + }); + + debounced.cancel = function() { + clearTimeout(timeout); + timeout = null; + }; + + return debounced; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return _.partial(wrapper, func); + }; + + // Returns a negated version of the passed-in predicate. + _.negate = function(predicate) { + return function() { + return !predicate.apply(this, arguments); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var args = arguments; + var start = args.length - 1; + return function() { + var i = start; + var result = args[start].apply(this, arguments); + while (i--) result = args[i].call(this, result); + return result; + }; + }; + + // Returns a function that will only be executed on and after the Nth call. + _.after = function(times, func) { + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Returns a function that will only be executed up to (but not including) the Nth call. + _.before = function(times, func) { + var memo; + return function() { + if (--times > 0) { + memo = func.apply(this, arguments); + } + if (times <= 1) func = null; + return memo; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = _.partial(_.before, 2); + + _.restArguments = restArguments; + + // Object Functions + // ---------------- + + // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed. + var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString'); + var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString', + 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString']; + + var collectNonEnumProps = function(obj, keys) { + var nonEnumIdx = nonEnumerableProps.length; + var constructor = obj.constructor; + var proto = _.isFunction(constructor) && constructor.prototype || ObjProto; + + // Constructor is a special case. + var prop = 'constructor'; + if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop); + + while (nonEnumIdx--) { + prop = nonEnumerableProps[nonEnumIdx]; + if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) { + keys.push(prop); + } + } + }; + + // Retrieve the names of an object's own properties. + // Delegates to **ECMAScript 5**'s native `Object.keys`. + _.keys = function(obj) { + if (!_.isObject(obj)) return []; + if (nativeKeys) return nativeKeys(obj); + var keys = []; + for (var key in obj) if (has(obj, key)) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve all the property names of an object. + _.allKeys = function(obj) { + if (!_.isObject(obj)) return []; + var keys = []; + for (var key in obj) keys.push(key); + // Ahem, IE < 9. + if (hasEnumBug) collectNonEnumProps(obj, keys); + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var values = Array(length); + for (var i = 0; i < length; i++) { + values[i] = obj[keys[i]]; + } + return values; + }; + + // Returns the results of applying the iteratee to each element of the object. + // In contrast to _.map it returns an object. + _.mapObject = function(obj, iteratee, context) { + iteratee = cb(iteratee, context); + var keys = _.keys(obj), + length = keys.length, + results = {}; + for (var index = 0; index < length; index++) { + var currentKey = keys[index]; + results[currentKey] = iteratee(obj[currentKey], currentKey, obj); + } + return results; + }; + + // Convert an object into a list of `[key, value]` pairs. + // The opposite of _.object. + _.pairs = function(obj) { + var keys = _.keys(obj); + var length = keys.length; + var pairs = Array(length); + for (var i = 0; i < length; i++) { + pairs[i] = [keys[i], obj[keys[i]]]; + } + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + var keys = _.keys(obj); + for (var i = 0, length = keys.length; i < length; i++) { + result[obj[keys[i]]] = keys[i]; + } + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods`. + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // An internal function for creating assigner functions. + var createAssigner = function(keysFunc, defaults) { + return function(obj) { + var length = arguments.length; + if (defaults) obj = Object(obj); + if (length < 2 || obj == null) return obj; + for (var index = 1; index < length; index++) { + var source = arguments[index], + keys = keysFunc(source), + l = keys.length; + for (var i = 0; i < l; i++) { + var key = keys[i]; + if (!defaults || obj[key] === void 0) obj[key] = source[key]; + } + } + return obj; + }; + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = createAssigner(_.allKeys); + + // Assigns a given object with all the own properties in the passed-in object(s). + // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) + _.extendOwn = _.assign = createAssigner(_.keys); + + // Returns the first key on an object that passes a predicate test. + _.findKey = function(obj, predicate, context) { + predicate = cb(predicate, context); + var keys = _.keys(obj), key; + for (var i = 0, length = keys.length; i < length; i++) { + key = keys[i]; + if (predicate(obj[key], key, obj)) return key; + } + }; + + // Internal pick helper function to determine if `obj` has key `key`. + var keyInObj = function(value, key, obj) { + return key in obj; + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = restArguments(function(obj, keys) { + var result = {}, iteratee = keys[0]; + if (obj == null) return result; + if (_.isFunction(iteratee)) { + if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]); + keys = _.allKeys(obj); + } else { + iteratee = keyInObj; + keys = flatten(keys, false, false); + obj = Object(obj); + } + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i]; + var value = obj[key]; + if (iteratee(value, key, obj)) result[key] = value; + } + return result; + }); + + // Return a copy of the object without the blacklisted properties. + _.omit = restArguments(function(obj, keys) { + var iteratee = keys[0], context; + if (_.isFunction(iteratee)) { + iteratee = _.negate(iteratee); + if (keys.length > 1) context = keys[1]; + } else { + keys = _.map(flatten(keys, false, false), String); + iteratee = function(value, key) { + return !_.contains(keys, key); + }; + } + return _.pick(obj, iteratee, context); + }); + + // Fill in a given object with default properties. + _.defaults = createAssigner(_.allKeys, true); + + // Creates an object that inherits from the given prototype object. + // If additional properties are provided then they will be added to the + // created object. + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Returns whether an object has a given set of `key:value` pairs. + _.isMatch = function(object, attrs) { + var keys = _.keys(attrs), length = keys.length; + if (object == null) return !length; + var obj = Object(object); + for (var i = 0; i < length; i++) { + var key = keys[i]; + if (attrs[key] !== obj[key] || !(key in obj)) return false; + } + return true; + }; + + + // Internal recursive comparison function for `isEqual`. + var eq, deepEq; + eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). + if (a === b) return a !== 0 || 1 / a === 1 / b; + // `null` or `undefined` only equal to itself (strict comparison). + if (a == null || b == null) return false; + // `NaN`s are equivalent, but non-reflexive. + if (a !== a) return b !== b; + // Exhaust primitive checks + var type = typeof a; + if (type !== 'function' && type !== 'object' && typeof b != 'object') return false; + return deepEq(a, b, aStack, bStack); + }; + + // Internal recursive comparison function for `isEqual`. + deepEq = function(a, b, aStack, bStack) { + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className !== toString.call(b)) return false; + switch (className) { + // Strings, numbers, regular expressions, dates, and booleans are compared by value. + case '[object RegExp]': + // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return '' + a === '' + b; + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. + // Object(NaN) is equivalent to NaN. + if (+a !== +a) return +b !== +b; + // An `egal` comparison is performed for other numeric values. + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a === +b; + case '[object Symbol]': + return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b); + } + + var areArrays = className === '[object Array]'; + if (!areArrays) { + if (typeof a != 'object' || typeof b != 'object') return false; + + // Objects with different constructors are not equivalent, but `Object`s or `Array`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor && + _.isFunction(bCtor) && bCtor instanceof bCtor) + && ('constructor' in a && 'constructor' in b)) { + return false; + } + } + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + + // Initializing stack of traversed objects. + // It's done here since we only need them for objects and arrays comparison. + aStack = aStack || []; + bStack = bStack || []; + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] === a) return bStack[length] === b; + } + + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + + // Recursively compare objects and arrays. + if (areArrays) { + // Compare array lengths to determine if a deep comparison is necessary. + length = a.length; + if (length !== b.length) return false; + // Deep compare the contents, ignoring non-numeric properties. + while (length--) { + if (!eq(a[length], b[length], aStack, bStack)) return false; + } + } else { + // Deep compare objects. + var keys = _.keys(a), key; + length = keys.length; + // Ensure that both objects contain the same number of properties before comparing deep equality. + if (_.keys(b).length !== length) return false; + while (length--) { + // Deep compare each member + key = keys[length]; + if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return true; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0; + return _.keys(obj).length === 0; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) === '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + var type = typeof obj; + return type === 'function' || type === 'object' && !!obj; + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet. + _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) === '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE < 9), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return has(obj, 'callee'); + }; + } + + // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8, + // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236). + var nodelist = root.document && root.document.childNodes; + if ( true && typeof Int8Array != 'object' && typeof nodelist != 'function') { + _.isFunction = function(obj) { + return typeof obj == 'function' || false; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? + _.isNaN = function(obj) { + return _.isNumber(obj) && isNaN(obj); + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) === '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, path) { + if (!_.isArray(path)) { + return has(obj, path); + } + var length = path.length; + for (var i = 0; i < length; i++) { + var key = path[i]; + if (obj == null || !hasOwnProperty.call(obj, key)) { + return false; + } + obj = obj[key]; + } + return !!length; + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iteratees. + _.identity = function(value) { + return value; + }; + + // Predicate-generating functions. Often useful outside of Underscore. + _.constant = function(value) { + return function() { + return value; + }; + }; + + _.noop = function(){}; + + // Creates a function that, when passed an object, will traverse that object’s + // properties down the given `path`, specified as an array of keys or indexes. + _.property = function(path) { + if (!_.isArray(path)) { + return shallowProperty(path); + } + return function(obj) { + return deepGet(obj, path); + }; + }; + + // Generates a function for a given object that returns a given property. + _.propertyOf = function(obj) { + if (obj == null) { + return function(){}; + } + return function(path) { + return !_.isArray(path) ? obj[path] : deepGet(obj, path); + }; + }; + + // Returns a predicate for checking whether an object has a given set of + // `key:value` pairs. + _.matcher = _.matches = function(attrs) { + attrs = _.extendOwn({}, attrs); + return function(obj) { + return _.isMatch(obj, attrs); + }; + }; + + // Run a function **n** times. + _.times = function(n, iteratee, context) { + var accum = Array(Math.max(0, n)); + iteratee = optimizeCb(iteratee, context, 1); + for (var i = 0; i < n; i++) accum[i] = iteratee(i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // A (possibly faster) way to get the current timestamp as an integer. + _.now = Date.now || function() { + return new Date().getTime(); + }; + + // List of HTML entities for escaping. + var escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`' + }; + var unescapeMap = _.invert(escapeMap); + + // Functions for escaping and unescaping strings to/from HTML interpolation. + var createEscaper = function(map) { + var escaper = function(match) { + return map[match]; + }; + // Regexes for identifying a key that needs to be escaped. + var source = '(?:' + _.keys(map).join('|') + ')'; + var testRegexp = RegExp(source); + var replaceRegexp = RegExp(source, 'g'); + return function(string) { + string = string == null ? '' : '' + string; + return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string; + }; + }; + _.escape = createEscaper(escapeMap); + _.unescape = createEscaper(unescapeMap); + + // Traverses the children of `obj` along `path`. If a child is a function, it + // is invoked with its parent as context. Returns the value of the final + // child, or `fallback` if any child is undefined. + _.result = function(obj, path, fallback) { + if (!_.isArray(path)) path = [path]; + var length = path.length; + if (!length) { + return _.isFunction(fallback) ? fallback.call(obj) : fallback; + } + for (var i = 0; i < length; i++) { + var prop = obj == null ? void 0 : obj[path[i]]; + if (prop === void 0) { + prop = fallback; + i = length; // Ensure we don't continue iterating. + } + obj = _.isFunction(prop) ? prop.call(obj) : prop; + } + return obj; + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate: /<%([\s\S]+?)%>/g, + interpolate: /<%=([\s\S]+?)%>/g, + escape: /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g; + + var escapeChar = function(match) { + return '\\' + escapes[match]; + }; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + // NB: `oldSettings` only exists for backwards compatibility. + _.template = function(text, settings, oldSettings) { + if (!settings && oldSettings) settings = oldSettings; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset).replace(escapeRegExp, escapeChar); + index = offset + match.length; + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } else if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } else if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + + // Adobe VMs need the match returned to produce the correct offset. + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + 'return __p;\n'; + + var render; + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled source as a convenience for precompilation. + var argument = settings.variable || 'obj'; + template.source = 'function(' + argument + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function. Start chaining a wrapped Underscore object. + _.chain = function(obj) { + var instance = _(obj); + instance._chain = true; + return instance; + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var chainResult = function(instance, obj) { + return instance._chain ? _(obj).chain() : obj; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + _.each(_.functions(obj), function(name) { + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return chainResult(this, func.apply(_, args)); + }; + }); + return _; + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0]; + return chainResult(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + _.each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return chainResult(this, method.apply(this._wrapped, arguments)); + }; + }); + + // Extracts the result from a wrapped and chained object. + _.prototype.value = function() { + return this._wrapped; + }; + + // Provide unwrapping proxy for some methods used in engine operations + // such as arithmetic and JSON stringification. + _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; + + _.prototype.toString = function() { + return String(this._wrapped); + }; + + // AMD registration happens at the end for compatibility with AMD loaders + // that may not enforce next-turn semantics on modules. Even though general + // practice for AMD registration is to be anonymous, underscore registers + // as a named module because, like jQuery, it is a base library that is + // popular enough to be bundled in a third party lib, but not be part of + // an AMD load request. Those cases could generate an error when an + // anonymous define() is called outside of a loader request. + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() { + return _; + }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } +}()); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(161)(module))) + +/***/ }), +/* 284 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const pTry = __webpack_require__(285); + +module.exports = concurrency => { + if (concurrency < 1) { + throw new TypeError('Expected `concurrency` to be a number from 1 and up'); + } + + const queue = []; + let activeCount = 0; + + const next = () => { + activeCount--; + + if (queue.length > 0) { + queue.shift()(); + } + }; + + const run = (fn, resolve, ...args) => { + activeCount++; + + const result = pTry(fn, ...args); + + resolve(result); + + result.then(next, next); + }; + + const enqueue = (fn, resolve, ...args) => { + if (activeCount < concurrency) { + run(fn, resolve, ...args); + } else { + queue.push(run.bind(null, fn, resolve, ...args)); + } + }; + + const generator = (fn, ...args) => new Promise(resolve => enqueue(fn, resolve, ...args)); + Object.defineProperties(generator, { + activeCount: { + get: () => activeCount + }, + pendingCount: { + get: () => queue.length + } + }); + + return generator; +}; + + +/***/ }), +/* 285 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = (callback, ...args) => new Promise(resolve => { + resolve(callback(...args)); +}); + + +/***/ }), +/* 286 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const structUtils = __importStar(__webpack_require__(113)); +class AliasResolver { + constructor(next) { + this.next = next; + } + supportsDescriptor(descriptor, opts) { + return this.next.supportsDescriptor(descriptor, opts); + } + supportsLocator(locator, opts) { + return this.next.supportsLocator(locator, opts); + } + shouldPersistResolution(locator, opts) { + return this.next.shouldPersistResolution(locator, opts); + } + bindDescriptor(descriptor, fromLocator, opts) { + return this.next.bindDescriptor(descriptor, fromLocator, opts); + } + async getCandidates(descriptor, opts) { + return await this.next.getCandidates(descriptor, opts); + } + async resolve(locator, opts) { + const pkg = await this.next.resolve(locator, opts); + const topLevelWorkspace = opts.project.topLevelWorkspace; + for (const descriptor of Array.from(pkg.dependencies.values())) { + for (const { pattern, reference } of topLevelWorkspace.manifest.resolutions) { + if (pattern.from && pattern.from.fullName !== structUtils.requirableIdent(locator)) + continue; + if (pattern.from && pattern.from.description && pattern.from.description !== locator.reference) + continue; + if (pattern.descriptor.fullName !== structUtils.requirableIdent(descriptor)) + continue; + if (pattern.descriptor.description && pattern.descriptor.description !== descriptor.range) + continue; + const alias = opts.resolver.bindDescriptor(structUtils.makeDescriptor(descriptor, reference), topLevelWorkspace.anchoredLocator, opts); + pkg.dependencies.delete(descriptor.identHash); + pkg.dependencies.set(alias.identHash, alias); + } + } + return pkg; + } +} +exports.AliasResolver = AliasResolver; + + +/***/ }), +/* 287 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const structUtils = __importStar(__webpack_require__(113)); +class LockfileResolver { + supportsDescriptor(descriptor, opts) { + const resolution = opts.project.storedResolutions.get(descriptor.descriptorHash); + if (resolution) + return true; + // If the descriptor matches a package that's already been used, we can just use it even if we never resolved the range before + // Ex: foo depends on bar@^1.0.0 that we resolved to foo@1.1.0, then we add a package qux that depends on foo@1.1.0 (without the caret) + if (opts.project.storedPackages.has(structUtils.convertDescriptorToLocator(descriptor).locatorHash)) + return true; + return false; + } + supportsLocator(locator, opts) { + if (opts.project.storedPackages.has(locator.locatorHash)) + return true; + return false; + } + shouldPersistResolution(locator, opts) { + throw new Error(`The shouldPersistResolution method shouldn't be called on the lockfile resolver, which would always answer yes`); + } + bindDescriptor(descriptor, fromLocator, opts) { + return descriptor; + } + async getCandidates(descriptor, opts) { + let pkg = opts.project.storedPackages.get(structUtils.convertDescriptorToLocator(descriptor).locatorHash); + if (pkg) + return [pkg]; + const resolution = opts.project.storedResolutions.get(descriptor.descriptorHash); + if (!resolution) + throw new Error(`Expected the resolution to have been successful - resolution not found`); + pkg = opts.project.storedPackages.get(resolution); + if (!pkg) + throw new Error(`Expected the resolution to have been successful - package not found`); + return [pkg]; + } + async resolve(locator, opts) { + const pkg = opts.project.storedPackages.get(locator.locatorHash); + if (!pkg) + throw new Error(`The lockfile resolver isn't meant to resolve packages - they should already have been stored into a cache`); + return pkg; + } +} +exports.LockfileResolver = LockfileResolver; + + +/***/ }), +/* 288 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const Report_1 = __webpack_require__(116); +const structUtils = __importStar(__webpack_require__(113)); +class RunInstallPleaseResolver { + constructor(resolver) { + this.resolver = resolver; + } + supportsDescriptor(descriptor, opts) { + return this.resolver.supportsDescriptor(descriptor, opts); + } + supportsLocator(locator, opts) { + return this.resolver.supportsLocator(locator, opts); + } + shouldPersistResolution(locator, opts) { + throw new Error(`Unreachable`); + } + bindDescriptor(descriptor, fromLocator, opts) { + throw new Report_1.ReportError(Report_1.MessageName.MISSING_LOCKFILE_ENTRY, `A dependency (${structUtils.prettyDescriptor(opts.project.configuration, descriptor)}) cannot be retrieved from the lockfile; try to make an install to update your resolutions`); + } + async getCandidates(descriptor, opts) { + throw new Report_1.ReportError(Report_1.MessageName.MISSING_LOCKFILE_ENTRY, `This package doesn't seem to be present in your lockfile; try to make an install to update your resolutions`); + } + async resolve(locator, opts) { + throw new Error(`Unreachable`); + } +} +exports.RunInstallPleaseResolver = RunInstallPleaseResolver; + + +/***/ }), +/* 289 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const Report_1 = __webpack_require__(116); +class ThrowReport extends Report_1.Report { + reportCacheHit(locator) { + } + reportCacheMiss(locator) { + } + startTimerSync(what, cb) { + return cb(); + } + async startTimerPromise(what, cb) { + return await cb(); + } + reportInfo(name, text) { + } + reportWarning(name, text) { + } + reportError(name, text) { + } + reportJson(data) { + // Just ignore the json output + } + async finalize() { + } +} +exports.ThrowReport = ThrowReport; + + +/***/ }), +/* 290 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const json_proxy_1 = __webpack_require__(291); +const crypto_1 = __webpack_require__(16); +const globby_1 = __importDefault(__webpack_require__(294)); +const path_1 = __webpack_require__(6); +const semver_1 = __importDefault(__webpack_require__(34)); +const Manifest_1 = __webpack_require__(112); +const WorkspaceResolver_1 = __webpack_require__(273); +const structUtils = __importStar(__webpack_require__(113)); +function hashWorkspaceCwd(cwd) { + return crypto_1.createHmac('sha256', 'berry').update(cwd).digest('hex').substr(0, 6); +} +class Workspace { + constructor(workspaceCwd, { project }) { + // @ts-ignore: This variable is set during the setup process + this.workspacesCwds = new Set(); + // Generated at resolution; basically dependencies + devDependencies + child workspaces + this.dependencies = new Map(); + this.project = project; + this.cwd = workspaceCwd; + } + async setup() { + // @ts-ignore: It's ok to initialize it now + this.manifest = await Manifest_1.Manifest.find(this.cwd); + // We use posix.relative to guarantee that the default hash will be consistent even if the project is installed on different OS / path + // @ts-ignore: It's ok to initialize it now, even if it's readonly (setup is called right after construction) + this.relativeCwd = path_1.posix.relative(this.project.cwd, this.cwd) || `.`; + const ident = this.manifest.name ? this.manifest.name : structUtils.makeIdent(null, `${this.computeCandidateName()}-${hashWorkspaceCwd(this.relativeCwd)}`); + const reference = this.manifest.version ? this.manifest.version : `0.0.0`; + // @ts-ignore: It's ok to initialize it now, even if it's readonly (setup is called right after construction) + this.locator = structUtils.makeLocator(ident, reference); + // @ts-ignore: It's ok to initialize it now, even if it's readonly (setup is called right after construction) + this.anchoredDescriptor = structUtils.makeDescriptor(this.locator, `${WorkspaceResolver_1.WorkspaceResolver.protocol}${this.relativeCwd}`); + // @ts-ignore: It's ok to initialize it now, even if it's readonly (setup is called right after construction) + this.anchoredLocator = structUtils.makeLocator(this.locator, `${WorkspaceResolver_1.WorkspaceResolver.protocol}${this.relativeCwd}`); + for (const definition of this.manifest.workspaceDefinitions) { + const relativeCwds = await globby_1.default(definition.pattern, { + absolute: true, + cwd: fslib_1.NodeFS.fromPortablePath(this.cwd), + expandDirectories: false, + onlyDirectories: true, + onlyFiles: false, + }); + // It seems that the return value of globby isn't in any guaranteed order - not even the directory listing order + relativeCwds.sort(); + for (const relativeCwd of relativeCwds) { + const candidateCwd = path_1.posix.resolve(this.cwd, fslib_1.NodeFS.toPortablePath(relativeCwd)); + if (fslib_1.xfs.existsSync(`${candidateCwd}/package.json`)) { + this.workspacesCwds.add(candidateCwd); + } + } + } + } + accepts(range) { + const protocolIndex = range.indexOf(`:`); + const protocol = protocolIndex !== -1 + ? range.slice(0, protocolIndex + 1) + : null; + const pathname = protocolIndex !== -1 + ? range.slice(protocolIndex + 1) + : range; + if (protocol === WorkspaceResolver_1.WorkspaceResolver.protocol && pathname === this.relativeCwd) + return true; + if (!semver_1.default.validRange(pathname)) + return false; + if (protocol === WorkspaceResolver_1.WorkspaceResolver.protocol) + return semver_1.default.satisfies(this.manifest.version !== null ? this.manifest.version : `0.0.0`, pathname); + if (this.manifest.version !== null) + return semver_1.default.satisfies(this.manifest.version, pathname); + return false; + } + computeCandidateName() { + if (this.cwd === this.project.cwd) { + return `root-workspace`; + } + else { + return `${path_1.posix.basename(this.cwd)}` || `unnamed-workspace`; + } + } + async persistManifest() { + const updater = await json_proxy_1.makeUpdater(`${this.cwd}/package.json`); + updater.open((tracker) => { + this.manifest.exportTo(tracker); + }); + await updater.save(); + } +} +exports.Workspace = Workspace; + + +/***/ }), +/* 291 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var makeTracker_1 = __webpack_require__(292); +exports.makeTracker = makeTracker_1.makeTracker; +var makeUpdater_1 = __webpack_require__(293); +exports.makeUpdater = makeUpdater_1.makeUpdater; +exports.updateAndSave = makeUpdater_1.updateAndSave; + + +/***/ }), +/* 292 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const VERSION = Symbol(`Version`); +function cloneObject(obj) { + // Preserving the prototype is out of scope for this library; don't try to + // implement it, I won't merge it + return Object.assign(Object.create(null), obj); +} +function cloneValue(value) { + if (typeof value === `object` && value !== null) { + if (Array.isArray(value)) { + return value.slice(); + } + else if (value instanceof Set) { + return new Set(value); + } + else if (value instanceof Map) { + return new Map(value); + } + else { + return cloneObject(value); + } + } + else { + return value; + } +} +function cloneValueChecked(value, version) { + if (typeof value === `object` && value !== null) { + if (value[VERSION] === version) + return value; + const clone = cloneValue(value); + clone[VERSION] = version; + return clone; + } + else { + return cloneValue(value); + } +} +function cloneValueDeep(value, filter) { + if (typeof value === `object` && value !== null) { + if (Array.isArray(value)) { + return value.map(subValue => { + return cloneValueDeep(subValue, filter); + }); + } + else if (value instanceof Set) { + const clone = new Set(); + for (const subValue of value.values()) + clone.add(cloneValueDeep(subValue, filter)); + return clone; + } + else if (value instanceof Map) { + const clone = new Map(); + for (const [key, subValue] of value) + clone.set(key, cloneValueDeep(subValue, filter)); + return clone; + } + else { + const clone = cloneObject(value); + for (const key of Object.keys(clone)) { + if (filter !== true && !filter[key]) + continue; + const nextFilter = filter !== true + ? filter[key] + : true; + // @ts-ignore + clone[key] = cloneValueDeep(clone[key], nextFilter); + } + return clone; + } + } + else { + return value; + } +} +function compareValuesDeep(a, b) { + if (a === b) { + return true; + } + else if ((a == null) !== (b == null)) { + return false; + } + else if (Array.isArray(a)) { + if (!Array.isArray(b)) + return false; + if (a.length !== b.length) + return false; + for (let t = 0, T = a.length; t < T; ++t) + if (!compareValuesDeep(a[t], b[t])) + return false; + return true; + } + else if (a instanceof Set) { + if (!(b instanceof Set)) + return false; + if (a.size !== b.size) + return false; + for (const key of a.entries()) + if (!b.has(key)) + return false; + return true; + } + else if (a instanceof Map) { + if (!(b instanceof Map)) + return false; + if (a.size !== b.size) + return false; + for (const [key, value] of a.entries()) + if (!compareValuesDeep(value, b.get(key))) + return false; + return true; + } + else if (a.constructor === Object) { + if (b.constructor !== Object) + return false; + const aKeys = Object.keys(a); + const bKeys = Object.keys(b); + if (aKeys.length !== bKeys.length) + return false; + for (let t = 0, T = aKeys.length; t < T; ++t) + if (aKeys[t] !== bKeys[t]) + return false; + for (let t = 0, T = aKeys.length; t < T; ++t) + if (!compareValuesDeep(a[aKeys[t]], b[bKeys[t]])) + return false; + return true; + } + else { + return false; + } +} +const proxyHandlerSet = (version, filter, ensureCloning) => ({ + get(source, prop) { + switch (prop) { + case `clear`: return () => { + const clonedParent = ensureCloning(); + clonedParent.clear(); + source.clear(); + }; + case `delete`: return (key) => { + const clonedParent = ensureCloning(); + clonedParent.delete(key); + source.delete(key); + }; + case `add`: return (key) => { + const clonedParent = ensureCloning(); + clonedParent.add(key); + source.add(key); + }; + // @ts-ignore + default: return source[prop]; + } + } +}); +const proxyHandlerMap = (version, filter, ensureCloning) => ({ + get(source, prop) { + switch (prop) { + case `clear`: return () => { + const clonedParent = ensureCloning(); + clonedParent.clear(); + source.clear(); + }; + case `delete`: return (key) => { + const clonedParent = ensureCloning(); + clonedParent.delete(key); + source.delete(key); + }; + case `set`: return (key, value) => { + const clonedParent = ensureCloning(); + clonedParent.set(key, value); + source.set(key, value); + }; + case `get`: return (key) => { + const value = source.get(key); + return makeValueObservable(value, version, filter, () => { + const clonedParent = ensureCloning(); + const immutableValue = clonedParent.get(key); + const clonedValue = cloneValueChecked(immutableValue, version); + clonedParent.set(key, clonedValue); + return clonedParent; + }); + }; + // @ts-ignore + default: return source[prop]; + } + }, +}); +const proxyHandlerObject = (version, filter, ensureCloning) => ({ + get(source, prop) { + // @ts-ignore + const value = source[prop]; + // Typescript doesn't allow symbol in its index types + if (typeof prop === `symbol`) + return value; + if (filter !== true && !filter[prop]) + return value; + const nextFilter = filter !== true + ? filter[prop] + : true; + return makeValueObservable(value, version, nextFilter, () => { + const clonedParent = ensureCloning(); + // @ts-ignore + const immutableValue = clonedParent[prop]; + const clonedValue = cloneValueChecked(immutableValue, version); + // @ts-ignore + clonedParent[prop] = clonedValue; + return clonedValue; + }); + }, + set(source, prop, value) { + // @ts-ignore + const currentValue = source[prop]; + if (!compareValuesDeep(currentValue, value)) { + // We ensure that our parent is cloned, then assign the new value into it + const clonedParent = ensureCloning(); + // @ts-ignore + clonedParent[prop] = cloneValueDeep(value, filter); + } + // @ts-ignore + source[prop] = value; + return true; + } +}); +function makeValueObservable(value, version, filter, ensureCloning) { + if (typeof value === `object` && value !== null) { + if (value instanceof Set) { + return new Proxy(value, proxyHandlerSet(version, filter, ensureCloning)); + } + else if (value instanceof Map) { + return new Proxy(value, proxyHandlerMap(version, filter, ensureCloning)); + } + else { + return new Proxy(value, proxyHandlerObject(version, filter, ensureCloning)); + } + } + else { + return value; + } +} +function makeTracker(value, filter = true) { + const tracker = { + immutable: cloneValueDeep(value, filter), + open(cb) { + // A value guaranteed to be different from everything except itself + const version = {}; + cb(makeValueObservable(value, version, filter, () => { + tracker.immutable = cloneValueChecked(tracker.immutable, version); + return tracker.immutable; + })); + return tracker.immutable; + } + }; + return tracker; +} +exports.makeTracker = makeTracker; + + +/***/ }), +/* 293 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const makeTracker_1 = __webpack_require__(292); +async function makeUpdater(filename) { + let indent = ` `; + let obj; + if (fslib_1.xfs.existsSync(filename)) { + const content = await fslib_1.xfs.readFilePromise(filename, `utf8`); + const indentMatch = content.match(/^[ \t]+/m); + if (indentMatch) + indent = indentMatch[0]; + obj = JSON.parse(content || `{}`); + } + if (!obj) + obj = {}; + const tracker = makeTracker_1.makeTracker(obj); + const initial = tracker.immutable; + return { + open(cb) { + tracker.open(cb); + }, + async save() { + if (tracker.immutable === initial) + return; + const data = JSON.stringify(tracker.immutable, null, indent) + `\n`; + await fslib_1.xfs.writeFilePromise(filename, data); + } + }; +} +exports.makeUpdater = makeUpdater; +async function updateAndSave(filename, cb) { + const updater = await makeUpdater(filename); + updater.open(cb); + await updater.save(); +} +exports.updateAndSave = updateAndSave; + + +/***/ }), +/* 294 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const arrayUnion = __webpack_require__(295); +const glob = __webpack_require__(297); +const fastGlob = __webpack_require__(309); +const dirGlob = __webpack_require__(468); +const gitignore = __webpack_require__(472); + +const DEFAULT_FILTER = () => false; + +const isNegative = pattern => pattern[0] === '!'; + +const assertPatternsInput = patterns => { + if (!patterns.every(x => typeof x === 'string')) { + throw new TypeError('Patterns must be a string or an array of strings'); + } +}; + +const generateGlobTasks = (patterns, taskOpts) => { + patterns = [].concat(patterns); + assertPatternsInput(patterns); + + const globTasks = []; + + taskOpts = Object.assign({ + ignore: [], + expandDirectories: true + }, taskOpts); + + patterns.forEach((pattern, i) => { + if (isNegative(pattern)) { + return; + } + + const ignore = patterns + .slice(i) + .filter(isNegative) + .map(pattern => pattern.slice(1)); + + const opts = Object.assign({}, taskOpts, { + ignore: taskOpts.ignore.concat(ignore) + }); + + globTasks.push({pattern, opts}); + }); + + return globTasks; +}; + +const globDirs = (task, fn) => { + let opts = {cwd: task.opts.cwd}; + + if (Array.isArray(task.opts.expandDirectories)) { + opts = Object.assign(opts, {files: task.opts.expandDirectories}); + } else if (typeof task.opts.expandDirectories === 'object') { + opts = Object.assign(opts, task.opts.expandDirectories); + } + + return fn(task.pattern, opts); +}; + +const getPattern = (task, fn) => task.opts.expandDirectories ? globDirs(task, fn) : [task.pattern]; + +module.exports = (patterns, opts) => { + let globTasks; + + try { + globTasks = generateGlobTasks(patterns, opts); + } catch (err) { + return Promise.reject(err); + } + + const getTasks = Promise.all(globTasks.map(task => Promise.resolve(getPattern(task, dirGlob)) + .then(globs => Promise.all(globs.map(glob => ({ + pattern: glob, + opts: task.opts + })))) + )) + .then(tasks => arrayUnion.apply(null, tasks)); + + const getFilter = () => { + return Promise.resolve( + opts && opts.gitignore ? + gitignore({cwd: opts.cwd, ignore: opts.ignore}) : + DEFAULT_FILTER + ); + }; + + return getFilter() + .then(filter => { + return getTasks + .then(tasks => Promise.all(tasks.map(task => fastGlob(task.pattern, task.opts)))) + .then(paths => arrayUnion.apply(null, paths)) + .then(paths => paths.filter(p => !filter(p))); + }); +}; + +module.exports.sync = (patterns, opts) => { + const globTasks = generateGlobTasks(patterns, opts); + + const getFilter = () => { + return opts && opts.gitignore ? + gitignore.sync({cwd: opts.cwd, ignore: opts.ignore}) : + DEFAULT_FILTER; + }; + + const tasks = globTasks.reduce((tasks, task) => { + const newTask = getPattern(task, dirGlob.sync).map(glob => ({ + pattern: glob, + opts: task.opts + })); + return tasks.concat(newTask); + }, []); + + const filter = getFilter(); + + return tasks.reduce( + (matches, task) => arrayUnion(matches, fastGlob.sync(task.pattern, task.opts)), + [] + ).filter(p => !filter(p)); +}; + +module.exports.generateGlobTasks = generateGlobTasks; + +module.exports.hasMagic = (patterns, opts) => [] + .concat(patterns) + .some(pattern => glob.hasMagic(pattern, opts)); + +module.exports.gitignore = gitignore; + + +/***/ }), +/* 295 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var arrayUniq = __webpack_require__(296); + +module.exports = function () { + return arrayUniq([].concat.apply([], arguments)); +}; + + +/***/ }), +/* 296 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +// there's 3 implementations written in increasing order of efficiency + +// 1 - no Set type is defined +function uniqNoSet(arr) { + var ret = []; + + for (var i = 0; i < arr.length; i++) { + if (ret.indexOf(arr[i]) === -1) { + ret.push(arr[i]); + } + } + + return ret; +} + +// 2 - a simple Set type is defined +function uniqSet(arr) { + var seen = new Set(); + return arr.filter(function (el) { + if (!seen.has(el)) { + seen.add(el); + return true; + } + + return false; + }); +} + +// 3 - a standard Set type is defined and it has a forEach method +function uniqSetWithForEach(arr) { + var ret = []; + + (new Set(arr)).forEach(function (el) { + ret.push(el); + }); + + return ret; +} + +// V8 currently has a broken implementation +// https://github.com/joyent/node/issues/8449 +function doesForEachActuallyWork() { + var ret = false; + + (new Set([true])).forEach(function (el) { + ret = el; + }); + + return ret === true; +} + +if ('Set' in global) { + if (typeof Set.prototype.forEach === 'function' && doesForEachActuallyWork()) { + module.exports = uniqSetWithForEach; + } else { + module.exports = uniqSet; + } +} else { + module.exports = uniqNoSet; +} + + +/***/ }), +/* 297 */ +/***/ (function(module, exports, __webpack_require__) { + +// Approach: +// +// 1. Get the minimatch set +// 2. For each pattern in the set, PROCESS(pattern, false) +// 3. Store matches per-set, then uniq them +// +// PROCESS(pattern, inGlobStar) +// Get the first [n] items from pattern that are all strings +// Join these together. This is PREFIX. +// If there is no more remaining, then stat(PREFIX) and +// add to matches if it succeeds. END. +// +// If inGlobStar and PREFIX is symlink and points to dir +// set ENTRIES = [] +// else readdir(PREFIX) as ENTRIES +// If fail, END +// +// with ENTRIES +// If pattern[n] is GLOBSTAR +// // handle the case where the globstar match is empty +// // by pruning it out, and testing the resulting pattern +// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) +// // handle other cases. +// for ENTRY in ENTRIES (not dotfiles) +// // attach globstar + tail onto the entry +// // Mark that this entry is a globstar match +// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) +// +// else // not globstar +// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) +// Test ENTRY against pattern[n] +// If fails, continue +// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) +// +// Caveat: +// Cache all stats and readdirs results to minimize syscall. Since all +// we ever care about is existence and directory-ness, we can just keep +// `true` for files, and [children,...] for directories, or `false` for +// things that don't exist. + +module.exports = glob + +var fs = __webpack_require__(5) +var rp = __webpack_require__(298) +var minimatch = __webpack_require__(300) +var Minimatch = minimatch.Minimatch +var inherits = __webpack_require__(304) +var EE = __webpack_require__(58).EventEmitter +var path = __webpack_require__(6) +var assert = __webpack_require__(98) +var isAbsolute = __webpack_require__(305) +var globSync = __webpack_require__(306) +var common = __webpack_require__(307) +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var inflight = __webpack_require__(308) +var util = __webpack_require__(18) +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +var once = __webpack_require__(63) + +function glob (pattern, options, cb) { + if (typeof options === 'function') cb = options, options = {} + if (!options) options = {} + + if (options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return globSync(pattern, options) + } + + return new Glob(pattern, options, cb) +} + +glob.sync = globSync +var GlobSync = glob.GlobSync = globSync.GlobSync + +// old api surface +glob.glob = glob + +function extend (origin, add) { + if (add === null || typeof add !== 'object') { + return origin + } + + var keys = Object.keys(add) + var i = keys.length + while (i--) { + origin[keys[i]] = add[keys[i]] + } + return origin +} + +glob.hasMagic = function (pattern, options_) { + var options = extend({}, options_) + options.noprocess = true + + var g = new Glob(pattern, options) + var set = g.minimatch.set + + if (!pattern) + return false + + if (set.length > 1) + return true + + for (var j = 0; j < set[0].length; j++) { + if (typeof set[0][j] !== 'string') + return true + } + + return false +} + +glob.Glob = Glob +inherits(Glob, EE) +function Glob (pattern, options, cb) { + if (typeof options === 'function') { + cb = options + options = null + } + + if (options && options.sync) { + if (cb) + throw new TypeError('callback provided to sync glob') + return new GlobSync(pattern, options) + } + + if (!(this instanceof Glob)) + return new Glob(pattern, options, cb) + + setopts(this, pattern, options) + this._didRealPath = false + + // process each pattern in the minimatch set + var n = this.minimatch.set.length + + // The matches are stored as {: true,...} so that + // duplicates are automagically pruned. + // Later, we do an Object.keys() on these. + // Keep them as a list so we can fill in when nonull is set. + this.matches = new Array(n) + + if (typeof cb === 'function') { + cb = once(cb) + this.on('error', cb) + this.on('end', function (matches) { + cb(null, matches) + }) + } + + var self = this + this._processing = 0 + + this._emitQueue = [] + this._processQueue = [] + this.paused = false + + if (this.noprocess) + return this + + if (n === 0) + return done() + + var sync = true + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false, done) + } + sync = false + + function done () { + --self._processing + if (self._processing <= 0) { + if (sync) { + process.nextTick(function () { + self._finish() + }) + } else { + self._finish() + } + } + } +} + +Glob.prototype._finish = function () { + assert(this instanceof Glob) + if (this.aborted) + return + + if (this.realpath && !this._didRealpath) + return this._realpath() + + common.finish(this) + this.emit('end', this.found) +} + +Glob.prototype._realpath = function () { + if (this._didRealpath) + return + + this._didRealpath = true + + var n = this.matches.length + if (n === 0) + return this._finish() + + var self = this + for (var i = 0; i < this.matches.length; i++) + this._realpathSet(i, next) + + function next () { + if (--n === 0) + self._finish() + } +} + +Glob.prototype._realpathSet = function (index, cb) { + var matchset = this.matches[index] + if (!matchset) + return cb() + + var found = Object.keys(matchset) + var self = this + var n = found.length + + if (n === 0) + return cb() + + var set = this.matches[index] = Object.create(null) + found.forEach(function (p, i) { + // If there's a problem with the stat, then it means that + // one or more of the links in the realpath couldn't be + // resolved. just return the abs value in that case. + p = self._makeAbs(p) + rp.realpath(p, self.realpathCache, function (er, real) { + if (!er) + set[real] = true + else if (er.syscall === 'stat') + set[p] = true + else + self.emit('error', er) // srsly wtf right here + + if (--n === 0) { + self.matches[index] = set + cb() + } + }) + }) +} + +Glob.prototype._mark = function (p) { + return common.mark(this, p) +} + +Glob.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + +Glob.prototype.abort = function () { + this.aborted = true + this.emit('abort') +} + +Glob.prototype.pause = function () { + if (!this.paused) { + this.paused = true + this.emit('pause') + } +} + +Glob.prototype.resume = function () { + if (this.paused) { + this.emit('resume') + this.paused = false + if (this._emitQueue.length) { + var eq = this._emitQueue.slice(0) + this._emitQueue.length = 0 + for (var i = 0; i < eq.length; i ++) { + var e = eq[i] + this._emitMatch(e[0], e[1]) + } + } + if (this._processQueue.length) { + var pq = this._processQueue.slice(0) + this._processQueue.length = 0 + for (var i = 0; i < pq.length; i ++) { + var p = pq[i] + this._processing-- + this._process(p[0], p[1], p[2], p[3]) + } + } + } +} + +Glob.prototype._process = function (pattern, index, inGlobStar, cb) { + assert(this instanceof Glob) + assert(typeof cb === 'function') + + if (this.aborted) + return + + this._processing++ + if (this.paused) { + this._processQueue.push([pattern, index, inGlobStar, cb]) + return + } + + //console.error('PROCESS %d', this._processing, pattern) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // see if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index, cb) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip _processing + if (childrenIgnored(this, read)) + return cb() + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) +} + +Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + +Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return cb() + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return cb() + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return cb() + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) { + if (prefix !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + this._process([e].concat(remain), index, inGlobStar, cb) + } + cb() +} + +Glob.prototype._emitMatch = function (index, e) { + if (this.aborted) + return + + if (isIgnored(this, e)) + return + + if (this.paused) { + this._emitQueue.push([index, e]) + return + } + + var abs = isAbsolute(e) ? e : this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) + e = abs + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + var st = this.statCache[abs] + if (st) + this.emit('stat', e, st) + + this.emit('match', e) +} + +Glob.prototype._readdirInGlobStar = function (abs, cb) { + if (this.aborted) + return + + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false, cb) + + var lstatkey = 'lstat\0' + abs + var self = this + var lstatcb = inflight(lstatkey, lstatcb_) + + if (lstatcb) + fs.lstat(abs, lstatcb) + + function lstatcb_ (er, lstat) { + if (er && er.code === 'ENOENT') + return cb() + + var isSym = lstat && lstat.isSymbolicLink() + self.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) { + self.cache[abs] = 'FILE' + cb() + } else + self._readdir(abs, false, cb) + } +} + +Glob.prototype._readdir = function (abs, inGlobStar, cb) { + if (this.aborted) + return + + cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) + if (!cb) + return + + //console.error('RD %j %j', +inGlobStar, abs) + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs, cb) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return cb() + + if (Array.isArray(c)) + return cb(null, c) + } + + var self = this + fs.readdir(abs, readdirCb(this, abs, cb)) +} + +function readdirCb (self, abs, cb) { + return function (er, entries) { + if (er) + self._readdirError(abs, er, cb) + else + self._readdirEntries(abs, entries, cb) + } +} + +Glob.prototype._readdirEntries = function (abs, entries, cb) { + if (this.aborted) + return + + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + return cb(null, entries) +} + +Glob.prototype._readdirError = function (f, er, cb) { + if (this.aborted) + return + + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + this.emit('error', error) + this.abort() + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) { + this.emit('error', er) + // If the error is handled, then we abort + // if not, we threw out of here + this.abort() + } + if (!this.silent) + console.error('glob error', er) + break + } + + return cb() +} + +Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { + var self = this + this._readdir(abs, inGlobStar, function (er, entries) { + self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) + }) +} + + +Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { + //console.error('pgs2', prefix, remain[0], entries) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return cb() + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false, cb) + + var isSym = this.symlinks[abs] + var len = entries.length + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return cb() + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true, cb) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true, cb) + } + + cb() +} + +Glob.prototype._processSimple = function (prefix, index, cb) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var self = this + this._stat(prefix, function (er, exists) { + self._processSimple2(prefix, index, er, exists, cb) + }) +} +Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { + + //console.error('ps2', prefix, exists) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return cb() + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) + cb() +} + +// Returns either 'DIR', 'FILE', or false +Glob.prototype._stat = function (f, cb) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return cb() + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return cb(null, c) + + if (needDir && c === 'FILE') + return cb() + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (stat !== undefined) { + if (stat === false) + return cb(null, stat) + else { + var type = stat.isDirectory() ? 'DIR' : 'FILE' + if (needDir && type === 'FILE') + return cb() + else + return cb(null, type, stat) + } + } + + var self = this + var statcb = inflight('stat\0' + abs, lstatcb_) + if (statcb) + fs.lstat(abs, statcb) + + function lstatcb_ (er, lstat) { + if (lstat && lstat.isSymbolicLink()) { + // If it's a symlink, then treat it as the target, unless + // the target does not exist, then treat it as a file. + return fs.stat(abs, function (er, stat) { + if (er) + self._stat2(f, abs, null, lstat, cb) + else + self._stat2(f, abs, er, stat, cb) + }) + } else { + self._stat2(f, abs, er, lstat, cb) + } + } +} + +Glob.prototype._stat2 = function (f, abs, er, stat, cb) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return cb() + } + + var needDir = f.slice(-1) === '/' + this.statCache[abs] = stat + + if (abs.slice(-1) === '/' && stat && !stat.isDirectory()) + return cb(null, false, stat) + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return cb() + + return cb(null, c, stat) +} + + +/***/ }), +/* 298 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = realpath +realpath.realpath = realpath +realpath.sync = realpathSync +realpath.realpathSync = realpathSync +realpath.monkeypatch = monkeypatch +realpath.unmonkeypatch = unmonkeypatch + +var fs = __webpack_require__(5) +var origRealpath = fs.realpath +var origRealpathSync = fs.realpathSync + +var version = process.version +var ok = /^v[0-5]\./.test(version) +var old = __webpack_require__(299) + +function newError (er) { + return er && er.syscall === 'realpath' && ( + er.code === 'ELOOP' || + er.code === 'ENOMEM' || + er.code === 'ENAMETOOLONG' + ) +} + +function realpath (p, cache, cb) { + if (ok) { + return origRealpath(p, cache, cb) + } + + if (typeof cache === 'function') { + cb = cache + cache = null + } + origRealpath(p, cache, function (er, result) { + if (newError(er)) { + old.realpath(p, cache, cb) + } else { + cb(er, result) + } + }) +} + +function realpathSync (p, cache) { + if (ok) { + return origRealpathSync(p, cache) + } + + try { + return origRealpathSync(p, cache) + } catch (er) { + if (newError(er)) { + return old.realpathSync(p, cache) + } else { + throw er + } + } +} + +function monkeypatch () { + fs.realpath = realpath + fs.realpathSync = realpathSync +} + +function unmonkeypatch () { + fs.realpath = origRealpath + fs.realpathSync = origRealpathSync +} + + +/***/ }), +/* 299 */ +/***/ (function(module, exports, __webpack_require__) { + +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +var pathModule = __webpack_require__(6); +var isWindows = process.platform === 'win32'; +var fs = __webpack_require__(5); + +// JavaScript implementation of realpath, ported from node pre-v6 + +var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); + +function rethrow() { + // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and + // is fairly slow to generate. + var callback; + if (DEBUG) { + var backtrace = new Error; + callback = debugCallback; + } else + callback = missingCallback; + + return callback; + + function debugCallback(err) { + if (err) { + backtrace.message = err.message; + err = backtrace; + missingCallback(err); + } + } + + function missingCallback(err) { + if (err) { + if (process.throwDeprecation) + throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs + else if (!process.noDeprecation) { + var msg = 'fs: missing callback ' + (err.stack || err.message); + if (process.traceDeprecation) + console.trace(msg); + else + console.error(msg); + } + } + } +} + +function maybeCallback(cb) { + return typeof cb === 'function' ? cb : rethrow(); +} + +var normalize = pathModule.normalize; + +// Regexp that finds the next partion of a (partial) path +// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] +if (isWindows) { + var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; +} else { + var nextPartRe = /(.*?)(?:[\/]+|$)/g; +} + +// Regex to find the device root, including trailing slash. E.g. 'c:\\'. +if (isWindows) { + var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; +} else { + var splitRootRe = /^[\/]*/; +} + +exports.realpathSync = function realpathSync(p, cache) { + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return cache[p]; + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstatSync(base); + knownHard[base] = true; + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + // NB: p.length changes. + while (pos < p.length) { + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + continue; + } + + var resolvedLink; + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // some known symbolic link. no need to stat again. + resolvedLink = cache[base]; + } else { + var stat = fs.lstatSync(base); + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + continue; + } + + // read the link if it wasn't read before + // dev/ino always return 0 on windows, so skip the check. + var linkTarget = null; + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + linkTarget = seenLinks[id]; + } + } + if (linkTarget === null) { + fs.statSync(base); + linkTarget = fs.readlinkSync(base); + } + resolvedLink = pathModule.resolve(previous, linkTarget); + // track this, if given a cache. + if (cache) cache[base] = resolvedLink; + if (!isWindows) seenLinks[id] = linkTarget; + } + + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } + + if (cache) cache[original] = p; + + return p; +}; + + +exports.realpath = function realpath(p, cache, cb) { + if (typeof cb !== 'function') { + cb = maybeCallback(cache); + cache = null; + } + + // make p is absolute + p = pathModule.resolve(p); + + if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { + return process.nextTick(cb.bind(null, null, cache[p])); + } + + var original = p, + seenLinks = {}, + knownHard = {}; + + // current character position in p + var pos; + // the partial path so far, including a trailing slash if any + var current; + // the partial path without a trailing slash (except when pointing at a root) + var base; + // the partial path scanned in the previous round, with slash + var previous; + + start(); + + function start() { + // Skip over roots + var m = splitRootRe.exec(p); + pos = m[0].length; + current = m[0]; + base = m[0]; + previous = ''; + + // On windows, check that the root exists. On unix there is no need. + if (isWindows && !knownHard[base]) { + fs.lstat(base, function(err) { + if (err) return cb(err); + knownHard[base] = true; + LOOP(); + }); + } else { + process.nextTick(LOOP); + } + } + + // walk down the path, swapping out linked pathparts for their real + // values + function LOOP() { + // stop if scanned past end of path + if (pos >= p.length) { + if (cache) cache[original] = p; + return cb(null, p); + } + + // find the next part + nextPartRe.lastIndex = pos; + var result = nextPartRe.exec(p); + previous = current; + current += result[0]; + base = previous + result[1]; + pos = nextPartRe.lastIndex; + + // continue if not a symlink + if (knownHard[base] || (cache && cache[base] === base)) { + return process.nextTick(LOOP); + } + + if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { + // known symbolic link. no need to stat again. + return gotResolvedLink(cache[base]); + } + + return fs.lstat(base, gotStat); + } + + function gotStat(err, stat) { + if (err) return cb(err); + + // if not a symlink, skip to the next path part + if (!stat.isSymbolicLink()) { + knownHard[base] = true; + if (cache) cache[base] = base; + return process.nextTick(LOOP); + } + + // stat & read the link if not read before + // call gotTarget as soon as the link target is known + // dev/ino always return 0 on windows, so skip the check. + if (!isWindows) { + var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); + if (seenLinks.hasOwnProperty(id)) { + return gotTarget(null, seenLinks[id], base); + } + } + fs.stat(base, function(err) { + if (err) return cb(err); + + fs.readlink(base, function(err, target) { + if (!isWindows) seenLinks[id] = target; + gotTarget(err, target); + }); + }); + } + + function gotTarget(err, target, base) { + if (err) return cb(err); + + var resolvedLink = pathModule.resolve(previous, target); + if (cache) cache[base] = resolvedLink; + gotResolvedLink(resolvedLink); + } + + function gotResolvedLink(resolvedLink) { + // resolve the link, then start over + p = pathModule.resolve(resolvedLink, p.slice(pos)); + start(); + } +}; + + +/***/ }), +/* 300 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = { sep: '/' } +try { + path = __webpack_require__(6) +} catch (er) {} + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = __webpack_require__(301) + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + a = a || {} + b = b || {} + var t = {} + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return minimatch + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig.minimatch(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + if (!def || !Object.keys(def).length) return Minimatch + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + // "" only matches "" + if (pattern.trim() === '') return p === '' + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + if (typeof pattern !== 'string') { + throw new TypeError('glob pattern string required') + } + + if (!options) options = {} + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + // don't do it more than once. + if (this._made) return + + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = console.error + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + if (typeof pattern === 'undefined') { + throw new TypeError('undefined pattern') + } + + if (options.nobrace || + !pattern.match(/\{.*\}/)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + if (pattern.length > 1024 * 64) { + throw new TypeError('pattern is too long') + } + + var options = this.options + + // shortcuts + if (!options.noglobstar && pattern === '**') return GLOBSTAR + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + case '/': + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + if (inClass) { + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '.': + case '[': + case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = match +function match (f, partial) { + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + var options = this.options + + this.debug('matchOne', + { 'this': this, file: file, pattern: pattern }) + + this.debug('matchOne', file.length, pattern.length) + + for (var fi = 0, + pi = 0, + fl = file.length, + pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + if (p === false) return false + + if (p === GLOBSTAR) { + this.debug('GLOBSTAR', [pattern, p, f]) + + // "**" + // a/**/b/**/c would match the following: + // a/b/x/y/z/c + // a/x/y/z/b/c + // a/b/x/b/x/c + // a/b/c + // To do this, take the rest of the pattern after + // the **, and see if it would match the file remainder. + // If so, return success. + // If not, the ** "swallows" a segment, and try again. + // This is recursively awful. + // + // a/**/b/**/c matching a/b/x/y/z/c + // - a matches a + // - doublestar + // - matchOne(b/x/y/z/c, b/**/c) + // - b matches b + // - doublestar + // - matchOne(x/y/z/c, c) -> no + // - matchOne(y/z/c, c) -> no + // - matchOne(z/c, c) -> no + // - matchOne(c, c) yes, hit + var fr = fi + var pr = pi + 1 + if (pr === pl) { + this.debug('** at the end') + // a ** at the end will just swallow the rest. + // We have found a match. + // however, it will not swallow /.x, unless + // options.dot is set. + // . and .. are *never* matched by **, for explosively + // exponential reasons. + for (; fi < fl; fi++) { + if (file[fi] === '.' || file[fi] === '..' || + (!options.dot && file[fi].charAt(0) === '.')) return false + } + return true + } + + // ok, let's see if we can swallow whatever we can. + while (fr < fl) { + var swallowee = file[fr] + + this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) + + // XXX remove this slice. Just pass the start index. + if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { + this.debug('globstar found match!', fr, fl, swallowee) + // found a match. + return true + } else { + // can't swallow "." or ".." ever. + // can only swallow ".foo" when explicitly asked. + if (swallowee === '.' || swallowee === '..' || + (!options.dot && swallowee.charAt(0) === '.')) { + this.debug('dot detected!', file, fr, pattern, pr) + break + } + + // ** swallows a segment, and continue. + this.debug('globstar swallow a segment, and continue') + fr++ + } + } + + // no match was found. + // However, in partial mode, we can't say this is necessarily over. + // If there's more *pattern* left, then + if (partial) { + // ran out of file + this.debug('\n>>> no match, partial?', file, fr, pattern, pr) + if (fr === fl) return true + } + return false + } + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + if (options.nocase) { + hit = f.toLowerCase() === p.toLowerCase() + } else { + hit = f === p + } + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // Note: ending in / means that we'll get a final "" + // at the end of the pattern. This can only match a + // corresponding "" at the end of the file. + // If the file ends in /, then it can only match a + // a pattern that ends in /, unless the pattern just + // doesn't have any more for it. But, a/b/ should *not* + // match "a/b/*", even though "" matches against the + // [^/]*? pattern, except in partial mode, where it might + // simply not be reached yet. + // However, a/b/ should still satisfy a/* + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') + return emptyFileEnd + } + + // should be unreachable. + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} + + +/***/ }), +/* 301 */ +/***/ (function(module, exports, __webpack_require__) { + +var concatMap = __webpack_require__(302); +var balanced = __webpack_require__(303); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str) { + if (!str) + return []; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,.*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.abs(numeric(n[2])) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} + + + +/***/ }), +/* 302 */ +/***/ (function(module, exports) { + +module.exports = function (xs, fn) { + var res = []; + for (var i = 0; i < xs.length; i++) { + var x = fn(xs[i], i); + if (isArray(x)) res.push.apply(res, x); + else res.push(x); + } + return res; +}; + +var isArray = Array.isArray || function (xs) { + return Object.prototype.toString.call(xs) === '[object Array]'; +}; + + +/***/ }), +/* 303 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = balanced; +function balanced(a, b, str) { + if (a instanceof RegExp) a = maybeMatch(a, str); + if (b instanceof RegExp) b = maybeMatch(b, str); + + var r = range(a, b, str); + + return r && { + start: r[0], + end: r[1], + pre: str.slice(0, r[0]), + body: str.slice(r[0] + a.length, r[1]), + post: str.slice(r[1] + b.length) + }; +} + +function maybeMatch(reg, str) { + var m = str.match(reg); + return m ? m[0] : null; +} + +balanced.range = range; +function range(a, b, str) { + var begs, beg, left, right, result; + var ai = str.indexOf(a); + var bi = str.indexOf(b, ai + 1); + var i = ai; + + if (ai >= 0 && bi > 0) { + begs = []; + left = str.length; + + while (i >= 0 && !result) { + if (i == ai) { + begs.push(i); + ai = str.indexOf(a, i + 1); + } else if (begs.length == 1) { + result = [ begs.pop(), bi ]; + } else { + beg = begs.pop(); + if (beg < left) { + left = beg; + right = bi; + } + + bi = str.indexOf(b, i + 1); + } + + i = ai < bi && ai >= 0 ? ai : bi; + } + + if (begs.length) { + result = [ left, right ]; + } + } + + return result; +} + + +/***/ }), +/* 304 */ +/***/ (function(module, exports) { + +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + + +/***/ }), +/* 305 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +function posix(path) { + return path.charAt(0) === '/'; +} + +function win32(path) { + // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 + var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; + var result = splitDeviceRe.exec(path); + var device = result[1] || ''; + var isUnc = Boolean(device && device.charAt(1) !== ':'); + + // UNC paths are always absolute + return Boolean(result[2] || isUnc); +} + +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; + + +/***/ }), +/* 306 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = globSync +globSync.GlobSync = GlobSync + +var fs = __webpack_require__(5) +var rp = __webpack_require__(298) +var minimatch = __webpack_require__(300) +var Minimatch = minimatch.Minimatch +var Glob = __webpack_require__(297).Glob +var util = __webpack_require__(18) +var path = __webpack_require__(6) +var assert = __webpack_require__(98) +var isAbsolute = __webpack_require__(305) +var common = __webpack_require__(307) +var alphasort = common.alphasort +var alphasorti = common.alphasorti +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = rp.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + if (isIgnored(this, e)) + return + + var abs = this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) { + e = abs + } + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + if (er.code === 'ENOENT') { + // lstat failed, doesn't exist + return null + } + } + + var isSym = lstat && lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = fs.lstatSync(abs) + } catch (er) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return false + } + } + + if (lstat && lstat.isSymbolicLink()) { + try { + stat = fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} + + +/***/ }), +/* 307 */ +/***/ (function(module, exports, __webpack_require__) { + +exports.alphasort = alphasort +exports.alphasorti = alphasorti +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var path = __webpack_require__(6) +var minimatch = __webpack_require__(300) +var isAbsolute = __webpack_require__(305) +var Minimatch = minimatch.Minimatch + +function alphasorti (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()) +} + +function alphasort (a, b) { + return a.localeCompare(b) +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + self.absolute = !!options.absolute + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + // TODO: is an absolute `cwd` supposed to be resolved against `root`? + // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') + self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) + if (process.platform === "win32") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(self.nocase ? alphasorti : alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + + +/***/ }), +/* 308 */ +/***/ (function(module, exports, __webpack_require__) { + +var wrappy = __webpack_require__(64) +var reqs = Object.create(null) +var once = __webpack_require__(63) + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} + + +/***/ }), +/* 309 */ +/***/ (function(module, exports, __webpack_require__) { + +const pkg = __webpack_require__(310); + +module.exports = pkg.async; +module.exports.default = pkg.async; + +module.exports.async = pkg.async; +module.exports.sync = pkg.sync; +module.exports.stream = pkg.stream; + +module.exports.generateTasks = pkg.generateTasks; + + +/***/ }), +/* 310 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var optionsManager = __webpack_require__(311); +var taskManager = __webpack_require__(312); +var reader_async_1 = __webpack_require__(438); +var reader_stream_1 = __webpack_require__(462); +var reader_sync_1 = __webpack_require__(463); +var arrayUtils = __webpack_require__(465); +var streamUtils = __webpack_require__(466); +/** + * Synchronous API. + */ +function sync(source, opts) { + assertPatternsInput(source); + var works = getWorks(source, reader_sync_1.default, opts); + return arrayUtils.flatten(works); +} +exports.sync = sync; +/** + * Asynchronous API. + */ +function async(source, opts) { + try { + assertPatternsInput(source); + } + catch (error) { + return Promise.reject(error); + } + var works = getWorks(source, reader_async_1.default, opts); + return Promise.all(works).then(arrayUtils.flatten); +} +exports.async = async; +/** + * Stream API. + */ +function stream(source, opts) { + assertPatternsInput(source); + var works = getWorks(source, reader_stream_1.default, opts); + return streamUtils.merge(works); +} +exports.stream = stream; +/** + * Return a set of tasks based on provided patterns. + */ +function generateTasks(source, opts) { + assertPatternsInput(source); + var patterns = [].concat(source); + var options = optionsManager.prepare(opts); + return taskManager.generate(patterns, options); +} +exports.generateTasks = generateTasks; +/** + * Returns a set of works based on provided tasks and class of the reader. + */ +function getWorks(source, _Reader, opts) { + var patterns = [].concat(source); + var options = optionsManager.prepare(opts); + var tasks = taskManager.generate(patterns, options); + var reader = new _Reader(options); + return tasks.map(reader.read, reader); +} +function assertPatternsInput(source) { + if ([].concat(source).every(isString)) { + return; + } + throw new TypeError('Patterns must be a string or an array of strings'); +} +function isString(source) { + /* tslint:disable-next-line strict-type-predicates */ + return typeof source === 'string'; +} + + +/***/ }), +/* 311 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +function prepare(options) { + var opts = Object.assign({ + cwd: process.cwd(), + deep: true, + ignore: [], + dot: false, + stats: false, + onlyFiles: true, + onlyDirectories: false, + followSymlinkedDirectories: true, + unique: true, + markDirectories: false, + absolute: false, + nobrace: false, + brace: true, + noglobstar: false, + globstar: true, + noext: false, + extension: true, + nocase: false, + case: true, + matchBase: false, + transform: null + }, options); + if (opts.onlyDirectories) { + opts.onlyFiles = false; + } + opts.brace = !opts.nobrace; + opts.globstar = !opts.noglobstar; + opts.extension = !opts.noext; + opts.case = !opts.nocase; + if (options) { + opts.brace = ('brace' in options ? options.brace : opts.brace); + opts.globstar = ('globstar' in options ? options.globstar : opts.globstar); + opts.extension = ('extension' in options ? options.extension : opts.extension); + opts.case = ('case' in options ? options.case : opts.case); + } + return opts; +} +exports.prepare = prepare; + + +/***/ }), +/* 312 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var patternUtils = __webpack_require__(313); +/** + * Generate tasks based on parent directory of each pattern. + */ +function generate(patterns, options) { + var unixPatterns = patterns.map(patternUtils.unixifyPattern); + var unixIgnore = options.ignore.map(patternUtils.unixifyPattern); + var positivePatterns = getPositivePatterns(unixPatterns); + var negativePatterns = getNegativePatternsAsPositive(unixPatterns, unixIgnore); + var staticPatterns = positivePatterns.filter(patternUtils.isStaticPattern); + var dynamicPatterns = positivePatterns.filter(patternUtils.isDynamicPattern); + var staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false); + var dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true); + return staticTasks.concat(dynamicTasks); +} +exports.generate = generate; +/** + * Convert patterns to tasks based on parent directory of each pattern. + */ +function convertPatternsToTasks(positive, negative, dynamic) { + var positivePatternsGroup = groupPatternsByBaseDirectory(positive); + // When we have a global group – there is no reason to divide the patterns into independent tasks. + // In this case, the global task covers the rest. + if ('.' in positivePatternsGroup) { + var task = convertPatternGroupToTask('.', positive, negative, dynamic); + return [task]; + } + return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic); +} +exports.convertPatternsToTasks = convertPatternsToTasks; +/** + * Return only positive patterns. + */ +function getPositivePatterns(patterns) { + return patternUtils.getPositivePatterns(patterns); +} +exports.getPositivePatterns = getPositivePatterns; +/** + * Return only negative patterns. + */ +function getNegativePatternsAsPositive(patterns, ignore) { + var negative = patternUtils.getNegativePatterns(patterns).concat(ignore); + var positive = negative.map(patternUtils.convertToPositivePattern); + return positive; +} +exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive; +/** + * Group patterns by base directory of each pattern. + */ +function groupPatternsByBaseDirectory(patterns) { + return patterns.reduce(function (collection, pattern) { + var base = patternUtils.getBaseDirectory(pattern); + if (base in collection) { + collection[base].push(pattern); + } + else { + collection[base] = [pattern]; + } + return collection; + }, {}); +} +exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory; +/** + * Convert group of patterns to tasks. + */ +function convertPatternGroupsToTasks(positive, negative, dynamic) { + return Object.keys(positive).map(function (base) { + return convertPatternGroupToTask(base, positive[base], negative, dynamic); + }); +} +exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks; +/** + * Create a task for positive and negative patterns. + */ +function convertPatternGroupToTask(base, positive, negative, dynamic) { + return { + base: base, + dynamic: dynamic, + patterns: [].concat(positive, negative.map(patternUtils.convertToNegativePattern)), + positive: positive, + negative: negative + }; +} +exports.convertPatternGroupToTask = convertPatternGroupToTask; + + +/***/ }), +/* 313 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(6); +var globParent = __webpack_require__(314); +var isGlob = __webpack_require__(318); +var micromatch = __webpack_require__(319); +var GLOBSTAR = '**'; +/** + * Return true for static pattern. + */ +function isStaticPattern(pattern) { + return !isDynamicPattern(pattern); +} +exports.isStaticPattern = isStaticPattern; +/** + * Return true for pattern that looks like glob. + */ +function isDynamicPattern(pattern) { + return isGlob(pattern); +} +exports.isDynamicPattern = isDynamicPattern; +/** + * Convert a windows «path» to a unix-style «path». + */ +function unixifyPattern(pattern) { + return pattern.replace(/\\/g, '/'); +} +exports.unixifyPattern = unixifyPattern; +/** + * Returns negative pattern as positive pattern. + */ +function convertToPositivePattern(pattern) { + return isNegativePattern(pattern) ? pattern.slice(1) : pattern; +} +exports.convertToPositivePattern = convertToPositivePattern; +/** + * Returns positive pattern as negative pattern. + */ +function convertToNegativePattern(pattern) { + return '!' + pattern; +} +exports.convertToNegativePattern = convertToNegativePattern; +/** + * Return true if provided pattern is negative pattern. + */ +function isNegativePattern(pattern) { + return pattern.startsWith('!') && pattern[1] !== '('; +} +exports.isNegativePattern = isNegativePattern; +/** + * Return true if provided pattern is positive pattern. + */ +function isPositivePattern(pattern) { + return !isNegativePattern(pattern); +} +exports.isPositivePattern = isPositivePattern; +/** + * Extracts negative patterns from array of patterns. + */ +function getNegativePatterns(patterns) { + return patterns.filter(isNegativePattern); +} +exports.getNegativePatterns = getNegativePatterns; +/** + * Extracts positive patterns from array of patterns. + */ +function getPositivePatterns(patterns) { + return patterns.filter(isPositivePattern); +} +exports.getPositivePatterns = getPositivePatterns; +/** + * Extract base directory from provided pattern. + */ +function getBaseDirectory(pattern) { + return globParent(pattern); +} +exports.getBaseDirectory = getBaseDirectory; +/** + * Return true if provided pattern has globstar. + */ +function hasGlobStar(pattern) { + return pattern.indexOf(GLOBSTAR) !== -1; +} +exports.hasGlobStar = hasGlobStar; +/** + * Return true if provided pattern ends with slash and globstar. + */ +function endsWithSlashGlobStar(pattern) { + return pattern.endsWith('/' + GLOBSTAR); +} +exports.endsWithSlashGlobStar = endsWithSlashGlobStar; +/** + * Returns «true» when pattern ends with a slash and globstar or the last partial of the pattern is static pattern. + */ +function isAffectDepthOfReadingPattern(pattern) { + var basename = path.basename(pattern); + return endsWithSlashGlobStar(pattern) || isStaticPattern(basename); +} +exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern; +/** + * Return naive depth of provided pattern without depth of the base directory. + */ +function getNaiveDepth(pattern) { + var base = getBaseDirectory(pattern); + var patternDepth = pattern.split('/').length; + var patternBaseDepth = base.split('/').length; + /** + * This is a hack for pattern that has no base directory. + * + * This is related to the `*\something\*` pattern. + */ + if (base === '.') { + return patternDepth - patternBaseDepth; + } + return patternDepth - patternBaseDepth - 1; +} +exports.getNaiveDepth = getNaiveDepth; +/** + * Return max naive depth of provided patterns without depth of the base directory. + */ +function getMaxNaivePatternsDepth(patterns) { + return patterns.reduce(function (max, pattern) { + var depth = getNaiveDepth(pattern); + return depth > max ? depth : max; + }, 0); +} +exports.getMaxNaivePatternsDepth = getMaxNaivePatternsDepth; +/** + * Make RegExp for provided pattern. + */ +function makeRe(pattern, options) { + return micromatch.makeRe(pattern, options); +} +exports.makeRe = makeRe; +/** + * Convert patterns to regexps. + */ +function convertPatternsToRe(patterns, options) { + return patterns.map(function (pattern) { return makeRe(pattern, options); }); +} +exports.convertPatternsToRe = convertPatternsToRe; +/** + * Returns true if the entry match any of the given RegExp's. + */ +function matchAny(entry, patternsRe) { + return patternsRe.some(function (patternRe) { return patternRe.test(entry); }); +} +exports.matchAny = matchAny; + + +/***/ }), +/* 314 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var path = __webpack_require__(6); +var isglob = __webpack_require__(315); +var pathDirname = __webpack_require__(317); +var isWin32 = __webpack_require__(153).platform() === 'win32'; + +module.exports = function globParent(str) { + // flip windows path separators + if (isWin32 && str.indexOf('/') < 0) str = str.split('\\').join('/'); + + // special case for strings ending in enclosure containing path separator + if (/[\{\[].*[\/]*.*[\}\]]$/.test(str)) str += '/'; + + // preserves full path in case of trailing path separator + str += 'a'; + + // remove path parts that are globby + do {str = pathDirname.posix(str)} + while (isglob(str) || /(^|[^\\])([\{\[]|\([^\)]+$)/.test(str)); + + // remove escape chars and return result + return str.replace(/\\([\*\?\|\[\]\(\)\{\}])/g, '$1'); +}; + + +/***/ }), +/* 315 */ +/***/ (function(module, exports, __webpack_require__) { + +/*! + * is-glob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +var isExtglob = __webpack_require__(316); + +module.exports = function isGlob(str) { + if (typeof str !== 'string' || str === '') { + return false; + } + + if (isExtglob(str)) return true; + + var regex = /(\\).|([*?]|\[.*\]|\{.*\}|\(.*\|.*\)|^!)/; + var match; + + while ((match = regex.exec(str))) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + return false; +}; + + +/***/ }), +/* 316 */ +/***/ (function(module, exports) { + +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isExtglob(str) { + if (typeof str !== 'string' || str === '') { + return false; + } + + var match; + while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + + return false; +}; + + +/***/ }), +/* 317 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var path = __webpack_require__(6); +var inspect = __webpack_require__(18).inspect; + +function assertPath(path) { + if (typeof path !== 'string') { + throw new TypeError('Path must be a string. Received ' + inspect(path)); + } +} + +function posix(path) { + assertPath(path); + if (path.length === 0) + return '.'; + var code = path.charCodeAt(0); + var hasRoot = (code === 47/*/*/); + var end = -1; + var matchedSlash = true; + for (var i = path.length - 1; i >= 1; --i) { + code = path.charCodeAt(i); + if (code === 47/*/*/) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) + return hasRoot ? '/' : '.'; + if (hasRoot && end === 1) + return '//'; + return path.slice(0, end); +} + +function win32(path) { + assertPath(path); + var len = path.length; + if (len === 0) + return '.'; + var rootEnd = -1; + var end = -1; + var matchedSlash = true; + var offset = 0; + var code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (code === 47/*/*/ || code === 92/*\*/) { + // Possible UNC root + + rootEnd = offset = 1; + + code = path.charCodeAt(1); + if (code === 47/*/*/ || code === 92/*\*/) { + // Matched double path separator at beginning + var j = 2; + var last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + code = path.charCodeAt(j); + if (code === 47/*/*/ || code === 92/*\*/) + break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + code = path.charCodeAt(j); + if (code !== 47/*/*/ && code !== 92/*\*/) + break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + code = path.charCodeAt(j); + if (code === 47/*/*/ || code === 92/*\*/) + break; + } + if (j === len) { + // We matched a UNC root only + return path; + } + if (j !== last) { + // We matched a UNC root with leftovers + + // Offset by 1 to include the separator after the UNC root to + // treat it as a "normal root" on top of a (UNC) root + rootEnd = offset = j + 1; + } + } + } + } + } else if ((code >= 65/*A*/ && code <= 90/*Z*/) || + (code >= 97/*a*/ && code <= 122/*z*/)) { + // Possible device root + + code = path.charCodeAt(1); + if (path.charCodeAt(1) === 58/*:*/) { + rootEnd = offset = 2; + if (len > 2) { + code = path.charCodeAt(2); + if (code === 47/*/*/ || code === 92/*\*/) + rootEnd = offset = 3; + } + } + } + } else if (code === 47/*/*/ || code === 92/*\*/) { + return path[0]; + } + + for (var i = len - 1; i >= offset; --i) { + code = path.charCodeAt(i); + if (code === 47/*/*/ || code === 92/*\*/) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) { + if (rootEnd === -1) + return '.'; + else + end = rootEnd; + } + return path.slice(0, end); +} + +module.exports = process.platform === 'win32' ? win32 : posix; +module.exports.posix = posix; +module.exports.win32 = win32; + + +/***/ }), +/* 318 */ +/***/ (function(module, exports, __webpack_require__) { + +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +var isExtglob = __webpack_require__(316); +var chars = { '{': '}', '(': ')', '[': ']'}; + +module.exports = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') { + return false; + } + + if (isExtglob(str)) { + return true; + } + + var regex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; + var match; + + // optionally relax regex + if (options && options.strict === false) { + regex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/; + } + + while ((match = regex.exec(str))) { + if (match[2]) return true; + var idx = match.index + match[0].length; + + // if an open bracket/brace/paren is escaped, + // set the index to the next closing character + var open = match[1]; + var close = open ? chars[open] : null; + if (open && close) { + var n = str.indexOf(close, idx); + if (n !== -1) { + idx = n + 1; + } + } + + str = str.slice(idx); + } + return false; +}; + + +/***/ }), +/* 319 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Module dependencies + */ + +var util = __webpack_require__(18); +var braces = __webpack_require__(320); +var toRegex = __webpack_require__(321); +var extend = __webpack_require__(334); + +/** + * Local dependencies + */ + +var compilers = __webpack_require__(415); +var parsers = __webpack_require__(435); +var cache = __webpack_require__(436); +var utils = __webpack_require__(437); +var MAX_LENGTH = 1024 * 64; + +/** + * The main function takes a list of strings and one or more + * glob patterns to use for matching. + * + * ```js + * var mm = require('micromatch'); + * mm(list, patterns[, options]); + * + * console.log(mm(['a.js', 'a.txt'], ['*.js'])); + * //=> [ 'a.js' ] + * ``` + * @param {Array} `list` A list of strings to match + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of matches + * @summary false + * @api public + */ + +function micromatch(list, patterns, options) { + patterns = utils.arrayify(patterns); + list = utils.arrayify(list); + + var len = patterns.length; + if (list.length === 0 || len === 0) { + return []; + } + + if (len === 1) { + return micromatch.match(list, patterns[0], options); + } + + var omit = []; + var keep = []; + var idx = -1; + + while (++idx < len) { + var pattern = patterns[idx]; + + if (typeof pattern === 'string' && pattern.charCodeAt(0) === 33 /* ! */) { + omit.push.apply(omit, micromatch.match(list, pattern.slice(1), options)); + } else { + keep.push.apply(keep, micromatch.match(list, pattern, options)); + } + } + + var matches = utils.diff(keep, omit); + if (!options || options.nodupes !== false) { + return utils.unique(matches); + } + + return matches; +} + +/** + * Similar to the main function, but `pattern` must be a string. + * + * ```js + * var mm = require('micromatch'); + * mm.match(list, pattern[, options]); + * + * console.log(mm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); + * //=> ['a.a', 'a.aa'] + * ``` + * @param {Array} `list` Array of strings to match + * @param {String} `pattern` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of matches + * @api public + */ + +micromatch.match = function(list, pattern, options) { + if (Array.isArray(pattern)) { + throw new TypeError('expected pattern to be a string'); + } + + var unixify = utils.unixify(options); + var isMatch = memoize('match', pattern, options, micromatch.matcher); + var matches = []; + + list = utils.arrayify(list); + var len = list.length; + var idx = -1; + + while (++idx < len) { + var ele = list[idx]; + if (ele === pattern || isMatch(ele)) { + matches.push(utils.value(ele, unixify, options)); + } + } + + // if no options were passed, uniquify results and return + if (typeof options === 'undefined') { + return utils.unique(matches); + } + + if (matches.length === 0) { + if (options.failglob === true) { + throw new Error('no matches found for "' + pattern + '"'); + } + if (options.nonull === true || options.nullglob === true) { + return [options.unescape ? utils.unescape(pattern) : pattern]; + } + } + + // if `opts.ignore` was defined, diff ignored list + if (options.ignore) { + matches = micromatch.not(matches, options.ignore, options); + } + + return options.nodupes !== false ? utils.unique(matches) : matches; +}; + +/** + * Returns true if the specified `string` matches the given glob `pattern`. + * + * ```js + * var mm = require('micromatch'); + * mm.isMatch(string, pattern[, options]); + * + * console.log(mm.isMatch('a.a', '*.a')); + * //=> true + * console.log(mm.isMatch('a.b', '*.a')); + * //=> false + * ``` + * @param {String} `string` String to match + * @param {String} `pattern` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if the string matches the glob pattern. + * @api public + */ + +micromatch.isMatch = function(str, pattern, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + + if (isEmptyString(str) || isEmptyString(pattern)) { + return false; + } + + var equals = utils.equalsPattern(options); + if (equals(str)) { + return true; + } + + var isMatch = memoize('isMatch', pattern, options, micromatch.matcher); + return isMatch(str); +}; + +/** + * Returns true if some of the strings in the given `list` match any of the + * given glob `patterns`. + * + * ```js + * var mm = require('micromatch'); + * mm.some(list, patterns[, options]); + * + * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // true + * console.log(mm.some(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +micromatch.some = function(list, patterns, options) { + if (typeof list === 'string') { + list = [list]; + } + for (var i = 0; i < list.length; i++) { + if (micromatch(list[i], patterns, options).length === 1) { + return true; + } + } + return false; +}; + +/** + * Returns true if every string in the given `list` matches + * any of the given glob `patterns`. + * + * ```js + * var mm = require('micromatch'); + * mm.every(list, patterns[, options]); + * + * console.log(mm.every('foo.js', ['foo.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // false + * console.log(mm.every(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +micromatch.every = function(list, patterns, options) { + if (typeof list === 'string') { + list = [list]; + } + for (var i = 0; i < list.length; i++) { + if (micromatch(list[i], patterns, options).length !== 1) { + return false; + } + } + return true; +}; + +/** + * Returns true if **any** of the given glob `patterns` + * match the specified `string`. + * + * ```js + * var mm = require('micromatch'); + * mm.any(string, patterns[, options]); + * + * console.log(mm.any('a.a', ['b.*', '*.a'])); + * //=> true + * console.log(mm.any('a.a', 'b.*')); + * //=> false + * ``` + * @param {String|Array} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +micromatch.any = function(str, patterns, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + + if (isEmptyString(str) || isEmptyString(patterns)) { + return false; + } + + if (typeof patterns === 'string') { + patterns = [patterns]; + } + + for (var i = 0; i < patterns.length; i++) { + if (micromatch.isMatch(str, patterns[i], options)) { + return true; + } + } + return false; +}; + +/** + * Returns true if **all** of the given `patterns` match + * the specified string. + * + * ```js + * var mm = require('micromatch'); + * mm.all(string, patterns[, options]); + * + * console.log(mm.all('foo.js', ['foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', '!foo.js'])); + * // false + * + * console.log(mm.all('foo.js', ['*.js', 'foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); + * // true + * ``` + * @param {String|Array} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +micromatch.all = function(str, patterns, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + if (typeof patterns === 'string') { + patterns = [patterns]; + } + for (var i = 0; i < patterns.length; i++) { + if (!micromatch.isMatch(str, patterns[i], options)) { + return false; + } + } + return true; +}; + +/** + * Returns a list of strings that _**do not match any**_ of the given `patterns`. + * + * ```js + * var mm = require('micromatch'); + * mm.not(list, patterns[, options]); + * + * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a')); + * //=> ['b.b', 'c.c'] + * ``` + * @param {Array} `list` Array of strings to match. + * @param {String|Array} `patterns` One or more glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of strings that **do not match** the given patterns. + * @api public + */ + +micromatch.not = function(list, patterns, options) { + var opts = extend({}, options); + var ignore = opts.ignore; + delete opts.ignore; + + var unixify = utils.unixify(opts); + list = utils.arrayify(list).map(unixify); + + var matches = utils.diff(list, micromatch(list, patterns, opts)); + if (ignore) { + matches = utils.diff(matches, micromatch(list, ignore)); + } + + return opts.nodupes !== false ? utils.unique(matches) : matches; +}; + +/** + * Returns true if the given `string` contains the given pattern. Similar + * to [.isMatch](#isMatch) but the pattern can match any part of the string. + * + * ```js + * var mm = require('micromatch'); + * mm.contains(string, pattern[, options]); + * + * console.log(mm.contains('aa/bb/cc', '*b')); + * //=> true + * console.log(mm.contains('aa/bb/cc', '*d')); + * //=> false + * ``` + * @param {String} `str` The string to match. + * @param {String|Array} `patterns` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if the patter matches any part of `str`. + * @api public + */ + +micromatch.contains = function(str, patterns, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + + if (typeof patterns === 'string') { + if (isEmptyString(str) || isEmptyString(patterns)) { + return false; + } + + var equals = utils.equalsPattern(patterns, options); + if (equals(str)) { + return true; + } + var contains = utils.containsPattern(patterns, options); + if (contains(str)) { + return true; + } + } + + var opts = extend({}, options, {contains: true}); + return micromatch.any(str, patterns, opts); +}; + +/** + * Returns true if the given pattern and options should enable + * the `matchBase` option. + * @return {Boolean} + * @api private + */ + +micromatch.matchBase = function(pattern, options) { + if (pattern && pattern.indexOf('/') !== -1 || !options) return false; + return options.basename === true || options.matchBase === true; +}; + +/** + * Filter the keys of the given object with the given `glob` pattern + * and `options`. Does not attempt to match nested keys. If you need this feature, + * use [glob-object][] instead. + * + * ```js + * var mm = require('micromatch'); + * mm.matchKeys(object, patterns[, options]); + * + * var obj = { aa: 'a', ab: 'b', ac: 'c' }; + * console.log(mm.matchKeys(obj, '*b')); + * //=> { ab: 'b' } + * ``` + * @param {Object} `object` The object with keys to filter. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Object} Returns an object with only keys that match the given patterns. + * @api public + */ + +micromatch.matchKeys = function(obj, patterns, options) { + if (!utils.isObject(obj)) { + throw new TypeError('expected the first argument to be an object'); + } + var keys = micromatch(Object.keys(obj), patterns, options); + return utils.pick(obj, keys); +}; + +/** + * Returns a memoized matcher function from the given glob `pattern` and `options`. + * The returned function takes a string to match as its only argument and returns + * true if the string is a match. + * + * ```js + * var mm = require('micromatch'); + * mm.matcher(pattern[, options]); + * + * var isMatch = mm.matcher('*.!(*a)'); + * console.log(isMatch('a.a')); + * //=> false + * console.log(isMatch('a.b')); + * //=> true + * ``` + * @param {String} `pattern` Glob pattern + * @param {Object} `options` See available [options](#options) for changing how matches are performed. + * @return {Function} Returns a matcher function. + * @api public + */ + +micromatch.matcher = function matcher(pattern, options) { + if (Array.isArray(pattern)) { + return compose(pattern, options, matcher); + } + + // if pattern is a regex + if (pattern instanceof RegExp) { + return test(pattern); + } + + // if pattern is invalid + if (!utils.isString(pattern)) { + throw new TypeError('expected pattern to be an array, string or regex'); + } + + // if pattern is a non-glob string + if (!utils.hasSpecialChars(pattern)) { + if (options && options.nocase === true) { + pattern = pattern.toLowerCase(); + } + return utils.matchPath(pattern, options); + } + + // if pattern is a glob string + var re = micromatch.makeRe(pattern, options); + + // if `options.matchBase` or `options.basename` is defined + if (micromatch.matchBase(pattern, options)) { + return utils.matchBasename(re, options); + } + + function test(regex) { + var equals = utils.equalsPattern(options); + var unixify = utils.unixify(options); + + return function(str) { + if (equals(str)) { + return true; + } + + if (regex.test(unixify(str))) { + return true; + } + return false; + }; + } + + var fn = test(re); + Object.defineProperty(fn, 'result', { + configurable: true, + enumerable: false, + value: re.result + }); + return fn; +}; + +/** + * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match. + * + * ```js + * var mm = require('micromatch'); + * mm.capture(pattern, string[, options]); + * + * console.log(mm.capture('test/*.js', 'test/foo.js')); + * //=> ['foo'] + * console.log(mm.capture('test/*.js', 'foo/bar.css')); + * //=> null + * ``` + * @param {String} `pattern` Glob pattern to use for matching. + * @param {String} `string` String to match + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. + * @api public + */ + +micromatch.capture = function(pattern, str, options) { + var re = micromatch.makeRe(pattern, extend({capture: true}, options)); + var unixify = utils.unixify(options); + + function match() { + return function(string) { + var match = re.exec(unixify(string)); + if (!match) { + return null; + } + + return match.slice(1); + }; + } + + var capture = memoize('capture', pattern, options, match); + return capture(str); +}; + +/** + * Create a regular expression from the given glob `pattern`. + * + * ```js + * var mm = require('micromatch'); + * mm.makeRe(pattern[, options]); + * + * console.log(mm.makeRe('*.js')); + * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ + * ``` + * @param {String} `pattern` A glob pattern to convert to regex. + * @param {Object} `options` See available [options](#options) for changing how matches are performed. + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + +micromatch.makeRe = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected pattern to be a string'); + } + + if (pattern.length > MAX_LENGTH) { + throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); + } + + function makeRe() { + var result = micromatch.create(pattern, options); + var ast_array = []; + var output = result.map(function(obj) { + obj.ast.state = obj.state; + ast_array.push(obj.ast); + return obj.output; + }); + + var regex = toRegex(output.join('|'), options); + Object.defineProperty(regex, 'result', { + configurable: true, + enumerable: false, + value: ast_array + }); + return regex; + } + + return memoize('makeRe', pattern, options, makeRe); +}; + +/** + * Expand the given brace `pattern`. + * + * ```js + * var mm = require('micromatch'); + * console.log(mm.braces('foo/{a,b}/bar')); + * //=> ['foo/(a|b)/bar'] + * + * console.log(mm.braces('foo/{a,b}/bar', {expand: true})); + * //=> ['foo/(a|b)/bar'] + * ``` + * @param {String} `pattern` String with brace pattern to expand. + * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options. + * @return {Array} + * @api public + */ + +micromatch.braces = function(pattern, options) { + if (typeof pattern !== 'string' && !Array.isArray(pattern)) { + throw new TypeError('expected pattern to be an array or string'); + } + + function expand() { + if (options && options.nobrace === true || !/\{.*\}/.test(pattern)) { + return utils.arrayify(pattern); + } + return braces(pattern, options); + } + + return memoize('braces', pattern, options, expand); +}; + +/** + * Proxy to the [micromatch.braces](#method), for parity with + * minimatch. + */ + +micromatch.braceExpand = function(pattern, options) { + var opts = extend({}, options, {expand: true}); + return micromatch.braces(pattern, opts); +}; + +/** + * Parses the given glob `pattern` and returns an array of abstract syntax + * trees (ASTs), with the compiled `output` and optional source `map` on + * each AST. + * + * ```js + * var mm = require('micromatch'); + * mm.create(pattern[, options]); + * + * console.log(mm.create('abc/*.js')); + * // [{ options: { source: 'string', sourcemap: true }, + * // state: {}, + * // compilers: + * // { ... }, + * // output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', + * // ast: + * // { type: 'root', + * // errors: [], + * // nodes: + * // [ ... ], + * // dot: false, + * // input: 'abc/*.js' }, + * // parsingErrors: [], + * // map: + * // { version: 3, + * // sources: [ 'string' ], + * // names: [], + * // mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', + * // sourcesContent: [ 'abc/*.js' ] }, + * // position: { line: 1, column: 28 }, + * // content: {}, + * // files: {}, + * // idx: 6 }] + * ``` + * @param {String} `pattern` Glob pattern to parse and compile. + * @param {Object} `options` Any [options](#options) to change how parsing and compiling is performed. + * @return {Object} Returns an object with the parsed AST, compiled string and optional source map. + * @api public + */ + +micromatch.create = function(pattern, options) { + return memoize('create', pattern, options, function() { + function create(str, opts) { + return micromatch.compile(micromatch.parse(str, opts), opts); + } + + pattern = micromatch.braces(pattern, options); + var len = pattern.length; + var idx = -1; + var res = []; + + while (++idx < len) { + res.push(create(pattern[idx], options)); + } + return res; + }); +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * var mm = require('micromatch'); + * mm.parse(pattern[, options]); + * + * var ast = mm.parse('a/{b,c}/d'); + * console.log(ast); + * // { type: 'root', + * // errors: [], + * // input: 'a/{b,c}/d', + * // nodes: + * // [ { type: 'bos', val: '' }, + * // { type: 'text', val: 'a/' }, + * // { type: 'brace', + * // nodes: + * // [ { type: 'brace.open', val: '{' }, + * // { type: 'text', val: 'b,c' }, + * // { type: 'brace.close', val: '}' } ] }, + * // { type: 'text', val: '/d' }, + * // { type: 'eos', val: '' } ] } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an AST + * @api public + */ + +micromatch.parse = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + function parse() { + var snapdragon = utils.instantiate(null, options); + parsers(snapdragon, options); + + var ast = snapdragon.parse(pattern, options); + utils.define(ast, 'snapdragon', snapdragon); + ast.input = pattern; + return ast; + } + + return memoize('parse', pattern, options, parse); +}; + +/** + * Compile the given `ast` or string with the given `options`. + * + * ```js + * var mm = require('micromatch'); + * mm.compile(ast[, options]); + * + * var ast = mm.parse('a/{b,c}/d'); + * console.log(mm.compile(ast)); + * // { options: { source: 'string' }, + * // state: {}, + * // compilers: + * // { eos: [Function], + * // noop: [Function], + * // bos: [Function], + * // brace: [Function], + * // 'brace.open': [Function], + * // text: [Function], + * // 'brace.close': [Function] }, + * // output: [ 'a/(b|c)/d' ], + * // ast: + * // { ... }, + * // parsingErrors: [] } + * ``` + * @param {Object|String} `ast` + * @param {Object} `options` + * @return {Object} Returns an object that has an `output` property with the compiled string. + * @api public + */ + +micromatch.compile = function(ast, options) { + if (typeof ast === 'string') { + ast = micromatch.parse(ast, options); + } + + return memoize('compile', ast.input, options, function() { + var snapdragon = utils.instantiate(ast, options); + compilers(snapdragon, options); + return snapdragon.compile(ast, options); + }); +}; + +/** + * Clear the regex cache. + * + * ```js + * mm.clearCache(); + * ``` + * @api public + */ + +micromatch.clearCache = function() { + micromatch.cache.caches = {}; +}; + +/** + * Returns true if the given value is effectively an empty string + */ + +function isEmptyString(val) { + return String(val) === '' || String(val) === './'; +} + +/** + * Compose a matcher function with the given patterns. + * This allows matcher functions to be compiled once and + * called multiple times. + */ + +function compose(patterns, options, matcher) { + var matchers; + + return memoize('compose', String(patterns), options, function() { + return function(file) { + // delay composition until it's invoked the first time, + // after that it won't be called again + if (!matchers) { + matchers = []; + for (var i = 0; i < patterns.length; i++) { + matchers.push(matcher(patterns[i], options)); + } + } + + var len = matchers.length; + while (len--) { + if (matchers[len](file) === true) { + return true; + } + } + return false; + }; + }); +} + +/** + * Memoize a generated regex or function. A unique key is generated + * from the `type` (usually method name), the `pattern`, and + * user-defined options. + */ + +function memoize(type, pattern, options, fn) { + var key = utils.createKey(type + '=' + pattern, options); + + if (options && options.cache === false) { + return fn(pattern, options); + } + + if (cache.has(type, key)) { + return cache.get(type, key); + } + + var val = fn(pattern, options); + cache.set(type, key, val); + return val; +} + +/** + * Expose compiler, parser and cache on `micromatch` + */ + +micromatch.compilers = compilers; +micromatch.parsers = parsers; +micromatch.caches = cache.caches; + +/** + * Expose `micromatch` + * @type {Function} + */ + +module.exports = micromatch; + + +/***/ }), +/* 320 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Module dependencies + */ + +var toRegex = __webpack_require__(321); +var unique = __webpack_require__(339); +var extend = __webpack_require__(340); + +/** + * Local dependencies + */ + +var compilers = __webpack_require__(342); +var parsers = __webpack_require__(353); +var Braces = __webpack_require__(357); +var utils = __webpack_require__(343); +var MAX_LENGTH = 1024 * 64; +var cache = {}; + +/** + * Convert the given `braces` pattern into a regex-compatible string. By default, only one string is generated for every input string. Set `options.expand` to true to return an array of patterns (similar to Bash or minimatch. Before using `options.expand`, it's recommended that you read the [performance notes](#performance)). + * + * ```js + * var braces = require('braces'); + * console.log(braces('{a,b,c}')); + * //=> ['(a|b|c)'] + * + * console.log(braces('{a,b,c}', {expand: true})); + * //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +function braces(pattern, options) { + var key = utils.createKey(String(pattern), options); + var arr = []; + + var disabled = options && options.cache === false; + if (!disabled && cache.hasOwnProperty(key)) { + return cache[key]; + } + + if (Array.isArray(pattern)) { + for (var i = 0; i < pattern.length; i++) { + arr.push.apply(arr, braces.create(pattern[i], options)); + } + } else { + arr = braces.create(pattern, options); + } + + if (options && options.nodupes === true) { + arr = unique(arr); + } + + if (!disabled) { + cache[key] = arr; + } + return arr; +} + +/** + * Expands a brace pattern into an array. This method is called by the main [braces](#braces) function when `options.expand` is true. Before using this method it's recommended that you read the [performance notes](#performance)) and advantages of using [.optimize](#optimize) instead. + * + * ```js + * var braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.expand = function(pattern, options) { + return braces.create(pattern, extend({}, options, {expand: true})); +}; + +/** + * Expands a brace pattern into a regex-compatible, optimized string. This method is called by the main [braces](#braces) function by default. + * + * ```js + * var braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.optimize = function(pattern, options) { + return braces.create(pattern, options); +}; + +/** + * Processes a brace pattern and returns either an expanded array (if `options.expand` is true), a highly optimized regex-compatible string. This method is called by the main [braces](#braces) function. + * + * ```js + * var braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.create = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + var maxLength = (options && options.maxLength) || MAX_LENGTH; + if (pattern.length >= maxLength) { + throw new Error('expected pattern to be less than ' + maxLength + ' characters'); + } + + function create() { + if (pattern === '' || pattern.length < 3) { + return [pattern]; + } + + if (utils.isEmptySets(pattern)) { + return []; + } + + if (utils.isQuotedString(pattern)) { + return [pattern.slice(1, -1)]; + } + + var proto = new Braces(options); + var result = !options || options.expand !== true + ? proto.optimize(pattern, options) + : proto.expand(pattern, options); + + // get the generated pattern(s) + var arr = result.output; + + // filter out empty strings if specified + if (options && options.noempty === true) { + arr = arr.filter(Boolean); + } + + // filter out duplicates if specified + if (options && options.nodupes === true) { + arr = unique(arr); + } + + Object.defineProperty(arr, 'result', { + enumerable: false, + value: result + }); + + return arr; + } + + return memoize('create', pattern, options, create); +}; + +/** + * Create a regular expression from the given string `pattern`. + * + * ```js + * var braces = require('braces'); + * + * console.log(braces.makeRe('id-{200..300}')); + * //=> /^(?:id-(20[0-9]|2[1-9][0-9]|300))$/ + * ``` + * @param {String} `pattern` The pattern to convert to regex. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +braces.makeRe = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + var maxLength = (options && options.maxLength) || MAX_LENGTH; + if (pattern.length >= maxLength) { + throw new Error('expected pattern to be less than ' + maxLength + ' characters'); + } + + function makeRe() { + var arr = braces(pattern, options); + var opts = extend({strictErrors: false}, options); + return toRegex(arr, opts); + } + + return memoize('makeRe', pattern, options, makeRe); +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * var braces = require('braces'); + * var ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * // { type: 'root', + * // errors: [], + * // input: 'a/{b,c}/d', + * // nodes: + * // [ { type: 'bos', val: '' }, + * // { type: 'text', val: 'a/' }, + * // { type: 'brace', + * // nodes: + * // [ { type: 'brace.open', val: '{' }, + * // { type: 'text', val: 'b,c' }, + * // { type: 'brace.close', val: '}' } ] }, + * // { type: 'text', val: '/d' }, + * // { type: 'eos', val: '' } ] } + * ``` + * @param {String} `pattern` Brace pattern to parse + * @param {Object} `options` + * @return {Object} Returns an AST + * @api public + */ + +braces.parse = function(pattern, options) { + var proto = new Braces(options); + return proto.parse(pattern, options); +}; + +/** + * Compile the given `ast` or string with the given `options`. + * + * ```js + * var braces = require('braces'); + * var ast = braces.parse('a/{b,c}/d'); + * console.log(braces.compile(ast)); + * // { options: { source: 'string' }, + * // state: {}, + * // compilers: + * // { eos: [Function], + * // noop: [Function], + * // bos: [Function], + * // brace: [Function], + * // 'brace.open': [Function], + * // text: [Function], + * // 'brace.close': [Function] }, + * // output: [ 'a/(b|c)/d' ], + * // ast: + * // { ... }, + * // parsingErrors: [] } + * ``` + * @param {Object|String} `ast` AST from [.parse](#parse). If a string is passed it will be parsed first. + * @param {Object} `options` + * @return {Object} Returns an object that has an `output` property with the compiled string. + * @api public + */ + +braces.compile = function(ast, options) { + var proto = new Braces(options); + return proto.compile(ast, options); +}; + +/** + * Clear the regex cache. + * + * ```js + * braces.clearCache(); + * ``` + * @api public + */ + +braces.clearCache = function() { + cache = braces.cache = {}; +}; + +/** + * Memoize a generated regex or function. A unique key is generated + * from the method name, pattern, and user-defined options. Set + * options.memoize to false to disable. + */ + +function memoize(type, pattern, options, fn) { + var key = utils.createKey(type + ':' + pattern, options); + var disabled = options && options.cache === false; + if (disabled) { + braces.clearCache(); + return fn(pattern, options); + } + + if (cache.hasOwnProperty(key)) { + return cache[key]; + } + + var res = fn(pattern, options); + cache[key] = res; + return res; +} + +/** + * Expose `Braces` constructor and methods + * @type {Function} + */ + +braces.Braces = Braces; +braces.compilers = compilers; +braces.parsers = parsers; +braces.cache = cache; + +/** + * Expose `braces` + * @type {Function} + */ + +module.exports = braces; + + +/***/ }), +/* 321 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var safe = __webpack_require__(322); +var define = __webpack_require__(328); +var extend = __webpack_require__(334); +var not = __webpack_require__(338); +var MAX_LENGTH = 1024 * 64; + +/** + * Session cache + */ + +var cache = {}; + +/** + * Create a regular expression from the given `pattern` string. + * + * @param {String|RegExp} `pattern` Pattern can be a string or regular expression. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +module.exports = function(patterns, options) { + if (!Array.isArray(patterns)) { + return makeRe(patterns, options); + } + return makeRe(patterns.join('|'), options); +}; + +/** + * Create a regular expression from the given `pattern` string. + * + * @param {String|RegExp} `pattern` Pattern can be a string or regular expression. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +function makeRe(pattern, options) { + if (pattern instanceof RegExp) { + return pattern; + } + + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + if (pattern.length > MAX_LENGTH) { + throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); + } + + var key = pattern; + // do this before shallow cloning options, it's a lot faster + if (!options || (options && options.cache !== false)) { + key = createKey(pattern, options); + + if (cache.hasOwnProperty(key)) { + return cache[key]; + } + } + + var opts = extend({}, options); + if (opts.contains === true) { + if (opts.negate === true) { + opts.strictNegate = false; + } else { + opts.strict = false; + } + } + + if (opts.strict === false) { + opts.strictOpen = false; + opts.strictClose = false; + } + + var open = opts.strictOpen !== false ? '^' : ''; + var close = opts.strictClose !== false ? '$' : ''; + var flags = opts.flags || ''; + var regex; + + if (opts.nocase === true && !/i/.test(flags)) { + flags += 'i'; + } + + try { + if (opts.negate || typeof opts.strictNegate === 'boolean') { + pattern = not.create(pattern, opts); + } + + var str = open + '(?:' + pattern + ')' + close; + regex = new RegExp(str, flags); + + if (opts.safe === true && safe(regex) === false) { + throw new Error('potentially unsafe regular expression: ' + regex.source); + } + + } catch (err) { + if (opts.strictErrors === true || opts.safe === true) { + err.key = key; + err.pattern = pattern; + err.originalOptions = options; + err.createdOptions = opts; + throw err; + } + + try { + regex = new RegExp('^' + pattern.replace(/(\W)/g, '\\$1') + '$'); + } catch (err) { + regex = /.^/; //<= match nothing + } + } + + if (opts.cache !== false) { + memoize(regex, key, pattern, opts); + } + return regex; +} + +/** + * Memoize generated regex. This can result in dramatic speed improvements + * and simplify debugging by adding options and pattern to the regex. It can be + * disabled by passing setting `options.cache` to false. + */ + +function memoize(regex, key, pattern, options) { + define(regex, 'cached', true); + define(regex, 'pattern', pattern); + define(regex, 'options', options); + define(regex, 'key', key); + cache[key] = regex; +} + +/** + * Create the key to use for memoization. The key is generated + * by iterating over the options and concatenating key-value pairs + * to the pattern string. + */ + +function createKey(pattern, options) { + if (!options) return pattern; + var key = pattern; + for (var prop in options) { + if (options.hasOwnProperty(prop)) { + key += ';' + prop + '=' + String(options[prop]); + } + } + return key; +} + +/** + * Expose `makeRe` + */ + +module.exports.makeRe = makeRe; + + +/***/ }), +/* 322 */ +/***/ (function(module, exports, __webpack_require__) { + +var parse = __webpack_require__(323); +var types = parse.types; + +module.exports = function (re, opts) { + if (!opts) opts = {}; + var replimit = opts.limit === undefined ? 25 : opts.limit; + + if (isRegExp(re)) re = re.source; + else if (typeof re !== 'string') re = String(re); + + try { re = parse(re) } + catch (err) { return false } + + var reps = 0; + return (function walk (node, starHeight) { + if (node.type === types.REPETITION) { + starHeight ++; + reps ++; + if (starHeight > 1) return false; + if (reps > replimit) return false; + } + + if (node.options) { + for (var i = 0, len = node.options.length; i < len; i++) { + var ok = walk({ stack: node.options[i] }, starHeight); + if (!ok) return false; + } + } + var stack = node.stack || (node.value && node.value.stack); + if (!stack) return true; + + for (var i = 0; i < stack.length; i++) { + var ok = walk(stack[i], starHeight); + if (!ok) return false; + } + + return true; + })(re, 0); +}; + +function isRegExp (x) { + return {}.toString.call(x) === '[object RegExp]'; +} + + +/***/ }), +/* 323 */ +/***/ (function(module, exports, __webpack_require__) { + +var util = __webpack_require__(324); +var types = __webpack_require__(325); +var sets = __webpack_require__(326); +var positions = __webpack_require__(327); + + +module.exports = function(regexpStr) { + var i = 0, l, c, + start = { type: types.ROOT, stack: []}, + + // Keep track of last clause/group and stack. + lastGroup = start, + last = start.stack, + groupStack = []; + + + var repeatErr = function(i) { + util.error(regexpStr, 'Nothing to repeat at column ' + (i - 1)); + }; + + // Decode a few escaped characters. + var str = util.strToChars(regexpStr); + l = str.length; + + // Iterate through each character in string. + while (i < l) { + c = str[i++]; + + switch (c) { + // Handle escaped characters, inclues a few sets. + case '\\': + c = str[i++]; + + switch (c) { + case 'b': + last.push(positions.wordBoundary()); + break; + + case 'B': + last.push(positions.nonWordBoundary()); + break; + + case 'w': + last.push(sets.words()); + break; + + case 'W': + last.push(sets.notWords()); + break; + + case 'd': + last.push(sets.ints()); + break; + + case 'D': + last.push(sets.notInts()); + break; + + case 's': + last.push(sets.whitespace()); + break; + + case 'S': + last.push(sets.notWhitespace()); + break; + + default: + // Check if c is integer. + // In which case it's a reference. + if (/\d/.test(c)) { + last.push({ type: types.REFERENCE, value: parseInt(c, 10) }); + + // Escaped character. + } else { + last.push({ type: types.CHAR, value: c.charCodeAt(0) }); + } + } + + break; + + + // Positionals. + case '^': + last.push(positions.begin()); + break; + + case '$': + last.push(positions.end()); + break; + + + // Handle custom sets. + case '[': + // Check if this class is 'anti' i.e. [^abc]. + var not; + if (str[i] === '^') { + not = true; + i++; + } else { + not = false; + } + + // Get all the characters in class. + var classTokens = util.tokenizeClass(str.slice(i), regexpStr); + + // Increase index by length of class. + i += classTokens[1]; + last.push({ + type: types.SET, + set: classTokens[0], + not: not, + }); + + break; + + + // Class of any character except \n. + case '.': + last.push(sets.anyChar()); + break; + + + // Push group onto stack. + case '(': + // Create group. + var group = { + type: types.GROUP, + stack: [], + remember: true, + }; + + c = str[i]; + + // If if this is a special kind of group. + if (c === '?') { + c = str[i + 1]; + i += 2; + + // Match if followed by. + if (c === '=') { + group.followedBy = true; + + // Match if not followed by. + } else if (c === '!') { + group.notFollowedBy = true; + + } else if (c !== ':') { + util.error(regexpStr, + 'Invalid group, character \'' + c + + '\' after \'?\' at column ' + (i - 1)); + } + + group.remember = false; + } + + // Insert subgroup into current group stack. + last.push(group); + + // Remember the current group for when the group closes. + groupStack.push(lastGroup); + + // Make this new group the current group. + lastGroup = group; + last = group.stack; + break; + + + // Pop group out of stack. + case ')': + if (groupStack.length === 0) { + util.error(regexpStr, 'Unmatched ) at column ' + (i - 1)); + } + lastGroup = groupStack.pop(); + + // Check if this group has a PIPE. + // To get back the correct last stack. + last = lastGroup.options ? + lastGroup.options[lastGroup.options.length - 1] : lastGroup.stack; + break; + + + // Use pipe character to give more choices. + case '|': + // Create array where options are if this is the first PIPE + // in this clause. + if (!lastGroup.options) { + lastGroup.options = [lastGroup.stack]; + delete lastGroup.stack; + } + + // Create a new stack and add to options for rest of clause. + var stack = []; + lastGroup.options.push(stack); + last = stack; + break; + + + // Repetition. + // For every repetition, remove last element from last stack + // then insert back a RANGE object. + // This design is chosen because there could be more than + // one repetition symbols in a regex i.e. `a?+{2,3}`. + case '{': + var rs = /^(\d+)(,(\d+)?)?\}/.exec(str.slice(i)), min, max; + if (rs !== null) { + if (last.length === 0) { + repeatErr(i); + } + min = parseInt(rs[1], 10); + max = rs[2] ? rs[3] ? parseInt(rs[3], 10) : Infinity : min; + i += rs[0].length; + + last.push({ + type: types.REPETITION, + min: min, + max: max, + value: last.pop(), + }); + } else { + last.push({ + type: types.CHAR, + value: 123, + }); + } + break; + + case '?': + if (last.length === 0) { + repeatErr(i); + } + last.push({ + type: types.REPETITION, + min: 0, + max: 1, + value: last.pop(), + }); + break; + + case '+': + if (last.length === 0) { + repeatErr(i); + } + last.push({ + type: types.REPETITION, + min: 1, + max: Infinity, + value: last.pop(), + }); + break; + + case '*': + if (last.length === 0) { + repeatErr(i); + } + last.push({ + type: types.REPETITION, + min: 0, + max: Infinity, + value: last.pop(), + }); + break; + + + // Default is a character that is not `\[](){}?+*^$`. + default: + last.push({ + type: types.CHAR, + value: c.charCodeAt(0), + }); + } + + } + + // Check if any groups have not been closed. + if (groupStack.length !== 0) { + util.error(regexpStr, 'Unterminated group'); + } + + return start; +}; + +module.exports.types = types; + + +/***/ }), +/* 324 */ +/***/ (function(module, exports, __webpack_require__) { + +var types = __webpack_require__(325); +var sets = __webpack_require__(326); + + +// All of these are private and only used by randexp. +// It's assumed that they will always be called with the correct input. + +var CTRL = '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?'; +var SLSH = { '0': 0, 't': 9, 'n': 10, 'v': 11, 'f': 12, 'r': 13 }; + +/** + * Finds character representations in str and convert all to + * their respective characters + * + * @param {String} str + * @return {String} + */ +exports.strToChars = function(str) { + /* jshint maxlen: false */ + var chars_regex = /(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g; + str = str.replace(chars_regex, function(s, b, lbs, a16, b16, c8, dctrl, eslsh) { + if (lbs) { + return s; + } + + var code = b ? 8 : + a16 ? parseInt(a16, 16) : + b16 ? parseInt(b16, 16) : + c8 ? parseInt(c8, 8) : + dctrl ? CTRL.indexOf(dctrl) : + SLSH[eslsh]; + + var c = String.fromCharCode(code); + + // Escape special regex characters. + if (/[\[\]{}\^$.|?*+()]/.test(c)) { + c = '\\' + c; + } + + return c; + }); + + return str; +}; + + +/** + * turns class into tokens + * reads str until it encounters a ] not preceeded by a \ + * + * @param {String} str + * @param {String} regexpStr + * @return {Array., Number>} + */ +exports.tokenizeClass = function(str, regexpStr) { + /* jshint maxlen: false */ + var tokens = []; + var regexp = /\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g; + var rs, c; + + + while ((rs = regexp.exec(str)) != null) { + if (rs[1]) { + tokens.push(sets.words()); + + } else if (rs[2]) { + tokens.push(sets.ints()); + + } else if (rs[3]) { + tokens.push(sets.whitespace()); + + } else if (rs[4]) { + tokens.push(sets.notWords()); + + } else if (rs[5]) { + tokens.push(sets.notInts()); + + } else if (rs[6]) { + tokens.push(sets.notWhitespace()); + + } else if (rs[7]) { + tokens.push({ + type: types.RANGE, + from: (rs[8] || rs[9]).charCodeAt(0), + to: rs[10].charCodeAt(0), + }); + + } else if (c = rs[12]) { + tokens.push({ + type: types.CHAR, + value: c.charCodeAt(0), + }); + + } else { + return [tokens, regexp.lastIndex]; + } + } + + exports.error(regexpStr, 'Unterminated character class'); +}; + + +/** + * Shortcut to throw errors. + * + * @param {String} regexp + * @param {String} msg + */ +exports.error = function(regexp, msg) { + throw new SyntaxError('Invalid regular expression: /' + regexp + '/: ' + msg); +}; + + +/***/ }), +/* 325 */ +/***/ (function(module, exports) { + +module.exports = { + ROOT : 0, + GROUP : 1, + POSITION : 2, + SET : 3, + RANGE : 4, + REPETITION : 5, + REFERENCE : 6, + CHAR : 7, +}; + + +/***/ }), +/* 326 */ +/***/ (function(module, exports, __webpack_require__) { + +var types = __webpack_require__(325); + +var INTS = function() { + return [{ type: types.RANGE , from: 48, to: 57 }]; +}; + +var WORDS = function() { + return [ + { type: types.CHAR, value: 95 }, + { type: types.RANGE, from: 97, to: 122 }, + { type: types.RANGE, from: 65, to: 90 } + ].concat(INTS()); +}; + +var WHITESPACE = function() { + return [ + { type: types.CHAR, value: 9 }, + { type: types.CHAR, value: 10 }, + { type: types.CHAR, value: 11 }, + { type: types.CHAR, value: 12 }, + { type: types.CHAR, value: 13 }, + { type: types.CHAR, value: 32 }, + { type: types.CHAR, value: 160 }, + { type: types.CHAR, value: 5760 }, + { type: types.CHAR, value: 6158 }, + { type: types.CHAR, value: 8192 }, + { type: types.CHAR, value: 8193 }, + { type: types.CHAR, value: 8194 }, + { type: types.CHAR, value: 8195 }, + { type: types.CHAR, value: 8196 }, + { type: types.CHAR, value: 8197 }, + { type: types.CHAR, value: 8198 }, + { type: types.CHAR, value: 8199 }, + { type: types.CHAR, value: 8200 }, + { type: types.CHAR, value: 8201 }, + { type: types.CHAR, value: 8202 }, + { type: types.CHAR, value: 8232 }, + { type: types.CHAR, value: 8233 }, + { type: types.CHAR, value: 8239 }, + { type: types.CHAR, value: 8287 }, + { type: types.CHAR, value: 12288 }, + { type: types.CHAR, value: 65279 } + ]; +}; + +var NOTANYCHAR = function() { + return [ + { type: types.CHAR, value: 10 }, + { type: types.CHAR, value: 13 }, + { type: types.CHAR, value: 8232 }, + { type: types.CHAR, value: 8233 }, + ]; +}; + +// Predefined class objects. +exports.words = function() { + return { type: types.SET, set: WORDS(), not: false }; +}; + +exports.notWords = function() { + return { type: types.SET, set: WORDS(), not: true }; +}; + +exports.ints = function() { + return { type: types.SET, set: INTS(), not: false }; +}; + +exports.notInts = function() { + return { type: types.SET, set: INTS(), not: true }; +}; + +exports.whitespace = function() { + return { type: types.SET, set: WHITESPACE(), not: false }; +}; + +exports.notWhitespace = function() { + return { type: types.SET, set: WHITESPACE(), not: true }; +}; + +exports.anyChar = function() { + return { type: types.SET, set: NOTANYCHAR(), not: true }; +}; + + +/***/ }), +/* 327 */ +/***/ (function(module, exports, __webpack_require__) { + +var types = __webpack_require__(325); + +exports.wordBoundary = function() { + return { type: types.POSITION, value: 'b' }; +}; + +exports.nonWordBoundary = function() { + return { type: types.POSITION, value: 'B' }; +}; + +exports.begin = function() { + return { type: types.POSITION, value: '^' }; +}; + +exports.end = function() { + return { type: types.POSITION, value: '$' }; +}; + + +/***/ }), +/* 328 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * define-property + * + * Copyright (c) 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var isobject = __webpack_require__(329); +var isDescriptor = __webpack_require__(330); +var define = (typeof Reflect !== 'undefined' && Reflect.defineProperty) + ? Reflect.defineProperty + : Object.defineProperty; + +module.exports = function defineProperty(obj, key, val) { + if (!isobject(obj) && typeof obj !== 'function' && !Array.isArray(obj)) { + throw new TypeError('expected an object, function, or array'); + } + + if (typeof key !== 'string') { + throw new TypeError('expected "key" to be a string'); + } + + if (isDescriptor(val)) { + define(obj, key, val); + return obj; + } + + define(obj, key, { + configurable: true, + enumerable: false, + writable: true, + value: val + }); + + return obj; +}; + + +/***/ }), +/* 329 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * isobject + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +module.exports = function isObject(val) { + return val != null && typeof val === 'object' && Array.isArray(val) === false; +}; + + +/***/ }), +/* 330 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-descriptor + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var typeOf = __webpack_require__(331); +var isAccessor = __webpack_require__(332); +var isData = __webpack_require__(333); + +module.exports = function isDescriptor(obj, key) { + if (typeOf(obj) !== 'object') { + return false; + } + if ('get' in obj) { + return isAccessor(obj, key); + } + return isData(obj, key); +}; + + +/***/ }), +/* 331 */ +/***/ (function(module, exports) { + +var toString = Object.prototype.toString; + +module.exports = function kindOf(val) { + if (val === void 0) return 'undefined'; + if (val === null) return 'null'; + + var type = typeof val; + if (type === 'boolean') return 'boolean'; + if (type === 'string') return 'string'; + if (type === 'number') return 'number'; + if (type === 'symbol') return 'symbol'; + if (type === 'function') { + return isGeneratorFn(val) ? 'generatorfunction' : 'function'; + } + + if (isArray(val)) return 'array'; + if (isBuffer(val)) return 'buffer'; + if (isArguments(val)) return 'arguments'; + if (isDate(val)) return 'date'; + if (isError(val)) return 'error'; + if (isRegexp(val)) return 'regexp'; + + switch (ctorName(val)) { + case 'Symbol': return 'symbol'; + case 'Promise': return 'promise'; + + // Set, Map, WeakSet, WeakMap + case 'WeakMap': return 'weakmap'; + case 'WeakSet': return 'weakset'; + case 'Map': return 'map'; + case 'Set': return 'set'; + + // 8-bit typed arrays + case 'Int8Array': return 'int8array'; + case 'Uint8Array': return 'uint8array'; + case 'Uint8ClampedArray': return 'uint8clampedarray'; + + // 16-bit typed arrays + case 'Int16Array': return 'int16array'; + case 'Uint16Array': return 'uint16array'; + + // 32-bit typed arrays + case 'Int32Array': return 'int32array'; + case 'Uint32Array': return 'uint32array'; + case 'Float32Array': return 'float32array'; + case 'Float64Array': return 'float64array'; + } + + if (isGeneratorObj(val)) { + return 'generator'; + } + + // Non-plain objects + type = toString.call(val); + switch (type) { + case '[object Object]': return 'object'; + // iterators + case '[object Map Iterator]': return 'mapiterator'; + case '[object Set Iterator]': return 'setiterator'; + case '[object String Iterator]': return 'stringiterator'; + case '[object Array Iterator]': return 'arrayiterator'; + } + + // other + return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); +}; + +function ctorName(val) { + return val.constructor ? val.constructor.name : null; +} + +function isArray(val) { + if (Array.isArray) return Array.isArray(val); + return val instanceof Array; +} + +function isError(val) { + return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'); +} + +function isDate(val) { + if (val instanceof Date) return true; + return typeof val.toDateString === 'function' + && typeof val.getDate === 'function' + && typeof val.setDate === 'function'; +} + +function isRegexp(val) { + if (val instanceof RegExp) return true; + return typeof val.flags === 'string' + && typeof val.ignoreCase === 'boolean' + && typeof val.multiline === 'boolean' + && typeof val.global === 'boolean'; +} + +function isGeneratorFn(name, val) { + return ctorName(name) === 'GeneratorFunction'; +} + +function isGeneratorObj(val) { + return typeof val.throw === 'function' + && typeof val.return === 'function' + && typeof val.next === 'function'; +} + +function isArguments(val) { + try { + if (typeof val.length === 'number' && typeof val.callee === 'function') { + return true; + } + } catch (err) { + if (err.message.indexOf('callee') !== -1) { + return true; + } + } + return false; +} + +/** + * If you need to support Safari 5-7 (8-10 yr-old browser), + * take a look at https://github.com/feross/is-buffer + */ + +function isBuffer(val) { + if (val.constructor && typeof val.constructor.isBuffer === 'function') { + return val.constructor.isBuffer(val); + } + return false; +} + + +/***/ }), +/* 332 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-accessor-descriptor + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var typeOf = __webpack_require__(331); + +// accessor descriptor properties +var accessor = { + get: 'function', + set: 'function', + configurable: 'boolean', + enumerable: 'boolean' +}; + +function isAccessorDescriptor(obj, prop) { + if (typeof prop === 'string') { + var val = Object.getOwnPropertyDescriptor(obj, prop); + return typeof val !== 'undefined'; + } + + if (typeOf(obj) !== 'object') { + return false; + } + + if (has(obj, 'value') || has(obj, 'writable')) { + return false; + } + + if (!has(obj, 'get') || typeof obj.get !== 'function') { + return false; + } + + // tldr: it's valid to have "set" be undefined + // "set" might be undefined if `Object.getOwnPropertyDescriptor` + // was used to get the value, and only `get` was defined by the user + if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { + return false; + } + + for (var key in obj) { + if (!accessor.hasOwnProperty(key)) { + continue; + } + + if (typeOf(obj[key]) === accessor[key]) { + continue; + } + + if (typeof obj[key] !== 'undefined') { + return false; + } + } + return true; +} + +function has(obj, key) { + return {}.hasOwnProperty.call(obj, key); +} + +/** + * Expose `isAccessorDescriptor` + */ + +module.exports = isAccessorDescriptor; + + +/***/ }), +/* 333 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-data-descriptor + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var typeOf = __webpack_require__(331); + +module.exports = function isDataDescriptor(obj, prop) { + // data descriptor properties + var data = { + configurable: 'boolean', + enumerable: 'boolean', + writable: 'boolean' + }; + + if (typeOf(obj) !== 'object') { + return false; + } + + if (typeof prop === 'string') { + var val = Object.getOwnPropertyDescriptor(obj, prop); + return typeof val !== 'undefined'; + } + + if (!('value' in obj) && !('writable' in obj)) { + return false; + } + + for (var key in obj) { + if (key === 'value') continue; + + if (!data.hasOwnProperty(key)) { + continue; + } + + if (typeOf(obj[key]) === data[key]) { + continue; + } + + if (typeof obj[key] !== 'undefined') { + return false; + } + } + return true; +}; + + +/***/ }), +/* 334 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isExtendable = __webpack_require__(335); +var assignSymbols = __webpack_require__(337); + +module.exports = Object.assign || function(obj/*, objects*/) { + if (obj === null || typeof obj === 'undefined') { + throw new TypeError('Cannot convert undefined or null to object'); + } + if (!isObject(obj)) { + obj = {}; + } + for (var i = 1; i < arguments.length; i++) { + var val = arguments[i]; + if (isString(val)) { + val = toObject(val); + } + if (isObject(val)) { + assign(obj, val); + assignSymbols(obj, val); + } + } + return obj; +}; + +function assign(a, b) { + for (var key in b) { + if (hasOwn(b, key)) { + a[key] = b[key]; + } + } +} + +function isString(val) { + return (val && typeof val === 'string'); +} + +function toObject(str) { + var obj = {}; + for (var i in str) { + obj[i] = str[i]; + } + return obj; +} + +function isObject(val) { + return (val && typeof val === 'object') || isExtendable(val); +} + +/** + * Returns true if the given `key` is an own property of `obj`. + */ + +function hasOwn(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +function isEnum(obj, key) { + return Object.prototype.propertyIsEnumerable.call(obj, key); +} + + +/***/ }), +/* 335 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-extendable + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var isPlainObject = __webpack_require__(336); + +module.exports = function isExtendable(val) { + return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); +}; + + +/***/ }), +/* 336 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-plain-object + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var isObject = __webpack_require__(329); + +function isObjectObject(o) { + return isObject(o) === true + && Object.prototype.toString.call(o) === '[object Object]'; +} + +module.exports = function isPlainObject(o) { + var ctor,prot; + + if (isObjectObject(o) === false) return false; + + // If has modified constructor + ctor = o.constructor; + if (typeof ctor !== 'function') return false; + + // If has modified prototype + prot = ctor.prototype; + if (isObjectObject(prot) === false) return false; + + // If constructor does not have an Object-specific method + if (prot.hasOwnProperty('isPrototypeOf') === false) { + return false; + } + + // Most likely a plain Object + return true; +}; + + +/***/ }), +/* 337 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * assign-symbols + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +module.exports = function(receiver, objects) { + if (receiver === null || typeof receiver === 'undefined') { + throw new TypeError('expected first argument to be an object.'); + } + + if (typeof objects === 'undefined' || typeof Symbol === 'undefined') { + return receiver; + } + + if (typeof Object.getOwnPropertySymbols !== 'function') { + return receiver; + } + + var isEnumerable = Object.prototype.propertyIsEnumerable; + var target = Object(receiver); + var len = arguments.length, i = 0; + + while (++i < len) { + var provider = Object(arguments[i]); + var names = Object.getOwnPropertySymbols(provider); + + for (var j = 0; j < names.length; j++) { + var key = names[j]; + + if (isEnumerable.call(provider, key)) { + target[key] = provider[key]; + } + } + } + return target; +}; + + +/***/ }), +/* 338 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var extend = __webpack_require__(334); +var safe = __webpack_require__(322); + +/** + * The main export is a function that takes a `pattern` string and an `options` object. + * + * ```js + & var not = require('regex-not'); + & console.log(not('foo')); + & //=> /^(?:(?!^(?:foo)$).)*$/ + * ``` + * + * @param {String} `pattern` + * @param {Object} `options` + * @return {RegExp} Converts the given `pattern` to a regex using the specified `options`. + * @api public + */ + +function toRegex(pattern, options) { + return new RegExp(toRegex.create(pattern, options)); +} + +/** + * Create a regex-compatible string from the given `pattern` and `options`. + * + * ```js + & var not = require('regex-not'); + & console.log(not.create('foo')); + & //=> '^(?:(?!^(?:foo)$).)*$' + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {String} + * @api public + */ + +toRegex.create = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + var opts = extend({}, options); + if (opts.contains === true) { + opts.strictNegate = false; + } + + var open = opts.strictOpen !== false ? '^' : ''; + var close = opts.strictClose !== false ? '$' : ''; + var endChar = opts.endChar ? opts.endChar : '+'; + var str = pattern; + + if (opts.strictNegate === false) { + str = '(?:(?!(?:' + pattern + ')).)' + endChar; + } else { + str = '(?:(?!^(?:' + pattern + ')$).)' + endChar; + } + + var res = open + str + close; + if (opts.safe === true && safe(res) === false) { + throw new Error('potentially unsafe regular expression: ' + res); + } + + return res; +}; + +/** + * Expose `toRegex` + */ + +module.exports = toRegex; + + +/***/ }), +/* 339 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * array-unique + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +module.exports = function unique(arr) { + if (!Array.isArray(arr)) { + throw new TypeError('array-unique expects an array.'); + } + + var len = arr.length; + var i = -1; + + while (i++ < len) { + var j = i + 1; + + for (; j < arr.length; ++j) { + if (arr[i] === arr[j]) { + arr.splice(j--, 1); + } + } + } + return arr; +}; + +module.exports.immutable = function uniqueImmutable(arr) { + if (!Array.isArray(arr)) { + throw new TypeError('array-unique expects an array.'); + } + + var arrLen = arr.length; + var newArr = new Array(arrLen); + + for (var i = 0; i < arrLen; i++) { + newArr[i] = arr[i]; + } + + return module.exports(newArr); +}; + + +/***/ }), +/* 340 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isObject = __webpack_require__(341); + +module.exports = function extend(o/*, objects*/) { + if (!isObject(o)) { o = {}; } + + var len = arguments.length; + for (var i = 1; i < len; i++) { + var obj = arguments[i]; + + if (isObject(obj)) { + assign(o, obj); + } + } + return o; +}; + +function assign(a, b) { + for (var key in b) { + if (hasOwn(b, key)) { + a[key] = b[key]; + } + } +} + +/** + * Returns true if the given `key` is an own property of `obj`. + */ + +function hasOwn(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + + +/***/ }), +/* 341 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-extendable + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +module.exports = function isExtendable(val) { + return typeof val !== 'undefined' && val !== null + && (typeof val === 'object' || typeof val === 'function'); +}; + + +/***/ }), +/* 342 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(343); + +module.exports = function(braces, options) { + braces.compiler + + /** + * bos + */ + + .set('bos', function() { + if (this.output) return; + this.ast.queue = isEscaped(this.ast) ? [this.ast.val] : []; + this.ast.count = 1; + }) + + /** + * Square brackets + */ + + .set('bracket', function(node) { + var close = node.close; + var open = !node.escaped ? '[' : '\\['; + var negated = node.negated; + var inner = node.inner; + + inner = inner.replace(/\\(?=[\\\w]|$)/g, '\\\\'); + if (inner === ']-') { + inner = '\\]\\-'; + } + + if (negated && inner.indexOf('.') === -1) { + inner += '.'; + } + if (negated && inner.indexOf('/') === -1) { + inner += '/'; + } + + var val = open + negated + inner + close; + var queue = node.parent.queue; + var last = utils.arrayify(queue.pop()); + + queue.push(utils.join(last, val)); + queue.push.apply(queue, []); + }) + + /** + * Brace + */ + + .set('brace', function(node) { + node.queue = isEscaped(node) ? [node.val] : []; + node.count = 1; + return this.mapVisit(node.nodes); + }) + + /** + * Open + */ + + .set('brace.open', function(node) { + node.parent.open = node.val; + }) + + /** + * Inner + */ + + .set('text', function(node) { + var queue = node.parent.queue; + var escaped = node.escaped; + var segs = [node.val]; + + if (node.optimize === false) { + options = utils.extend({}, options, {optimize: false}); + } + + if (node.multiplier > 1) { + node.parent.count *= node.multiplier; + } + + if (options.quantifiers === true && utils.isQuantifier(node.val)) { + escaped = true; + + } else if (node.val.length > 1) { + if (isType(node.parent, 'brace') && !isEscaped(node)) { + var expanded = utils.expand(node.val, options); + segs = expanded.segs; + + if (expanded.isOptimized) { + node.parent.isOptimized = true; + } + + // if nothing was expanded, we probably have a literal brace + if (!segs.length) { + var val = (expanded.val || node.val); + if (options.unescape !== false) { + // unescape unexpanded brace sequence/set separators + val = val.replace(/\\([,.])/g, '$1'); + // strip quotes + val = val.replace(/["'`]/g, ''); + } + + segs = [val]; + escaped = true; + } + } + + } else if (node.val === ',') { + if (options.expand) { + node.parent.queue.push(['']); + segs = ['']; + } else { + segs = ['|']; + } + } else { + escaped = true; + } + + if (escaped && isType(node.parent, 'brace')) { + if (node.parent.nodes.length <= 4 && node.parent.count === 1) { + node.parent.escaped = true; + } else if (node.parent.length <= 3) { + node.parent.escaped = true; + } + } + + if (!hasQueue(node.parent)) { + node.parent.queue = segs; + return; + } + + var last = utils.arrayify(queue.pop()); + if (node.parent.count > 1 && options.expand) { + last = multiply(last, node.parent.count); + node.parent.count = 1; + } + + queue.push(utils.join(utils.flatten(last), segs.shift())); + queue.push.apply(queue, segs); + }) + + /** + * Close + */ + + .set('brace.close', function(node) { + var queue = node.parent.queue; + var prev = node.parent.parent; + var last = prev.queue.pop(); + var open = node.parent.open; + var close = node.val; + + if (open && close && isOptimized(node, options)) { + open = '('; + close = ')'; + } + + // if a close brace exists, and the previous segment is one character + // don't wrap the result in braces or parens + var ele = utils.last(queue); + if (node.parent.count > 1 && options.expand) { + ele = multiply(queue.pop(), node.parent.count); + node.parent.count = 1; + queue.push(ele); + } + + if (close && typeof ele === 'string' && ele.length === 1) { + open = ''; + close = ''; + } + + if ((isLiteralBrace(node, options) || noInner(node)) && !node.parent.hasEmpty) { + queue.push(utils.join(open, queue.pop() || '')); + queue = utils.flatten(utils.join(queue, close)); + } + + if (typeof last === 'undefined') { + prev.queue = [queue]; + } else { + prev.queue.push(utils.flatten(utils.join(last, queue))); + } + }) + + /** + * eos + */ + + .set('eos', function(node) { + if (this.input) return; + + if (options.optimize !== false) { + this.output = utils.last(utils.flatten(this.ast.queue)); + } else if (Array.isArray(utils.last(this.ast.queue))) { + this.output = utils.flatten(this.ast.queue.pop()); + } else { + this.output = utils.flatten(this.ast.queue); + } + + if (node.parent.count > 1 && options.expand) { + this.output = multiply(this.output, node.parent.count); + } + + this.output = utils.arrayify(this.output); + this.ast.queue = []; + }); + +}; + +/** + * Multiply the segments in the current brace level + */ + +function multiply(queue, n, options) { + return utils.flatten(utils.repeat(utils.arrayify(queue), n)); +} + +/** + * Return true if `node` is escaped + */ + +function isEscaped(node) { + return node.escaped === true; +} + +/** + * Returns true if regex parens should be used for sets. If the parent `type` + * is not `brace`, then we're on a root node, which means we should never + * expand segments and open/close braces should be `{}` (since this indicates + * a brace is missing from the set) + */ + +function isOptimized(node, options) { + if (node.parent.isOptimized) return true; + return isType(node.parent, 'brace') + && !isEscaped(node.parent) + && options.expand !== true; +} + +/** + * Returns true if the value in `node` should be wrapped in a literal brace. + * @return {Boolean} + */ + +function isLiteralBrace(node, options) { + return isEscaped(node.parent) || options.optimize !== false; +} + +/** + * Returns true if the given `node` does not have an inner value. + * @return {Boolean} + */ + +function noInner(node, type) { + if (node.parent.queue.length === 1) { + return true; + } + var nodes = node.parent.nodes; + return nodes.length === 3 + && isType(nodes[0], 'brace.open') + && !isType(nodes[1], 'text') + && isType(nodes[2], 'brace.close'); +} + +/** + * Returns true if the given `node` is the given `type` + * @return {Boolean} + */ + +function isType(node, type) { + return typeof node !== 'undefined' && node.type === type; +} + +/** + * Returns true if the given `node` has a non-empty queue. + * @return {Boolean} + */ + +function hasQueue(node) { + return Array.isArray(node.queue) && node.queue.length; +} + + +/***/ }), +/* 343 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var splitString = __webpack_require__(344); +var utils = module.exports; + +/** + * Module dependencies + */ + +utils.extend = __webpack_require__(340); +utils.flatten = __webpack_require__(345); +utils.isObject = __webpack_require__(329); +utils.fillRange = __webpack_require__(346); +utils.repeat = __webpack_require__(352); +utils.unique = __webpack_require__(339); + +utils.define = function(obj, key, val) { + Object.defineProperty(obj, key, { + writable: true, + configurable: true, + enumerable: false, + value: val + }); +}; + +/** + * Returns true if the given string contains only empty brace sets. + */ + +utils.isEmptySets = function(str) { + return /^(?:\{,\})+$/.test(str); +}; + +/** + * Returns true if the given string contains only empty brace sets. + */ + +utils.isQuotedString = function(str) { + var open = str.charAt(0); + if (open === '\'' || open === '"' || open === '`') { + return str.slice(-1) === open; + } + return false; +}; + +/** + * Create the key to use for memoization. The unique key is generated + * by iterating over the options and concatenating key-value pairs + * to the pattern string. + */ + +utils.createKey = function(pattern, options) { + var id = pattern; + if (typeof options === 'undefined') { + return id; + } + var keys = Object.keys(options); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + id += ';' + key + '=' + String(options[key]); + } + return id; +}; + +/** + * Normalize options + */ + +utils.createOptions = function(options) { + var opts = utils.extend.apply(null, arguments); + if (typeof opts.expand === 'boolean') { + opts.optimize = !opts.expand; + } + if (typeof opts.optimize === 'boolean') { + opts.expand = !opts.optimize; + } + if (opts.optimize === true) { + opts.makeRe = true; + } + return opts; +}; + +/** + * Join patterns in `a` to patterns in `b` + */ + +utils.join = function(a, b, options) { + options = options || {}; + a = utils.arrayify(a); + b = utils.arrayify(b); + + if (!a.length) return b; + if (!b.length) return a; + + var len = a.length; + var idx = -1; + var arr = []; + + while (++idx < len) { + var val = a[idx]; + if (Array.isArray(val)) { + for (var i = 0; i < val.length; i++) { + val[i] = utils.join(val[i], b, options); + } + arr.push(val); + continue; + } + + for (var j = 0; j < b.length; j++) { + var bval = b[j]; + + if (Array.isArray(bval)) { + arr.push(utils.join(val, bval, options)); + } else { + arr.push(val + bval); + } + } + } + return arr; +}; + +/** + * Split the given string on `,` if not escaped. + */ + +utils.split = function(str, options) { + var opts = utils.extend({sep: ','}, options); + if (typeof opts.keepQuotes !== 'boolean') { + opts.keepQuotes = true; + } + if (opts.unescape === false) { + opts.keepEscaping = true; + } + return splitString(str, opts, utils.escapeBrackets(opts)); +}; + +/** + * Expand ranges or sets in the given `pattern`. + * + * @param {String} `str` + * @param {Object} `options` + * @return {Object} + */ + +utils.expand = function(str, options) { + var opts = utils.extend({rangeLimit: 10000}, options); + var segs = utils.split(str, opts); + var tok = { segs: segs }; + + if (utils.isQuotedString(str)) { + return tok; + } + + if (opts.rangeLimit === true) { + opts.rangeLimit = 10000; + } + + if (segs.length > 1) { + if (opts.optimize === false) { + tok.val = segs[0]; + return tok; + } + + tok.segs = utils.stringifyArray(tok.segs); + } else if (segs.length === 1) { + var arr = str.split('..'); + + if (arr.length === 1) { + tok.val = tok.segs[tok.segs.length - 1] || tok.val || str; + tok.segs = []; + return tok; + } + + if (arr.length === 2 && arr[0] === arr[1]) { + tok.escaped = true; + tok.val = arr[0]; + tok.segs = []; + return tok; + } + + if (arr.length > 1) { + if (opts.optimize !== false) { + opts.optimize = true; + delete opts.expand; + } + + if (opts.optimize !== true) { + var min = Math.min(arr[0], arr[1]); + var max = Math.max(arr[0], arr[1]); + var step = arr[2] || 1; + + if (opts.rangeLimit !== false && ((max - min) / step >= opts.rangeLimit)) { + throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + } + } + + arr.push(opts); + tok.segs = utils.fillRange.apply(null, arr); + + if (!tok.segs.length) { + tok.escaped = true; + tok.val = str; + return tok; + } + + if (opts.optimize === true) { + tok.segs = utils.stringifyArray(tok.segs); + } + + if (tok.segs === '') { + tok.val = str; + } else { + tok.val = tok.segs[0]; + } + return tok; + } + } else { + tok.val = str; + } + return tok; +}; + +/** + * Ensure commas inside brackets and parens are not split. + * @param {Object} `tok` Token from the `split-string` module + * @return {undefined} + */ + +utils.escapeBrackets = function(options) { + return function(tok) { + if (tok.escaped && tok.val === 'b') { + tok.val = '\\b'; + return; + } + + if (tok.val !== '(' && tok.val !== '[') return; + var opts = utils.extend({}, options); + var brackets = []; + var parens = []; + var stack = []; + var val = tok.val; + var str = tok.str; + var i = tok.idx - 1; + + while (++i < str.length) { + var ch = str[i]; + + if (ch === '\\') { + val += (opts.keepEscaping === false ? '' : ch) + str[++i]; + continue; + } + + if (ch === '(') { + parens.push(ch); + stack.push(ch); + } + + if (ch === '[') { + brackets.push(ch); + stack.push(ch); + } + + if (ch === ')') { + parens.pop(); + stack.pop(); + if (!stack.length) { + val += ch; + break; + } + } + + if (ch === ']') { + brackets.pop(); + stack.pop(); + if (!stack.length) { + val += ch; + break; + } + } + val += ch; + } + + tok.split = false; + tok.val = val.slice(1); + tok.idx = i; + }; +}; + +/** + * Returns true if the given string looks like a regex quantifier + * @return {Boolean} + */ + +utils.isQuantifier = function(str) { + return /^(?:[0-9]?,[0-9]|[0-9],)$/.test(str); +}; + +/** + * Cast `val` to an array. + * @param {*} `val` + */ + +utils.stringifyArray = function(arr) { + return [utils.arrayify(arr).join('|')]; +}; + +/** + * Cast `val` to an array. + * @param {*} `val` + */ + +utils.arrayify = function(arr) { + if (typeof arr === 'undefined') { + return []; + } + if (typeof arr === 'string') { + return [arr]; + } + return arr; +}; + +/** + * Returns true if the given `str` is a non-empty string + * @return {Boolean} + */ + +utils.isString = function(str) { + return str != null && typeof str === 'string'; +}; + +/** + * Get the last element from `array` + * @param {Array} `array` + * @return {*} + */ + +utils.last = function(arr, n) { + return arr[arr.length - (n || 1)]; +}; + +utils.escapeRegex = function(str) { + return str.replace(/\\?([!^*?()[\]{}+?/])/g, '\\$1'); +}; + + +/***/ }), +/* 344 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * split-string + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var extend = __webpack_require__(334); + +module.exports = function(str, options, fn) { + if (typeof str !== 'string') { + throw new TypeError('expected a string'); + } + + if (typeof options === 'function') { + fn = options; + options = null; + } + + // allow separator to be defined as a string + if (typeof options === 'string') { + options = { sep: options }; + } + + var opts = extend({sep: '.'}, options); + var quotes = opts.quotes || ['"', "'", '`']; + var brackets; + + if (opts.brackets === true) { + brackets = { + '<': '>', + '(': ')', + '[': ']', + '{': '}' + }; + } else if (opts.brackets) { + brackets = opts.brackets; + } + + var tokens = []; + var stack = []; + var arr = ['']; + var sep = opts.sep; + var len = str.length; + var idx = -1; + var closeIdx; + + function expected() { + if (brackets && stack.length) { + return brackets[stack[stack.length - 1]]; + } + } + + while (++idx < len) { + var ch = str[idx]; + var next = str[idx + 1]; + var tok = { val: ch, idx: idx, arr: arr, str: str }; + tokens.push(tok); + + if (ch === '\\') { + tok.val = keepEscaping(opts, str, idx) === true ? (ch + next) : next; + tok.escaped = true; + if (typeof fn === 'function') { + fn(tok); + } + arr[arr.length - 1] += tok.val; + idx++; + continue; + } + + if (brackets && brackets[ch]) { + stack.push(ch); + var e = expected(); + var i = idx + 1; + + if (str.indexOf(e, i + 1) !== -1) { + while (stack.length && i < len) { + var s = str[++i]; + if (s === '\\') { + s++; + continue; + } + + if (quotes.indexOf(s) !== -1) { + i = getClosingQuote(str, s, i + 1); + continue; + } + + e = expected(); + if (stack.length && str.indexOf(e, i + 1) === -1) { + break; + } + + if (brackets[s]) { + stack.push(s); + continue; + } + + if (e === s) { + stack.pop(); + } + } + } + + closeIdx = i; + if (closeIdx === -1) { + arr[arr.length - 1] += ch; + continue; + } + + ch = str.slice(idx, closeIdx + 1); + tok.val = ch; + tok.idx = idx = closeIdx; + } + + if (quotes.indexOf(ch) !== -1) { + closeIdx = getClosingQuote(str, ch, idx + 1); + if (closeIdx === -1) { + arr[arr.length - 1] += ch; + continue; + } + + if (keepQuotes(ch, opts) === true) { + ch = str.slice(idx, closeIdx + 1); + } else { + ch = str.slice(idx + 1, closeIdx); + } + + tok.val = ch; + tok.idx = idx = closeIdx; + } + + if (typeof fn === 'function') { + fn(tok, tokens); + ch = tok.val; + idx = tok.idx; + } + + if (tok.val === sep && tok.split !== false) { + arr.push(''); + continue; + } + + arr[arr.length - 1] += tok.val; + } + + return arr; +}; + +function getClosingQuote(str, ch, i, brackets) { + var idx = str.indexOf(ch, i); + if (str.charAt(idx - 1) === '\\') { + return getClosingQuote(str, ch, idx + 1); + } + return idx; +} + +function keepQuotes(ch, opts) { + if (opts.keepDoubleQuotes === true && ch === '"') return true; + if (opts.keepSingleQuotes === true && ch === "'") return true; + return opts.keepQuotes; +} + +function keepEscaping(opts, str, idx) { + if (typeof opts.keepEscaping === 'function') { + return opts.keepEscaping(str, idx); + } + return opts.keepEscaping === true || str[idx + 1] === '\\'; +} + + +/***/ }), +/* 345 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * arr-flatten + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +module.exports = function (arr) { + return flat(arr, []); +}; + +function flat(arr, res) { + var i = 0, cur; + var len = arr.length; + for (; i < len; i++) { + cur = arr[i]; + Array.isArray(cur) ? flat(cur, res) : res.push(cur); + } + return res; +} + + +/***/ }), +/* 346 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * fill-range + * + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var util = __webpack_require__(18); +var isNumber = __webpack_require__(347); +var extend = __webpack_require__(340); +var repeat = __webpack_require__(350); +var toRegex = __webpack_require__(351); + +/** + * Return a range of numbers or letters. + * + * @param {String} `start` Start of the range + * @param {String} `stop` End of the range + * @param {String} `step` Increment or decrement to use. + * @param {Function} `fn` Custom function to modify each element in the range. + * @return {Array} + */ + +function fillRange(start, stop, step, options) { + if (typeof start === 'undefined') { + return []; + } + + if (typeof stop === 'undefined' || start === stop) { + // special case, for handling negative zero + var isString = typeof start === 'string'; + if (isNumber(start) && !toNumber(start)) { + return [isString ? '0' : 0]; + } + return [start]; + } + + if (typeof step !== 'number' && typeof step !== 'string') { + options = step; + step = undefined; + } + + if (typeof options === 'function') { + options = { transform: options }; + } + + var opts = extend({step: step}, options); + if (opts.step && !isValidNumber(opts.step)) { + if (opts.strictRanges === true) { + throw new TypeError('expected options.step to be a number'); + } + return []; + } + + opts.isNumber = isValidNumber(start) && isValidNumber(stop); + if (!opts.isNumber && !isValid(start, stop)) { + if (opts.strictRanges === true) { + throw new RangeError('invalid range arguments: ' + util.inspect([start, stop])); + } + return []; + } + + opts.isPadded = isPadded(start) || isPadded(stop); + opts.toString = opts.stringify + || typeof opts.step === 'string' + || typeof start === 'string' + || typeof stop === 'string' + || !opts.isNumber; + + if (opts.isPadded) { + opts.maxLength = Math.max(String(start).length, String(stop).length); + } + + // support legacy minimatch/fill-range options + if (typeof opts.optimize === 'boolean') opts.toRegex = opts.optimize; + if (typeof opts.makeRe === 'boolean') opts.toRegex = opts.makeRe; + return expand(start, stop, opts); +} + +function expand(start, stop, options) { + var a = options.isNumber ? toNumber(start) : start.charCodeAt(0); + var b = options.isNumber ? toNumber(stop) : stop.charCodeAt(0); + + var step = Math.abs(toNumber(options.step)) || 1; + if (options.toRegex && step === 1) { + return toRange(a, b, start, stop, options); + } + + var zero = {greater: [], lesser: []}; + var asc = a < b; + var arr = new Array(Math.round((asc ? b - a : a - b) / step)); + var idx = 0; + + while (asc ? a <= b : a >= b) { + var val = options.isNumber ? a : String.fromCharCode(a); + if (options.toRegex && (val >= 0 || !options.isNumber)) { + zero.greater.push(val); + } else { + zero.lesser.push(Math.abs(val)); + } + + if (options.isPadded) { + val = zeros(val, options); + } + + if (options.toString) { + val = String(val); + } + + if (typeof options.transform === 'function') { + arr[idx++] = options.transform(val, a, b, step, idx, arr, options); + } else { + arr[idx++] = val; + } + + if (asc) { + a += step; + } else { + a -= step; + } + } + + if (options.toRegex === true) { + return toSequence(arr, zero, options); + } + return arr; +} + +function toRange(a, b, start, stop, options) { + if (options.isPadded) { + return toRegex(start, stop, options); + } + + if (options.isNumber) { + return toRegex(Math.min(a, b), Math.max(a, b), options); + } + + var start = String.fromCharCode(Math.min(a, b)); + var stop = String.fromCharCode(Math.max(a, b)); + return '[' + start + '-' + stop + ']'; +} + +function toSequence(arr, zeros, options) { + var greater = '', lesser = ''; + if (zeros.greater.length) { + greater = zeros.greater.join('|'); + } + if (zeros.lesser.length) { + lesser = '-(' + zeros.lesser.join('|') + ')'; + } + var res = greater && lesser + ? greater + '|' + lesser + : greater || lesser; + + if (options.capture) { + return '(' + res + ')'; + } + return res; +} + +function zeros(val, options) { + if (options.isPadded) { + var str = String(val); + var len = str.length; + var dash = ''; + if (str.charAt(0) === '-') { + dash = '-'; + str = str.slice(1); + } + var diff = options.maxLength - len; + var pad = repeat('0', diff); + val = (dash + pad + str); + } + if (options.stringify) { + return String(val); + } + return val; +} + +function toNumber(val) { + return Number(val) || 0; +} + +function isPadded(str) { + return /^-?0\d/.test(str); +} + +function isValid(min, max) { + return (isValidNumber(min) || isValidLetter(min)) + && (isValidNumber(max) || isValidLetter(max)); +} + +function isValidLetter(ch) { + return typeof ch === 'string' && ch.length === 1 && /^\w+$/.test(ch); +} + +function isValidNumber(n) { + return isNumber(n) && !/\./.test(n); +} + +/** + * Expose `fillRange` + * @type {Function} + */ + +module.exports = fillRange; + + +/***/ }), +/* 347 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-number + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var typeOf = __webpack_require__(348); + +module.exports = function isNumber(num) { + var type = typeOf(num); + + if (type === 'string') { + if (!num.trim()) return false; + } else if (type !== 'number') { + return false; + } + + return (num - num + 1) >= 0; +}; + + +/***/ }), +/* 348 */ +/***/ (function(module, exports, __webpack_require__) { + +var isBuffer = __webpack_require__(349); +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + // primitivies + if (typeof val === 'undefined') { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (typeof val === 'string' || val instanceof String) { + return 'string'; + } + if (typeof val === 'number' || val instanceof Number) { + return 'number'; + } + + // functions + if (typeof val === 'function' || val instanceof Function) { + return 'function'; + } + + // array + if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { + return 'array'; + } + + // check for instances of RegExp and Date before calling `toString` + if (val instanceof RegExp) { + return 'regexp'; + } + if (val instanceof Date) { + return 'date'; + } + + // other objects + var type = toString.call(val); + + if (type === '[object RegExp]') { + return 'regexp'; + } + if (type === '[object Date]') { + return 'date'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (type === '[object Error]') { + return 'error'; + } + + // buffer + if (isBuffer(val)) { + return 'buffer'; + } + + // es6: Map, WeakMap, Set, WeakSet + if (type === '[object Set]') { + return 'set'; + } + if (type === '[object WeakSet]') { + return 'weakset'; + } + if (type === '[object Map]') { + return 'map'; + } + if (type === '[object WeakMap]') { + return 'weakmap'; + } + if (type === '[object Symbol]') { + return 'symbol'; + } + + // typed arrays + if (type === '[object Int8Array]') { + return 'int8array'; + } + if (type === '[object Uint8Array]') { + return 'uint8array'; + } + if (type === '[object Uint8ClampedArray]') { + return 'uint8clampedarray'; + } + if (type === '[object Int16Array]') { + return 'int16array'; + } + if (type === '[object Uint16Array]') { + return 'uint16array'; + } + if (type === '[object Int32Array]') { + return 'int32array'; + } + if (type === '[object Uint32Array]') { + return 'uint32array'; + } + if (type === '[object Float32Array]') { + return 'float32array'; + } + if (type === '[object Float64Array]') { + return 'float64array'; + } + + // must be a plain object + return 'object'; +}; + + +/***/ }), +/* 349 */ +/***/ (function(module, exports) { + +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +// The _isBuffer check is for Safari 5-7 support, because it's missing +// Object.prototype.constructor. Remove this eventually +module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) +} + +function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} + +// For Node v0.10 support. Remove this eventually. +function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) +} + + +/***/ }), +/* 350 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * repeat-string + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +/** + * Results cache + */ + +var res = ''; +var cache; + +/** + * Expose `repeat` + */ + +module.exports = repeat; + +/** + * Repeat the given `string` the specified `number` + * of times. + * + * **Example:** + * + * ```js + * var repeat = require('repeat-string'); + * repeat('A', 5); + * //=> AAAAA + * ``` + * + * @param {String} `string` The string to repeat + * @param {Number} `number` The number of times to repeat the string + * @return {String} Repeated string + * @api public + */ + +function repeat(str, num) { + if (typeof str !== 'string') { + throw new TypeError('expected a string'); + } + + // cover common, quick use cases + if (num === 1) return str; + if (num === 2) return str + str; + + var max = str.length * num; + if (cache !== str || typeof cache === 'undefined') { + cache = str; + res = ''; + } else if (res.length >= max) { + return res.substr(0, max); + } + + while (max > res.length && num > 1) { + if (num & 1) { + res += str; + } + + num >>= 1; + str += str; + } + + res += str; + res = res.substr(0, max); + return res; +} + + +/***/ }), +/* 351 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * to-regex-range + * + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var repeat = __webpack_require__(350); +var isNumber = __webpack_require__(347); +var cache = {}; + +function toRegexRange(min, max, options) { + if (isNumber(min) === false) { + throw new RangeError('toRegexRange: first argument is invalid.'); + } + + if (typeof max === 'undefined' || min === max) { + return String(min); + } + + if (isNumber(max) === false) { + throw new RangeError('toRegexRange: second argument is invalid.'); + } + + options = options || {}; + var relax = String(options.relaxZeros); + var shorthand = String(options.shorthand); + var capture = String(options.capture); + var key = min + ':' + max + '=' + relax + shorthand + capture; + if (cache.hasOwnProperty(key)) { + return cache[key].result; + } + + var a = Math.min(min, max); + var b = Math.max(min, max); + + if (Math.abs(a - b) === 1) { + var result = min + '|' + max; + if (options.capture) { + return '(' + result + ')'; + } + return result; + } + + var isPadded = padding(min) || padding(max); + var positives = []; + var negatives = []; + + var tok = {min: min, max: max, a: a, b: b}; + if (isPadded) { + tok.isPadded = isPadded; + tok.maxLen = String(tok.max).length; + } + + if (a < 0) { + var newMin = b < 0 ? Math.abs(b) : 1; + var newMax = Math.abs(a); + negatives = splitToPatterns(newMin, newMax, tok, options); + a = tok.a = 0; + } + + if (b >= 0) { + positives = splitToPatterns(a, b, tok, options); + } + + tok.negatives = negatives; + tok.positives = positives; + tok.result = siftPatterns(negatives, positives, options); + + if (options.capture && (positives.length + negatives.length) > 1) { + tok.result = '(' + tok.result + ')'; + } + + cache[key] = tok; + return tok.result; +} + +function siftPatterns(neg, pos, options) { + var onlyNegative = filterPatterns(neg, pos, '-', false, options) || []; + var onlyPositive = filterPatterns(pos, neg, '', false, options) || []; + var intersected = filterPatterns(neg, pos, '-?', true, options) || []; + var subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} + +function splitToRanges(min, max) { + min = Number(min); + max = Number(max); + + var nines = 1; + var stops = [max]; + var stop = +countNines(min, nines); + + while (min <= stop && stop <= max) { + stops = push(stops, stop); + nines += 1; + stop = +countNines(min, nines); + } + + var zeros = 1; + stop = countZeros(max + 1, zeros) - 1; + + while (min < stop && stop <= max) { + stops = push(stops, stop); + zeros += 1; + stop = countZeros(max + 1, zeros) - 1; + } + + stops.sort(compare); + return stops; +} + +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ + +function rangeToPattern(start, stop, options) { + if (start === stop) { + return {pattern: String(start), digits: []}; + } + + var zipped = zip(String(start), String(stop)); + var len = zipped.length, i = -1; + + var pattern = ''; + var digits = 0; + + while (++i < len) { + var numbers = zipped[i]; + var startDigit = numbers[0]; + var stopDigit = numbers[1]; + + if (startDigit === stopDigit) { + pattern += startDigit; + + } else if (startDigit !== '0' || stopDigit !== '9') { + pattern += toCharacterClass(startDigit, stopDigit); + + } else { + digits += 1; + } + } + + if (digits) { + pattern += options.shorthand ? '\\d' : '[0-9]'; + } + + return { pattern: pattern, digits: [digits] }; +} + +function splitToPatterns(min, max, tok, options) { + var ranges = splitToRanges(min, max); + var len = ranges.length; + var idx = -1; + + var tokens = []; + var start = min; + var prev; + + while (++idx < len) { + var range = ranges[idx]; + var obj = rangeToPattern(start, range, options); + var zeros = ''; + + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.digits.length > 1) { + prev.digits.pop(); + } + prev.digits.push(obj.digits[0]); + prev.string = prev.pattern + toQuantifier(prev.digits); + start = range + 1; + continue; + } + + if (tok.isPadded) { + zeros = padZeros(range, tok); + } + + obj.string = zeros + obj.pattern + toQuantifier(obj.digits); + tokens.push(obj); + start = range + 1; + prev = obj; + } + + return tokens; +} + +function filterPatterns(arr, comparison, prefix, intersection, options) { + var res = []; + + for (var i = 0; i < arr.length; i++) { + var tok = arr[i]; + var ele = tok.string; + + if (options.relaxZeros !== false) { + if (prefix === '-' && ele.charAt(0) === '0') { + if (ele.charAt(1) === '{') { + ele = '0*' + ele.replace(/^0\{\d+\}/, ''); + } else { + ele = '0*' + ele.slice(1); + } + } + } + + if (!intersection && !contains(comparison, 'string', ele)) { + res.push(prefix + ele); + } + + if (intersection && contains(comparison, 'string', ele)) { + res.push(prefix + ele); + } + } + return res; +} + +/** + * Zip strings (`for in` can be used on string characters) + */ + +function zip(a, b) { + var arr = []; + for (var ch in a) arr.push([a[ch], b[ch]]); + return arr; +} + +function compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} + +function push(arr, ele) { + if (arr.indexOf(ele) === -1) arr.push(ele); + return arr; +} + +function contains(arr, key, val) { + for (var i = 0; i < arr.length; i++) { + if (arr[i][key] === val) { + return true; + } + } + return false; +} + +function countNines(min, len) { + return String(min).slice(0, -len) + repeat('9', len); +} + +function countZeros(integer, zeros) { + return integer - (integer % Math.pow(10, zeros)); +} + +function toQuantifier(digits) { + var start = digits[0]; + var stop = digits[1] ? (',' + digits[1]) : ''; + if (!stop && (!start || start === 1)) { + return ''; + } + return '{' + start + stop + '}'; +} + +function toCharacterClass(a, b) { + return '[' + a + ((b - a === 1) ? '' : '-') + b + ']'; +} + +function padding(str) { + return /^-?(0+)\d/.exec(str); +} + +function padZeros(val, tok) { + if (tok.isPadded) { + var diff = Math.abs(tok.maxLen - String(val).length); + switch (diff) { + case 0: + return ''; + case 1: + return '0'; + default: { + return '0{' + diff + '}'; + } + } + } + return val; +} + +/** + * Expose `toRegexRange` + */ + +module.exports = toRegexRange; + + +/***/ }), +/* 352 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * repeat-element + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Licensed under the MIT license. + */ + + + +module.exports = function repeat(ele, num) { + var arr = new Array(num); + + for (var i = 0; i < num; i++) { + arr[i] = ele; + } + + return arr; +}; + + +/***/ }), +/* 353 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Node = __webpack_require__(354); +var utils = __webpack_require__(343); + +/** + * Braces parsers + */ + +module.exports = function(braces, options) { + braces.parser + .set('bos', function() { + if (!this.parsed) { + this.ast = this.nodes[0] = new Node(this.ast); + } + }) + + /** + * Character parsers + */ + + .set('escape', function() { + var pos = this.position(); + var m = this.match(/^(?:\\(.)|\$\{)/); + if (!m) return; + + var prev = this.prev(); + var last = utils.last(prev.nodes); + + var node = pos(new Node({ + type: 'text', + multiplier: 1, + val: m[0] + })); + + if (node.val === '\\\\') { + return node; + } + + if (node.val === '${') { + var str = this.input; + var idx = -1; + var ch; + + while ((ch = str[++idx])) { + this.consume(1); + node.val += ch; + if (ch === '\\') { + node.val += str[++idx]; + continue; + } + if (ch === '}') { + break; + } + } + } + + if (this.options.unescape !== false) { + node.val = node.val.replace(/\\([{}])/g, '$1'); + } + + if (last.val === '"' && this.input.charAt(0) === '"') { + last.val = node.val; + this.consume(1); + return; + } + + return concatNodes.call(this, pos, node, prev, options); + }) + + /** + * Brackets: "[...]" (basic, this is overridden by + * other parsers in more advanced implementations) + */ + + .set('bracket', function() { + var isInside = this.isInside('brace'); + var pos = this.position(); + var m = this.match(/^(?:\[([!^]?)([^\]]{2,}|\]-)(\]|[^*+?]+)|\[)/); + if (!m) return; + + var prev = this.prev(); + var val = m[0]; + var negated = m[1] ? '^' : ''; + var inner = m[2] || ''; + var close = m[3] || ''; + + if (isInside && prev.type === 'brace') { + prev.text = prev.text || ''; + prev.text += val; + } + + var esc = this.input.slice(0, 2); + if (inner === '' && esc === '\\]') { + inner += esc; + this.consume(2); + + var str = this.input; + var idx = -1; + var ch; + + while ((ch = str[++idx])) { + this.consume(1); + if (ch === ']') { + close = ch; + break; + } + inner += ch; + } + } + + return pos(new Node({ + type: 'bracket', + val: val, + escaped: close !== ']', + negated: negated, + inner: inner, + close: close + })); + }) + + /** + * Empty braces (we capture these early to + * speed up processing in the compiler) + */ + + .set('multiplier', function() { + var isInside = this.isInside('brace'); + var pos = this.position(); + var m = this.match(/^\{((?:,|\{,+\})+)\}/); + if (!m) return; + + this.multiplier = true; + var prev = this.prev(); + var val = m[0]; + + if (isInside && prev.type === 'brace') { + prev.text = prev.text || ''; + prev.text += val; + } + + var node = pos(new Node({ + type: 'text', + multiplier: 1, + match: m, + val: val + })); + + return concatNodes.call(this, pos, node, prev, options); + }) + + /** + * Open + */ + + .set('brace.open', function() { + var pos = this.position(); + var m = this.match(/^\{(?!(?:[^\\}]?|,+)\})/); + if (!m) return; + + var prev = this.prev(); + var last = utils.last(prev.nodes); + + // if the last parsed character was an extglob character + // we need to _not optimize_ the brace pattern because + // it might be mistaken for an extglob by a downstream parser + if (last && last.val && isExtglobChar(last.val.slice(-1))) { + last.optimize = false; + } + + var open = pos(new Node({ + type: 'brace.open', + val: m[0] + })); + + var node = pos(new Node({ + type: 'brace', + nodes: [] + })); + + node.push(open); + prev.push(node); + this.push('brace', node); + }) + + /** + * Close + */ + + .set('brace.close', function() { + var pos = this.position(); + var m = this.match(/^\}/); + if (!m || !m[0]) return; + + var brace = this.pop('brace'); + var node = pos(new Node({ + type: 'brace.close', + val: m[0] + })); + + if (!this.isType(brace, 'brace')) { + if (this.options.strict) { + throw new Error('missing opening "{"'); + } + node.type = 'text'; + node.multiplier = 0; + node.escaped = true; + return node; + } + + var prev = this.prev(); + var last = utils.last(prev.nodes); + if (last.text) { + var lastNode = utils.last(last.nodes); + if (lastNode.val === ')' && /[!@*?+]\(/.test(last.text)) { + var open = last.nodes[0]; + var text = last.nodes[1]; + if (open.type === 'brace.open' && text && text.type === 'text') { + text.optimize = false; + } + } + } + + if (brace.nodes.length > 2) { + var first = brace.nodes[1]; + if (first.type === 'text' && first.val === ',') { + brace.nodes.splice(1, 1); + brace.nodes.push(first); + } + } + + brace.push(node); + }) + + /** + * Capture boundary characters + */ + + .set('boundary', function() { + var pos = this.position(); + var m = this.match(/^[$^](?!\{)/); + if (!m) return; + return pos(new Node({ + type: 'text', + val: m[0] + })); + }) + + /** + * One or zero, non-comma characters wrapped in braces + */ + + .set('nobrace', function() { + var isInside = this.isInside('brace'); + var pos = this.position(); + var m = this.match(/^\{[^,]?\}/); + if (!m) return; + + var prev = this.prev(); + var val = m[0]; + + if (isInside && prev.type === 'brace') { + prev.text = prev.text || ''; + prev.text += val; + } + + return pos(new Node({ + type: 'text', + multiplier: 0, + val: val + })); + }) + + /** + * Text + */ + + .set('text', function() { + var isInside = this.isInside('brace'); + var pos = this.position(); + var m = this.match(/^((?!\\)[^${}[\]])+/); + if (!m) return; + + var prev = this.prev(); + var val = m[0]; + + if (isInside && prev.type === 'brace') { + prev.text = prev.text || ''; + prev.text += val; + } + + var node = pos(new Node({ + type: 'text', + multiplier: 1, + val: val + })); + + return concatNodes.call(this, pos, node, prev, options); + }); +}; + +/** + * Returns true if the character is an extglob character. + */ + +function isExtglobChar(ch) { + return ch === '!' || ch === '@' || ch === '*' || ch === '?' || ch === '+'; +} + +/** + * Combine text nodes, and calculate empty sets (`{,,}`) + * @param {Function} `pos` Function to calculate node position + * @param {Object} `node` AST node + * @return {Object} + */ + +function concatNodes(pos, node, parent, options) { + node.orig = node.val; + var prev = this.prev(); + var last = utils.last(prev.nodes); + var isEscaped = false; + + if (node.val.length > 1) { + var a = node.val.charAt(0); + var b = node.val.slice(-1); + + isEscaped = (a === '"' && b === '"') + || (a === "'" && b === "'") + || (a === '`' && b === '`'); + } + + if (isEscaped && options.unescape !== false) { + node.val = node.val.slice(1, node.val.length - 1); + node.escaped = true; + } + + if (node.match) { + var match = node.match[1]; + if (!match || match.indexOf('}') === -1) { + match = node.match[0]; + } + + // replace each set with a single "," + var val = match.replace(/\{/g, ',').replace(/\}/g, ''); + node.multiplier *= val.length; + node.val = ''; + } + + var simpleText = last.type === 'text' + && last.multiplier === 1 + && node.multiplier === 1 + && node.val; + + if (simpleText) { + last.val += node.val; + return; + } + + prev.push(node); +} + + +/***/ }), +/* 354 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isObject = __webpack_require__(329); +var define = __webpack_require__(355); +var utils = __webpack_require__(356); +var ownNames; + +/** + * Create a new AST `Node` with the given `val` and `type`. + * + * ```js + * var node = new Node('*', 'Star'); + * var node = new Node({type: 'star', val: '*'}); + * ``` + * @name Node + * @param {String|Object} `val` Pass a matched substring, or an object to merge onto the node. + * @param {String} `type` The node type to use when `val` is a string. + * @return {Object} node instance + * @api public + */ + +function Node(val, type, parent) { + if (typeof type !== 'string') { + parent = type; + type = null; + } + + define(this, 'parent', parent); + define(this, 'isNode', true); + define(this, 'expect', null); + + if (typeof type !== 'string' && isObject(val)) { + lazyKeys(); + var keys = Object.keys(val); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (ownNames.indexOf(key) === -1) { + this[key] = val[key]; + } + } + } else { + this.type = type; + this.val = val; + } +} + +/** + * Returns true if the given value is a node. + * + * ```js + * var Node = require('snapdragon-node'); + * var node = new Node({type: 'foo'}); + * console.log(Node.isNode(node)); //=> true + * console.log(Node.isNode({})); //=> false + * ``` + * @param {Object} `node` + * @returns {Boolean} + * @api public + */ + +Node.isNode = function(node) { + return utils.isNode(node); +}; + +/** + * Define a non-enumberable property on the node instance. + * Useful for adding properties that shouldn't be extended + * or visible during debugging. + * + * ```js + * var node = new Node(); + * node.define('foo', 'something non-enumerable'); + * ``` + * @param {String} `name` + * @param {any} `val` + * @return {Object} returns the node instance + * @api public + */ + +Node.prototype.define = function(name, val) { + define(this, name, val); + return this; +}; + +/** + * Returns true if `node.val` is an empty string, or `node.nodes` does + * not contain any non-empty text nodes. + * + * ```js + * var node = new Node({type: 'text'}); + * node.isEmpty(); //=> true + * node.val = 'foo'; + * node.isEmpty(); //=> false + * ``` + * @param {Function} `fn` (optional) Filter function that is called on `node` and/or child nodes. `isEmpty` will return false immediately when the filter function returns false on any nodes. + * @return {Boolean} + * @api public + */ + +Node.prototype.isEmpty = function(fn) { + return utils.isEmpty(this, fn); +}; + +/** + * Given node `foo` and node `bar`, push node `bar` onto `foo.nodes`, and + * set `foo` as `bar.parent`. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * foo.push(bar); + * ``` + * @param {Object} `node` + * @return {Number} Returns the length of `node.nodes` + * @api public + */ + +Node.prototype.push = function(node) { + assert(Node.isNode(node), 'expected node to be an instance of Node'); + define(node, 'parent', this); + + this.nodes = this.nodes || []; + return this.nodes.push(node); +}; + +/** + * Given node `foo` and node `bar`, unshift node `bar` onto `foo.nodes`, and + * set `foo` as `bar.parent`. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * foo.unshift(bar); + * ``` + * @param {Object} `node` + * @return {Number} Returns the length of `node.nodes` + * @api public + */ + +Node.prototype.unshift = function(node) { + assert(Node.isNode(node), 'expected node to be an instance of Node'); + define(node, 'parent', this); + + this.nodes = this.nodes || []; + return this.nodes.unshift(node); +}; + +/** + * Pop a node from `node.nodes`. + * + * ```js + * var node = new Node({type: 'foo'}); + * node.push(new Node({type: 'a'})); + * node.push(new Node({type: 'b'})); + * node.push(new Node({type: 'c'})); + * node.push(new Node({type: 'd'})); + * console.log(node.nodes.length); + * //=> 4 + * node.pop(); + * console.log(node.nodes.length); + * //=> 3 + * ``` + * @return {Number} Returns the popped `node` + * @api public + */ + +Node.prototype.pop = function() { + return this.nodes && this.nodes.pop(); +}; + +/** + * Shift a node from `node.nodes`. + * + * ```js + * var node = new Node({type: 'foo'}); + * node.push(new Node({type: 'a'})); + * node.push(new Node({type: 'b'})); + * node.push(new Node({type: 'c'})); + * node.push(new Node({type: 'd'})); + * console.log(node.nodes.length); + * //=> 4 + * node.shift(); + * console.log(node.nodes.length); + * //=> 3 + * ``` + * @return {Object} Returns the shifted `node` + * @api public + */ + +Node.prototype.shift = function() { + return this.nodes && this.nodes.shift(); +}; + +/** + * Remove `node` from `node.nodes`. + * + * ```js + * node.remove(childNode); + * ``` + * @param {Object} `node` + * @return {Object} Returns the removed node. + * @api public + */ + +Node.prototype.remove = function(node) { + assert(Node.isNode(node), 'expected node to be an instance of Node'); + this.nodes = this.nodes || []; + var idx = node.index; + if (idx !== -1) { + node.index = -1; + return this.nodes.splice(idx, 1); + } + return null; +}; + +/** + * Get the first child node from `node.nodes` that matches the given `type`. + * If `type` is a number, the child node at that index is returned. + * + * ```js + * var child = node.find(1); //<= index of the node to get + * var child = node.find('foo'); //<= node.type of a child node + * var child = node.find(/^(foo|bar)$/); //<= regex to match node.type + * var child = node.find(['foo', 'bar']); //<= array of node.type(s) + * ``` + * @param {String} `type` + * @return {Object} Returns a child node or undefined. + * @api public + */ + +Node.prototype.find = function(type) { + return utils.findNode(this.nodes, type); +}; + +/** + * Return true if the node is the given `type`. + * + * ```js + * var node = new Node({type: 'bar'}); + * cosole.log(node.isType('foo')); // false + * cosole.log(node.isType(/^(foo|bar)$/)); // true + * cosole.log(node.isType(['foo', 'bar'])); // true + * ``` + * @param {String} `type` + * @return {Boolean} + * @api public + */ + +Node.prototype.isType = function(type) { + return utils.isType(this, type); +}; + +/** + * Return true if the `node.nodes` has the given `type`. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * foo.push(bar); + * + * cosole.log(foo.hasType('qux')); // false + * cosole.log(foo.hasType(/^(qux|bar)$/)); // true + * cosole.log(foo.hasType(['qux', 'bar'])); // true + * ``` + * @param {String} `type` + * @return {Boolean} + * @api public + */ + +Node.prototype.hasType = function(type) { + return utils.hasType(this, type); +}; + +/** + * Get the siblings array, or `null` if it doesn't exist. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * var baz = new Node({type: 'baz'}); + * foo.push(bar); + * foo.push(baz); + * + * console.log(bar.siblings.length) // 2 + * console.log(baz.siblings.length) // 2 + * ``` + * @return {Array} + * @api public + */ + +Object.defineProperty(Node.prototype, 'siblings', { + set: function() { + throw new Error('node.siblings is a getter and cannot be defined'); + }, + get: function() { + return this.parent ? this.parent.nodes : null; + } +}); + +/** + * Get the node's current index from `node.parent.nodes`. + * This should always be correct, even when the parent adds nodes. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * var baz = new Node({type: 'baz'}); + * var qux = new Node({type: 'qux'}); + * foo.push(bar); + * foo.push(baz); + * foo.unshift(qux); + * + * console.log(bar.index) // 1 + * console.log(baz.index) // 2 + * console.log(qux.index) // 0 + * ``` + * @return {Number} + * @api public + */ + +Object.defineProperty(Node.prototype, 'index', { + set: function(index) { + define(this, 'idx', index); + }, + get: function() { + if (!Array.isArray(this.siblings)) { + return -1; + } + var tok = this.idx !== -1 ? this.siblings[this.idx] : null; + if (tok !== this) { + this.idx = this.siblings.indexOf(this); + } + return this.idx; + } +}); + +/** + * Get the previous node from the siblings array or `null`. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * var baz = new Node({type: 'baz'}); + * foo.push(bar); + * foo.push(baz); + * + * console.log(baz.prev.type) // 'bar' + * ``` + * @return {Object} + * @api public + */ + +Object.defineProperty(Node.prototype, 'prev', { + set: function() { + throw new Error('node.prev is a getter and cannot be defined'); + }, + get: function() { + if (Array.isArray(this.siblings)) { + return this.siblings[this.index - 1] || this.parent.prev; + } + return null; + } +}); + +/** + * Get the siblings array, or `null` if it doesn't exist. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * var baz = new Node({type: 'baz'}); + * foo.push(bar); + * foo.push(baz); + * + * console.log(bar.siblings.length) // 2 + * console.log(baz.siblings.length) // 2 + * ``` + * @return {Object} + * @api public + */ + +Object.defineProperty(Node.prototype, 'next', { + set: function() { + throw new Error('node.next is a getter and cannot be defined'); + }, + get: function() { + if (Array.isArray(this.siblings)) { + return this.siblings[this.index + 1] || this.parent.next; + } + return null; + } +}); + +/** + * Get the first node from `node.nodes`. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * var baz = new Node({type: 'baz'}); + * var qux = new Node({type: 'qux'}); + * foo.push(bar); + * foo.push(baz); + * foo.push(qux); + * + * console.log(foo.first.type) // 'bar' + * ``` + * @return {Object} The first node, or undefiend + * @api public + */ + +Object.defineProperty(Node.prototype, 'first', { + get: function() { + return this.nodes ? this.nodes[0] : null; + } +}); + +/** + * Get the last node from `node.nodes`. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * var baz = new Node({type: 'baz'}); + * var qux = new Node({type: 'qux'}); + * foo.push(bar); + * foo.push(baz); + * foo.push(qux); + * + * console.log(foo.last.type) // 'qux' + * ``` + * @return {Object} The last node, or undefiend + * @api public + */ + +Object.defineProperty(Node.prototype, 'last', { + get: function() { + return this.nodes ? utils.last(this.nodes) : null; + } +}); + +/** + * Get the last node from `node.nodes`. + * + * ```js + * var foo = new Node({type: 'foo'}); + * var bar = new Node({type: 'bar'}); + * var baz = new Node({type: 'baz'}); + * var qux = new Node({type: 'qux'}); + * foo.push(bar); + * foo.push(baz); + * foo.push(qux); + * + * console.log(foo.last.type) // 'qux' + * ``` + * @return {Object} The last node, or undefiend + * @api public + */ + +Object.defineProperty(Node.prototype, 'scope', { + get: function() { + if (this.isScope !== true) { + return this.parent ? this.parent.scope : this; + } + return this; + } +}); + +/** + * Get own property names from Node prototype, but only the + * first time `Node` is instantiated + */ + +function lazyKeys() { + if (!ownNames) { + ownNames = Object.getOwnPropertyNames(Node.prototype); + } +} + +/** + * Simplified assertion. Throws an error is `val` is falsey. + */ + +function assert(val, message) { + if (!val) throw new Error(message); +} + +/** + * Expose `Node` + */ + +exports = module.exports = Node; + + +/***/ }), +/* 355 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * define-property + * + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var isDescriptor = __webpack_require__(330); + +module.exports = function defineProperty(obj, prop, val) { + if (typeof obj !== 'object' && typeof obj !== 'function') { + throw new TypeError('expected an object or function.'); + } + + if (typeof prop !== 'string') { + throw new TypeError('expected `prop` to be a string.'); + } + + if (isDescriptor(val) && ('set' in val || 'get' in val)) { + return Object.defineProperty(obj, prop, val); + } + + return Object.defineProperty(obj, prop, { + configurable: true, + enumerable: false, + writable: true, + value: val + }); +}; + + +/***/ }), +/* 356 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var typeOf = __webpack_require__(348); +var utils = module.exports; + +/** + * Returns true if the given value is a node. + * + * ```js + * var Node = require('snapdragon-node'); + * var node = new Node({type: 'foo'}); + * console.log(utils.isNode(node)); //=> true + * console.log(utils.isNode({})); //=> false + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @returns {Boolean} + * @api public + */ + +utils.isNode = function(node) { + return typeOf(node) === 'object' && node.isNode === true; +}; + +/** + * Emit an empty string for the given `node`. + * + * ```js + * // do nothing for beginning-of-string + * snapdragon.compiler.set('bos', utils.noop); + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @returns {undefined} + * @api public + */ + +utils.noop = function(node) { + append(this, '', node); +}; + +/** + * Appdend `node.val` to `compiler.output`, exactly as it was created + * by the parser. + * + * ```js + * snapdragon.compiler.set('text', utils.identity); + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @returns {undefined} + * @api public + */ + +utils.identity = function(node) { + append(this, node.val, node); +}; + +/** + * Previously named `.emit`, this method appends the given `val` + * to `compiler.output` for the given node. Useful when you know + * what value should be appended advance, regardless of the actual + * value of `node.val`. + * + * ```js + * snapdragon.compiler + * .set('i', function(node) { + * this.mapVisit(node); + * }) + * .set('i.open', utils.append('')) + * .set('i.close', utils.append('')) + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @returns {Function} Returns a compiler middleware function. + * @api public + */ + +utils.append = function(val) { + return function(node) { + append(this, val, node); + }; +}; + +/** + * Used in compiler middleware, this onverts an AST node into + * an empty `text` node and deletes `node.nodes` if it exists. + * The advantage of this method is that, as opposed to completely + * removing the node, indices will not need to be re-calculated + * in sibling nodes, and nothing is appended to the output. + * + * ```js + * utils.toNoop(node); + * // convert `node.nodes` to the given value instead of deleting it + * utils.toNoop(node, []); + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {Array} `nodes` Optionally pass a new `nodes` value, to replace the existing `node.nodes` array. + * @api public + */ + +utils.toNoop = function(node, nodes) { + if (nodes) { + node.nodes = nodes; + } else { + delete node.nodes; + node.type = 'text'; + node.val = ''; + } +}; + +/** + * Visit `node` with the given `fn`. The built-in `.visit` method in snapdragon + * automatically calls registered compilers, this allows you to pass a visitor + * function. + * + * ```js + * snapdragon.compiler.set('i', function(node) { + * utils.visit(node, function(childNode) { + * // do stuff with "childNode" + * return childNode; + * }); + * }); + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {Function} `fn` + * @return {Object} returns the node after recursively visiting all child nodes. + * @api public + */ + +utils.visit = function(node, fn) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isFunction(fn), 'expected a visitor function'); + fn(node); + return node.nodes ? utils.mapVisit(node, fn) : node; +}; + +/** + * Map [visit](#visit) the given `fn` over `node.nodes`. This is called by + * [visit](#visit), use this method if you do not want `fn` to be called on + * the first node. + * + * ```js + * snapdragon.compiler.set('i', function(node) { + * utils.mapVisit(node, function(childNode) { + * // do stuff with "childNode" + * return childNode; + * }); + * }); + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {Object} `options` + * @param {Function} `fn` + * @return {Object} returns the node + * @api public + */ + +utils.mapVisit = function(node, fn) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isArray(node.nodes), 'expected node.nodes to be an array'); + assert(isFunction(fn), 'expected a visitor function'); + + for (var i = 0; i < node.nodes.length; i++) { + utils.visit(node.nodes[i], fn); + } + return node; +}; + +/** + * Unshift an `*.open` node onto `node.nodes`. + * + * ```js + * var Node = require('snapdragon-node'); + * snapdragon.parser.set('brace', function(node) { + * var match = this.match(/^{/); + * if (match) { + * var parent = new Node({type: 'brace'}); + * utils.addOpen(parent, Node); + * console.log(parent.nodes[0]): + * // { type: 'brace.open', val: '' }; + * + * // push the parent "brace" node onto the stack + * this.push(parent); + * + * // return the parent node, so it's also added to the AST + * return brace; + * } + * }); + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. + * @param {Function} `filter` Optionaly specify a filter function to exclude the node. + * @return {Object} Returns the created opening node. + * @api public + */ + +utils.addOpen = function(node, Node, val, filter) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isFunction(Node), 'expected Node to be a constructor function'); + + if (typeof val === 'function') { + filter = val; + val = ''; + } + + if (typeof filter === 'function' && !filter(node)) return; + var open = new Node({ type: node.type + '.open', val: val}); + var unshift = node.unshift || node.unshiftNode; + if (typeof unshift === 'function') { + unshift.call(node, open); + } else { + utils.unshiftNode(node, open); + } + return open; +}; + +/** + * Push a `*.close` node onto `node.nodes`. + * + * ```js + * var Node = require('snapdragon-node'); + * snapdragon.parser.set('brace', function(node) { + * var match = this.match(/^}/); + * if (match) { + * var parent = this.parent(); + * if (parent.type !== 'brace') { + * throw new Error('missing opening: ' + '}'); + * } + * + * utils.addClose(parent, Node); + * console.log(parent.nodes[parent.nodes.length - 1]): + * // { type: 'brace.close', val: '' }; + * + * // no need to return a node, since the parent + * // was already added to the AST + * return; + * } + * }); + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. + * @param {Function} `filter` Optionaly specify a filter function to exclude the node. + * @return {Object} Returns the created closing node. + * @api public + */ + +utils.addClose = function(node, Node, val, filter) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isFunction(Node), 'expected Node to be a constructor function'); + + if (typeof val === 'function') { + filter = val; + val = ''; + } + + if (typeof filter === 'function' && !filter(node)) return; + var close = new Node({ type: node.type + '.close', val: val}); + var push = node.push || node.pushNode; + if (typeof push === 'function') { + push.call(node, close); + } else { + utils.pushNode(node, close); + } + return close; +}; + +/** + * Wraps the given `node` with `*.open` and `*.close` nodes. + * + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. + * @param {Function} `filter` Optionaly specify a filter function to exclude the node. + * @return {Object} Returns the node + * @api public + */ + +utils.wrapNodes = function(node, Node, filter) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isFunction(Node), 'expected Node to be a constructor function'); + + utils.addOpen(node, Node, filter); + utils.addClose(node, Node, filter); + return node; +}; + +/** + * Push the given `node` onto `parent.nodes`, and set `parent` as `node.parent. + * + * ```js + * var parent = new Node({type: 'foo'}); + * var node = new Node({type: 'bar'}); + * utils.pushNode(parent, node); + * console.log(parent.nodes[0].type) // 'bar' + * console.log(node.parent.type) // 'foo' + * ``` + * @param {Object} `parent` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Object} Returns the child node + * @api public + */ + +utils.pushNode = function(parent, node) { + assert(utils.isNode(parent), 'expected parent node to be an instance of Node'); + assert(utils.isNode(node), 'expected node to be an instance of Node'); + + node.define('parent', parent); + parent.nodes = parent.nodes || []; + parent.nodes.push(node); + return node; +}; + +/** + * Unshift `node` onto `parent.nodes`, and set `parent` as `node.parent. + * + * ```js + * var parent = new Node({type: 'foo'}); + * var node = new Node({type: 'bar'}); + * utils.unshiftNode(parent, node); + * console.log(parent.nodes[0].type) // 'bar' + * console.log(node.parent.type) // 'foo' + * ``` + * @param {Object} `parent` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {undefined} + * @api public + */ + +utils.unshiftNode = function(parent, node) { + assert(utils.isNode(parent), 'expected parent node to be an instance of Node'); + assert(utils.isNode(node), 'expected node to be an instance of Node'); + + node.define('parent', parent); + parent.nodes = parent.nodes || []; + parent.nodes.unshift(node); +}; + +/** + * Pop the last `node` off of `parent.nodes`. The advantage of + * using this method is that it checks for `node.nodes` and works + * with any version of `snapdragon-node`. + * + * ```js + * var parent = new Node({type: 'foo'}); + * utils.pushNode(parent, new Node({type: 'foo'})); + * utils.pushNode(parent, new Node({type: 'bar'})); + * utils.pushNode(parent, new Node({type: 'baz'})); + * console.log(parent.nodes.length); //=> 3 + * utils.popNode(parent); + * console.log(parent.nodes.length); //=> 2 + * ``` + * @param {Object} `parent` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Number|Undefined} Returns the length of `node.nodes` or undefined. + * @api public + */ + +utils.popNode = function(node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + if (typeof node.pop === 'function') { + return node.pop(); + } + return node.nodes && node.nodes.pop(); +}; + +/** + * Shift the first `node` off of `parent.nodes`. The advantage of + * using this method is that it checks for `node.nodes` and works + * with any version of `snapdragon-node`. + * + * ```js + * var parent = new Node({type: 'foo'}); + * utils.pushNode(parent, new Node({type: 'foo'})); + * utils.pushNode(parent, new Node({type: 'bar'})); + * utils.pushNode(parent, new Node({type: 'baz'})); + * console.log(parent.nodes.length); //=> 3 + * utils.shiftNode(parent); + * console.log(parent.nodes.length); //=> 2 + * ``` + * @param {Object} `parent` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Number|Undefined} Returns the length of `node.nodes` or undefined. + * @api public + */ + +utils.shiftNode = function(node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + if (typeof node.shift === 'function') { + return node.shift(); + } + return node.nodes && node.nodes.shift(); +}; + +/** + * Remove the specified `node` from `parent.nodes`. + * + * ```js + * var parent = new Node({type: 'abc'}); + * var foo = new Node({type: 'foo'}); + * utils.pushNode(parent, foo); + * utils.pushNode(parent, new Node({type: 'bar'})); + * utils.pushNode(parent, new Node({type: 'baz'})); + * console.log(parent.nodes.length); //=> 3 + * utils.removeNode(parent, foo); + * console.log(parent.nodes.length); //=> 2 + * ``` + * @param {Object} `parent` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Object|undefined} Returns the removed node, if successful, or undefined if it does not exist on `parent.nodes`. + * @api public + */ + +utils.removeNode = function(parent, node) { + assert(utils.isNode(parent), 'expected parent.node to be an instance of Node'); + assert(utils.isNode(node), 'expected node to be an instance of Node'); + + if (!parent.nodes) { + return null; + } + + if (typeof parent.remove === 'function') { + return parent.remove(node); + } + + var idx = parent.nodes.indexOf(node); + if (idx !== -1) { + return parent.nodes.splice(idx, 1); + } +}; + +/** + * Returns true if `node.type` matches the given `type`. Throws a + * `TypeError` if `node` is not an instance of `Node`. + * + * ```js + * var Node = require('snapdragon-node'); + * var node = new Node({type: 'foo'}); + * console.log(utils.isType(node, 'foo')); // false + * console.log(utils.isType(node, 'bar')); // true + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {String} `type` + * @return {Boolean} + * @api public + */ + +utils.isType = function(node, type) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + switch (typeOf(type)) { + case 'array': + var types = type.slice(); + for (var i = 0; i < types.length; i++) { + if (utils.isType(node, types[i])) { + return true; + } + } + return false; + case 'string': + return node.type === type; + case 'regexp': + return type.test(node.type); + default: { + throw new TypeError('expected "type" to be an array, string or regexp'); + } + } +}; + +/** + * Returns true if the given `node` has the given `type` in `node.nodes`. + * Throws a `TypeError` if `node` is not an instance of `Node`. + * + * ```js + * var Node = require('snapdragon-node'); + * var node = new Node({ + * type: 'foo', + * nodes: [ + * new Node({type: 'bar'}), + * new Node({type: 'baz'}) + * ] + * }); + * console.log(utils.hasType(node, 'xyz')); // false + * console.log(utils.hasType(node, 'baz')); // true + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {String} `type` + * @return {Boolean} + * @api public + */ + +utils.hasType = function(node, type) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + if (!Array.isArray(node.nodes)) return false; + for (var i = 0; i < node.nodes.length; i++) { + if (utils.isType(node.nodes[i], type)) { + return true; + } + } + return false; +}; + +/** + * Returns the first node from `node.nodes` of the given `type` + * + * ```js + * var node = new Node({ + * type: 'foo', + * nodes: [ + * new Node({type: 'text', val: 'abc'}), + * new Node({type: 'text', val: 'xyz'}) + * ] + * }); + * + * var textNode = utils.firstOfType(node.nodes, 'text'); + * console.log(textNode.val); + * //=> 'abc' + * ``` + * @param {Array} `nodes` + * @param {String} `type` + * @return {Object|undefined} Returns the first matching node or undefined. + * @api public + */ + +utils.firstOfType = function(nodes, type) { + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + if (utils.isType(node, type)) { + return node; + } + } +}; + +/** + * Returns the node at the specified index, or the first node of the + * given `type` from `node.nodes`. + * + * ```js + * var node = new Node({ + * type: 'foo', + * nodes: [ + * new Node({type: 'text', val: 'abc'}), + * new Node({type: 'text', val: 'xyz'}) + * ] + * }); + * + * var nodeOne = utils.findNode(node.nodes, 'text'); + * console.log(nodeOne.val); + * //=> 'abc' + * + * var nodeTwo = utils.findNode(node.nodes, 1); + * console.log(nodeTwo.val); + * //=> 'xyz' + * ``` + * + * @param {Array} `nodes` + * @param {String|Number} `type` Node type or index. + * @return {Object} Returns a node or undefined. + * @api public + */ + +utils.findNode = function(nodes, type) { + if (!Array.isArray(nodes)) { + return null; + } + if (typeof type === 'number') { + return nodes[type]; + } + return utils.firstOfType(nodes, type); +}; + +/** + * Returns true if the given node is an "*.open" node. + * + * ```js + * var Node = require('snapdragon-node'); + * var brace = new Node({type: 'brace'}); + * var open = new Node({type: 'brace.open'}); + * var close = new Node({type: 'brace.close'}); + * + * console.log(utils.isOpen(brace)); // false + * console.log(utils.isOpen(open)); // true + * console.log(utils.isOpen(close)); // false + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Boolean} + * @api public + */ + +utils.isOpen = function(node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + return node.type.slice(-5) === '.open'; +}; + +/** + * Returns true if the given node is a "*.close" node. + * + * ```js + * var Node = require('snapdragon-node'); + * var brace = new Node({type: 'brace'}); + * var open = new Node({type: 'brace.open'}); + * var close = new Node({type: 'brace.close'}); + * + * console.log(utils.isClose(brace)); // false + * console.log(utils.isClose(open)); // false + * console.log(utils.isClose(close)); // true + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Boolean} + * @api public + */ + +utils.isClose = function(node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + return node.type.slice(-6) === '.close'; +}; + +/** + * Returns true if `node.nodes` **has** an `.open` node + * + * ```js + * var Node = require('snapdragon-node'); + * var brace = new Node({ + * type: 'brace', + * nodes: [] + * }); + * + * var open = new Node({type: 'brace.open'}); + * console.log(utils.hasOpen(brace)); // false + * + * brace.pushNode(open); + * console.log(utils.hasOpen(brace)); // true + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Boolean} + * @api public + */ + +utils.hasOpen = function(node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + var first = node.first || node.nodes ? node.nodes[0] : null; + if (utils.isNode(first)) { + return first.type === node.type + '.open'; + } + return false; +}; + +/** + * Returns true if `node.nodes` **has** a `.close` node + * + * ```js + * var Node = require('snapdragon-node'); + * var brace = new Node({ + * type: 'brace', + * nodes: [] + * }); + * + * var close = new Node({type: 'brace.close'}); + * console.log(utils.hasClose(brace)); // false + * + * brace.pushNode(close); + * console.log(utils.hasClose(brace)); // true + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Boolean} + * @api public + */ + +utils.hasClose = function(node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + var last = node.last || node.nodes ? node.nodes[node.nodes.length - 1] : null; + if (utils.isNode(last)) { + return last.type === node.type + '.close'; + } + return false; +}; + +/** + * Returns true if `node.nodes` has both `.open` and `.close` nodes + * + * ```js + * var Node = require('snapdragon-node'); + * var brace = new Node({ + * type: 'brace', + * nodes: [] + * }); + * + * var open = new Node({type: 'brace.open'}); + * var close = new Node({type: 'brace.close'}); + * console.log(utils.hasOpen(brace)); // false + * console.log(utils.hasClose(brace)); // false + * + * brace.pushNode(open); + * brace.pushNode(close); + * console.log(utils.hasOpen(brace)); // true + * console.log(utils.hasClose(brace)); // true + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Boolean} + * @api public + */ + +utils.hasOpenAndClose = function(node) { + return utils.hasOpen(node) && utils.hasClose(node); +}; + +/** + * Push the given `node` onto the `state.inside` array for the + * given type. This array is used as a specialized "stack" for + * only the given `node.type`. + * + * ```js + * var state = { inside: {}}; + * var node = new Node({type: 'brace'}); + * utils.addType(state, node); + * console.log(state.inside); + * //=> { brace: [{type: 'brace'}] } + * ``` + * @param {Object} `state` The `compiler.state` object or custom state object. + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Array} Returns the `state.inside` stack for the given type. + * @api public + */ + +utils.addType = function(state, node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isObject(state), 'expected state to be an object'); + + var type = node.parent + ? node.parent.type + : node.type.replace(/\.open$/, ''); + + if (!state.hasOwnProperty('inside')) { + state.inside = {}; + } + if (!state.inside.hasOwnProperty(type)) { + state.inside[type] = []; + } + + var arr = state.inside[type]; + arr.push(node); + return arr; +}; + +/** + * Remove the given `node` from the `state.inside` array for the + * given type. This array is used as a specialized "stack" for + * only the given `node.type`. + * + * ```js + * var state = { inside: {}}; + * var node = new Node({type: 'brace'}); + * utils.addType(state, node); + * console.log(state.inside); + * //=> { brace: [{type: 'brace'}] } + * utils.removeType(state, node); + * //=> { brace: [] } + * ``` + * @param {Object} `state` The `compiler.state` object or custom state object. + * @param {Object} `node` Instance of [snapdragon-node][] + * @return {Array} Returns the `state.inside` stack for the given type. + * @api public + */ + +utils.removeType = function(state, node) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isObject(state), 'expected state to be an object'); + + var type = node.parent + ? node.parent.type + : node.type.replace(/\.close$/, ''); + + if (state.inside.hasOwnProperty(type)) { + return state.inside[type].pop(); + } +}; + +/** + * Returns true if `node.val` is an empty string, or `node.nodes` does + * not contain any non-empty text nodes. + * + * ```js + * var node = new Node({type: 'text'}); + * utils.isEmpty(node); //=> true + * node.val = 'foo'; + * utils.isEmpty(node); //=> false + * ``` + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {Function} `fn` + * @return {Boolean} + * @api public + */ + +utils.isEmpty = function(node, fn) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + + if (!Array.isArray(node.nodes)) { + if (node.type !== 'text') { + return true; + } + if (typeof fn === 'function') { + return fn(node, node.parent); + } + return !utils.trim(node.val); + } + + for (var i = 0; i < node.nodes.length; i++) { + var child = node.nodes[i]; + if (utils.isOpen(child) || utils.isClose(child)) { + continue; + } + if (!utils.isEmpty(child, fn)) { + return false; + } + } + + return true; +}; + +/** + * Returns true if the `state.inside` stack for the given type exists + * and has one or more nodes on it. + * + * ```js + * var state = { inside: {}}; + * var node = new Node({type: 'brace'}); + * console.log(utils.isInsideType(state, 'brace')); //=> false + * utils.addType(state, node); + * console.log(utils.isInsideType(state, 'brace')); //=> true + * utils.removeType(state, node); + * console.log(utils.isInsideType(state, 'brace')); //=> false + * ``` + * @param {Object} `state` + * @param {String} `type` + * @return {Boolean} + * @api public + */ + +utils.isInsideType = function(state, type) { + assert(isObject(state), 'expected state to be an object'); + assert(isString(type), 'expected type to be a string'); + + if (!state.hasOwnProperty('inside')) { + return false; + } + + if (!state.inside.hasOwnProperty(type)) { + return false; + } + + return state.inside[type].length > 0; +}; + +/** + * Returns true if `node` is either a child or grand-child of the given `type`, + * or `state.inside[type]` is a non-empty array. + * + * ```js + * var state = { inside: {}}; + * var node = new Node({type: 'brace'}); + * var open = new Node({type: 'brace.open'}); + * console.log(utils.isInside(state, open, 'brace')); //=> false + * utils.pushNode(node, open); + * console.log(utils.isInside(state, open, 'brace')); //=> true + * ``` + * @param {Object} `state` Either the `compiler.state` object, if it exists, or a user-supplied state object. + * @param {Object} `node` Instance of [snapdragon-node][] + * @param {String} `type` The `node.type` to check for. + * @return {Boolean} + * @api public + */ + +utils.isInside = function(state, node, type) { + assert(utils.isNode(node), 'expected node to be an instance of Node'); + assert(isObject(state), 'expected state to be an object'); + + if (Array.isArray(type)) { + for (var i = 0; i < type.length; i++) { + if (utils.isInside(state, node, type[i])) { + return true; + } + } + return false; + } + + var parent = node.parent; + if (typeof type === 'string') { + return (parent && parent.type === type) || utils.isInsideType(state, type); + } + + if (typeOf(type) === 'regexp') { + if (parent && parent.type && type.test(parent.type)) { + return true; + } + + var keys = Object.keys(state.inside); + var len = keys.length; + var idx = -1; + while (++idx < len) { + var key = keys[idx]; + var val = state.inside[key]; + + if (Array.isArray(val) && val.length !== 0 && type.test(key)) { + return true; + } + } + } + return false; +}; + +/** + * Get the last `n` element from the given `array`. Used for getting + * a node from `node.nodes.` + * + * @param {Array} `array` + * @param {Number} `n` + * @return {undefined} + * @api public + */ + +utils.last = function(arr, n) { + return arr[arr.length - (n || 1)]; +}; + +/** + * Cast the given `val` to an array. + * + * ```js + * console.log(utils.arrayify('')); + * //=> [] + * console.log(utils.arrayify('foo')); + * //=> ['foo'] + * console.log(utils.arrayify(['foo'])); + * //=> ['foo'] + * ``` + * @param {any} `val` + * @return {Array} + * @api public + */ + +utils.arrayify = function(val) { + if (typeof val === 'string' && val !== '') { + return [val]; + } + if (!Array.isArray(val)) { + return []; + } + return val; +}; + +/** + * Convert the given `val` to a string by joining with `,`. Useful + * for creating a cheerio/CSS/DOM-style selector from a list of strings. + * + * @param {any} `val` + * @return {Array} + * @api public + */ + +utils.stringify = function(val) { + return utils.arrayify(val).join(','); +}; + +/** + * Ensure that the given value is a string and call `.trim()` on it, + * or return an empty string. + * + * @param {String} `str` + * @return {String} + * @api public + */ + +utils.trim = function(str) { + return typeof str === 'string' ? str.trim() : ''; +}; + +/** + * Return true if val is an object + */ + +function isObject(val) { + return typeOf(val) === 'object'; +} + +/** + * Return true if val is a string + */ + +function isString(val) { + return typeof val === 'string'; +} + +/** + * Return true if val is a function + */ + +function isFunction(val) { + return typeof val === 'function'; +} + +/** + * Return true if val is an array + */ + +function isArray(val) { + return Array.isArray(val); +} + +/** + * Shim to ensure the `.append` methods work with any version of snapdragon + */ + +function append(compiler, val, node) { + if (typeof compiler.append !== 'function') { + return compiler.emit(val, node); + } + return compiler.append(val, node); +} + +/** + * Simplified assertion. Throws an error is `val` is falsey. + */ + +function assert(val, message) { + if (!val) throw new Error(message); +} + + +/***/ }), +/* 357 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var extend = __webpack_require__(340); +var Snapdragon = __webpack_require__(358); +var compilers = __webpack_require__(342); +var parsers = __webpack_require__(353); +var utils = __webpack_require__(343); + +/** + * Customize Snapdragon parser and renderer + */ + +function Braces(options) { + this.options = extend({}, options); +} + +/** + * Initialize braces + */ + +Braces.prototype.init = function(options) { + if (this.isInitialized) return; + this.isInitialized = true; + var opts = utils.createOptions({}, this.options, options); + this.snapdragon = this.options.snapdragon || new Snapdragon(opts); + this.compiler = this.snapdragon.compiler; + this.parser = this.snapdragon.parser; + + compilers(this.snapdragon, opts); + parsers(this.snapdragon, opts); + + /** + * Call Snapdragon `.parse` method. When AST is returned, we check to + * see if any unclosed braces are left on the stack and, if so, we iterate + * over the stack and correct the AST so that compilers are called in the correct + * order and unbalance braces are properly escaped. + */ + + utils.define(this.snapdragon, 'parse', function(pattern, options) { + var parsed = Snapdragon.prototype.parse.apply(this, arguments); + this.parser.ast.input = pattern; + + var stack = this.parser.stack; + while (stack.length) { + addParent({type: 'brace.close', val: ''}, stack.pop()); + } + + function addParent(node, parent) { + utils.define(node, 'parent', parent); + parent.nodes.push(node); + } + + // add non-enumerable parser reference + utils.define(parsed, 'parser', this.parser); + return parsed; + }); +}; + +/** + * Decorate `.parse` method + */ + +Braces.prototype.parse = function(ast, options) { + if (ast && typeof ast === 'object' && ast.nodes) return ast; + this.init(options); + return this.snapdragon.parse(ast, options); +}; + +/** + * Decorate `.compile` method + */ + +Braces.prototype.compile = function(ast, options) { + if (typeof ast === 'string') { + ast = this.parse(ast, options); + } else { + this.init(options); + } + return this.snapdragon.compile(ast, options); +}; + +/** + * Expand + */ + +Braces.prototype.expand = function(pattern) { + var ast = this.parse(pattern, {expand: true}); + return this.compile(ast, {expand: true}); +}; + +/** + * Optimize + */ + +Braces.prototype.optimize = function(pattern) { + var ast = this.parse(pattern, {optimize: true}); + return this.compile(ast, {optimize: true}); +}; + +/** + * Expose `Braces` + */ + +module.exports = Braces; + + +/***/ }), +/* 358 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var Base = __webpack_require__(359); +var define = __webpack_require__(383); +var Compiler = __webpack_require__(391); +var Parser = __webpack_require__(412); +var utils = __webpack_require__(396); +var regexCache = {}; +var cache = {}; + +/** + * Create a new instance of `Snapdragon` with the given `options`. + * + * ```js + * var snapdragon = new Snapdragon(); + * ``` + * + * @param {Object} `options` + * @api public + */ + +function Snapdragon(options) { + Base.call(this, null, options); + this.options = utils.extend({source: 'string'}, this.options); + this.compiler = new Compiler(this.options); + this.parser = new Parser(this.options); + + Object.defineProperty(this, 'compilers', { + get: function() { + return this.compiler.compilers; + } + }); + + Object.defineProperty(this, 'parsers', { + get: function() { + return this.parser.parsers; + } + }); + + Object.defineProperty(this, 'regex', { + get: function() { + return this.parser.regex; + } + }); +} + +/** + * Inherit Base + */ + +Base.extend(Snapdragon); + +/** + * Add a parser to `snapdragon.parsers` for capturing the given `type` using + * the specified regex or parser function. A function is useful if you need + * to customize how the token is created and/or have access to the parser + * instance to check options, etc. + * + * ```js + * snapdragon + * .capture('slash', /^\//) + * .capture('dot', function() { + * var pos = this.position(); + * var m = this.match(/^\./); + * if (!m) return; + * return pos({ + * type: 'dot', + * val: m[0] + * }); + * }); + * ``` + * @param {String} `type` + * @param {RegExp|Function} `regex` + * @return {Object} Returns the parser instance for chaining + * @api public + */ + +Snapdragon.prototype.capture = function() { + return this.parser.capture.apply(this.parser, arguments); +}; + +/** + * Register a plugin `fn`. + * + * ```js + * var snapdragon = new Snapdgragon([options]); + * snapdragon.use(function() { + * console.log(this); //<= snapdragon instance + * console.log(this.parser); //<= parser instance + * console.log(this.compiler); //<= compiler instance + * }); + * ``` + * @param {Object} `fn` + * @api public + */ + +Snapdragon.prototype.use = function(fn) { + fn.call(this, this); + return this; +}; + +/** + * Parse the given `str`. + * + * ```js + * var snapdragon = new Snapdgragon([options]); + * // register parsers + * snapdragon.parser.use(function() {}); + * + * // parse + * var ast = snapdragon.parse('foo/bar'); + * console.log(ast); + * ``` + * @param {String} `str` + * @param {Object} `options` Set `options.sourcemap` to true to enable source maps. + * @return {Object} Returns an AST. + * @api public + */ + +Snapdragon.prototype.parse = function(str, options) { + this.options = utils.extend({}, this.options, options); + var parsed = this.parser.parse(str, this.options); + + // add non-enumerable parser reference + define(parsed, 'parser', this.parser); + return parsed; +}; + +/** + * Compile the given `AST`. + * + * ```js + * var snapdragon = new Snapdgragon([options]); + * // register plugins + * snapdragon.use(function() {}); + * // register parser plugins + * snapdragon.parser.use(function() {}); + * // register compiler plugins + * snapdragon.compiler.use(function() {}); + * + * // parse + * var ast = snapdragon.parse('foo/bar'); + * + * // compile + * var res = snapdragon.compile(ast); + * console.log(res.output); + * ``` + * @param {Object} `ast` + * @param {Object} `options` + * @return {Object} Returns an object with an `output` property with the rendered string. + * @api public + */ + +Snapdragon.prototype.compile = function(ast, options) { + this.options = utils.extend({}, this.options, options); + var compiled = this.compiler.compile(ast, this.options); + + // add non-enumerable compiler reference + define(compiled, 'compiler', this.compiler); + return compiled; +}; + +/** + * Expose `Snapdragon` + */ + +module.exports = Snapdragon; + +/** + * Expose `Parser` and `Compiler` + */ + +module.exports.Compiler = Compiler; +module.exports.Parser = Parser; + + +/***/ }), +/* 359 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var util = __webpack_require__(18); +var define = __webpack_require__(355); +var CacheBase = __webpack_require__(360); +var Emitter = __webpack_require__(361); +var isObject = __webpack_require__(329); +var merge = __webpack_require__(379); +var pascal = __webpack_require__(381); +var cu = __webpack_require__(382); + +/** + * Optionally define a custom `cache` namespace to use. + */ + +function namespace(name) { + var Cache = name ? CacheBase.namespace(name) : CacheBase; + var fns = []; + + /** + * Create an instance of `Base` with the given `config` and `options`. + * + * ```js + * // initialize with `config` and `options` + * var app = new Base({isApp: true}, {abc: true}); + * app.set('foo', 'bar'); + * + * // values defined with the given `config` object will be on the root of the instance + * console.log(app.baz); //=> undefined + * console.log(app.foo); //=> 'bar' + * // or use `.get` + * console.log(app.get('isApp')); //=> true + * console.log(app.get('foo')); //=> 'bar' + * + * // values defined with the given `options` object will be on `app.options + * console.log(app.options.abc); //=> true + * ``` + * + * @param {Object} `config` If supplied, this object is passed to [cache-base][] to merge onto the the instance upon instantiation. + * @param {Object} `options` If supplied, this object is used to initialize the `base.options` object. + * @api public + */ + + function Base(config, options) { + if (!(this instanceof Base)) { + return new Base(config, options); + } + Cache.call(this, config); + this.is('base'); + this.initBase(config, options); + } + + /** + * Inherit cache-base + */ + + util.inherits(Base, Cache); + + /** + * Add static emitter methods + */ + + Emitter(Base); + + /** + * Initialize `Base` defaults with the given `config` object + */ + + Base.prototype.initBase = function(config, options) { + this.options = merge({}, this.options, options); + this.cache = this.cache || {}; + this.define('registered', {}); + if (name) this[name] = {}; + + // make `app._callbacks` non-enumerable + this.define('_callbacks', this._callbacks); + if (isObject(config)) { + this.visit('set', config); + } + Base.run(this, 'use', fns); + }; + + /** + * Set the given `name` on `app._name` and `app.is*` properties. Used for doing + * lookups in plugins. + * + * ```js + * app.is('foo'); + * console.log(app._name); + * //=> 'foo' + * console.log(app.isFoo); + * //=> true + * app.is('bar'); + * console.log(app.isFoo); + * //=> true + * console.log(app.isBar); + * //=> true + * console.log(app._name); + * //=> 'bar' + * ``` + * @name .is + * @param {String} `name` + * @return {Boolean} + * @api public + */ + + Base.prototype.is = function(name) { + if (typeof name !== 'string') { + throw new TypeError('expected name to be a string'); + } + this.define('is' + pascal(name), true); + this.define('_name', name); + this.define('_appname', name); + return this; + }; + + /** + * Returns true if a plugin has already been registered on an instance. + * + * Plugin implementors are encouraged to use this first thing in a plugin + * to prevent the plugin from being called more than once on the same + * instance. + * + * ```js + * var base = new Base(); + * base.use(function(app) { + * if (app.isRegistered('myPlugin')) return; + * // do stuff to `app` + * }); + * + * // to also record the plugin as being registered + * base.use(function(app) { + * if (app.isRegistered('myPlugin', true)) return; + * // do stuff to `app` + * }); + * ``` + * @name .isRegistered + * @emits `plugin` Emits the name of the plugin being registered. Useful for unit tests, to ensure plugins are only registered once. + * @param {String} `name` The plugin name. + * @param {Boolean} `register` If the plugin if not already registered, to record it as being registered pass `true` as the second argument. + * @return {Boolean} Returns true if a plugin is already registered. + * @api public + */ + + Base.prototype.isRegistered = function(name, register) { + if (this.registered.hasOwnProperty(name)) { + return true; + } + if (register !== false) { + this.registered[name] = true; + this.emit('plugin', name); + } + return false; + }; + + /** + * Define a plugin function to be called immediately upon init. Plugins are chainable + * and expose the following arguments to the plugin function: + * + * - `app`: the current instance of `Base` + * - `base`: the [first ancestor instance](#base) of `Base` + * + * ```js + * var app = new Base() + * .use(foo) + * .use(bar) + * .use(baz) + * ``` + * @name .use + * @param {Function} `fn` plugin function to call + * @return {Object} Returns the item instance for chaining. + * @api public + */ + + Base.prototype.use = function(fn) { + fn.call(this, this); + return this; + }; + + /** + * The `.define` method is used for adding non-enumerable property on the instance. + * Dot-notation is **not supported** with `define`. + * + * ```js + * // arbitrary `render` function using lodash `template` + * app.define('render', function(str, locals) { + * return _.template(str)(locals); + * }); + * ``` + * @name .define + * @param {String} `key` The name of the property to define. + * @param {any} `value` + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Base.prototype.define = function(key, val) { + if (isObject(key)) { + return this.visit('define', key); + } + define(this, key, val); + return this; + }; + + /** + * Mix property `key` onto the Base prototype. If base is inherited using + * `Base.extend` this method will be overridden by a new `mixin` method that will + * only add properties to the prototype of the inheriting application. + * + * ```js + * app.mixin('foo', function() { + * // do stuff + * }); + * ``` + * @name .mixin + * @param {String} `key` + * @param {Object|Array} `val` + * @return {Object} Returns the `base` instance for chaining. + * @api public + */ + + Base.prototype.mixin = function(key, val) { + Base.prototype[key] = val; + return this; + }; + + /** + * Non-enumberable mixin array, used by the static [Base.mixin]() method. + */ + + Base.prototype.mixins = Base.prototype.mixins || []; + + /** + * Getter/setter used when creating nested instances of `Base`, for storing a reference + * to the first ancestor instance. This works by setting an instance of `Base` on the `parent` + * property of a "child" instance. The `base` property defaults to the current instance if + * no `parent` property is defined. + * + * ```js + * // create an instance of `Base`, this is our first ("base") instance + * var first = new Base(); + * first.foo = 'bar'; // arbitrary property, to make it easier to see what's happening later + * + * // create another instance + * var second = new Base(); + * // create a reference to the first instance (`first`) + * second.parent = first; + * + * // create another instance + * var third = new Base(); + * // create a reference to the previous instance (`second`) + * // repeat this pattern every time a "child" instance is created + * third.parent = second; + * + * // we can always access the first instance using the `base` property + * console.log(first.base.foo); + * //=> 'bar' + * console.log(second.base.foo); + * //=> 'bar' + * console.log(third.base.foo); + * //=> 'bar' + * // and now you know how to get to third base ;) + * ``` + * @name .base + * @api public + */ + + Object.defineProperty(Base.prototype, 'base', { + configurable: true, + get: function() { + return this.parent ? this.parent.base : this; + } + }); + + /** + * Static method for adding global plugin functions that will + * be added to an instance when created. + * + * ```js + * Base.use(function(app) { + * app.foo = 'bar'; + * }); + * var app = new Base(); + * console.log(app.foo); + * //=> 'bar' + * ``` + * @name #use + * @param {Function} `fn` Plugin function to use on each instance. + * @return {Object} Returns the `Base` constructor for chaining + * @api public + */ + + define(Base, 'use', function(fn) { + fns.push(fn); + return Base; + }); + + /** + * Run an array of functions by passing each function + * to a method on the given object specified by the given property. + * + * @param {Object} `obj` Object containing method to use. + * @param {String} `prop` Name of the method on the object to use. + * @param {Array} `arr` Array of functions to pass to the method. + */ + + define(Base, 'run', function(obj, prop, arr) { + var len = arr.length, i = 0; + while (len--) { + obj[prop](arr[i++]); + } + return Base; + }); + + /** + * Static method for inheriting the prototype and static methods of the `Base` class. + * This method greatly simplifies the process of creating inheritance-based applications. + * See [static-extend][] for more details. + * + * ```js + * var extend = cu.extend(Parent); + * Parent.extend(Child); + * + * // optional methods + * Parent.extend(Child, { + * foo: function() {}, + * bar: function() {} + * }); + * ``` + * @name #extend + * @param {Function} `Ctor` constructor to extend + * @param {Object} `methods` Optional prototype properties to mix in. + * @return {Object} Returns the `Base` constructor for chaining + * @api public + */ + + define(Base, 'extend', cu.extend(Base, function(Ctor, Parent) { + Ctor.prototype.mixins = Ctor.prototype.mixins || []; + + define(Ctor, 'mixin', function(fn) { + var mixin = fn(Ctor.prototype, Ctor); + if (typeof mixin === 'function') { + Ctor.prototype.mixins.push(mixin); + } + return Ctor; + }); + + define(Ctor, 'mixins', function(Child) { + Base.run(Child, 'mixin', Ctor.prototype.mixins); + return Ctor; + }); + + Ctor.prototype.mixin = function(key, value) { + Ctor.prototype[key] = value; + return this; + }; + return Base; + })); + + /** + * Used for adding methods to the `Base` prototype, and/or to the prototype of child instances. + * When a mixin function returns a function, the returned function is pushed onto the `.mixins` + * array, making it available to be used on inheriting classes whenever `Base.mixins()` is + * called (e.g. `Base.mixins(Child)`). + * + * ```js + * Base.mixin(function(proto) { + * proto.foo = function(msg) { + * return 'foo ' + msg; + * }; + * }); + * ``` + * @name #mixin + * @param {Function} `fn` Function to call + * @return {Object} Returns the `Base` constructor for chaining + * @api public + */ + + define(Base, 'mixin', function(fn) { + var mixin = fn(Base.prototype, Base); + if (typeof mixin === 'function') { + Base.prototype.mixins.push(mixin); + } + return Base; + }); + + /** + * Static method for running global mixin functions against a child constructor. + * Mixins must be registered before calling this method. + * + * ```js + * Base.extend(Child); + * Base.mixins(Child); + * ``` + * @name #mixins + * @param {Function} `Child` Constructor function of a child class + * @return {Object} Returns the `Base` constructor for chaining + * @api public + */ + + define(Base, 'mixins', function(Child) { + Base.run(Child, 'mixin', Base.prototype.mixins); + return Base; + }); + + /** + * Similar to `util.inherit`, but copies all static properties, prototype properties, and + * getters/setters from `Provider` to `Receiver`. See [class-utils][]{#inherit} for more details. + * + * ```js + * Base.inherit(Foo, Bar); + * ``` + * @name #inherit + * @param {Function} `Receiver` Receiving (child) constructor + * @param {Function} `Provider` Providing (parent) constructor + * @return {Object} Returns the `Base` constructor for chaining + * @api public + */ + + define(Base, 'inherit', cu.inherit); + define(Base, 'bubble', cu.bubble); + return Base; +} + +/** + * Expose `Base` with default settings + */ + +module.exports = namespace(); + +/** + * Allow users to define a namespace + */ + +module.exports.namespace = namespace; + + +/***/ }), +/* 360 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isObject = __webpack_require__(329); +var Emitter = __webpack_require__(361); +var visit = __webpack_require__(362); +var toPath = __webpack_require__(365); +var union = __webpack_require__(366); +var del = __webpack_require__(370); +var get = __webpack_require__(368); +var has = __webpack_require__(375); +var set = __webpack_require__(378); + +/** + * Create a `Cache` constructor that when instantiated will + * store values on the given `prop`. + * + * ```js + * var Cache = require('cache-base').namespace('data'); + * var cache = new Cache(); + * + * cache.set('foo', 'bar'); + * //=> {data: {foo: 'bar'}} + * ``` + * @param {String} `prop` The property name to use for storing values. + * @return {Function} Returns a custom `Cache` constructor + * @api public + */ + +function namespace(prop) { + + /** + * Create a new `Cache`. Internally the `Cache` constructor is created using + * the `namespace` function, with `cache` defined as the storage object. + * + * ```js + * var app = new Cache(); + * ``` + * @param {Object} `cache` Optionally pass an object to initialize with. + * @constructor + * @api public + */ + + function Cache(cache) { + if (prop) { + this[prop] = {}; + } + if (cache) { + this.set(cache); + } + } + + /** + * Inherit Emitter + */ + + Emitter(Cache.prototype); + + /** + * Assign `value` to `key`. Also emits `set` with + * the key and value. + * + * ```js + * app.on('set', function(key, val) { + * // do something when `set` is emitted + * }); + * + * app.set(key, value); + * + * // also takes an object or array + * app.set({name: 'Halle'}); + * app.set([{foo: 'bar'}, {baz: 'quux'}]); + * console.log(app); + * //=> {name: 'Halle', foo: 'bar', baz: 'quux'} + * ``` + * + * @name .set + * @emits `set` with `key` and `value` as arguments. + * @param {String} `key` + * @param {any} `value` + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.set = function(key, val) { + if (Array.isArray(key) && arguments.length === 2) { + key = toPath(key); + } + if (isObject(key) || Array.isArray(key)) { + this.visit('set', key); + } else { + set(prop ? this[prop] : this, key, val); + this.emit('set', key, val); + } + return this; + }; + + /** + * Union `array` to `key`. Also emits `set` with + * the key and value. + * + * ```js + * app.union('a.b', ['foo']); + * app.union('a.b', ['bar']); + * console.log(app.get('a')); + * //=> {b: ['foo', 'bar']} + * ``` + * @name .union + * @param {String} `key` + * @param {any} `value` + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.union = function(key, val) { + if (Array.isArray(key) && arguments.length === 2) { + key = toPath(key); + } + var ctx = prop ? this[prop] : this; + union(ctx, key, arrayify(val)); + this.emit('union', val); + return this; + }; + + /** + * Return the value of `key`. Dot notation may be used + * to get [nested property values][get-value]. + * + * ```js + * app.set('a.b.c', 'd'); + * app.get('a.b'); + * //=> {c: 'd'} + * + * app.get(['a', 'b']); + * //=> {c: 'd'} + * ``` + * + * @name .get + * @emits `get` with `key` and `value` as arguments. + * @param {String} `key` The name of the property to get. Dot-notation may be used. + * @return {any} Returns the value of `key` + * @api public + */ + + Cache.prototype.get = function(key) { + key = toPath(arguments); + + var ctx = prop ? this[prop] : this; + var val = get(ctx, key); + + this.emit('get', key, val); + return val; + }; + + /** + * Return true if app has a stored value for `key`, + * false only if value is `undefined`. + * + * ```js + * app.set('foo', 'bar'); + * app.has('foo'); + * //=> true + * ``` + * + * @name .has + * @emits `has` with `key` and true or false as arguments. + * @param {String} `key` + * @return {Boolean} + * @api public + */ + + Cache.prototype.has = function(key) { + key = toPath(arguments); + + var ctx = prop ? this[prop] : this; + var val = get(ctx, key); + + var has = typeof val !== 'undefined'; + this.emit('has', key, has); + return has; + }; + + /** + * Delete one or more properties from the instance. + * + * ```js + * app.del(); // delete all + * // or + * app.del('foo'); + * // or + * app.del(['foo', 'bar']); + * ``` + * @name .del + * @emits `del` with the `key` as the only argument. + * @param {String|Array} `key` Property name or array of property names. + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.del = function(key) { + if (Array.isArray(key)) { + this.visit('del', key); + } else { + del(prop ? this[prop] : this, key); + this.emit('del', key); + } + return this; + }; + + /** + * Reset the entire cache to an empty object. + * + * ```js + * app.clear(); + * ``` + * @api public + */ + + Cache.prototype.clear = function() { + if (prop) { + this[prop] = {}; + } + }; + + /** + * Visit `method` over the properties in the given object, or map + * visit over the object-elements in an array. + * + * @name .visit + * @param {String} `method` The name of the `base` method to call. + * @param {Object|Array} `val` The object or array to iterate over. + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.visit = function(method, val) { + visit(this, method, val); + return this; + }; + + return Cache; +} + +/** + * Cast val to an array + */ + +function arrayify(val) { + return val ? (Array.isArray(val) ? val : [val]) : []; +} + +/** + * Expose `Cache` + */ + +module.exports = namespace(); + +/** + * Expose `Cache.namespace` + */ + +module.exports.namespace = namespace; + + +/***/ }), +/* 361 */ +/***/ (function(module, exports, __webpack_require__) { + + +/** + * Expose `Emitter`. + */ + +if (true) { + module.exports = Emitter; +} + +/** + * Initialize a new `Emitter`. + * + * @api public + */ + +function Emitter(obj) { + if (obj) return mixin(obj); +}; + +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; +} + +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.on = +Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []) + .push(fn); + return this; +}; + +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.once = function(event, fn){ + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; + +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.off = +Emitter.prototype.removeListener = +Emitter.prototype.removeAllListeners = +Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + return this; +}; + +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + +Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks['$' + event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; + +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + +Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; + +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + +Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; +}; + + +/***/ }), +/* 362 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * collection-visit + * + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var visit = __webpack_require__(363); +var mapVisit = __webpack_require__(364); + +module.exports = function(collection, method, val) { + var result; + + if (typeof val === 'string' && (method in collection)) { + var args = [].slice.call(arguments, 2); + result = collection[method].apply(collection, args); + } else if (Array.isArray(val)) { + result = mapVisit.apply(null, arguments); + } else { + result = visit.apply(null, arguments); + } + + if (typeof result !== 'undefined') { + return result; + } + + return collection; +}; + + +/***/ }), +/* 363 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * object-visit + * + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var isObject = __webpack_require__(329); + +module.exports = function visit(thisArg, method, target, val) { + if (!isObject(thisArg) && typeof thisArg !== 'function') { + throw new Error('object-visit expects `thisArg` to be an object.'); + } + + if (typeof method !== 'string') { + throw new Error('object-visit expects `method` name to be a string'); + } + + if (typeof thisArg[method] !== 'function') { + return thisArg; + } + + var args = [].slice.call(arguments, 3); + target = target || {}; + + for (var key in target) { + var arr = [key, target[key]].concat(args); + thisArg[method].apply(thisArg, arr); + } + return thisArg; +}; + + +/***/ }), +/* 364 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var util = __webpack_require__(18); +var visit = __webpack_require__(363); + +/** + * Map `visit` over an array of objects. + * + * @param {Object} `collection` The context in which to invoke `method` + * @param {String} `method` Name of the method to call on `collection` + * @param {Object} `arr` Array of objects. + */ + +module.exports = function mapVisit(collection, method, val) { + if (isObject(val)) { + return visit.apply(null, arguments); + } + + if (!Array.isArray(val)) { + throw new TypeError('expected an array: ' + util.inspect(val)); + } + + var args = [].slice.call(arguments, 3); + + for (var i = 0; i < val.length; i++) { + var ele = val[i]; + if (isObject(ele)) { + visit.apply(null, [collection, method, ele].concat(args)); + } else { + collection[method].apply(collection, [ele].concat(args)); + } + } +}; + +function isObject(val) { + return val && (typeof val === 'function' || (!Array.isArray(val) && typeof val === 'object')); +} + + +/***/ }), +/* 365 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * to-object-path + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var typeOf = __webpack_require__(348); + +module.exports = function toPath(args) { + if (typeOf(args) !== 'arguments') { + args = arguments; + } + return filter(args).join('.'); +}; + +function filter(arr) { + var len = arr.length; + var idx = -1; + var res = []; + + while (++idx < len) { + var ele = arr[idx]; + if (typeOf(ele) === 'arguments' || Array.isArray(ele)) { + res.push.apply(res, filter(ele)); + } else if (typeof ele === 'string') { + res.push(ele); + } + } + return res; +} + + +/***/ }), +/* 366 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isObject = __webpack_require__(341); +var union = __webpack_require__(367); +var get = __webpack_require__(368); +var set = __webpack_require__(369); + +module.exports = function unionValue(obj, prop, value) { + if (!isObject(obj)) { + throw new TypeError('union-value expects the first argument to be an object.'); + } + + if (typeof prop !== 'string') { + throw new TypeError('union-value expects `prop` to be a string.'); + } + + var arr = arrayify(get(obj, prop)); + set(obj, prop, union(arr, arrayify(value))); + return obj; +}; + +function arrayify(val) { + if (val === null || typeof val === 'undefined') { + return []; + } + if (Array.isArray(val)) { + return val; + } + return [val]; +} + + +/***/ }), +/* 367 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = function union(init) { + if (!Array.isArray(init)) { + throw new TypeError('arr-union expects the first argument to be an array.'); + } + + var len = arguments.length; + var i = 0; + + while (++i < len) { + var arg = arguments[i]; + if (!arg) continue; + + if (!Array.isArray(arg)) { + arg = [arg]; + } + + for (var j = 0; j < arg.length; j++) { + var ele = arg[j]; + + if (init.indexOf(ele) >= 0) { + continue; + } + init.push(ele); + } + } + return init; +}; + + +/***/ }), +/* 368 */ +/***/ (function(module, exports) { + +/*! + * get-value + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function(obj, prop, a, b, c) { + if (!isObject(obj) || !prop) { + return obj; + } + + prop = toString(prop); + + // allowing for multiple properties to be passed as + // a string or array, but much faster (3-4x) than doing + // `[].slice.call(arguments)` + if (a) prop += '.' + toString(a); + if (b) prop += '.' + toString(b); + if (c) prop += '.' + toString(c); + + if (prop in obj) { + return obj[prop]; + } + + var segs = prop.split('.'); + var len = segs.length; + var i = -1; + + while (obj && (++i < len)) { + var key = segs[i]; + while (key[key.length - 1] === '\\') { + key = key.slice(0, -1) + '.' + segs[++i]; + } + obj = obj[key]; + } + return obj; +}; + +function isObject(val) { + return val !== null && (typeof val === 'object' || typeof val === 'function'); +} + +function toString(val) { + if (!val) return ''; + if (Array.isArray(val)) { + return val.join('.'); + } + return val; +} + + +/***/ }), +/* 369 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * set-value + * + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var toPath = __webpack_require__(365); +var extend = __webpack_require__(340); +var isPlainObject = __webpack_require__(336); +var isObject = __webpack_require__(341); + +module.exports = function(obj, path, val) { + if (!isObject(obj)) { + return obj; + } + + if (Array.isArray(path)) { + path = toPath(path); + } + + if (typeof path !== 'string') { + return obj; + } + + var segs = path.split('.'); + var len = segs.length, i = -1; + var res = obj; + var last; + + while (++i < len) { + var key = segs[i]; + + while (key[key.length - 1] === '\\') { + key = key.slice(0, -1) + '.' + segs[++i]; + } + + if (i === len - 1) { + last = key; + break; + } + + if (!isObject(obj[key])) { + obj[key] = {}; + } + obj = obj[key]; + } + + if (obj.hasOwnProperty(last) && isObject(obj[last])) { + if (isPlainObject(val)) { + extend(obj[last], val); + } else { + obj[last] = val; + } + + } else { + obj[last] = val; + } + return res; +}; + + + +/***/ }), +/* 370 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * unset-value + * + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var isObject = __webpack_require__(329); +var has = __webpack_require__(371); + +module.exports = function unset(obj, prop) { + if (!isObject(obj)) { + throw new TypeError('expected an object.'); + } + if (obj.hasOwnProperty(prop)) { + delete obj[prop]; + return true; + } + + if (has(obj, prop)) { + var segs = prop.split('.'); + var last = segs.pop(); + while (segs.length && segs[segs.length - 1].slice(-1) === '\\') { + last = segs.pop().slice(0, -1) + '.' + last; + } + while (segs.length) obj = obj[prop = segs.shift()]; + return (delete obj[last]); + } + return true; +}; + + +/***/ }), +/* 371 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * has-value + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var isObject = __webpack_require__(372); +var hasValues = __webpack_require__(374); +var get = __webpack_require__(368); + +module.exports = function(obj, prop, noZero) { + if (isObject(obj)) { + return hasValues(get(obj, prop), noZero); + } + return hasValues(obj, prop); +}; + + +/***/ }), +/* 372 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * isobject + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var isArray = __webpack_require__(373); + +module.exports = function isObject(val) { + return val != null && typeof val === 'object' && isArray(val) === false; +}; + + +/***/ }), +/* 373 */ +/***/ (function(module, exports) { + +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + + +/***/ }), +/* 374 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * has-values + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +module.exports = function hasValue(o, noZero) { + if (o === null || o === undefined) { + return false; + } + + if (typeof o === 'boolean') { + return true; + } + + if (typeof o === 'number') { + if (o === 0 && noZero === true) { + return false; + } + return true; + } + + if (o.length !== undefined) { + return o.length !== 0; + } + + for (var key in o) { + if (o.hasOwnProperty(key)) { + return true; + } + } + return false; +}; + + +/***/ }), +/* 375 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * has-value + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var isObject = __webpack_require__(329); +var hasValues = __webpack_require__(376); +var get = __webpack_require__(368); + +module.exports = function(val, prop) { + return hasValues(isObject(val) && prop ? get(val, prop) : val); +}; + + +/***/ }), +/* 376 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * has-values + * + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var typeOf = __webpack_require__(377); +var isNumber = __webpack_require__(347); + +module.exports = function hasValue(val) { + // is-number checks for NaN and other edge cases + if (isNumber(val)) { + return true; + } + + switch (typeOf(val)) { + case 'null': + case 'boolean': + case 'function': + return true; + case 'string': + case 'arguments': + return val.length !== 0; + case 'error': + return val.message !== ''; + case 'array': + var len = val.length; + if (len === 0) { + return false; + } + for (var i = 0; i < len; i++) { + if (hasValue(val[i])) { + return true; + } + } + return false; + case 'file': + case 'map': + case 'set': + return val.size !== 0; + case 'object': + var keys = Object.keys(val); + if (keys.length === 0) { + return false; + } + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (hasValue(val[key])) { + return true; + } + } + return false; + default: { + return false; + } + } +}; + + +/***/ }), +/* 377 */ +/***/ (function(module, exports, __webpack_require__) { + +var isBuffer = __webpack_require__(349); +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + // primitivies + if (typeof val === 'undefined') { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (typeof val === 'string' || val instanceof String) { + return 'string'; + } + if (typeof val === 'number' || val instanceof Number) { + return 'number'; + } + + // functions + if (typeof val === 'function' || val instanceof Function) { + return 'function'; + } + + // array + if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { + return 'array'; + } + + // check for instances of RegExp and Date before calling `toString` + if (val instanceof RegExp) { + return 'regexp'; + } + if (val instanceof Date) { + return 'date'; + } + + // other objects + var type = toString.call(val); + + if (type === '[object RegExp]') { + return 'regexp'; + } + if (type === '[object Date]') { + return 'date'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (type === '[object Error]') { + return 'error'; + } + if (type === '[object Promise]') { + return 'promise'; + } + + // buffer + if (isBuffer(val)) { + return 'buffer'; + } + + // es6: Map, WeakMap, Set, WeakSet + if (type === '[object Set]') { + return 'set'; + } + if (type === '[object WeakSet]') { + return 'weakset'; + } + if (type === '[object Map]') { + return 'map'; + } + if (type === '[object WeakMap]') { + return 'weakmap'; + } + if (type === '[object Symbol]') { + return 'symbol'; + } + + // typed arrays + if (type === '[object Int8Array]') { + return 'int8array'; + } + if (type === '[object Uint8Array]') { + return 'uint8array'; + } + if (type === '[object Uint8ClampedArray]') { + return 'uint8clampedarray'; + } + if (type === '[object Int16Array]') { + return 'int16array'; + } + if (type === '[object Uint16Array]') { + return 'uint16array'; + } + if (type === '[object Int32Array]') { + return 'int32array'; + } + if (type === '[object Uint32Array]') { + return 'uint32array'; + } + if (type === '[object Float32Array]') { + return 'float32array'; + } + if (type === '[object Float64Array]') { + return 'float64array'; + } + + // must be a plain object + return 'object'; +}; + + +/***/ }), +/* 378 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * set-value + * + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var split = __webpack_require__(344); +var extend = __webpack_require__(340); +var isPlainObject = __webpack_require__(336); +var isObject = __webpack_require__(341); + +module.exports = function(obj, prop, val) { + if (!isObject(obj)) { + return obj; + } + + if (Array.isArray(prop)) { + prop = [].concat.apply([], prop).join('.'); + } + + if (typeof prop !== 'string') { + return obj; + } + + var keys = split(prop, {sep: '.', brackets: true}); + var len = keys.length; + var idx = -1; + var current = obj; + + while (++idx < len) { + var key = keys[idx]; + if (idx !== len - 1) { + if (!isObject(current[key])) { + current[key] = {}; + } + current = current[key]; + continue; + } + + if (isPlainObject(current[key]) && isPlainObject(val)) { + current[key] = extend({}, current[key], val); + } else { + current[key] = val; + } + } + + return obj; +}; + + +/***/ }), +/* 379 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var isExtendable = __webpack_require__(335); +var forIn = __webpack_require__(380); + +function mixinDeep(target, objects) { + var len = arguments.length, i = 0; + while (++i < len) { + var obj = arguments[i]; + if (isObject(obj)) { + forIn(obj, copy, target); + } + } + return target; +} + +/** + * Copy properties from the source object to the + * target object. + * + * @param {*} `val` + * @param {String} `key` + */ + +function copy(val, key) { + if (key === '__proto__') { + return; + } + + var obj = this[key]; + if (isObject(val) && isObject(obj)) { + mixinDeep(obj, val); + } else { + this[key] = val; + } +} + +/** + * Returns true if `val` is an object or function. + * + * @param {any} val + * @return {Boolean} + */ + +function isObject(val) { + return isExtendable(val) && !Array.isArray(val); +} + +/** + * Expose `mixinDeep` + */ + +module.exports = mixinDeep; + + +/***/ }), +/* 380 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * for-in + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +module.exports = function forIn(obj, fn, thisArg) { + for (var key in obj) { + if (fn.call(thisArg, obj[key], key, obj) === false) { + break; + } + } +}; + + +/***/ }), +/* 381 */ +/***/ (function(module, exports) { + +/*! + * pascalcase + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +function pascalcase(str) { + if (typeof str !== 'string') { + throw new TypeError('expected a string.'); + } + str = str.replace(/([A-Z])/g, ' $1'); + if (str.length === 1) { return str.toUpperCase(); } + str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); + str = str.charAt(0).toUpperCase() + str.slice(1); + return str.replace(/[\W_]+(\w|$)/g, function (_, ch) { + return ch.toUpperCase(); + }); +} + +module.exports = pascalcase; + + +/***/ }), +/* 382 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var util = __webpack_require__(18); +var union = __webpack_require__(367); +var define = __webpack_require__(383); +var staticExtend = __webpack_require__(388); +var isObj = __webpack_require__(329); + +/** + * Expose class utils + */ + +var cu = module.exports; + +/** + * Expose class utils: `cu` + */ + +cu.isObject = function isObject(val) { + return isObj(val) || typeof val === 'function'; +}; + +/** + * Returns true if an array has any of the given elements, or an + * object has any of the give keys. + * + * ```js + * cu.has(['a', 'b', 'c'], 'c'); + * //=> true + * + * cu.has(['a', 'b', 'c'], ['c', 'z']); + * //=> true + * + * cu.has({a: 'b', c: 'd'}, ['c', 'z']); + * //=> true + * ``` + * @param {Object} `obj` + * @param {String|Array} `val` + * @return {Boolean} + * @api public + */ + +cu.has = function has(obj, val) { + val = cu.arrayify(val); + var len = val.length; + + if (cu.isObject(obj)) { + for (var key in obj) { + if (val.indexOf(key) > -1) { + return true; + } + } + + var keys = cu.nativeKeys(obj); + return cu.has(keys, val); + } + + if (Array.isArray(obj)) { + var arr = obj; + while (len--) { + if (arr.indexOf(val[len]) > -1) { + return true; + } + } + return false; + } + + throw new TypeError('expected an array or object.'); +}; + +/** + * Returns true if an array or object has all of the given values. + * + * ```js + * cu.hasAll(['a', 'b', 'c'], 'c'); + * //=> true + * + * cu.hasAll(['a', 'b', 'c'], ['c', 'z']); + * //=> false + * + * cu.hasAll({a: 'b', c: 'd'}, ['c', 'z']); + * //=> false + * ``` + * @param {Object|Array} `val` + * @param {String|Array} `values` + * @return {Boolean} + * @api public + */ + +cu.hasAll = function hasAll(val, values) { + values = cu.arrayify(values); + var len = values.length; + while (len--) { + if (!cu.has(val, values[len])) { + return false; + } + } + return true; +}; + +/** + * Cast the given value to an array. + * + * ```js + * cu.arrayify('foo'); + * //=> ['foo'] + * + * cu.arrayify(['foo']); + * //=> ['foo'] + * ``` + * + * @param {String|Array} `val` + * @return {Array} + * @api public + */ + +cu.arrayify = function arrayify(val) { + return val ? (Array.isArray(val) ? val : [val]) : []; +}; + +/** + * Noop + */ + +cu.noop = function noop() { + return; +}; + +/** + * Returns the first argument passed to the function. + */ + +cu.identity = function identity(val) { + return val; +}; + +/** + * Returns true if a value has a `contructor` + * + * ```js + * cu.hasConstructor({}); + * //=> true + * + * cu.hasConstructor(Object.create(null)); + * //=> false + * ``` + * @param {Object} `value` + * @return {Boolean} + * @api public + */ + +cu.hasConstructor = function hasConstructor(val) { + return cu.isObject(val) && typeof val.constructor !== 'undefined'; +}; + +/** + * Get the native `ownPropertyNames` from the constructor of the + * given `object`. An empty array is returned if the object does + * not have a constructor. + * + * ```js + * cu.nativeKeys({a: 'b', b: 'c', c: 'd'}) + * //=> ['a', 'b', 'c'] + * + * cu.nativeKeys(function(){}) + * //=> ['length', 'caller'] + * ``` + * + * @param {Object} `obj` Object that has a `constructor`. + * @return {Array} Array of keys. + * @api public + */ + +cu.nativeKeys = function nativeKeys(val) { + if (!cu.hasConstructor(val)) return []; + var keys = Object.getOwnPropertyNames(val); + if ('caller' in val) keys.push('caller'); + return keys; +}; + +/** + * Returns property descriptor `key` if it's an "own" property + * of the given object. + * + * ```js + * function App() {} + * Object.defineProperty(App.prototype, 'count', { + * get: function() { + * return Object.keys(this).length; + * } + * }); + * cu.getDescriptor(App.prototype, 'count'); + * // returns: + * // { + * // get: [Function], + * // set: undefined, + * // enumerable: false, + * // configurable: false + * // } + * ``` + * + * @param {Object} `obj` + * @param {String} `key` + * @return {Object} Returns descriptor `key` + * @api public + */ + +cu.getDescriptor = function getDescriptor(obj, key) { + if (!cu.isObject(obj)) { + throw new TypeError('expected an object.'); + } + if (typeof key !== 'string') { + throw new TypeError('expected key to be a string.'); + } + return Object.getOwnPropertyDescriptor(obj, key); +}; + +/** + * Copy a descriptor from one object to another. + * + * ```js + * function App() {} + * Object.defineProperty(App.prototype, 'count', { + * get: function() { + * return Object.keys(this).length; + * } + * }); + * var obj = {}; + * cu.copyDescriptor(obj, App.prototype, 'count'); + * ``` + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String} `name` + * @return {Object} + * @api public + */ + +cu.copyDescriptor = function copyDescriptor(receiver, provider, name) { + if (!cu.isObject(receiver)) { + throw new TypeError('expected receiving object to be an object.'); + } + if (!cu.isObject(provider)) { + throw new TypeError('expected providing object to be an object.'); + } + if (typeof name !== 'string') { + throw new TypeError('expected name to be a string.'); + } + + var val = cu.getDescriptor(provider, name); + if (val) Object.defineProperty(receiver, name, val); +}; + +/** + * Copy static properties, prototype properties, and descriptors + * from one object to another. + * + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String|Array} `omit` One or more properties to omit + * @return {Object} + * @api public + */ + +cu.copy = function copy(receiver, provider, omit) { + if (!cu.isObject(receiver)) { + throw new TypeError('expected receiving object to be an object.'); + } + if (!cu.isObject(provider)) { + throw new TypeError('expected providing object to be an object.'); + } + var props = Object.getOwnPropertyNames(provider); + var keys = Object.keys(provider); + var len = props.length, + key; + omit = cu.arrayify(omit); + + while (len--) { + key = props[len]; + + if (cu.has(keys, key)) { + define(receiver, key, provider[key]); + } else if (!(key in receiver) && !cu.has(omit, key)) { + cu.copyDescriptor(receiver, provider, key); + } + } +}; + +/** + * Inherit the static properties, prototype properties, and descriptors + * from of an object. + * + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String|Array} `omit` One or more properties to omit + * @return {Object} + * @api public + */ + +cu.inherit = function inherit(receiver, provider, omit) { + if (!cu.isObject(receiver)) { + throw new TypeError('expected receiving object to be an object.'); + } + if (!cu.isObject(provider)) { + throw new TypeError('expected providing object to be an object.'); + } + + var keys = []; + for (var key in provider) { + keys.push(key); + receiver[key] = provider[key]; + } + + keys = keys.concat(cu.arrayify(omit)); + + var a = provider.prototype || provider; + var b = receiver.prototype || receiver; + cu.copy(b, a, keys); +}; + +/** + * Returns a function for extending the static properties, + * prototype properties, and descriptors from the `Parent` + * constructor onto `Child` constructors. + * + * ```js + * var extend = cu.extend(Parent); + * Parent.extend(Child); + * + * // optional methods + * Parent.extend(Child, { + * foo: function() {}, + * bar: function() {} + * }); + * ``` + * @param {Function} `Parent` Parent ctor + * @param {Function} `extend` Optional extend function to handle custom extensions. Useful when updating methods that require a specific prototype. + * @param {Function} `Child` Child ctor + * @param {Object} `proto` Optionally pass additional prototype properties to inherit. + * @return {Object} + * @api public + */ + +cu.extend = function() { + // keep it lazy, instead of assigning to `cu.extend` + return staticExtend.apply(null, arguments); +}; + +/** + * Bubble up events emitted from static methods on the Parent ctor. + * + * @param {Object} `Parent` + * @param {Array} `events` Event names to bubble up + * @api public + */ + +cu.bubble = function(Parent, events) { + events = events || []; + Parent.bubble = function(Child, arr) { + if (Array.isArray(arr)) { + events = union([], events, arr); + } + var len = events.length; + var idx = -1; + while (++idx < len) { + var name = events[idx]; + Parent.on(name, Child.emit.bind(Child, name)); + } + cu.bubble(Child, events); + }; +}; + + +/***/ }), +/* 383 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * define-property + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var isDescriptor = __webpack_require__(384); + +module.exports = function defineProperty(obj, prop, val) { + if (typeof obj !== 'object' && typeof obj !== 'function') { + throw new TypeError('expected an object or function.'); + } + + if (typeof prop !== 'string') { + throw new TypeError('expected `prop` to be a string.'); + } + + if (isDescriptor(val) && ('set' in val || 'get' in val)) { + return Object.defineProperty(obj, prop, val); + } + + return Object.defineProperty(obj, prop, { + configurable: true, + enumerable: false, + writable: true, + value: val + }); +}; + + +/***/ }), +/* 384 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-descriptor + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var typeOf = __webpack_require__(385); +var isAccessor = __webpack_require__(386); +var isData = __webpack_require__(387); + +module.exports = function isDescriptor(obj, key) { + if (typeOf(obj) !== 'object') { + return false; + } + if ('get' in obj) { + return isAccessor(obj, key); + } + return isData(obj, key); +}; + + +/***/ }), +/* 385 */ +/***/ (function(module, exports) { + +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + var type = typeof val; + + // primitivies + if (type === 'undefined') { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (type === 'string' || val instanceof String) { + return 'string'; + } + if (type === 'number' || val instanceof Number) { + return 'number'; + } + + // functions + if (type === 'function' || val instanceof Function) { + if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') { + return 'generatorfunction'; + } + return 'function'; + } + + // array + if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { + return 'array'; + } + + // check for instances of RegExp and Date before calling `toString` + if (val instanceof RegExp) { + return 'regexp'; + } + if (val instanceof Date) { + return 'date'; + } + + // other objects + type = toString.call(val); + + if (type === '[object RegExp]') { + return 'regexp'; + } + if (type === '[object Date]') { + return 'date'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (type === '[object Error]') { + return 'error'; + } + if (type === '[object Promise]') { + return 'promise'; + } + + // buffer + if (isBuffer(val)) { + return 'buffer'; + } + + // es6: Map, WeakMap, Set, WeakSet + if (type === '[object Set]') { + return 'set'; + } + if (type === '[object WeakSet]') { + return 'weakset'; + } + if (type === '[object Map]') { + return 'map'; + } + if (type === '[object WeakMap]') { + return 'weakmap'; + } + if (type === '[object Symbol]') { + return 'symbol'; + } + + if (type === '[object Map Iterator]') { + return 'mapiterator'; + } + if (type === '[object Set Iterator]') { + return 'setiterator'; + } + if (type === '[object String Iterator]') { + return 'stringiterator'; + } + if (type === '[object Array Iterator]') { + return 'arrayiterator'; + } + + // typed arrays + if (type === '[object Int8Array]') { + return 'int8array'; + } + if (type === '[object Uint8Array]') { + return 'uint8array'; + } + if (type === '[object Uint8ClampedArray]') { + return 'uint8clampedarray'; + } + if (type === '[object Int16Array]') { + return 'int16array'; + } + if (type === '[object Uint16Array]') { + return 'uint16array'; + } + if (type === '[object Int32Array]') { + return 'int32array'; + } + if (type === '[object Uint32Array]') { + return 'uint32array'; + } + if (type === '[object Float32Array]') { + return 'float32array'; + } + if (type === '[object Float64Array]') { + return 'float64array'; + } + + // must be a plain object + return 'object'; +}; + +/** + * If you need to support Safari 5-7 (8-10 yr-old browser), + * take a look at https://github.com/feross/is-buffer + */ + +function isBuffer(val) { + return val.constructor + && typeof val.constructor.isBuffer === 'function' + && val.constructor.isBuffer(val); +} + + +/***/ }), +/* 386 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-accessor-descriptor + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var typeOf = __webpack_require__(348); + +// accessor descriptor properties +var accessor = { + get: 'function', + set: 'function', + configurable: 'boolean', + enumerable: 'boolean' +}; + +function isAccessorDescriptor(obj, prop) { + if (typeof prop === 'string') { + var val = Object.getOwnPropertyDescriptor(obj, prop); + return typeof val !== 'undefined'; + } + + if (typeOf(obj) !== 'object') { + return false; + } + + if (has(obj, 'value') || has(obj, 'writable')) { + return false; + } + + if (!has(obj, 'get') || typeof obj.get !== 'function') { + return false; + } + + // tldr: it's valid to have "set" be undefined + // "set" might be undefined if `Object.getOwnPropertyDescriptor` + // was used to get the value, and only `get` was defined by the user + if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { + return false; + } + + for (var key in obj) { + if (!accessor.hasOwnProperty(key)) { + continue; + } + + if (typeOf(obj[key]) === accessor[key]) { + continue; + } + + if (typeof obj[key] !== 'undefined') { + return false; + } + } + return true; +} + +function has(obj, key) { + return {}.hasOwnProperty.call(obj, key); +} + +/** + * Expose `isAccessorDescriptor` + */ + +module.exports = isAccessorDescriptor; + + +/***/ }), +/* 387 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * is-data-descriptor + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var typeOf = __webpack_require__(348); + +// data descriptor properties +var data = { + configurable: 'boolean', + enumerable: 'boolean', + writable: 'boolean' +}; + +function isDataDescriptor(obj, prop) { + if (typeOf(obj) !== 'object') { + return false; + } + + if (typeof prop === 'string') { + var val = Object.getOwnPropertyDescriptor(obj, prop); + return typeof val !== 'undefined'; + } + + if (!('value' in obj) && !('writable' in obj)) { + return false; + } + + for (var key in obj) { + if (key === 'value') continue; + + if (!data.hasOwnProperty(key)) { + continue; + } + + if (typeOf(obj[key]) === data[key]) { + continue; + } + + if (typeof obj[key] !== 'undefined') { + return false; + } + } + return true; +} + +/** + * Expose `isDataDescriptor` + */ + +module.exports = isDataDescriptor; + + +/***/ }), +/* 388 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * static-extend + * + * Copyright (c) 2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var copy = __webpack_require__(389); +var define = __webpack_require__(383); +var util = __webpack_require__(18); + +/** + * Returns a function for extending the static properties, + * prototype properties, and descriptors from the `Parent` + * constructor onto `Child` constructors. + * + * ```js + * var extend = require('static-extend'); + * Parent.extend = extend(Parent); + * + * // optionally pass a custom merge function as the second arg + * Parent.extend = extend(Parent, function(Child) { + * Child.prototype.mixin = function(key, val) { + * Child.prototype[key] = val; + * }; + * }); + * + * // extend "child" constructors + * Parent.extend(Child); + * + * // optionally define prototype methods as the second arg + * Parent.extend(Child, { + * foo: function() {}, + * bar: function() {} + * }); + * ``` + * @param {Function} `Parent` Parent ctor + * @param {Function} `extendFn` Optional extend function for handling any necessary custom merging. Useful when updating methods that require a specific prototype. + * @param {Function} `Child` Child ctor + * @param {Object} `proto` Optionally pass additional prototype properties to inherit. + * @return {Object} + * @api public + */ + +function extend(Parent, extendFn) { + if (typeof Parent !== 'function') { + throw new TypeError('expected Parent to be a function.'); + } + + return function(Ctor, proto) { + if (typeof Ctor !== 'function') { + throw new TypeError('expected Ctor to be a function.'); + } + + util.inherits(Ctor, Parent); + copy(Ctor, Parent); + + // proto can be null or a plain object + if (typeof proto === 'object') { + var obj = Object.create(proto); + + for (var k in obj) { + Ctor.prototype[k] = obj[k]; + } + } + + // keep a reference to the parent prototype + define(Ctor.prototype, '_parent_', { + configurable: true, + set: function() {}, + get: function() { + return Parent.prototype; + } + }); + + if (typeof extendFn === 'function') { + extendFn(Ctor, Parent); + } + + Ctor.extend = extend(Ctor, extendFn); + }; +}; + +/** + * Expose `extend` + */ + +module.exports = extend; + + +/***/ }), +/* 389 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var typeOf = __webpack_require__(348); +var copyDescriptor = __webpack_require__(390); +var define = __webpack_require__(383); + +/** + * Copy static properties, prototype properties, and descriptors from one object to another. + * + * ```js + * function App() {} + * var proto = App.prototype; + * App.prototype.set = function() {}; + * App.prototype.get = function() {}; + * + * var obj = {}; + * copy(obj, proto); + * ``` + * @param {Object} `receiver` + * @param {Object} `provider` + * @param {String|Array} `omit` One or more properties to omit + * @return {Object} + * @api public + */ + +function copy(receiver, provider, omit) { + if (!isObject(receiver)) { + throw new TypeError('expected receiving object to be an object.'); + } + if (!isObject(provider)) { + throw new TypeError('expected providing object to be an object.'); + } + + var props = nativeKeys(provider); + var keys = Object.keys(provider); + var len = props.length; + omit = arrayify(omit); + + while (len--) { + var key = props[len]; + + if (has(keys, key)) { + define(receiver, key, provider[key]); + } else if (!(key in receiver) && !has(omit, key)) { + copyDescriptor(receiver, provider, key); + } + } +}; + +/** + * Return true if the given value is an object or function + */ + +function isObject(val) { + return typeOf(val) === 'object' || typeof val === 'function'; +} + +/** + * Returns true if an array has any of the given elements, or an + * object has any of the give keys. + * + * ```js + * has(['a', 'b', 'c'], 'c'); + * //=> true + * + * has(['a', 'b', 'c'], ['c', 'z']); + * //=> true + * + * has({a: 'b', c: 'd'}, ['c', 'z']); + * //=> true + * ``` + * @param {Object} `obj` + * @param {String|Array} `val` + * @return {Boolean} + */ + +function has(obj, val) { + val = arrayify(val); + var len = val.length; + + if (isObject(obj)) { + for (var key in obj) { + if (val.indexOf(key) > -1) { + return true; + } + } + + var keys = nativeKeys(obj); + return has(keys, val); + } + + if (Array.isArray(obj)) { + var arr = obj; + while (len--) { + if (arr.indexOf(val[len]) > -1) { + return true; + } + } + return false; + } + + throw new TypeError('expected an array or object.'); +} + +/** + * Cast the given value to an array. + * + * ```js + * arrayify('foo'); + * //=> ['foo'] + * + * arrayify(['foo']); + * //=> ['foo'] + * ``` + * + * @param {String|Array} `val` + * @return {Array} + */ + +function arrayify(val) { + return val ? (Array.isArray(val) ? val : [val]) : []; +} + +/** + * Returns true if a value has a `contructor` + * + * ```js + * hasConstructor({}); + * //=> true + * + * hasConstructor(Object.create(null)); + * //=> false + * ``` + * @param {Object} `value` + * @return {Boolean} + */ + +function hasConstructor(val) { + return isObject(val) && typeof val.constructor !== 'undefined'; +} + +/** + * Get the native `ownPropertyNames` from the constructor of the + * given `object`. An empty array is returned if the object does + * not have a constructor. + * + * ```js + * nativeKeys({a: 'b', b: 'c', c: 'd'}) + * //=> ['a', 'b', 'c'] + * + * nativeKeys(function(){}) + * //=> ['length', 'caller'] + * ``` + * + * @param {Object} `obj` Object that has a `constructor`. + * @return {Array} Array of keys. + */ + +function nativeKeys(val) { + if (!hasConstructor(val)) return []; + return Object.getOwnPropertyNames(val); +} + +/** + * Expose `copy` + */ + +module.exports = copy; + +/** + * Expose `copy.has` for tests + */ + +module.exports.has = has; + + +/***/ }), +/* 390 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * copy-descriptor + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +/** + * Copy a descriptor from one object to another. + * + * ```js + * function App() { + * this.cache = {}; + * } + * App.prototype.set = function(key, val) { + * this.cache[key] = val; + * return this; + * }; + * Object.defineProperty(App.prototype, 'count', { + * get: function() { + * return Object.keys(this.cache).length; + * } + * }); + * + * copy(App.prototype, 'count', 'len'); + * + * // create an instance + * var app = new App(); + * + * app.set('a', true); + * app.set('b', true); + * app.set('c', true); + * + * console.log(app.count); + * //=> 3 + * console.log(app.len); + * //=> 3 + * ``` + * @name copy + * @param {Object} `receiver` The target object + * @param {Object} `provider` The provider object + * @param {String} `from` The key to copy on provider. + * @param {String} `to` Optionally specify a new key name to use. + * @return {Object} + * @api public + */ + +module.exports = function copyDescriptor(receiver, provider, from, to) { + if (!isObject(provider) && typeof provider !== 'function') { + to = from; + from = provider; + provider = receiver; + } + if (!isObject(receiver) && typeof receiver !== 'function') { + throw new TypeError('expected the first argument to be an object'); + } + if (!isObject(provider) && typeof provider !== 'function') { + throw new TypeError('expected provider to be an object'); + } + + if (typeof to !== 'string') { + to = from; + } + if (typeof from !== 'string') { + throw new TypeError('expected key to be a string'); + } + + if (!(from in provider)) { + throw new Error('property "' + from + '" does not exist'); + } + + var val = Object.getOwnPropertyDescriptor(provider, from); + if (val) Object.defineProperty(receiver, to, val); +}; + +function isObject(val) { + return {}.toString.call(val) === '[object Object]'; +} + + + +/***/ }), +/* 391 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var use = __webpack_require__(392); +var define = __webpack_require__(383); +var debug = __webpack_require__(393)('snapdragon:compiler'); +var utils = __webpack_require__(396); + +/** + * Create a new `Compiler` with the given `options`. + * @param {Object} `options` + */ + +function Compiler(options, state) { + debug('initializing', __filename); + this.options = utils.extend({source: 'string'}, options); + this.state = state || {}; + this.compilers = {}; + this.output = ''; + this.set('eos', function(node) { + return this.emit(node.val, node); + }); + this.set('noop', function(node) { + return this.emit(node.val, node); + }); + this.set('bos', function(node) { + return this.emit(node.val, node); + }); + use(this); +} + +/** + * Prototype methods + */ + +Compiler.prototype = { + + /** + * Throw an error message with details including the cursor position. + * @param {String} `msg` Message to use in the Error. + */ + + error: function(msg, node) { + var pos = node.position || {start: {column: 0}}; + var message = this.options.source + ' column:' + pos.start.column + ': ' + msg; + + var err = new Error(message); + err.reason = msg; + err.column = pos.start.column; + err.source = this.pattern; + + if (this.options.silent) { + this.errors.push(err); + } else { + throw err; + } + }, + + /** + * Define a non-enumberable property on the `Compiler` instance. + * + * ```js + * compiler.define('foo', 'bar'); + * ``` + * @name .define + * @param {String} `key` propery name + * @param {any} `val` property value + * @return {Object} Returns the Compiler instance for chaining. + * @api public + */ + + define: function(key, val) { + define(this, key, val); + return this; + }, + + /** + * Emit `node.val` + */ + + emit: function(str, node) { + this.output += str; + return str; + }, + + /** + * Add a compiler `fn` with the given `name` + */ + + set: function(name, fn) { + this.compilers[name] = fn; + return this; + }, + + /** + * Get compiler `name`. + */ + + get: function(name) { + return this.compilers[name]; + }, + + /** + * Get the previous AST node. + */ + + prev: function(n) { + return this.ast.nodes[this.idx - (n || 1)] || { type: 'bos', val: '' }; + }, + + /** + * Get the next AST node. + */ + + next: function(n) { + return this.ast.nodes[this.idx + (n || 1)] || { type: 'eos', val: '' }; + }, + + /** + * Visit `node`. + */ + + visit: function(node, nodes, i) { + var fn = this.compilers[node.type]; + this.idx = i; + + if (typeof fn !== 'function') { + throw this.error('compiler "' + node.type + '" is not registered', node); + } + return fn.call(this, node, nodes, i); + }, + + /** + * Map visit over array of `nodes`. + */ + + mapVisit: function(nodes) { + if (!Array.isArray(nodes)) { + throw new TypeError('expected an array'); + } + var len = nodes.length; + var idx = -1; + while (++idx < len) { + this.visit(nodes[idx], nodes, idx); + } + return this; + }, + + /** + * Compile `ast`. + */ + + compile: function(ast, options) { + var opts = utils.extend({}, this.options, options); + this.ast = ast; + this.parsingErrors = this.ast.errors; + this.output = ''; + + // source map support + if (opts.sourcemap) { + var sourcemaps = __webpack_require__(411); + sourcemaps(this); + this.mapVisit(this.ast.nodes); + this.applySourceMaps(); + this.map = opts.sourcemap === 'generator' ? this.map : this.map.toJSON(); + return this; + } + + this.mapVisit(this.ast.nodes); + return this; + } +}; + +/** + * Expose `Compiler` + */ + +module.exports = Compiler; + + +/***/ }), +/* 392 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * use + * + * Copyright (c) 2015-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +module.exports = function base(app, options) { + if (!isObject(app) && typeof app !== 'function') { + throw new TypeError('expected an object or function'); + } + + var opts = isObject(options) ? options : {}; + var prop = typeof opts.prop === 'string' ? opts.prop : 'fns'; + if (!Array.isArray(app[prop])) { + define(app, prop, []); + } + + /** + * Define a plugin function to be passed to use. The only + * parameter exposed to the plugin is `app`, the object or function. + * passed to `use(app)`. `app` is also exposed as `this` in plugins. + * + * Additionally, **if a plugin returns a function, the function will + * be pushed onto the `fns` array**, allowing the plugin to be + * called at a later point by the `run` method. + * + * ```js + * var use = require('use'); + * + * // define a plugin + * function foo(app) { + * // do stuff + * } + * + * var app = function(){}; + * use(app); + * + * // register plugins + * app.use(foo); + * app.use(bar); + * app.use(baz); + * ``` + * @name .use + * @param {Function} `fn` plugin function to call + * @api public + */ + + define(app, 'use', use); + + /** + * Run all plugins on `fns`. Any plugin that returns a function + * when called by `use` is pushed onto the `fns` array. + * + * ```js + * var config = {}; + * app.run(config); + * ``` + * @name .run + * @param {Object} `value` Object to be modified by plugins. + * @return {Object} Returns the object passed to `run` + * @api public + */ + + define(app, 'run', function(val) { + if (!isObject(val)) return; + + if (!val.use || !val.run) { + define(val, prop, val[prop] || []); + define(val, 'use', use); + } + + if (!val[prop] || val[prop].indexOf(base) === -1) { + val.use(base); + } + + var self = this || app; + var fns = self[prop]; + var len = fns.length; + var idx = -1; + + while (++idx < len) { + val.use(fns[idx]); + } + return val; + }); + + /** + * Call plugin `fn`. If a function is returned push it into the + * `fns` array to be called by the `run` method. + */ + + function use(type, fn, options) { + var offset = 1; + + if (typeof type === 'string' || Array.isArray(type)) { + fn = wrap(type, fn); + offset++; + } else { + options = fn; + fn = type; + } + + if (typeof fn !== 'function') { + throw new TypeError('expected a function'); + } + + var self = this || app; + var fns = self[prop]; + + var args = [].slice.call(arguments, offset); + args.unshift(self); + + if (typeof opts.hook === 'function') { + opts.hook.apply(self, args); + } + + var val = fn.apply(self, args); + if (typeof val === 'function' && fns.indexOf(val) === -1) { + fns.push(val); + } + return self; + } + + /** + * Wrap a named plugin function so that it's only called on objects of the + * given `type` + * + * @param {String} `type` + * @param {Function} `fn` Plugin function + * @return {Function} + */ + + function wrap(type, fn) { + return function plugin() { + return this.type === type ? fn.apply(this, arguments) : plugin; + }; + } + + return app; +}; + +function isObject(val) { + return val && typeof val === 'object' && !Array.isArray(val); +} + +function define(obj, key, val) { + Object.defineProperty(obj, key, { + configurable: true, + writable: true, + value: val + }); +} + + +/***/ }), +/* 393 */ +/***/ (function(module, exports, __webpack_require__) { + +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = __webpack_require__(394); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} + + +/***/ }), +/* 394 */ +/***/ (function(module, exports, __webpack_require__) { + + +/** + * This is the common logic for both the Node.js and web browser + * implementations of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = createDebug.debug = createDebug['default'] = createDebug; +exports.coerce = coerce; +exports.disable = disable; +exports.enable = enable; +exports.enabled = enabled; +exports.humanize = __webpack_require__(395); + +/** + * The currently active debug mode names, and names to skip. + */ + +exports.names = []; +exports.skips = []; + +/** + * Map of special "%n" handling functions, for the debug "format" argument. + * + * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N". + */ + +exports.formatters = {}; + +/** + * Previous log timestamp. + */ + +var prevTime; + +/** + * Select a color. + * @param {String} namespace + * @return {Number} + * @api private + */ + +function selectColor(namespace) { + var hash = 0, i; + + for (i in namespace) { + hash = ((hash << 5) - hash) + namespace.charCodeAt(i); + hash |= 0; // Convert to 32bit integer + } + + return exports.colors[Math.abs(hash) % exports.colors.length]; +} + +/** + * Create a debugger with the given `namespace`. + * + * @param {String} namespace + * @return {Function} + * @api public + */ + +function createDebug(namespace) { + + function debug() { + // disabled? + if (!debug.enabled) return; + + var self = debug; + + // set `diff` timestamp + var curr = +new Date(); + var ms = curr - (prevTime || curr); + self.diff = ms; + self.prev = prevTime; + self.curr = curr; + prevTime = curr; + + // turn the `arguments` into a proper Array + var args = new Array(arguments.length); + for (var i = 0; i < args.length; i++) { + args[i] = arguments[i]; + } + + args[0] = exports.coerce(args[0]); + + if ('string' !== typeof args[0]) { + // anything else let's inspect with %O + args.unshift('%O'); + } + + // apply any `formatters` transformations + var index = 0; + args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) { + // if we encounter an escaped % then don't increase the array index + if (match === '%%') return match; + index++; + var formatter = exports.formatters[format]; + if ('function' === typeof formatter) { + var val = args[index]; + match = formatter.call(self, val); + + // now we need to remove `args[index]` since it's inlined in the `format` + args.splice(index, 1); + index--; + } + return match; + }); + + // apply env-specific formatting (colors, etc.) + exports.formatArgs.call(self, args); + + var logFn = debug.log || exports.log || console.log.bind(console); + logFn.apply(self, args); + } + + debug.namespace = namespace; + debug.enabled = exports.enabled(namespace); + debug.useColors = exports.useColors(); + debug.color = selectColor(namespace); + + // env-specific initialization logic for debug instances + if ('function' === typeof exports.init) { + exports.init(debug); + } + + return debug; +} + +/** + * Enables a debug mode by namespaces. This can include modes + * separated by a colon and wildcards. + * + * @param {String} namespaces + * @api public + */ + +function enable(namespaces) { + exports.save(namespaces); + + exports.names = []; + exports.skips = []; + + var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/); + var len = split.length; + + for (var i = 0; i < len; i++) { + if (!split[i]) continue; // ignore empty strings + namespaces = split[i].replace(/\*/g, '.*?'); + if (namespaces[0] === '-') { + exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); + } else { + exports.names.push(new RegExp('^' + namespaces + '$')); + } + } +} + +/** + * Disable debug output. + * + * @api public + */ + +function disable() { + exports.enable(''); +} + +/** + * Returns true if the given mode name is enabled, false otherwise. + * + * @param {String} name + * @return {Boolean} + * @api public + */ + +function enabled(name) { + var i, len; + for (i = 0, len = exports.skips.length; i < len; i++) { + if (exports.skips[i].test(name)) { + return false; + } + } + for (i = 0, len = exports.names.length; i < len; i++) { + if (exports.names[i].test(name)) { + return true; + } + } + return false; +} + +/** + * Coerce `val`. + * + * @param {Mixed} val + * @return {Mixed} + * @api private + */ + +function coerce(val) { + if (val instanceof Error) return val.stack || val.message; + return val; +} + + +/***/ }), +/* 395 */ +/***/ (function(module, exports) { + +/** + * Helpers. + */ + +var s = 1000; +var m = s * 60; +var h = m * 60; +var d = h * 24; +var y = d * 365.25; + +/** + * Parse or format the given `val`. + * + * Options: + * + * - `long` verbose formatting [false] + * + * @param {String|Number} val + * @param {Object} [options] + * @throws {Error} throw an error if val is not a non-empty string or a number + * @return {String|Number} + * @api public + */ + +module.exports = function(val, options) { + options = options || {}; + var type = typeof val; + if (type === 'string' && val.length > 0) { + return parse(val); + } else if (type === 'number' && isNaN(val) === false) { + return options.long ? fmtLong(val) : fmtShort(val); + } + throw new Error( + 'val is not a non-empty string or a valid number. val=' + + JSON.stringify(val) + ); +}; + +/** + * Parse the given `str` and return milliseconds. + * + * @param {String} str + * @return {Number} + * @api private + */ + +function parse(str) { + str = String(str); + if (str.length > 100) { + return; + } + var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( + str + ); + if (!match) { + return; + } + var n = parseFloat(match[1]); + var type = (match[2] || 'ms').toLowerCase(); + switch (type) { + case 'years': + case 'year': + case 'yrs': + case 'yr': + case 'y': + return n * y; + case 'days': + case 'day': + case 'd': + return n * d; + case 'hours': + case 'hour': + case 'hrs': + case 'hr': + case 'h': + return n * h; + case 'minutes': + case 'minute': + case 'mins': + case 'min': + case 'm': + return n * m; + case 'seconds': + case 'second': + case 'secs': + case 'sec': + case 's': + return n * s; + case 'milliseconds': + case 'millisecond': + case 'msecs': + case 'msec': + case 'ms': + return n; + default: + return undefined; + } +} + +/** + * Short format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtShort(ms) { + if (ms >= d) { + return Math.round(ms / d) + 'd'; + } + if (ms >= h) { + return Math.round(ms / h) + 'h'; + } + if (ms >= m) { + return Math.round(ms / m) + 'm'; + } + if (ms >= s) { + return Math.round(ms / s) + 's'; + } + return ms + 'ms'; +} + +/** + * Long format for `ms`. + * + * @param {Number} ms + * @return {String} + * @api private + */ + +function fmtLong(ms) { + return plural(ms, d, 'day') || + plural(ms, h, 'hour') || + plural(ms, m, 'minute') || + plural(ms, s, 'second') || + ms + ' ms'; +} + +/** + * Pluralization helper. + */ + +function plural(ms, n, name) { + if (ms < n) { + return; + } + if (ms < n * 1.5) { + return Math.floor(ms / n) + ' ' + name; + } + return Math.ceil(ms / n) + ' ' + name + 's'; +} + + +/***/ }), +/* 396 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Module dependencies + */ + +exports.extend = __webpack_require__(340); +exports.SourceMap = __webpack_require__(397); +exports.sourceMapResolve = __webpack_require__(408); + +/** + * Convert backslash in the given string to forward slashes + */ + +exports.unixify = function(fp) { + return fp.split(/\\+/).join('/'); +}; + +/** + * Return true if `val` is a non-empty string + * + * @param {String} `str` + * @return {Boolean} + */ + +exports.isString = function(str) { + return str && typeof str === 'string'; +}; + +/** + * Cast `val` to an array + * @return {Array} + */ + +exports.arrayify = function(val) { + if (typeof val === 'string') return [val]; + return val ? (Array.isArray(val) ? val : [val]) : []; +}; + +/** + * Get the last `n` element from the given `array` + * @param {Array} `array` + * @return {*} + */ + +exports.last = function(arr, n) { + return arr[arr.length - (n || 1)]; +}; + + +/***/ }), +/* 397 */ +/***/ (function(module, exports, __webpack_require__) { + +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +exports.SourceMapGenerator = __webpack_require__(398).SourceMapGenerator; +exports.SourceMapConsumer = __webpack_require__(404).SourceMapConsumer; +exports.SourceNode = __webpack_require__(407).SourceNode; + + +/***/ }), +/* 398 */ +/***/ (function(module, exports, __webpack_require__) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var base64VLQ = __webpack_require__(399); +var util = __webpack_require__(401); +var ArraySet = __webpack_require__(402).ArraySet; +var MappingList = __webpack_require__(403).MappingList; + +/** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ +function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; +} + +SourceMapGenerator.prototype._version = 3; + +/** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ +SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + +/** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ +SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + +/** + * Set the source content for a source file. + */ +SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + +/** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ +SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + +/** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ +SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + +/** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ +SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + +SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + +/** + * Externalize the source map. + */ +SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + +/** + * Render the source map being generated to a string. + */ +SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + +exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 399 */ +/***/ (function(module, exports, __webpack_require__) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of Google Inc. 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 + * OWNER 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. + */ + +var base64 = __webpack_require__(400); + +// A single base 64 digit can contain 6 bits of data. For the base 64 variable +// length quantities we use in the source map spec, the first bit is the sign, +// the next four bits are the actual value, and the 6th bit is the +// continuation bit. The continuation bit tells us whether there are more +// digits in this value following this digit. +// +// Continuation +// | Sign +// | | +// V V +// 101011 + +var VLQ_BASE_SHIFT = 5; + +// binary: 100000 +var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + +// binary: 011111 +var VLQ_BASE_MASK = VLQ_BASE - 1; + +// binary: 100000 +var VLQ_CONTINUATION_BIT = VLQ_BASE; + +/** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ +function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; +} + +/** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ +function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; +} + +/** + * Returns the base 64 VLQ encoded value. + */ +exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; +}; + +/** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ +exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; +}; + + +/***/ }), +/* 400 */ +/***/ (function(module, exports) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + +/** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ +exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); +}; + +/** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ +exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; +}; + + +/***/ }), +/* 401 */ +/***/ (function(module, exports) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ +function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } +} +exports.getArg = getArg; + +var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; +var dataUrlRegexp = /^data:.+\,.+$/; + +function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; +} +exports.urlParse = urlParse; + +function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; +} +exports.urlGenerate = urlGenerate; + +/** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '

/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ +function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; +} +exports.normalize = normalize; + +/** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ +function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; +} +exports.join = join; + +exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); +}; + +/** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ +function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); +} +exports.relative = relative; + +var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); +}()); + +function identity (s) { + return s; +} + +/** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ +function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; +} +exports.toSetString = supportsNullProto ? identity : toSetString; + +function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; +} +exports.fromSetString = supportsNullProto ? identity : fromSetString; + +function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; +} + +/** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ +function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByOriginalPositions = compareByOriginalPositions; + +/** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ +function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; +} +exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + +function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; +} + +/** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ +function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); +} +exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + +/***/ }), +/* 402 */ +/***/ (function(module, exports, __webpack_require__) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = __webpack_require__(401); +var has = Object.prototype.hasOwnProperty; +var hasNativeMap = typeof Map !== "undefined"; + +/** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ +function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); +} + +/** + * Static method for creating ArraySet instances from an existing array. + */ +ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; +}; + +/** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ +ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; +}; + +/** + * Add the given string to this set. + * + * @param String aStr + */ +ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } +}; + +/** + * Is the given string a member of this set? + * + * @param String aStr + */ +ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } +}; + +/** + * What is the index of the given string in the array? + * + * @param String aStr + */ +ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); +}; + +/** + * What is the element at the given index? + * + * @param Number aIdx + */ +ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); +}; + +/** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ +ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); +}; + +exports.ArraySet = ArraySet; + + +/***/ }), +/* 403 */ +/***/ (function(module, exports, __webpack_require__) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = __webpack_require__(401); + +/** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ +function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; +} + +/** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ +function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; +} + +/** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ +MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + +/** + * Add the given source mapping. + * + * @param Object aMapping + */ +MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } +}; + +/** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ +MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; +}; + +exports.MappingList = MappingList; + + +/***/ }), +/* 404 */ +/***/ (function(module, exports, __webpack_require__) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = __webpack_require__(401); +var binarySearch = __webpack_require__(405); +var ArraySet = __webpack_require__(402).ArraySet; +var base64VLQ = __webpack_require__(399); +var quickSort = __webpack_require__(406).quickSort; + +function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); +} + +SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); +} + +/** + * The version of the source mapping spec that we are consuming. + */ +SourceMapConsumer.prototype._version = 3; + +// `__generatedMappings` and `__originalMappings` are arrays that hold the +// parsed mapping coordinates from the source map's "mappings" attribute. They +// are lazily instantiated, accessed via the `_generatedMappings` and +// `_originalMappings` getters respectively, and we only parse the mappings +// and create these arrays once queried for a source location. We jump through +// these hoops because there can be many thousands of mappings, and parsing +// them is expensive, so we only want to do it if we must. +// +// Each object in the arrays is of the form: +// +// { +// generatedLine: The line number in the generated code, +// generatedColumn: The column number in the generated code, +// source: The path to the original source file that generated this +// chunk of code, +// originalLine: The line number in the original source that +// corresponds to this chunk of generated code, +// originalColumn: The column number in the original source that +// corresponds to this chunk of generated code, +// name: The name of the original symbol which generated this chunk of +// code. +// } +// +// All properties except for `generatedLine` and `generatedColumn` can be +// `null`. +// +// `_generatedMappings` is ordered by the generated positions. +// +// `_originalMappings` is ordered by the original positions. + +SourceMapConsumer.prototype.__generatedMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } +}); + +SourceMapConsumer.prototype.__originalMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } +}); + +SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + +SourceMapConsumer.GENERATED_ORDER = 1; +SourceMapConsumer.ORIGINAL_ORDER = 2; + +SourceMapConsumer.GREATEST_LOWER_BOUND = 1; +SourceMapConsumer.LEAST_UPPER_BOUND = 2; + +/** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ +SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + +/** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + +exports.SourceMapConsumer = SourceMapConsumer; + +/** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ +function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; +} + +BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + +/** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ +BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + +/** + * The version of the source mapping spec that we are consuming. + */ +BasicSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } +}); + +/** + * Provide the JIT with a nice shape / hidden class. + */ +function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; +} + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + +/** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ +BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + +/** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ +BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + +exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + +/** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ +function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); +} + +IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + +/** + * The version of the source mapping spec that we are consuming. + */ +IndexedSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } +}); + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ +IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ +IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + +exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 405 */ +/***/ (function(module, exports) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +exports.GREATEST_LOWER_BOUND = 1; +exports.LEAST_UPPER_BOUND = 2; + +/** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ +function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } +} + +/** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ +exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; +}; + + +/***/ }), +/* 406 */ +/***/ (function(module, exports) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +// It turns out that some (most?) JavaScript engines don't self-host +// `Array.prototype.sort`. This makes sense because C++ will likely remain +// faster than JS when doing raw CPU-intensive sorting. However, when using a +// custom comparator function, calling back and forth between the VM's C++ and +// JIT'd JS is rather slow *and* loses JIT type information, resulting in +// worse generated code for the comparator function than would be optimal. In +// fact, when sorting with a comparator, these costs outweigh the benefits of +// sorting in C++. By using our own JS-implemented Quick Sort (below), we get +// a ~3500ms mean speed-up in `bench/bench.html`. + +/** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ +function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; +} + +/** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ +function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); +} + +/** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ +function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } +} + +/** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ +exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); +}; + + +/***/ }), +/* 407 */ +/***/ (function(module, exports, __webpack_require__) { + +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var SourceMapGenerator = __webpack_require__(398).SourceMapGenerator; +var util = __webpack_require__(401); + +// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other +// operating systems these days (capturing the result). +var REGEX_NEWLINE = /(\r?\n)/; + +// Newline character code for charCodeAt() comparisons +var NEWLINE_CODE = 10; + +// Private symbol for identifying `SourceNode`s when multiple versions of +// the source-map library are loaded. This MUST NOT CHANGE across +// versions! +var isSourceNode = "$$$isSourceNode$$$"; + +/** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ +function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); +} + +/** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ +SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + +/** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ +SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; +}; + +/** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } +}; + +/** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ +SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; +}; + +/** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ +SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; +}; + +/** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ +SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + +/** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ +SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + +/** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ +SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; +}; + +/** + * Returns the string representation of this source node along with a source + * map. + */ +SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; +}; + +exports.SourceNode = SourceNode; + + +/***/ }), +/* 408 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright 2014, 2015, 2016, 2017 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +// Note: source-map-resolve.js is generated from source-map-resolve-node.js and +// source-map-resolve-template.js. Only edit the two latter files, _not_ +// source-map-resolve.js! + +void (function(root, factory) { + if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(409), __webpack_require__(410)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) + } else { var resolveUrl, sourceMappingURL; } +}(this, function(sourceMappingURL, resolveUrl) { + + function callbackAsync(callback, error, result) { + setImmediate(function() { callback(error, result) }) + } + + function parseMapToJSON(string, data) { + try { + return JSON.parse(string.replace(/^\)\]\}'/, "")) + } catch (error) { + error.sourceMapData = data + throw error + } + } + + function readSync(read, url, data) { + var readUrl = url + try { + return String(read(readUrl)) + } catch (error) { + error.sourceMapData = data + throw error + } + } + + + + function resolveSourceMap(code, codeUrl, read, callback) { + var mapData + try { + mapData = resolveSourceMapHelper(code, codeUrl) + } catch (error) { + return callbackAsync(callback, error) + } + if (!mapData || mapData.map) { + return callbackAsync(callback, null, mapData) + } + var readUrl = mapData.url + read(readUrl, function(error, result) { + if (error) { + error.sourceMapData = mapData + return callback(error) + } + mapData.map = String(result) + try { + mapData.map = parseMapToJSON(mapData.map, mapData) + } catch (error) { + return callback(error) + } + callback(null, mapData) + }) + } + + function resolveSourceMapSync(code, codeUrl, read) { + var mapData = resolveSourceMapHelper(code, codeUrl) + if (!mapData || mapData.map) { + return mapData + } + mapData.map = readSync(read, mapData.url, mapData) + mapData.map = parseMapToJSON(mapData.map, mapData) + return mapData + } + + var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/ + var jsonMimeTypeRegex = /^(?:application|text)\/json$/ + + function resolveSourceMapHelper(code, codeUrl) { + var url = sourceMappingURL.getFrom(code) + if (!url) { + return null + } + + var dataUri = url.match(dataUriRegex) + if (dataUri) { + var mimeType = dataUri[1] + var lastParameter = dataUri[2] || "" + var encoded = dataUri[3] || "" + var data = { + sourceMappingURL: url, + url: null, + sourcesRelativeTo: codeUrl, + map: encoded + } + if (!jsonMimeTypeRegex.test(mimeType)) { + var error = new Error("Unuseful data uri mime type: " + (mimeType || "text/plain")) + error.sourceMapData = data + throw error + } + data.map = parseMapToJSON( + lastParameter === ";base64" ? atob(encoded) : decodeURIComponent(encoded), + data + ) + return data + } + + var mapUrl = resolveUrl(codeUrl, url) + return { + sourceMappingURL: url, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + } + + + + function resolveSources(map, mapUrl, read, options, callback) { + if (typeof options === "function") { + callback = options + options = {} + } + var pending = map.sources ? map.sources.length : 0 + var result = { + sourcesResolved: [], + sourcesContent: [] + } + + if (pending === 0) { + callbackAsync(callback, null, result) + return + } + + var done = function() { + pending-- + if (pending === 0) { + callback(null, result) + } + } + + resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { + result.sourcesResolved[index] = fullUrl + if (typeof sourceContent === "string") { + result.sourcesContent[index] = sourceContent + callbackAsync(done, null) + } else { + var readUrl = fullUrl + read(readUrl, function(error, source) { + result.sourcesContent[index] = error ? error : String(source) + done() + }) + } + }) + } + + function resolveSourcesSync(map, mapUrl, read, options) { + var result = { + sourcesResolved: [], + sourcesContent: [] + } + + if (!map.sources || map.sources.length === 0) { + return result + } + + resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { + result.sourcesResolved[index] = fullUrl + if (read !== null) { + if (typeof sourceContent === "string") { + result.sourcesContent[index] = sourceContent + } else { + var readUrl = fullUrl + try { + result.sourcesContent[index] = String(read(readUrl)) + } catch (error) { + result.sourcesContent[index] = error + } + } + } + }) + + return result + } + + var endingSlash = /\/?$/ + + function resolveSourcesHelper(map, mapUrl, options, fn) { + options = options || {} + var fullUrl + var sourceContent + var sourceRoot + for (var index = 0, len = map.sources.length; index < len; index++) { + sourceRoot = null + if (typeof options.sourceRoot === "string") { + sourceRoot = options.sourceRoot + } else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) { + sourceRoot = map.sourceRoot + } + // If the sourceRoot is the empty string, it is equivalent to not setting + // the property at all. + if (sourceRoot === null || sourceRoot === '') { + fullUrl = resolveUrl(mapUrl, map.sources[index]) + } else { + // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes + // `/scripts/subdir/`, not `/scripts/`. Pointing to a file as source root + // does not make sense. + fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index]) + } + sourceContent = (map.sourcesContent || [])[index] + fn(fullUrl, sourceContent, index) + } + } + + + + function resolve(code, codeUrl, read, options, callback) { + if (typeof options === "function") { + callback = options + options = {} + } + if (code === null) { + var mapUrl = codeUrl + var data = { + sourceMappingURL: null, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + var readUrl = mapUrl + read(readUrl, function(error, result) { + if (error) { + error.sourceMapData = data + return callback(error) + } + data.map = String(result) + try { + data.map = parseMapToJSON(data.map, data) + } catch (error) { + return callback(error) + } + _resolveSources(data) + }) + } else { + resolveSourceMap(code, codeUrl, read, function(error, mapData) { + if (error) { + return callback(error) + } + if (!mapData) { + return callback(null, null) + } + _resolveSources(mapData) + }) + } + + function _resolveSources(mapData) { + resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) { + if (error) { + return callback(error) + } + mapData.sourcesResolved = result.sourcesResolved + mapData.sourcesContent = result.sourcesContent + callback(null, mapData) + }) + } + } + + function resolveSync(code, codeUrl, read, options) { + var mapData + if (code === null) { + var mapUrl = codeUrl + mapData = { + sourceMappingURL: null, + url: mapUrl, + sourcesRelativeTo: mapUrl, + map: null + } + mapData.map = readSync(read, mapUrl, mapData) + mapData.map = parseMapToJSON(mapData.map, mapData) + } else { + mapData = resolveSourceMapSync(code, codeUrl, read) + if (!mapData) { + return null + } + } + var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options) + mapData.sourcesResolved = result.sourcesResolved + mapData.sourcesContent = result.sourcesContent + return mapData + } + + + + return { + resolveSourceMap: resolveSourceMap, + resolveSourceMapSync: resolveSourceMapSync, + resolveSources: resolveSources, + resolveSourcesSync: resolveSourcesSync, + resolve: resolve, + resolveSync: resolveSync, + parseMapToJSON: parseMapToJSON + } + +})); + + +/***/ }), +/* 409 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +void (function(root, factory) { + if (true) { + !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : + __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) + } else {} +}(this, function() { + + var innerRegex = /[#@] sourceMappingURL=([^\s'"]*)/ + + var regex = RegExp( + "(?:" + + "/\\*" + + "(?:\\s*\r?\n(?://)?)?" + + "(?:" + innerRegex.source + ")" + + "\\s*" + + "\\*/" + + "|" + + "//(?:" + innerRegex.source + ")" + + ")" + + "\\s*" + ) + + return { + + regex: regex, + _innerRegex: innerRegex, + + getFrom: function(code) { + var match = code.match(regex) + return (match ? match[1] || match[2] || "" : null) + }, + + existsIn: function(code) { + return regex.test(code) + }, + + removeFrom: function(code) { + return code.replace(regex, "") + }, + + insertBefore: function(code, string) { + var match = code.match(regex) + if (match) { + return code.slice(0, match.index) + string + code.slice(match.index) + } else { + return code + string + } + } + } + +})); + + +/***/ }), +/* 410 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +void (function(root, factory) { + if (true) { + !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : + __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) + } else {} +}(this, function() { + + function resolveUrl(/* ...urls */) { + var numUrls = arguments.length + + if (numUrls === 0) { + throw new Error("resolveUrl requires at least one argument; got none.") + } + + var base = document.createElement("base") + base.href = arguments[0] + + if (numUrls === 1) { + return base.href + } + + var head = document.getElementsByTagName("head")[0] + head.insertBefore(base, head.firstChild) + + var a = document.createElement("a") + var resolved + + for (var index = 1; index < numUrls; index++) { + a.href = arguments[index] + resolved = a.href + base.href = resolved + } + + head.removeChild(base) + + return resolved + } + + return resolveUrl + +})); + + +/***/ }), +/* 411 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var fs = __webpack_require__(5); +var path = __webpack_require__(6); +var define = __webpack_require__(383); +var utils = __webpack_require__(396); + +/** + * Expose `mixin()`. + * This code is based on `source-maps-support.js` in reworkcss/css + * https://github.com/reworkcss/css/blob/master/lib/stringify/source-map-support.js + * Copyright (c) 2012 TJ Holowaychuk + */ + +module.exports = mixin; + +/** + * Mixin source map support into `compiler`. + * + * @param {Object} `compiler` + * @api public + */ + +function mixin(compiler) { + define(compiler, '_comment', compiler.comment); + compiler.map = new utils.SourceMap.SourceMapGenerator(); + compiler.position = { line: 1, column: 1 }; + compiler.content = {}; + compiler.files = {}; + + for (var key in exports) { + define(compiler, key, exports[key]); + } +} + +/** + * Update position. + * + * @param {String} str + */ + +exports.updatePosition = function(str) { + var lines = str.match(/\n/g); + if (lines) this.position.line += lines.length; + var i = str.lastIndexOf('\n'); + this.position.column = ~i ? str.length - i : this.position.column + str.length; +}; + +/** + * Emit `str` with `position`. + * + * @param {String} str + * @param {Object} [pos] + * @return {String} + */ + +exports.emit = function(str, node) { + var position = node.position || {}; + var source = position.source; + if (source) { + if (position.filepath) { + source = utils.unixify(position.filepath); + } + + this.map.addMapping({ + source: source, + generated: { + line: this.position.line, + column: Math.max(this.position.column - 1, 0) + }, + original: { + line: position.start.line, + column: position.start.column - 1 + } + }); + + if (position.content) { + this.addContent(source, position); + } + if (position.filepath) { + this.addFile(source, position); + } + + this.updatePosition(str); + this.output += str; + } + return str; +}; + +/** + * Adds a file to the source map output if it has not already been added + * @param {String} `file` + * @param {Object} `pos` + */ + +exports.addFile = function(file, position) { + if (typeof position.content !== 'string') return; + if (Object.prototype.hasOwnProperty.call(this.files, file)) return; + this.files[file] = position.content; +}; + +/** + * Adds a content source to the source map output if it has not already been added + * @param {String} `source` + * @param {Object} `position` + */ + +exports.addContent = function(source, position) { + if (typeof position.content !== 'string') return; + if (Object.prototype.hasOwnProperty.call(this.content, source)) return; + this.map.setSourceContent(source, position.content); +}; + +/** + * Applies any original source maps to the output and embeds the source file + * contents in the source map. + */ + +exports.applySourceMaps = function() { + Object.keys(this.files).forEach(function(file) { + var content = this.files[file]; + this.map.setSourceContent(file, content); + + if (this.options.inputSourcemaps === true) { + var originalMap = utils.sourceMapResolve.resolveSync(content, file, fs.readFileSync); + if (originalMap) { + var map = new utils.SourceMap.SourceMapConsumer(originalMap.map); + var relativeTo = originalMap.sourcesRelativeTo; + this.map.applySourceMap(map, file, utils.unixify(path.dirname(relativeTo))); + } + } + }, this); +}; + +/** + * Process comments, drops sourceMap comments. + * @param {Object} node + */ + +exports.comment = function(node) { + if (/^# sourceMappingURL=/.test(node.comment)) { + return this.emit('', node.position); + } + return this._comment(node); +}; + + +/***/ }), +/* 412 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var use = __webpack_require__(392); +var util = __webpack_require__(18); +var Cache = __webpack_require__(413); +var define = __webpack_require__(383); +var debug = __webpack_require__(393)('snapdragon:parser'); +var Position = __webpack_require__(414); +var utils = __webpack_require__(396); + +/** + * Create a new `Parser` with the given `input` and `options`. + * @param {String} `input` + * @param {Object} `options` + * @api public + */ + +function Parser(options) { + debug('initializing', __filename); + this.options = utils.extend({source: 'string'}, options); + this.init(this.options); + use(this); +} + +/** + * Prototype methods + */ + +Parser.prototype = { + constructor: Parser, + + init: function(options) { + this.orig = ''; + this.input = ''; + this.parsed = ''; + + this.column = 1; + this.line = 1; + + this.regex = new Cache(); + this.errors = this.errors || []; + this.parsers = this.parsers || {}; + this.types = this.types || []; + this.sets = this.sets || {}; + this.fns = this.fns || []; + this.currentType = 'root'; + + var pos = this.position(); + this.bos = pos({type: 'bos', val: ''}); + + this.ast = { + type: 'root', + errors: this.errors, + nodes: [this.bos] + }; + + define(this.bos, 'parent', this.ast); + this.nodes = [this.ast]; + + this.count = 0; + this.setCount = 0; + this.stack = []; + }, + + /** + * Throw a formatted error with the cursor column and `msg`. + * @param {String} `msg` Message to use in the Error. + */ + + error: function(msg, node) { + var pos = node.position || {start: {column: 0, line: 0}}; + var line = pos.start.line; + var column = pos.start.column; + var source = this.options.source; + + var message = source + ' : ' + msg; + var err = new Error(message); + err.source = source; + err.reason = msg; + err.pos = pos; + + if (this.options.silent) { + this.errors.push(err); + } else { + throw err; + } + }, + + /** + * Define a non-enumberable property on the `Parser` instance. + * + * ```js + * parser.define('foo', 'bar'); + * ``` + * @name .define + * @param {String} `key` propery name + * @param {any} `val` property value + * @return {Object} Returns the Parser instance for chaining. + * @api public + */ + + define: function(key, val) { + define(this, key, val); + return this; + }, + + /** + * Mark position and patch `node.position`. + */ + + position: function() { + var start = { line: this.line, column: this.column }; + var self = this; + + return function(node) { + define(node, 'position', new Position(start, self)); + return node; + }; + }, + + /** + * Set parser `name` with the given `fn` + * @param {String} `name` + * @param {Function} `fn` + * @api public + */ + + set: function(type, fn) { + if (this.types.indexOf(type) === -1) { + this.types.push(type); + } + this.parsers[type] = fn.bind(this); + return this; + }, + + /** + * Get parser `name` + * @param {String} `name` + * @api public + */ + + get: function(name) { + return this.parsers[name]; + }, + + /** + * Push a `token` onto the `type` stack. + * + * @param {String} `type` + * @return {Object} `token` + * @api public + */ + + push: function(type, token) { + this.sets[type] = this.sets[type] || []; + this.count++; + this.stack.push(token); + return this.sets[type].push(token); + }, + + /** + * Pop a token off of the `type` stack + * @param {String} `type` + * @returns {Object} Returns a token + * @api public + */ + + pop: function(type) { + this.sets[type] = this.sets[type] || []; + this.count--; + this.stack.pop(); + return this.sets[type].pop(); + }, + + /** + * Return true if inside a `stack` node. Types are `braces`, `parens` or `brackets`. + * + * @param {String} `type` + * @return {Boolean} + * @api public + */ + + isInside: function(type) { + this.sets[type] = this.sets[type] || []; + return this.sets[type].length > 0; + }, + + /** + * Return true if `node` is the given `type`. + * + * ```js + * parser.isType(node, 'brace'); + * ``` + * @param {Object} `node` + * @param {String} `type` + * @return {Boolean} + * @api public + */ + + isType: function(node, type) { + return node && node.type === type; + }, + + /** + * Get the previous AST node + * @return {Object} + */ + + prev: function(n) { + return this.stack.length > 0 + ? utils.last(this.stack, n) + : utils.last(this.nodes, n); + }, + + /** + * Update line and column based on `str`. + */ + + consume: function(len) { + this.input = this.input.substr(len); + }, + + /** + * Update column based on `str`. + */ + + updatePosition: function(str, len) { + var lines = str.match(/\n/g); + if (lines) this.line += lines.length; + var i = str.lastIndexOf('\n'); + this.column = ~i ? len - i : this.column + len; + this.parsed += str; + this.consume(len); + }, + + /** + * Match `regex`, return captures, and update the cursor position by `match[0]` length. + * @param {RegExp} `regex` + * @return {Object} + */ + + match: function(regex) { + var m = regex.exec(this.input); + if (m) { + this.updatePosition(m[0], m[0].length); + return m; + } + }, + + /** + * Capture `type` with the given regex. + * @param {String} `type` + * @param {RegExp} `regex` + * @return {Function} + */ + + capture: function(type, regex) { + if (typeof regex === 'function') { + return this.set.apply(this, arguments); + } + + this.regex.set(type, regex); + this.set(type, function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(regex); + if (!m || !m[0]) return; + + var prev = this.prev(); + var node = pos({ + type: type, + val: m[0], + parsed: parsed, + rest: this.input + }); + + if (m[1]) { + node.inner = m[1]; + } + + define(node, 'inside', this.stack.length > 0); + define(node, 'parent', prev); + prev.nodes.push(node); + }.bind(this)); + return this; + }, + + /** + * Create a parser with open and close for parens, + * brackets or braces + */ + + capturePair: function(type, openRegex, closeRegex, fn) { + this.sets[type] = this.sets[type] || []; + + /** + * Open + */ + + this.set(type + '.open', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(openRegex); + if (!m || !m[0]) return; + + var val = m[0]; + this.setCount++; + this.specialChars = true; + var open = pos({ + type: type + '.open', + val: val, + rest: this.input + }); + + if (typeof m[1] !== 'undefined') { + open.inner = m[1]; + } + + var prev = this.prev(); + var node = pos({ + type: type, + nodes: [open] + }); + + define(node, 'rest', this.input); + define(node, 'parsed', parsed); + define(node, 'prefix', m[1]); + define(node, 'parent', prev); + define(open, 'parent', node); + + if (typeof fn === 'function') { + fn.call(this, open, node); + } + + this.push(type, node); + prev.nodes.push(node); + }); + + /** + * Close + */ + + this.set(type + '.close', function() { + var pos = this.position(); + var m = this.match(closeRegex); + if (!m || !m[0]) return; + + var parent = this.pop(type); + var node = pos({ + type: type + '.close', + rest: this.input, + suffix: m[1], + val: m[0] + }); + + if (!this.isType(parent, type)) { + if (this.options.strict) { + throw new Error('missing opening "' + type + '"'); + } + + this.setCount--; + node.escaped = true; + return node; + } + + if (node.suffix === '\\') { + parent.escaped = true; + node.escaped = true; + } + + parent.nodes.push(node); + define(node, 'parent', parent); + }); + + return this; + }, + + /** + * Capture end-of-string + */ + + eos: function() { + var pos = this.position(); + if (this.input) return; + var prev = this.prev(); + + while (prev.type !== 'root' && !prev.visited) { + if (this.options.strict === true) { + throw new SyntaxError('invalid syntax:' + util.inspect(prev, null, 2)); + } + + if (!hasDelims(prev)) { + prev.parent.escaped = true; + prev.escaped = true; + } + + visit(prev, function(node) { + if (!hasDelims(node.parent)) { + node.parent.escaped = true; + node.escaped = true; + } + }); + + prev = prev.parent; + } + + var tok = pos({ + type: 'eos', + val: this.append || '' + }); + + define(tok, 'parent', this.ast); + return tok; + }, + + /** + * Run parsers to advance the cursor position + */ + + next: function() { + var parsed = this.parsed; + var len = this.types.length; + var idx = -1; + var tok; + + while (++idx < len) { + if ((tok = this.parsers[this.types[idx]].call(this))) { + define(tok, 'rest', this.input); + define(tok, 'parsed', parsed); + this.last = tok; + return tok; + } + } + }, + + /** + * Parse the given string. + * @return {Array} + */ + + parse: function(input) { + if (typeof input !== 'string') { + throw new TypeError('expected a string'); + } + + this.init(this.options); + this.orig = input; + this.input = input; + var self = this; + + function parse() { + // check input before calling `.next()` + input = self.input; + + // get the next AST ndoe + var node = self.next(); + if (node) { + var prev = self.prev(); + if (prev) { + define(node, 'parent', prev); + if (prev.nodes) { + prev.nodes.push(node); + } + } + + if (self.sets.hasOwnProperty(prev.type)) { + self.currentType = prev.type; + } + } + + // if we got here but input is not changed, throw an error + if (self.input && input === self.input) { + throw new Error('no parsers registered for: "' + self.input.slice(0, 5) + '"'); + } + } + + while (this.input) parse(); + if (this.stack.length && this.options.strict) { + var node = this.stack.pop(); + throw this.error('missing opening ' + node.type + ': "' + this.orig + '"'); + } + + var eos = this.eos(); + var tok = this.prev(); + if (tok.type !== 'eos') { + this.ast.nodes.push(eos); + } + + return this.ast; + } +}; + +/** + * Visit `node` with the given `fn` + */ + +function visit(node, fn) { + if (!node.visited) { + define(node, 'visited', true); + return node.nodes ? mapVisit(node.nodes, fn) : fn(node); + } + return node; +} + +/** + * Map visit over array of `nodes`. + */ + +function mapVisit(nodes, fn) { + var len = nodes.length; + var idx = -1; + while (++idx < len) { + visit(nodes[idx], fn); + } +} + +function hasOpen(node) { + return node.nodes && node.nodes[0].type === (node.type + '.open'); +} + +function hasClose(node) { + return node.nodes && utils.last(node.nodes).type === (node.type + '.close'); +} + +function hasDelims(node) { + return hasOpen(node) && hasClose(node); +} + +/** + * Expose `Parser` + */ + +module.exports = Parser; + + +/***/ }), +/* 413 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * map-cache + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + + + +var hasOwn = Object.prototype.hasOwnProperty; + +/** + * Expose `MapCache` + */ + +module.exports = MapCache; + +/** + * Creates a cache object to store key/value pairs. + * + * ```js + * var cache = new MapCache(); + * ``` + * + * @api public + */ + +function MapCache(data) { + this.__data__ = data || {}; +} + +/** + * Adds `value` to `key` on the cache. + * + * ```js + * cache.set('foo', 'bar'); + * ``` + * + * @param {String} `key` The key of the value to cache. + * @param {*} `value` The value to cache. + * @returns {Object} Returns the `Cache` object for chaining. + * @api public + */ + +MapCache.prototype.set = function mapSet(key, value) { + if (key !== '__proto__') { + this.__data__[key] = value; + } + return this; +}; + +/** + * Gets the cached value for `key`. + * + * ```js + * cache.get('foo'); + * //=> 'bar' + * ``` + * + * @param {String} `key` The key of the value to get. + * @returns {*} Returns the cached value. + * @api public + */ + +MapCache.prototype.get = function mapGet(key) { + return key === '__proto__' ? undefined : this.__data__[key]; +}; + +/** + * Checks if a cached value for `key` exists. + * + * ```js + * cache.has('foo'); + * //=> true + * ``` + * + * @param {String} `key` The key of the entry to check. + * @returns {Boolean} Returns `true` if an entry for `key` exists, else `false`. + * @api public + */ + +MapCache.prototype.has = function mapHas(key) { + return key !== '__proto__' && hasOwn.call(this.__data__, key); +}; + +/** + * Removes `key` and its value from the cache. + * + * ```js + * cache.del('foo'); + * ``` + * @title .del + * @param {String} `key` The key of the value to remove. + * @returns {Boolean} Returns `true` if the entry was removed successfully, else `false`. + * @api public + */ + +MapCache.prototype.del = function mapDelete(key) { + return this.has(key) && delete this.__data__[key]; +}; + + +/***/ }), +/* 414 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var define = __webpack_require__(383); + +/** + * Store position for a node + */ + +module.exports = function Position(start, parser) { + this.start = start; + this.end = { line: parser.line, column: parser.column }; + define(this, 'content', parser.orig); + define(this, 'source', parser.options.source); +}; + + +/***/ }), +/* 415 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var nanomatch = __webpack_require__(416); +var extglob = __webpack_require__(425); + +module.exports = function(snapdragon) { + var compilers = snapdragon.compiler.compilers; + var opts = snapdragon.options; + + // register nanomatch compilers + snapdragon.use(nanomatch.compilers); + + // get references to some specific nanomatch compilers before they + // are overridden by the extglob and/or custom compilers + var escape = compilers.escape; + var qmark = compilers.qmark; + var slash = compilers.slash; + var star = compilers.star; + var text = compilers.text; + var plus = compilers.plus; + var dot = compilers.dot; + + // register extglob compilers or escape exglobs if disabled + if (opts.extglob === false || opts.noext === true) { + snapdragon.compiler.use(escapeExtglobs); + } else { + snapdragon.use(extglob.compilers); + } + + snapdragon.use(function() { + this.options.star = this.options.star || function(/*node*/) { + return '[^\\\\/]*?'; + }; + }); + + // custom micromatch compilers + snapdragon.compiler + + // reset referenced compiler + .set('dot', dot) + .set('escape', escape) + .set('plus', plus) + .set('slash', slash) + .set('qmark', qmark) + .set('star', star) + .set('text', text); +}; + +function escapeExtglobs(compiler) { + compiler.set('paren', function(node) { + var val = ''; + visit(node, function(tok) { + if (tok.val) val += (/^\W/.test(tok.val) ? '\\' : '') + tok.val; + }); + return this.emit(val, node); + }); + + /** + * Visit `node` with the given `fn` + */ + + function visit(node, fn) { + return node.nodes ? mapVisit(node.nodes, fn) : fn(node); + } + + /** + * Map visit over array of `nodes`. + */ + + function mapVisit(nodes, fn) { + var len = nodes.length; + var idx = -1; + while (++idx < len) { + visit(nodes[idx], fn); + } + } +} + + +/***/ }), +/* 416 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Module dependencies + */ + +var util = __webpack_require__(18); +var toRegex = __webpack_require__(321); +var extend = __webpack_require__(334); + +/** + * Local dependencies + */ + +var compilers = __webpack_require__(417); +var parsers = __webpack_require__(418); +var cache = __webpack_require__(419); +var utils = __webpack_require__(421); +var MAX_LENGTH = 1024 * 64; + +/** + * The main function takes a list of strings and one or more + * glob patterns to use for matching. + * + * ```js + * var nm = require('nanomatch'); + * nm(list, patterns[, options]); + * + * console.log(nm(['a.js', 'a.txt'], ['*.js'])); + * //=> [ 'a.js' ] + * ``` + * @param {Array} `list` A list of strings to match + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of matches + * @summary false + * @api public + */ + +function nanomatch(list, patterns, options) { + patterns = utils.arrayify(patterns); + list = utils.arrayify(list); + + var len = patterns.length; + if (list.length === 0 || len === 0) { + return []; + } + + if (len === 1) { + return nanomatch.match(list, patterns[0], options); + } + + var negated = false; + var omit = []; + var keep = []; + var idx = -1; + + while (++idx < len) { + var pattern = patterns[idx]; + + if (typeof pattern === 'string' && pattern.charCodeAt(0) === 33 /* ! */) { + omit.push.apply(omit, nanomatch.match(list, pattern.slice(1), options)); + negated = true; + } else { + keep.push.apply(keep, nanomatch.match(list, pattern, options)); + } + } + + // minimatch.match parity + if (negated && keep.length === 0) { + if (options && options.unixify === false) { + keep = list.slice(); + } else { + var unixify = utils.unixify(options); + for (var i = 0; i < list.length; i++) { + keep.push(unixify(list[i])); + } + } + } + + var matches = utils.diff(keep, omit); + if (!options || options.nodupes !== false) { + return utils.unique(matches); + } + + return matches; +} + +/** + * Similar to the main function, but `pattern` must be a string. + * + * ```js + * var nm = require('nanomatch'); + * nm.match(list, pattern[, options]); + * + * console.log(nm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); + * //=> ['a.a', 'a.aa'] + * ``` + * @param {Array} `list` Array of strings to match + * @param {String} `pattern` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of matches + * @api public + */ + +nanomatch.match = function(list, pattern, options) { + if (Array.isArray(pattern)) { + throw new TypeError('expected pattern to be a string'); + } + + var unixify = utils.unixify(options); + var isMatch = memoize('match', pattern, options, nanomatch.matcher); + var matches = []; + + list = utils.arrayify(list); + var len = list.length; + var idx = -1; + + while (++idx < len) { + var ele = list[idx]; + if (ele === pattern || isMatch(ele)) { + matches.push(utils.value(ele, unixify, options)); + } + } + + // if no options were passed, uniquify results and return + if (typeof options === 'undefined') { + return utils.unique(matches); + } + + if (matches.length === 0) { + if (options.failglob === true) { + throw new Error('no matches found for "' + pattern + '"'); + } + if (options.nonull === true || options.nullglob === true) { + return [options.unescape ? utils.unescape(pattern) : pattern]; + } + } + + // if `opts.ignore` was defined, diff ignored list + if (options.ignore) { + matches = nanomatch.not(matches, options.ignore, options); + } + + return options.nodupes !== false ? utils.unique(matches) : matches; +}; + +/** + * Returns true if the specified `string` matches the given glob `pattern`. + * + * ```js + * var nm = require('nanomatch'); + * nm.isMatch(string, pattern[, options]); + * + * console.log(nm.isMatch('a.a', '*.a')); + * //=> true + * console.log(nm.isMatch('a.b', '*.a')); + * //=> false + * ``` + * @param {String} `string` String to match + * @param {String} `pattern` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if the string matches the glob pattern. + * @api public + */ + +nanomatch.isMatch = function(str, pattern, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + + if (utils.isEmptyString(str) || utils.isEmptyString(pattern)) { + return false; + } + + var equals = utils.equalsPattern(options); + if (equals(str)) { + return true; + } + + var isMatch = memoize('isMatch', pattern, options, nanomatch.matcher); + return isMatch(str); +}; + +/** + * Returns true if some of the elements in the given `list` match any of the + * given glob `patterns`. + * + * ```js + * var nm = require('nanomatch'); + * nm.some(list, patterns[, options]); + * + * console.log(nm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // true + * console.log(nm.some(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +nanomatch.some = function(list, patterns, options) { + if (typeof list === 'string') { + list = [list]; + } + + for (var i = 0; i < list.length; i++) { + if (nanomatch(list[i], patterns, options).length === 1) { + return true; + } + } + + return false; +}; + +/** + * Returns true if every element in the given `list` matches + * at least one of the given glob `patterns`. + * + * ```js + * var nm = require('nanomatch'); + * nm.every(list, patterns[, options]); + * + * console.log(nm.every('foo.js', ['foo.js'])); + * // true + * console.log(nm.every(['foo.js', 'bar.js'], ['*.js'])); + * // true + * console.log(nm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // false + * console.log(nm.every(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +nanomatch.every = function(list, patterns, options) { + if (typeof list === 'string') { + list = [list]; + } + + for (var i = 0; i < list.length; i++) { + if (nanomatch(list[i], patterns, options).length !== 1) { + return false; + } + } + + return true; +}; + +/** + * Returns true if **any** of the given glob `patterns` + * match the specified `string`. + * + * ```js + * var nm = require('nanomatch'); + * nm.any(string, patterns[, options]); + * + * console.log(nm.any('a.a', ['b.*', '*.a'])); + * //=> true + * console.log(nm.any('a.a', 'b.*')); + * //=> false + * ``` + * @param {String|Array} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +nanomatch.any = function(str, patterns, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + + if (utils.isEmptyString(str) || utils.isEmptyString(patterns)) { + return false; + } + + if (typeof patterns === 'string') { + patterns = [patterns]; + } + + for (var i = 0; i < patterns.length; i++) { + if (nanomatch.isMatch(str, patterns[i], options)) { + return true; + } + } + return false; +}; + +/** + * Returns true if **all** of the given `patterns` + * match the specified string. + * + * ```js + * var nm = require('nanomatch'); + * nm.all(string, patterns[, options]); + * + * console.log(nm.all('foo.js', ['foo.js'])); + * // true + * + * console.log(nm.all('foo.js', ['*.js', '!foo.js'])); + * // false + * + * console.log(nm.all('foo.js', ['*.js', 'foo.js'])); + * // true + * + * console.log(nm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); + * // true + * ``` + * @param {String|Array} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ + +nanomatch.all = function(str, patterns, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + + if (typeof patterns === 'string') { + patterns = [patterns]; + } + + for (var i = 0; i < patterns.length; i++) { + if (!nanomatch.isMatch(str, patterns[i], options)) { + return false; + } + } + return true; +}; + +/** + * Returns a list of strings that _**do not match any**_ of the given `patterns`. + * + * ```js + * var nm = require('nanomatch'); + * nm.not(list, patterns[, options]); + * + * console.log(nm.not(['a.a', 'b.b', 'c.c'], '*.a')); + * //=> ['b.b', 'c.c'] + * ``` + * @param {Array} `list` Array of strings to match. + * @param {String|Array} `patterns` One or more glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of strings that **do not match** the given patterns. + * @api public + */ + +nanomatch.not = function(list, patterns, options) { + var opts = extend({}, options); + var ignore = opts.ignore; + delete opts.ignore; + + list = utils.arrayify(list); + + var matches = utils.diff(list, nanomatch(list, patterns, opts)); + if (ignore) { + matches = utils.diff(matches, nanomatch(list, ignore)); + } + + return opts.nodupes !== false ? utils.unique(matches) : matches; +}; + +/** + * Returns true if the given `string` contains the given pattern. Similar + * to [.isMatch](#isMatch) but the pattern can match any part of the string. + * + * ```js + * var nm = require('nanomatch'); + * nm.contains(string, pattern[, options]); + * + * console.log(nm.contains('aa/bb/cc', '*b')); + * //=> true + * console.log(nm.contains('aa/bb/cc', '*d')); + * //=> false + * ``` + * @param {String} `str` The string to match. + * @param {String|Array} `patterns` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if the patter matches any part of `str`. + * @api public + */ + +nanomatch.contains = function(str, patterns, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string: "' + util.inspect(str) + '"'); + } + + if (typeof patterns === 'string') { + if (utils.isEmptyString(str) || utils.isEmptyString(patterns)) { + return false; + } + + var equals = utils.equalsPattern(patterns, options); + if (equals(str)) { + return true; + } + var contains = utils.containsPattern(patterns, options); + if (contains(str)) { + return true; + } + } + + var opts = extend({}, options, {contains: true}); + return nanomatch.any(str, patterns, opts); +}; + +/** + * Returns true if the given pattern and options should enable + * the `matchBase` option. + * @return {Boolean} + * @api private + */ + +nanomatch.matchBase = function(pattern, options) { + if (pattern && pattern.indexOf('/') !== -1 || !options) return false; + return options.basename === true || options.matchBase === true; +}; + +/** + * Filter the keys of the given object with the given `glob` pattern + * and `options`. Does not attempt to match nested keys. If you need this feature, + * use [glob-object][] instead. + * + * ```js + * var nm = require('nanomatch'); + * nm.matchKeys(object, patterns[, options]); + * + * var obj = { aa: 'a', ab: 'b', ac: 'c' }; + * console.log(nm.matchKeys(obj, '*b')); + * //=> { ab: 'b' } + * ``` + * @param {Object} `object` The object with keys to filter. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Object} Returns an object with only keys that match the given patterns. + * @api public + */ + +nanomatch.matchKeys = function(obj, patterns, options) { + if (!utils.isObject(obj)) { + throw new TypeError('expected the first argument to be an object'); + } + var keys = nanomatch(Object.keys(obj), patterns, options); + return utils.pick(obj, keys); +}; + +/** + * Returns a memoized matcher function from the given glob `pattern` and `options`. + * The returned function takes a string to match as its only argument and returns + * true if the string is a match. + * + * ```js + * var nm = require('nanomatch'); + * nm.matcher(pattern[, options]); + * + * var isMatch = nm.matcher('*.!(*a)'); + * console.log(isMatch('a.a')); + * //=> false + * console.log(isMatch('a.b')); + * //=> true + * ``` + * @param {String} `pattern` Glob pattern + * @param {Object} `options` See available [options](#options) for changing how matches are performed. + * @return {Function} Returns a matcher function. + * @api public + */ + +nanomatch.matcher = function matcher(pattern, options) { + if (utils.isEmptyString(pattern)) { + return function() { + return false; + }; + } + + if (Array.isArray(pattern)) { + return compose(pattern, options, matcher); + } + + // if pattern is a regex + if (pattern instanceof RegExp) { + return test(pattern); + } + + // if pattern is invalid + if (!utils.isString(pattern)) { + throw new TypeError('expected pattern to be an array, string or regex'); + } + + // if pattern is a non-glob string + if (!utils.hasSpecialChars(pattern)) { + if (options && options.nocase === true) { + pattern = pattern.toLowerCase(); + } + return utils.matchPath(pattern, options); + } + + // if pattern is a glob string + var re = nanomatch.makeRe(pattern, options); + + // if `options.matchBase` or `options.basename` is defined + if (nanomatch.matchBase(pattern, options)) { + return utils.matchBasename(re, options); + } + + function test(regex) { + var equals = utils.equalsPattern(options); + var unixify = utils.unixify(options); + + return function(str) { + if (equals(str)) { + return true; + } + + if (regex.test(unixify(str))) { + return true; + } + return false; + }; + } + + // create matcher function + var matcherFn = test(re); + // set result object from compiler on matcher function, + // as a non-enumerable property. useful for debugging + utils.define(matcherFn, 'result', re.result); + return matcherFn; +}; + +/** + * Returns an array of matches captured by `pattern` in `string, or + * `null` if the pattern did not match. + * + * ```js + * var nm = require('nanomatch'); + * nm.capture(pattern, string[, options]); + * + * console.log(nm.capture('test/*.js', 'test/foo.js')); + * //=> ['foo'] + * console.log(nm.capture('test/*.js', 'foo/bar.css')); + * //=> null + * ``` + * @param {String} `pattern` Glob pattern to use for matching. + * @param {String} `string` String to match + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. + * @api public + */ + +nanomatch.capture = function(pattern, str, options) { + var re = nanomatch.makeRe(pattern, extend({capture: true}, options)); + var unixify = utils.unixify(options); + + function match() { + return function(string) { + var match = re.exec(unixify(string)); + if (!match) { + return null; + } + + return match.slice(1); + }; + } + + var capture = memoize('capture', pattern, options, match); + return capture(str); +}; + +/** + * Create a regular expression from the given glob `pattern`. + * + * ```js + * var nm = require('nanomatch'); + * nm.makeRe(pattern[, options]); + * + * console.log(nm.makeRe('*.js')); + * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ + * ``` + * @param {String} `pattern` A glob pattern to convert to regex. + * @param {Object} `options` See available [options](#options) for changing how matches are performed. + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ + +nanomatch.makeRe = function(pattern, options) { + if (pattern instanceof RegExp) { + return pattern; + } + + if (typeof pattern !== 'string') { + throw new TypeError('expected pattern to be a string'); + } + + if (pattern.length > MAX_LENGTH) { + throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); + } + + function makeRe() { + var opts = utils.extend({wrap: false}, options); + var result = nanomatch.create(pattern, opts); + var regex = toRegex(result.output, opts); + utils.define(regex, 'result', result); + return regex; + } + + return memoize('makeRe', pattern, options, makeRe); +}; + +/** + * Parses the given glob `pattern` and returns an object with the compiled `output` + * and optional source `map`. + * + * ```js + * var nm = require('nanomatch'); + * nm.create(pattern[, options]); + * + * console.log(nm.create('abc/*.js')); + * // { options: { source: 'string', sourcemap: true }, + * // state: {}, + * // compilers: + * // { ... }, + * // output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', + * // ast: + * // { type: 'root', + * // errors: [], + * // nodes: + * // [ ... ], + * // dot: false, + * // input: 'abc/*.js' }, + * // parsingErrors: [], + * // map: + * // { version: 3, + * // sources: [ 'string' ], + * // names: [], + * // mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', + * // sourcesContent: [ 'abc/*.js' ] }, + * // position: { line: 1, column: 28 }, + * // content: {}, + * // files: {}, + * // idx: 6 } + * ``` + * @param {String} `pattern` Glob pattern to parse and compile. + * @param {Object} `options` Any [options](#options) to change how parsing and compiling is performed. + * @return {Object} Returns an object with the parsed AST, compiled string and optional source map. + * @api public + */ + +nanomatch.create = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + function create() { + return nanomatch.compile(nanomatch.parse(pattern, options), options); + } + return memoize('create', pattern, options, create); +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * var nm = require('nanomatch'); + * nm.parse(pattern[, options]); + * + * var ast = nm.parse('a/{b,c}/d'); + * console.log(ast); + * // { type: 'root', + * // errors: [], + * // input: 'a/{b,c}/d', + * // nodes: + * // [ { type: 'bos', val: '' }, + * // { type: 'text', val: 'a/' }, + * // { type: 'brace', + * // nodes: + * // [ { type: 'brace.open', val: '{' }, + * // { type: 'text', val: 'b,c' }, + * // { type: 'brace.close', val: '}' } ] }, + * // { type: 'text', val: '/d' }, + * // { type: 'eos', val: '' } ] } + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {Object} Returns an AST + * @api public + */ + +nanomatch.parse = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + function parse() { + var snapdragon = utils.instantiate(null, options); + parsers(snapdragon, options); + + var ast = snapdragon.parse(pattern, options); + utils.define(ast, 'snapdragon', snapdragon); + ast.input = pattern; + return ast; + } + + return memoize('parse', pattern, options, parse); +}; + +/** + * Compile the given `ast` or string with the given `options`. + * + * ```js + * var nm = require('nanomatch'); + * nm.compile(ast[, options]); + * + * var ast = nm.parse('a/{b,c}/d'); + * console.log(nm.compile(ast)); + * // { options: { source: 'string' }, + * // state: {}, + * // compilers: + * // { eos: [Function], + * // noop: [Function], + * // bos: [Function], + * // brace: [Function], + * // 'brace.open': [Function], + * // text: [Function], + * // 'brace.close': [Function] }, + * // output: [ 'a/(b|c)/d' ], + * // ast: + * // { ... }, + * // parsingErrors: [] } + * ``` + * @param {Object|String} `ast` + * @param {Object} `options` + * @return {Object} Returns an object that has an `output` property with the compiled string. + * @api public + */ + +nanomatch.compile = function(ast, options) { + if (typeof ast === 'string') { + ast = nanomatch.parse(ast, options); + } + + function compile() { + var snapdragon = utils.instantiate(ast, options); + compilers(snapdragon, options); + return snapdragon.compile(ast, options); + } + + return memoize('compile', ast.input, options, compile); +}; + +/** + * Clear the regex cache. + * + * ```js + * nm.clearCache(); + * ``` + * @api public + */ + +nanomatch.clearCache = function() { + nanomatch.cache.__data__ = {}; +}; + +/** + * Compose a matcher function with the given patterns. + * This allows matcher functions to be compiled once and + * called multiple times. + */ + +function compose(patterns, options, matcher) { + var matchers; + + return memoize('compose', String(patterns), options, function() { + return function(file) { + // delay composition until it's invoked the first time, + // after that it won't be called again + if (!matchers) { + matchers = []; + for (var i = 0; i < patterns.length; i++) { + matchers.push(matcher(patterns[i], options)); + } + } + + var len = matchers.length; + while (len--) { + if (matchers[len](file) === true) { + return true; + } + } + return false; + }; + }); +} + +/** + * Memoize a generated regex or function. A unique key is generated + * from the `type` (usually method name), the `pattern`, and + * user-defined options. + */ + +function memoize(type, pattern, options, fn) { + var key = utils.createKey(type + '=' + pattern, options); + + if (options && options.cache === false) { + return fn(pattern, options); + } + + if (cache.has(type, key)) { + return cache.get(type, key); + } + + var val = fn(pattern, options); + cache.set(type, key, val); + return val; +} + +/** + * Expose compiler, parser and cache on `nanomatch` + */ + +nanomatch.compilers = compilers; +nanomatch.parsers = parsers; +nanomatch.cache = cache; + +/** + * Expose `nanomatch` + * @type {Function} + */ + +module.exports = nanomatch; + + +/***/ }), +/* 417 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** +* Nanomatch compilers +*/ + +module.exports = function(nanomatch, options) { + function slash() { + if (options && typeof options.slash === 'string') { + return options.slash; + } + if (options && typeof options.slash === 'function') { + return options.slash.call(nanomatch); + } + return '\\\\/'; + } + + function star() { + if (options && typeof options.star === 'string') { + return options.star; + } + if (options && typeof options.star === 'function') { + return options.star.call(nanomatch); + } + return '[^' + slash() + ']*?'; + } + + var ast = nanomatch.ast = nanomatch.parser.ast; + ast.state = nanomatch.parser.state; + nanomatch.compiler.state = ast.state; + nanomatch.compiler + + /** + * Negation / escaping + */ + + .set('not', function(node) { + var prev = this.prev(); + if (this.options.nonegate === true || prev.type !== 'bos') { + return this.emit('\\' + node.val, node); + } + return this.emit(node.val, node); + }) + .set('escape', function(node) { + if (this.options.unescape && /^[-\w_.]/.test(node.val)) { + return this.emit(node.val, node); + } + return this.emit('\\' + node.val, node); + }) + .set('quoted', function(node) { + return this.emit(node.val, node); + }) + + /** + * Regex + */ + + .set('dollar', function(node) { + if (node.parent.type === 'bracket') { + return this.emit(node.val, node); + } + return this.emit('\\' + node.val, node); + }) + + /** + * Dot: "." + */ + + .set('dot', function(node) { + if (node.dotfiles === true) this.dotfiles = true; + return this.emit('\\' + node.val, node); + }) + + /** + * Slashes: "/" and "\" + */ + + .set('backslash', function(node) { + return this.emit(node.val, node); + }) + .set('slash', function(node, nodes, i) { + var val = '[' + slash() + ']'; + var parent = node.parent; + var prev = this.prev(); + + // set "node.hasSlash" to true on all ancestor parens nodes + while (parent.type === 'paren' && !parent.hasSlash) { + parent.hasSlash = true; + parent = parent.parent; + } + + if (prev.addQmark) { + val += '?'; + } + + // word boundary + if (node.rest.slice(0, 2) === '\\b') { + return this.emit(val, node); + } + + // globstars + if (node.parsed === '**' || node.parsed === './**') { + this.output = '(?:' + this.output; + return this.emit(val + ')?', node); + } + + // negation + if (node.parsed === '!**' && this.options.nonegate !== true) { + return this.emit(val + '?\\b', node); + } + return this.emit(val, node); + }) + + /** + * Square brackets + */ + + .set('bracket', function(node) { + var close = node.close; + var open = !node.escaped ? '[' : '\\['; + var negated = node.negated; + var inner = node.inner; + var val = node.val; + + if (node.escaped === true) { + inner = inner.replace(/\\?(\W)/g, '\\$1'); + negated = ''; + } + + if (inner === ']-') { + inner = '\\]\\-'; + } + + if (negated && inner.indexOf('.') === -1) { + inner += '.'; + } + if (negated && inner.indexOf('/') === -1) { + inner += '/'; + } + + val = open + negated + inner + close; + return this.emit(val, node); + }) + + /** + * Square: "[.]" (only matches a single character in brackets) + */ + + .set('square', function(node) { + var val = (/^\W/.test(node.val) ? '\\' : '') + node.val; + return this.emit(val, node); + }) + + /** + * Question mark: "?" + */ + + .set('qmark', function(node) { + var prev = this.prev(); + // don't use "slash" variable so that we always avoid + // matching backslashes and slashes with a qmark + var val = '[^.\\\\/]'; + if (this.options.dot || (prev.type !== 'bos' && prev.type !== 'slash')) { + val = '[^\\\\/]'; + } + + if (node.parsed.slice(-1) === '(') { + var ch = node.rest.charAt(0); + if (ch === '!' || ch === '=' || ch === ':') { + return this.emit(node.val, node); + } + } + + if (node.val.length > 1) { + val += '{' + node.val.length + '}'; + } + return this.emit(val, node); + }) + + /** + * Plus + */ + + .set('plus', function(node) { + var prev = node.parsed.slice(-1); + if (prev === ']' || prev === ')') { + return this.emit(node.val, node); + } + if (!this.output || (/[?*+]/.test(ch) && node.parent.type !== 'bracket')) { + return this.emit('\\+', node); + } + var ch = this.output.slice(-1); + if (/\w/.test(ch) && !node.inside) { + return this.emit('+\\+?', node); + } + return this.emit('+', node); + }) + + /** + * globstar: '**' + */ + + .set('globstar', function(node, nodes, i) { + if (!this.output) { + this.state.leadingGlobstar = true; + } + + var prev = this.prev(); + var before = this.prev(2); + var next = this.next(); + var after = this.next(2); + var type = prev.type; + var val = node.val; + + if (prev.type === 'slash' && next.type === 'slash') { + if (before.type === 'text') { + this.output += '?'; + + if (after.type !== 'text') { + this.output += '\\b'; + } + } + } + + var parsed = node.parsed; + if (parsed.charAt(0) === '!') { + parsed = parsed.slice(1); + } + + var isInside = node.isInside.paren || node.isInside.brace; + if (parsed && type !== 'slash' && type !== 'bos' && !isInside) { + val = star(); + } else { + val = this.options.dot !== true + ? '(?:(?!(?:[' + slash() + ']|^)\\.).)*?' + : '(?:(?!(?:[' + slash() + ']|^)(?:\\.{1,2})($|[' + slash() + ']))(?!\\.{2}).)*?'; + } + + if ((type === 'slash' || type === 'bos') && this.options.dot !== true) { + val = '(?!\\.)' + val; + } + + if (prev.type === 'slash' && next.type === 'slash' && before.type !== 'text') { + if (after.type === 'text' || after.type === 'star') { + node.addQmark = true; + } + } + + if (this.options.capture) { + val = '(' + val + ')'; + } + + return this.emit(val, node); + }) + + /** + * Star: "*" + */ + + .set('star', function(node, nodes, i) { + var prior = nodes[i - 2] || {}; + var prev = this.prev(); + var next = this.next(); + var type = prev.type; + + function isStart(n) { + return n.type === 'bos' || n.type === 'slash'; + } + + if (this.output === '' && this.options.contains !== true) { + this.output = '(?![' + slash() + '])'; + } + + if (type === 'bracket' && this.options.bash === false) { + var str = next && next.type === 'bracket' ? star() : '*?'; + if (!prev.nodes || prev.nodes[1].type !== 'posix') { + return this.emit(str, node); + } + } + + var prefix = !this.dotfiles && type !== 'text' && type !== 'escape' + ? (this.options.dot ? '(?!(?:^|[' + slash() + '])\\.{1,2}(?:$|[' + slash() + ']))' : '(?!\\.)') + : ''; + + if (isStart(prev) || (isStart(prior) && type === 'not')) { + if (prefix !== '(?!\\.)') { + prefix += '(?!(\\.{2}|\\.[' + slash() + ']))(?=.)'; + } else { + prefix += '(?=.)'; + } + } else if (prefix === '(?!\\.)') { + prefix = ''; + } + + if (prev.type === 'not' && prior.type === 'bos' && this.options.dot === true) { + this.output = '(?!\\.)' + this.output; + } + + var output = prefix + star(); + if (this.options.capture) { + output = '(' + output + ')'; + } + + return this.emit(output, node); + }) + + /** + * Text + */ + + .set('text', function(node) { + return this.emit(node.val, node); + }) + + /** + * End-of-string + */ + + .set('eos', function(node) { + var prev = this.prev(); + var val = node.val; + + this.output = '(?:\\.[' + slash() + '](?=.))?' + this.output; + if (this.state.metachar && prev.type !== 'qmark' && prev.type !== 'slash') { + val += (this.options.contains ? '[' + slash() + ']?' : '(?:[' + slash() + ']|$)'); + } + + return this.emit(val, node); + }); + + /** + * Allow custom compilers to be passed on options + */ + + if (options && typeof options.compilers === 'function') { + options.compilers(nanomatch.compiler); + } +}; + + + +/***/ }), +/* 418 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var regexNot = __webpack_require__(338); +var toRegex = __webpack_require__(321); + +/** + * Characters to use in negation regex (we want to "not" match + * characters that are matched by other parsers) + */ + +var cached; +var NOT_REGEX = '[\\[!*+?$^"\'.\\\\/]+'; +var not = createTextRegex(NOT_REGEX); + +/** + * Nanomatch parsers + */ + +module.exports = function(nanomatch, options) { + var parser = nanomatch.parser; + var opts = parser.options; + + parser.state = { + slashes: 0, + paths: [] + }; + + parser.ast.state = parser.state; + parser + + /** + * Beginning-of-string + */ + + .capture('prefix', function() { + if (this.parsed) return; + var m = this.match(/^\.[\\/]/); + if (!m) return; + this.state.strictOpen = !!this.options.strictOpen; + this.state.addPrefix = true; + }) + + /** + * Escape: "\\." + */ + + .capture('escape', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(/^(?:\\(.)|([$^]))/); + if (!m) return; + + return pos({ + type: 'escape', + val: m[2] || m[1] + }); + }) + + /** + * Quoted strings + */ + + .capture('quoted', function() { + var pos = this.position(); + var m = this.match(/^["']/); + if (!m) return; + + var quote = m[0]; + if (this.input.indexOf(quote) === -1) { + return pos({ + type: 'escape', + val: quote + }); + } + + var tok = advanceTo(this.input, quote); + this.consume(tok.len); + + return pos({ + type: 'quoted', + val: tok.esc + }); + }) + + /** + * Negations: "!" + */ + + .capture('not', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(this.notRegex || /^!+/); + if (!m) return; + var val = m[0]; + + var isNegated = (val.length % 2) === 1; + if (parsed === '' && !isNegated) { + val = ''; + } + + // if nothing has been parsed, we know `!` is at the start, + // so we need to wrap the result in a negation regex + if (parsed === '' && isNegated && this.options.nonegate !== true) { + this.bos.val = '(?!^(?:'; + this.append = ')$).*'; + val = ''; + } + return pos({ + type: 'not', + val: val + }); + }) + + /** + * Dot: "." + */ + + .capture('dot', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\.+/); + if (!m) return; + + var val = m[0]; + this.state.dot = val === '.' && (parsed === '' || parsed.slice(-1) === '/'); + + return pos({ + type: 'dot', + dotfiles: this.state.dot, + val: val + }); + }) + + /** + * Plus: "+" + */ + + .capture('plus', /^\+(?!\()/) + + /** + * Question mark: "?" + */ + + .capture('qmark', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\?+(?!\()/); + if (!m) return; + + this.state.metachar = true; + this.state.qmark = true; + + return pos({ + type: 'qmark', + parsed: parsed, + val: m[0] + }); + }) + + /** + * Globstar: "**" + */ + + .capture('globstar', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\*{2}(?![*(])(?=[,)/]|$)/); + if (!m) return; + + var type = opts.noglobstar !== true ? 'globstar' : 'star'; + var node = pos({type: type, parsed: parsed}); + this.state.metachar = true; + + while (this.input.slice(0, 4) === '/**/') { + this.input = this.input.slice(3); + } + + node.isInside = { + brace: this.isInside('brace'), + paren: this.isInside('paren') + }; + + if (type === 'globstar') { + this.state.globstar = true; + node.val = '**'; + + } else { + this.state.star = true; + node.val = '*'; + } + + return node; + }) + + /** + * Star: "*" + */ + + .capture('star', function() { + var pos = this.position(); + var starRe = /^(?:\*(?![*(])|[*]{3,}(?!\()|[*]{2}(?![(/]|$)|\*(?=\*\())/; + var m = this.match(starRe); + if (!m) return; + + this.state.metachar = true; + this.state.star = true; + return pos({ + type: 'star', + val: m[0] + }); + }) + + /** + * Slash: "/" + */ + + .capture('slash', function() { + var pos = this.position(); + var m = this.match(/^\//); + if (!m) return; + + this.state.slashes++; + return pos({ + type: 'slash', + val: m[0] + }); + }) + + /** + * Backslash: "\\" + */ + + .capture('backslash', function() { + var pos = this.position(); + var m = this.match(/^\\(?![*+?(){}[\]'"])/); + if (!m) return; + + var val = m[0]; + + if (this.isInside('bracket')) { + val = '\\'; + } else if (val.length > 1) { + val = '\\\\'; + } + + return pos({ + type: 'backslash', + val: val + }); + }) + + /** + * Square: "[.]" + */ + + .capture('square', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(/^\[([^!^\\])\]/); + if (!m) return; + + return pos({ + type: 'square', + val: m[1] + }); + }) + + /** + * Brackets: "[...]" (basic, this can be overridden by other parsers) + */ + + .capture('bracket', function() { + var pos = this.position(); + var m = this.match(/^(?:\[([!^]?)([^\]]+|\]-)(\]|[^*+?]+)|\[)/); + if (!m) return; + + var val = m[0]; + var negated = m[1] ? '^' : ''; + var inner = (m[2] || '').replace(/\\\\+/, '\\\\'); + var close = m[3] || ''; + + if (m[2] && inner.length < m[2].length) { + val = val.replace(/\\\\+/, '\\\\'); + } + + var esc = this.input.slice(0, 2); + if (inner === '' && esc === '\\]') { + inner += esc; + this.consume(2); + + var str = this.input; + var idx = -1; + var ch; + + while ((ch = str[++idx])) { + this.consume(1); + if (ch === ']') { + close = ch; + break; + } + inner += ch; + } + } + + return pos({ + type: 'bracket', + val: val, + escaped: close !== ']', + negated: negated, + inner: inner, + close: close + }); + }) + + /** + * Text + */ + + .capture('text', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(not); + if (!m || !m[0]) return; + + return pos({ + type: 'text', + val: m[0] + }); + }); + + /** + * Allow custom parsers to be passed on options + */ + + if (options && typeof options.parsers === 'function') { + options.parsers(nanomatch.parser); + } +}; + +/** + * Advance to the next non-escaped character + */ + +function advanceTo(input, endChar) { + var ch = input.charAt(0); + var tok = { len: 1, val: '', esc: '' }; + var idx = 0; + + function advance() { + if (ch !== '\\') { + tok.esc += '\\' + ch; + tok.val += ch; + } + + ch = input.charAt(++idx); + tok.len++; + + if (ch === '\\') { + advance(); + advance(); + } + } + + while (ch && ch !== endChar) { + advance(); + } + return tok; +} + +/** + * Create text regex + */ + +function createTextRegex(pattern) { + if (cached) return cached; + var opts = {contains: true, strictClose: false}; + var not = regexNot.create(pattern, opts); + var re = toRegex('^(?:[*]\\((?=.)|' + not + ')', opts); + return (cached = re); +} + +/** + * Expose negation string + */ + +module.exports.not = NOT_REGEX; + + +/***/ }), +/* 419 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = new (__webpack_require__(420))(); + + +/***/ }), +/* 420 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * fragment-cache + * + * Copyright (c) 2016-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +var MapCache = __webpack_require__(413); + +/** + * Create a new `FragmentCache` with an optional object to use for `caches`. + * + * ```js + * var fragment = new FragmentCache(); + * ``` + * @name FragmentCache + * @param {String} `cacheName` + * @return {Object} Returns the [map-cache][] instance. + * @api public + */ + +function FragmentCache(caches) { + this.caches = caches || {}; +} + +/** + * Prototype + */ + +FragmentCache.prototype = { + + /** + * Get cache `name` from the `fragment.caches` object. Creates a new + * `MapCache` if it doesn't already exist. + * + * ```js + * var cache = fragment.cache('files'); + * console.log(fragment.caches.hasOwnProperty('files')); + * //=> true + * ``` + * @name .cache + * @param {String} `cacheName` + * @return {Object} Returns the [map-cache][] instance. + * @api public + */ + + cache: function(cacheName) { + return this.caches[cacheName] || (this.caches[cacheName] = new MapCache()); + }, + + /** + * Set a value for property `key` on cache `name` + * + * ```js + * fragment.set('files', 'somefile.js', new File({path: 'somefile.js'})); + * ``` + * @name .set + * @param {String} `name` + * @param {String} `key` Property name to set + * @param {any} `val` The value of `key` + * @return {Object} The cache instance for chaining + * @api public + */ + + set: function(cacheName, key, val) { + var cache = this.cache(cacheName); + cache.set(key, val); + return cache; + }, + + /** + * Returns true if a non-undefined value is set for `key` on fragment cache `name`. + * + * ```js + * var cache = fragment.cache('files'); + * cache.set('somefile.js'); + * + * console.log(cache.has('somefile.js')); + * //=> true + * + * console.log(cache.has('some-other-file.js')); + * //=> false + * ``` + * @name .has + * @param {String} `name` Cache name + * @param {String} `key` Optionally specify a property to check for on cache `name` + * @return {Boolean} + * @api public + */ + + has: function(cacheName, key) { + return typeof this.get(cacheName, key) !== 'undefined'; + }, + + /** + * Get `name`, or if specified, the value of `key`. Invokes the [cache]() method, + * so that cache `name` will be created it doesn't already exist. If `key` is not passed, + * the entire cache (`name`) is returned. + * + * ```js + * var Vinyl = require('vinyl'); + * var cache = fragment.cache('files'); + * cache.set('somefile.js', new Vinyl({path: 'somefile.js'})); + * console.log(cache.get('somefile.js')); + * //=> + * ``` + * @name .get + * @param {String} `name` + * @return {Object} Returns cache `name`, or the value of `key` if specified + * @api public + */ + + get: function(name, key) { + var cache = this.cache(name); + if (typeof key === 'string') { + return cache.get(key); + } + return cache; + } +}; + +/** + * Expose `FragmentCache` + */ + +exports = module.exports = FragmentCache; + + +/***/ }), +/* 421 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = module.exports; +var path = __webpack_require__(6); + +/** + * Module dependencies + */ + +var isWindows = __webpack_require__(422)(); +var Snapdragon = __webpack_require__(358); +utils.define = __webpack_require__(328); +utils.diff = __webpack_require__(423); +utils.extend = __webpack_require__(334); +utils.pick = __webpack_require__(424); +utils.typeOf = __webpack_require__(331); +utils.unique = __webpack_require__(339); + +/** + * Returns true if the given value is effectively an empty string + */ + +utils.isEmptyString = function(val) { + return String(val) === '' || String(val) === './'; +}; + +/** + * Returns true if the platform is windows, or `path.sep` is `\\`. + * This is defined as a function to allow `path.sep` to be set in unit tests, + * or by the user, if there is a reason to do so. + * @return {Boolean} + */ + +utils.isWindows = function() { + return path.sep === '\\' || isWindows === true; +}; + +/** + * Return the last element from an array + */ + +utils.last = function(arr, n) { + return arr[arr.length - (n || 1)]; +}; + +/** + * Get the `Snapdragon` instance to use + */ + +utils.instantiate = function(ast, options) { + var snapdragon; + // if an instance was created by `.parse`, use that instance + if (utils.typeOf(ast) === 'object' && ast.snapdragon) { + snapdragon = ast.snapdragon; + // if the user supplies an instance on options, use that instance + } else if (utils.typeOf(options) === 'object' && options.snapdragon) { + snapdragon = options.snapdragon; + // create a new instance + } else { + snapdragon = new Snapdragon(options); + } + + utils.define(snapdragon, 'parse', function(str, options) { + var parsed = Snapdragon.prototype.parse.call(this, str, options); + parsed.input = str; + + // escape unmatched brace/bracket/parens + var last = this.parser.stack.pop(); + if (last && this.options.strictErrors !== true) { + var open = last.nodes[0]; + var inner = last.nodes[1]; + if (last.type === 'bracket') { + if (inner.val.charAt(0) === '[') { + inner.val = '\\' + inner.val; + } + + } else { + open.val = '\\' + open.val; + var sibling = open.parent.nodes[1]; + if (sibling.type === 'star') { + sibling.loose = true; + } + } + } + + // add non-enumerable parser reference + utils.define(parsed, 'parser', this.parser); + return parsed; + }); + + return snapdragon; +}; + +/** + * Create the key to use for memoization. The key is generated + * by iterating over the options and concatenating key-value pairs + * to the pattern string. + */ + +utils.createKey = function(pattern, options) { + if (typeof options === 'undefined') { + return pattern; + } + var key = pattern; + for (var prop in options) { + if (options.hasOwnProperty(prop)) { + key += ';' + prop + '=' + String(options[prop]); + } + } + return key; +}; + +/** + * Cast `val` to an array + * @return {Array} + */ + +utils.arrayify = function(val) { + if (typeof val === 'string') return [val]; + return val ? (Array.isArray(val) ? val : [val]) : []; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isString = function(val) { + return typeof val === 'string'; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isRegex = function(val) { + return utils.typeOf(val) === 'regexp'; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isObject = function(val) { + return utils.typeOf(val) === 'object'; +}; + +/** + * Escape regex characters in the given string + */ + +utils.escapeRegex = function(str) { + return str.replace(/[-[\]{}()^$|*+?.\\/\s]/g, '\\$&'); +}; + +/** + * Combines duplicate characters in the provided `input` string. + * @param {String} `input` + * @returns {String} + */ + +utils.combineDupes = function(input, patterns) { + patterns = utils.arrayify(patterns).join('|').split('|'); + patterns = patterns.map(function(s) { + return s.replace(/\\?([+*\\/])/g, '\\$1'); + }); + var substr = patterns.join('|'); + var regex = new RegExp('(' + substr + ')(?=\\1)', 'g'); + return input.replace(regex, ''); +}; + +/** + * Returns true if the given `str` has special characters + */ + +utils.hasSpecialChars = function(str) { + return /(?:(?:(^|\/)[!.])|[*?+()|[\]{}]|[+@]\()/.test(str); +}; + +/** + * Normalize slashes in the given filepath. + * + * @param {String} `filepath` + * @return {String} + */ + +utils.toPosixPath = function(str) { + return str.replace(/\\+/g, '/'); +}; + +/** + * Strip backslashes before special characters in a string. + * + * @param {String} `str` + * @return {String} + */ + +utils.unescape = function(str) { + return utils.toPosixPath(str.replace(/\\(?=[*+?!.])/g, '')); +}; + +/** + * Strip the drive letter from a windows filepath + * @param {String} `fp` + * @return {String} + */ + +utils.stripDrive = function(fp) { + return utils.isWindows() ? fp.replace(/^[a-z]:[\\/]+?/i, '/') : fp; +}; + +/** + * Strip the prefix from a filepath + * @param {String} `fp` + * @return {String} + */ + +utils.stripPrefix = function(str) { + if (str.charAt(0) === '.' && (str.charAt(1) === '/' || str.charAt(1) === '\\')) { + return str.slice(2); + } + return str; +}; + +/** + * Returns true if `str` is a common character that doesn't need + * to be processed to be used for matching. + * @param {String} `str` + * @return {Boolean} + */ + +utils.isSimpleChar = function(str) { + return str.trim() === '' || str === '.'; +}; + +/** + * Returns true if the given str is an escaped or + * unescaped path character + */ + +utils.isSlash = function(str) { + return str === '/' || str === '\\/' || str === '\\' || str === '\\\\'; +}; + +/** + * Returns a function that returns true if the given + * pattern matches or contains a `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.matchPath = function(pattern, options) { + return (options && options.contains) + ? utils.containsPattern(pattern, options) + : utils.equalsPattern(pattern, options); +}; + +/** + * Returns true if the given (original) filepath or unixified path are equal + * to the given pattern. + */ + +utils._equals = function(filepath, unixPath, pattern) { + return pattern === filepath || pattern === unixPath; +}; + +/** + * Returns true if the given (original) filepath or unixified path contain + * the given pattern. + */ + +utils._contains = function(filepath, unixPath, pattern) { + return filepath.indexOf(pattern) !== -1 || unixPath.indexOf(pattern) !== -1; +}; + +/** + * Returns a function that returns true if the given + * pattern is the same as a given `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.equalsPattern = function(pattern, options) { + var unixify = utils.unixify(options); + options = options || {}; + + return function fn(filepath) { + var equal = utils._equals(filepath, unixify(filepath), pattern); + if (equal === true || options.nocase !== true) { + return equal; + } + var lower = filepath.toLowerCase(); + return utils._equals(lower, unixify(lower), pattern); + }; +}; + +/** + * Returns a function that returns true if the given + * pattern contains a `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.containsPattern = function(pattern, options) { + var unixify = utils.unixify(options); + options = options || {}; + + return function(filepath) { + var contains = utils._contains(filepath, unixify(filepath), pattern); + if (contains === true || options.nocase !== true) { + return contains; + } + var lower = filepath.toLowerCase(); + return utils._contains(lower, unixify(lower), pattern); + }; +}; + +/** + * Returns a function that returns true if the given + * regex matches the `filename` of a file path. + * + * @param {RegExp} `re` Matching regex + * @return {Function} + */ + +utils.matchBasename = function(re) { + return function(filepath) { + return re.test(filepath) || re.test(path.basename(filepath)); + }; +}; + +/** + * Returns the given value unchanced. + * @return {any} + */ + +utils.identity = function(val) { + return val; +}; + +/** + * Determines the filepath to return based on the provided options. + * @return {any} + */ + +utils.value = function(str, unixify, options) { + if (options && options.unixify === false) { + return str; + } + if (options && typeof options.unixify === 'function') { + return options.unixify(str); + } + return unixify(str); +}; + +/** + * Returns a function that normalizes slashes in a string to forward + * slashes, strips `./` from beginning of paths, and optionally unescapes + * special characters. + * @return {Function} + */ + +utils.unixify = function(options) { + var opts = options || {}; + return function(filepath) { + if (opts.stripPrefix !== false) { + filepath = utils.stripPrefix(filepath); + } + if (opts.unescape === true) { + filepath = utils.unescape(filepath); + } + if (opts.unixify === true || utils.isWindows()) { + filepath = utils.toPosixPath(filepath); + } + return filepath; + }; +}; + + +/***/ }), +/* 422 */ +/***/ (function(module, exports, __webpack_require__) { + +var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! + * is-windows + * + * Copyright © 2015-2018, Jon Schlinkert. + * Released under the MIT License. + */ + +(function(factory) { + if (exports && typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = factory(); + } else if (true) { + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), + __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? + (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else {} +})(function() { + 'use strict'; + return function isWindows() { + return process && (process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE)); + }; +}); + + +/***/ }), +/* 423 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * arr-diff + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + + + +module.exports = function diff(arr/*, arrays*/) { + var len = arguments.length; + var idx = 0; + while (++idx < len) { + arr = diffArray(arr, arguments[idx]); + } + return arr; +}; + +function diffArray(one, two) { + if (!Array.isArray(two)) { + return one.slice(); + } + + var tlen = two.length + var olen = one.length; + var idx = -1; + var arr = []; + + while (++idx < olen) { + var ele = one[idx]; + + var hasEle = false; + for (var i = 0; i < tlen; i++) { + var val = two[i]; + + if (ele === val) { + hasEle = true; + break; + } + } + + if (hasEle === false) { + arr.push(ele); + } + } + return arr; +} + + +/***/ }), +/* 424 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/*! + * object.pick + * + * Copyright (c) 2014-2015 Jon Schlinkert, contributors. + * Licensed under the MIT License + */ + + + +var isObject = __webpack_require__(329); + +module.exports = function pick(obj, keys) { + if (!isObject(obj) && typeof obj !== 'function') { + return {}; + } + + var res = {}; + if (typeof keys === 'string') { + if (keys in obj) { + res[keys] = obj[keys]; + } + return res; + } + + var len = keys.length; + var idx = -1; + + while (++idx < len) { + var key = keys[idx]; + if (key in obj) { + res[key] = obj[key]; + } + } + return res; +}; + + +/***/ }), +/* 425 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Module dependencies + */ + +var extend = __webpack_require__(340); +var unique = __webpack_require__(339); +var toRegex = __webpack_require__(321); + +/** + * Local dependencies + */ + +var compilers = __webpack_require__(426); +var parsers = __webpack_require__(432); +var Extglob = __webpack_require__(434); +var utils = __webpack_require__(433); +var MAX_LENGTH = 1024 * 64; + +/** + * Convert the given `extglob` pattern into a regex-compatible string. Returns + * an object with the compiled result and the parsed AST. + * + * ```js + * var extglob = require('extglob'); + * console.log(extglob('*.!(*a)')); + * //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?' + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {String} + * @api public + */ + +function extglob(pattern, options) { + return extglob.create(pattern, options).output; +} + +/** + * Takes an array of strings and an extglob pattern and returns a new + * array that contains only the strings that match the pattern. + * + * ```js + * var extglob = require('extglob'); + * console.log(extglob.match(['a.a', 'a.b', 'a.c'], '*.!(*a)')); + * //=> ['a.b', 'a.c'] + * ``` + * @param {Array} `list` Array of strings to match + * @param {String} `pattern` Extglob pattern + * @param {Object} `options` + * @return {Array} Returns an array of matches + * @api public + */ + +extglob.match = function(list, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected pattern to be a string'); + } + + list = utils.arrayify(list); + var isMatch = extglob.matcher(pattern, options); + var len = list.length; + var idx = -1; + var matches = []; + + while (++idx < len) { + var ele = list[idx]; + + if (isMatch(ele)) { + matches.push(ele); + } + } + + // if no options were passed, uniquify results and return + if (typeof options === 'undefined') { + return unique(matches); + } + + if (matches.length === 0) { + if (options.failglob === true) { + throw new Error('no matches found for "' + pattern + '"'); + } + if (options.nonull === true || options.nullglob === true) { + return [pattern.split('\\').join('')]; + } + } + + return options.nodupes !== false ? unique(matches) : matches; +}; + +/** + * Returns true if the specified `string` matches the given + * extglob `pattern`. + * + * ```js + * var extglob = require('extglob'); + * + * console.log(extglob.isMatch('a.a', '*.!(*a)')); + * //=> false + * console.log(extglob.isMatch('a.b', '*.!(*a)')); + * //=> true + * ``` + * @param {String} `string` String to match + * @param {String} `pattern` Extglob pattern + * @param {String} `options` + * @return {Boolean} + * @api public + */ + +extglob.isMatch = function(str, pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected pattern to be a string'); + } + + if (typeof str !== 'string') { + throw new TypeError('expected a string'); + } + + if (pattern === str) { + return true; + } + + if (pattern === '' || pattern === ' ' || pattern === '.') { + return pattern === str; + } + + var isMatch = utils.memoize('isMatch', pattern, options, extglob.matcher); + return isMatch(str); +}; + +/** + * Returns true if the given `string` contains the given pattern. Similar to `.isMatch` but + * the pattern can match any part of the string. + * + * ```js + * var extglob = require('extglob'); + * console.log(extglob.contains('aa/bb/cc', '*b')); + * //=> true + * console.log(extglob.contains('aa/bb/cc', '*d')); + * //=> false + * ``` + * @param {String} `str` The string to match. + * @param {String} `pattern` Glob pattern to use for matching. + * @param {Object} `options` + * @return {Boolean} Returns true if the patter matches any part of `str`. + * @api public + */ + +extglob.contains = function(str, pattern, options) { + if (typeof str !== 'string') { + throw new TypeError('expected a string'); + } + + if (pattern === '' || pattern === ' ' || pattern === '.') { + return pattern === str; + } + + var opts = extend({}, options, {contains: true}); + opts.strictClose = false; + opts.strictOpen = false; + return extglob.isMatch(str, pattern, opts); +}; + +/** + * Takes an extglob pattern and returns a matcher function. The returned + * function takes the string to match as its only argument. + * + * ```js + * var extglob = require('extglob'); + * var isMatch = extglob.matcher('*.!(*a)'); + * + * console.log(isMatch('a.a')); + * //=> false + * console.log(isMatch('a.b')); + * //=> true + * ``` + * @param {String} `pattern` Extglob pattern + * @param {String} `options` + * @return {Boolean} + * @api public + */ + +extglob.matcher = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected pattern to be a string'); + } + + function matcher() { + var re = extglob.makeRe(pattern, options); + return function(str) { + return re.test(str); + }; + } + + return utils.memoize('matcher', pattern, options, matcher); +}; + +/** + * Convert the given `extglob` pattern into a regex-compatible string. Returns + * an object with the compiled result and the parsed AST. + * + * ```js + * var extglob = require('extglob'); + * console.log(extglob.create('*.!(*a)').output); + * //=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?' + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +extglob.create = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected pattern to be a string'); + } + + function create() { + var ext = new Extglob(options); + var ast = ext.parse(pattern, options); + return ext.compile(ast, options); + } + + return utils.memoize('create', pattern, options, create); +}; + +/** + * Returns an array of matches captured by `pattern` in `string`, or `null` + * if the pattern did not match. + * + * ```js + * var extglob = require('extglob'); + * extglob.capture(pattern, string[, options]); + * + * console.log(extglob.capture('test/*.js', 'test/foo.js')); + * //=> ['foo'] + * console.log(extglob.capture('test/*.js', 'foo/bar.css')); + * //=> null + * ``` + * @param {String} `pattern` Glob pattern to use for matching. + * @param {String} `string` String to match + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. + * @api public + */ + +extglob.capture = function(pattern, str, options) { + var re = extglob.makeRe(pattern, extend({capture: true}, options)); + + function match() { + return function(string) { + var match = re.exec(string); + if (!match) { + return null; + } + + return match.slice(1); + }; + } + + var capture = utils.memoize('capture', pattern, options, match); + return capture(str); +}; + +/** + * Create a regular expression from the given `pattern` and `options`. + * + * ```js + * var extglob = require('extglob'); + * var re = extglob.makeRe('*.!(*a)'); + * console.log(re); + * //=> /^[^\/]*?\.(?![^\/]*?a)[^\/]*?$/ + * ``` + * @param {String} `pattern` The pattern to convert to regex. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +extglob.makeRe = function(pattern, options) { + if (pattern instanceof RegExp) { + return pattern; + } + + if (typeof pattern !== 'string') { + throw new TypeError('expected pattern to be a string'); + } + + if (pattern.length > MAX_LENGTH) { + throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); + } + + function makeRe() { + var opts = extend({strictErrors: false}, options); + if (opts.strictErrors === true) opts.strict = true; + var res = extglob.create(pattern, opts); + return toRegex(res.output, opts); + } + + var regex = utils.memoize('makeRe', pattern, options, makeRe); + if (regex.source.length > MAX_LENGTH) { + throw new SyntaxError('potentially malicious regex detected'); + } + + return regex; +}; + +/** + * Cache + */ + +extglob.cache = utils.cache; +extglob.clearCache = function() { + extglob.cache.__data__ = {}; +}; + +/** + * Expose `Extglob` constructor, parsers and compilers + */ + +extglob.Extglob = Extglob; +extglob.compilers = compilers; +extglob.parsers = parsers; + +/** + * Expose `extglob` + * @type {Function} + */ + +module.exports = extglob; + + +/***/ }), +/* 426 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var brackets = __webpack_require__(427); + +/** + * Extglob compilers + */ + +module.exports = function(extglob) { + function star() { + if (typeof extglob.options.star === 'function') { + return extglob.options.star.apply(this, arguments); + } + if (typeof extglob.options.star === 'string') { + return extglob.options.star; + } + return '.*?'; + } + + /** + * Use `expand-brackets` compilers + */ + + extglob.use(brackets.compilers); + extglob.compiler + + /** + * Escaped: "\\*" + */ + + .set('escape', function(node) { + return this.emit(node.val, node); + }) + + /** + * Dot: "." + */ + + .set('dot', function(node) { + return this.emit('\\' + node.val, node); + }) + + /** + * Question mark: "?" + */ + + .set('qmark', function(node) { + var val = '[^\\\\/.]'; + var prev = this.prev(); + + if (node.parsed.slice(-1) === '(') { + var ch = node.rest.charAt(0); + if (ch !== '!' && ch !== '=' && ch !== ':') { + return this.emit(val, node); + } + return this.emit(node.val, node); + } + + if (prev.type === 'text' && prev.val) { + return this.emit(val, node); + } + + if (node.val.length > 1) { + val += '{' + node.val.length + '}'; + } + return this.emit(val, node); + }) + + /** + * Plus: "+" + */ + + .set('plus', function(node) { + var prev = node.parsed.slice(-1); + if (prev === ']' || prev === ')') { + return this.emit(node.val, node); + } + var ch = this.output.slice(-1); + if (!this.output || (/[?*+]/.test(ch) && node.parent.type !== 'bracket')) { + return this.emit('\\+', node); + } + if (/\w/.test(ch) && !node.inside) { + return this.emit('+\\+?', node); + } + return this.emit('+', node); + }) + + /** + * Star: "*" + */ + + .set('star', function(node) { + var prev = this.prev(); + var prefix = prev.type !== 'text' && prev.type !== 'escape' + ? '(?!\\.)' + : ''; + + return this.emit(prefix + star.call(this, node), node); + }) + + /** + * Parens + */ + + .set('paren', function(node) { + return this.mapVisit(node.nodes); + }) + .set('paren.open', function(node) { + var capture = this.options.capture ? '(' : ''; + + switch (node.parent.prefix) { + case '!': + case '^': + return this.emit(capture + '(?:(?!(?:', node); + case '*': + case '+': + case '?': + case '@': + return this.emit(capture + '(?:', node); + default: { + var val = node.val; + if (this.options.bash === true) { + val = '\\' + val; + } else if (!this.options.capture && val === '(' && node.parent.rest[0] !== '?') { + val += '?:'; + } + + return this.emit(val, node); + } + } + }) + .set('paren.close', function(node) { + var capture = this.options.capture ? ')' : ''; + + switch (node.prefix) { + case '!': + case '^': + var prefix = /^(\)|$)/.test(node.rest) ? '$' : ''; + var str = star.call(this, node); + + // if the extglob has a slash explicitly defined, we know the user wants + // to match slashes, so we need to ensure the "star" regex allows for it + if (node.parent.hasSlash && !this.options.star && this.options.slash !== false) { + str = '.*?'; + } + + return this.emit(prefix + ('))' + str + ')') + capture, node); + case '*': + case '+': + case '?': + return this.emit(')' + node.prefix + capture, node); + case '@': + return this.emit(')' + capture, node); + default: { + var val = (this.options.bash === true ? '\\' : '') + ')'; + return this.emit(val, node); + } + } + }) + + /** + * Text + */ + + .set('text', function(node) { + var val = node.val.replace(/[\[\]]/g, '\\$&'); + return this.emit(val, node); + }); +}; + + +/***/ }), +/* 427 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Local dependencies + */ + +var compilers = __webpack_require__(428); +var parsers = __webpack_require__(430); + +/** + * Module dependencies + */ + +var debug = __webpack_require__(393)('expand-brackets'); +var extend = __webpack_require__(340); +var Snapdragon = __webpack_require__(358); +var toRegex = __webpack_require__(321); + +/** + * Parses the given POSIX character class `pattern` and returns a + * string that can be used for creating regular expressions for matching. + * + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} + * @api public + */ + +function brackets(pattern, options) { + debug('initializing from <%s>', __filename); + var res = brackets.create(pattern, options); + return res.output; +} + +/** + * Takes an array of strings and a POSIX character class pattern, and returns a new + * array with only the strings that matched the pattern. + * + * ```js + * var brackets = require('expand-brackets'); + * console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]')); + * //=> ['a'] + * + * console.log(brackets.match(['1', 'a', 'ab'], '[[:alpha:]]+')); + * //=> ['a', 'ab'] + * ``` + * @param {Array} `arr` Array of strings to match + * @param {String} `pattern` POSIX character class pattern(s) + * @param {Object} `options` + * @return {Array} + * @api public + */ + +brackets.match = function(arr, pattern, options) { + arr = [].concat(arr); + var opts = extend({}, options); + var isMatch = brackets.matcher(pattern, opts); + var len = arr.length; + var idx = -1; + var res = []; + + while (++idx < len) { + var ele = arr[idx]; + if (isMatch(ele)) { + res.push(ele); + } + } + + if (res.length === 0) { + if (opts.failglob === true) { + throw new Error('no matches found for "' + pattern + '"'); + } + + if (opts.nonull === true || opts.nullglob === true) { + return [pattern.split('\\').join('')]; + } + } + return res; +}; + +/** + * Returns true if the specified `string` matches the given + * brackets `pattern`. + * + * ```js + * var brackets = require('expand-brackets'); + * + * console.log(brackets.isMatch('a.a', '[[:alpha:]].[[:alpha:]]')); + * //=> true + * console.log(brackets.isMatch('1.2', '[[:alpha:]].[[:alpha:]]')); + * //=> false + * ``` + * @param {String} `string` String to match + * @param {String} `pattern` Poxis pattern + * @param {String} `options` + * @return {Boolean} + * @api public + */ + +brackets.isMatch = function(str, pattern, options) { + return brackets.matcher(pattern, options)(str); +}; + +/** + * Takes a POSIX character class pattern and returns a matcher function. The returned + * function takes the string to match as its only argument. + * + * ```js + * var brackets = require('expand-brackets'); + * var isMatch = brackets.matcher('[[:lower:]].[[:upper:]]'); + * + * console.log(isMatch('a.a')); + * //=> false + * console.log(isMatch('a.A')); + * //=> true + * ``` + * @param {String} `pattern` Poxis pattern + * @param {String} `options` + * @return {Boolean} + * @api public + */ + +brackets.matcher = function(pattern, options) { + var re = brackets.makeRe(pattern, options); + return function(str) { + return re.test(str); + }; +}; + +/** + * Create a regular expression from the given `pattern`. + * + * ```js + * var brackets = require('expand-brackets'); + * var re = brackets.makeRe('[[:alpha:]]'); + * console.log(re); + * //=> /^(?:[a-zA-Z])$/ + * ``` + * @param {String} `pattern` The pattern to convert to regex. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +brackets.makeRe = function(pattern, options) { + var res = brackets.create(pattern, options); + var opts = extend({strictErrors: false}, options); + return toRegex(res.output, opts); +}; + +/** + * Parses the given POSIX character class `pattern` and returns an object + * with the compiled `output` and optional source `map`. + * + * ```js + * var brackets = require('expand-brackets'); + * console.log(brackets('[[:alpha:]]')); + * // { options: { source: 'string' }, + * // input: '[[:alpha:]]', + * // state: {}, + * // compilers: + * // { eos: [Function], + * // noop: [Function], + * // bos: [Function], + * // not: [Function], + * // escape: [Function], + * // text: [Function], + * // posix: [Function], + * // bracket: [Function], + * // 'bracket.open': [Function], + * // 'bracket.inner': [Function], + * // 'bracket.literal': [Function], + * // 'bracket.close': [Function] }, + * // output: '[a-zA-Z]', + * // ast: + * // { type: 'root', + * // errors: [], + * // nodes: [ [Object], [Object], [Object] ] }, + * // parsingErrors: [] } + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} + * @api public + */ + +brackets.create = function(pattern, options) { + var snapdragon = (options && options.snapdragon) || new Snapdragon(options); + compilers(snapdragon); + parsers(snapdragon); + + var ast = snapdragon.parse(pattern, options); + ast.input = pattern; + var res = snapdragon.compile(ast, options); + res.input = pattern; + return res; +}; + +/** + * Expose `brackets` constructor, parsers and compilers + */ + +brackets.compilers = compilers; +brackets.parsers = parsers; + +/** + * Expose `brackets` + * @type {Function} + */ + +module.exports = brackets; + + +/***/ }), +/* 428 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var posix = __webpack_require__(429); + +module.exports = function(brackets) { + brackets.compiler + + /** + * Escaped characters + */ + + .set('escape', function(node) { + return this.emit('\\' + node.val.replace(/^\\/, ''), node); + }) + + /** + * Text + */ + + .set('text', function(node) { + return this.emit(node.val.replace(/([{}])/g, '\\$1'), node); + }) + + /** + * POSIX character classes + */ + + .set('posix', function(node) { + if (node.val === '[::]') { + return this.emit('\\[::\\]', node); + } + + var val = posix[node.inner]; + if (typeof val === 'undefined') { + val = '[' + node.inner + ']'; + } + return this.emit(val, node); + }) + + /** + * Non-posix brackets + */ + + .set('bracket', function(node) { + return this.mapVisit(node.nodes); + }) + .set('bracket.open', function(node) { + return this.emit(node.val, node); + }) + .set('bracket.inner', function(node) { + var inner = node.val; + + if (inner === '[' || inner === ']') { + return this.emit('\\' + node.val, node); + } + if (inner === '^]') { + return this.emit('^\\]', node); + } + if (inner === '^') { + return this.emit('^', node); + } + + if (/-/.test(inner) && !/(\d-\d|\w-\w)/.test(inner)) { + inner = inner.split('-').join('\\-'); + } + + var isNegated = inner.charAt(0) === '^'; + // add slashes to negated brackets, per spec + if (isNegated && inner.indexOf('/') === -1) { + inner += '/'; + } + if (isNegated && inner.indexOf('.') === -1) { + inner += '.'; + } + + // don't unescape `0` (octal literal) + inner = inner.replace(/\\([1-9])/g, '$1'); + return this.emit(inner, node); + }) + .set('bracket.close', function(node) { + var val = node.val.replace(/^\\/, ''); + if (node.parent.escaped === true) { + return this.emit('\\' + val, node); + } + return this.emit(val, node); + }); +}; + + +/***/ }), +/* 429 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * POSIX character classes + */ + +module.exports = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' +}; + + +/***/ }), +/* 430 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = __webpack_require__(431); +var define = __webpack_require__(383); + +/** + * Text regex + */ + +var TEXT_REGEX = '(\\[(?=.*\\])|\\])+'; +var not = utils.createRegex(TEXT_REGEX); + +/** + * Brackets parsers + */ + +function parsers(brackets) { + brackets.state = brackets.state || {}; + brackets.parser.sets.bracket = brackets.parser.sets.bracket || []; + brackets.parser + + .capture('escape', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(/^\\(.)/); + if (!m) return; + + return pos({ + type: 'escape', + val: m[0] + }); + }) + + /** + * Text parser + */ + + .capture('text', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(not); + if (!m || !m[0]) return; + + return pos({ + type: 'text', + val: m[0] + }); + }) + + /** + * POSIX character classes: "[[:alpha:][:digits:]]" + */ + + .capture('posix', function() { + var pos = this.position(); + var m = this.match(/^\[:(.*?):\](?=.*\])/); + if (!m) return; + + var inside = this.isInside('bracket'); + if (inside) { + brackets.posix++; + } + + return pos({ + type: 'posix', + insideBracket: inside, + inner: m[1], + val: m[0] + }); + }) + + /** + * Bracket (noop) + */ + + .capture('bracket', function() {}) + + /** + * Open: '[' + */ + + .capture('bracket.open', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\[(?=.*\])/); + if (!m) return; + + var prev = this.prev(); + var last = utils.last(prev.nodes); + + if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) { + last.val = last.val.slice(0, last.val.length - 1); + return pos({ + type: 'escape', + val: m[0] + }); + } + + var open = pos({ + type: 'bracket.open', + val: m[0] + }); + + if (last.type === 'bracket.open' || this.isInside('bracket')) { + open.val = '\\' + open.val; + open.type = 'bracket.inner'; + open.escaped = true; + return open; + } + + var node = pos({ + type: 'bracket', + nodes: [open] + }); + + define(node, 'parent', prev); + define(open, 'parent', node); + this.push('bracket', node); + prev.nodes.push(node); + }) + + /** + * Bracket text + */ + + .capture('bracket.inner', function() { + if (!this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(not); + if (!m || !m[0]) return; + + var next = this.input.charAt(0); + var val = m[0]; + + var node = pos({ + type: 'bracket.inner', + val: val + }); + + if (val === '\\\\') { + return node; + } + + var first = val.charAt(0); + var last = val.slice(-1); + + if (first === '!') { + val = '^' + val.slice(1); + } + + if (last === '\\' || (val === '^' && next === ']')) { + val += this.input[0]; + this.consume(1); + } + + node.val = val; + return node; + }) + + /** + * Close: ']' + */ + + .capture('bracket.close', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\]/); + if (!m) return; + + var prev = this.prev(); + var last = utils.last(prev.nodes); + + if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) { + last.val = last.val.slice(0, last.val.length - 1); + + return pos({ + type: 'escape', + val: m[0] + }); + } + + var node = pos({ + type: 'bracket.close', + rest: this.input, + val: m[0] + }); + + if (last.type === 'bracket.open') { + node.type = 'bracket.inner'; + node.escaped = true; + return node; + } + + var bracket = this.pop('bracket'); + if (!this.isType(bracket, 'bracket')) { + if (this.options.strict) { + throw new Error('missing opening "["'); + } + node.type = 'bracket.inner'; + node.escaped = true; + return node; + } + + bracket.nodes.push(node); + define(node, 'parent', bracket); + }); +} + +/** + * Brackets parsers + */ + +module.exports = parsers; + +/** + * Expose text regex + */ + +module.exports.TEXT_REGEX = TEXT_REGEX; + + +/***/ }), +/* 431 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var toRegex = __webpack_require__(321); +var regexNot = __webpack_require__(338); +var cached; + +/** + * Get the last element from `array` + * @param {Array} `array` + * @return {*} + */ + +exports.last = function(arr) { + return arr[arr.length - 1]; +}; + +/** + * Create and cache regex to use for text nodes + */ + +exports.createRegex = function(pattern, include) { + if (cached) return cached; + var opts = {contains: true, strictClose: false}; + var not = regexNot.create(pattern, opts); + var re; + + if (typeof include === 'string') { + re = toRegex('^(?:' + include + '|' + not + ')', opts); + } else { + re = toRegex(not, opts); + } + + return (cached = re); +}; + + +/***/ }), +/* 432 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var brackets = __webpack_require__(427); +var define = __webpack_require__(355); +var utils = __webpack_require__(433); + +/** + * Characters to use in text regex (we want to "not" match + * characters that are matched by other parsers) + */ + +var TEXT_REGEX = '([!@*?+]?\\(|\\)|[*?.+\\\\]|\\[:?(?=.*\\])|:?\\])+'; +var not = utils.createRegex(TEXT_REGEX); + +/** + * Extglob parsers + */ + +function parsers(extglob) { + extglob.state = extglob.state || {}; + + /** + * Use `expand-brackets` parsers + */ + + extglob.use(brackets.parsers); + extglob.parser.sets.paren = extglob.parser.sets.paren || []; + extglob.parser + + /** + * Extglob open: "*(" + */ + + .capture('paren.open', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^([!@*?+])?\(/); + if (!m) return; + + var prev = this.prev(); + var prefix = m[1]; + var val = m[0]; + + var open = pos({ + type: 'paren.open', + parsed: parsed, + val: val + }); + + var node = pos({ + type: 'paren', + prefix: prefix, + nodes: [open] + }); + + // if nested negation extglobs, just cancel them out to simplify + if (prefix === '!' && prev.type === 'paren' && prev.prefix === '!') { + prev.prefix = '@'; + node.prefix = '@'; + } + + define(node, 'rest', this.input); + define(node, 'parsed', parsed); + define(node, 'parent', prev); + define(open, 'parent', node); + + this.push('paren', node); + prev.nodes.push(node); + }) + + /** + * Extglob close: ")" + */ + + .capture('paren.close', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\)/); + if (!m) return; + + var parent = this.pop('paren'); + var node = pos({ + type: 'paren.close', + rest: this.input, + parsed: parsed, + val: m[0] + }); + + if (!this.isType(parent, 'paren')) { + if (this.options.strict) { + throw new Error('missing opening paren: "("'); + } + node.escaped = true; + return node; + } + + node.prefix = parent.prefix; + parent.nodes.push(node); + define(node, 'parent', parent); + }) + + /** + * Escape: "\\." + */ + + .capture('escape', function() { + var pos = this.position(); + var m = this.match(/^\\(.)/); + if (!m) return; + + return pos({ + type: 'escape', + val: m[0], + ch: m[1] + }); + }) + + /** + * Question marks: "?" + */ + + .capture('qmark', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\?+(?!\()/); + if (!m) return; + extglob.state.metachar = true; + return pos({ + type: 'qmark', + rest: this.input, + parsed: parsed, + val: m[0] + }); + }) + + /** + * Character parsers + */ + + .capture('star', /^\*(?!\()/) + .capture('plus', /^\+(?!\()/) + .capture('dot', /^\./) + .capture('text', not); +}; + +/** + * Expose text regex string + */ + +module.exports.TEXT_REGEX = TEXT_REGEX; + +/** + * Extglob parsers + */ + +module.exports = parsers; + + +/***/ }), +/* 433 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var regex = __webpack_require__(338); +var Cache = __webpack_require__(420); + +/** + * Utils + */ + +var utils = module.exports; +var cache = utils.cache = new Cache(); + +/** + * Cast `val` to an array + * @return {Array} + */ + +utils.arrayify = function(val) { + if (!Array.isArray(val)) { + return [val]; + } + return val; +}; + +/** + * Memoize a generated regex or function + */ + +utils.memoize = function(type, pattern, options, fn) { + var key = utils.createKey(type + pattern, options); + + if (cache.has(type, key)) { + return cache.get(type, key); + } + + var val = fn(pattern, options); + if (options && options.cache === false) { + return val; + } + + cache.set(type, key, val); + return val; +}; + +/** + * Create the key to use for memoization. The key is generated + * by iterating over the options and concatenating key-value pairs + * to the pattern string. + */ + +utils.createKey = function(pattern, options) { + var key = pattern; + if (typeof options === 'undefined') { + return key; + } + for (var prop in options) { + key += ';' + prop + '=' + String(options[prop]); + } + return key; +}; + +/** + * Create the regex to use for matching text + */ + +utils.createRegex = function(str) { + var opts = {contains: true, strictClose: false}; + return regex(str, opts); +}; + + +/***/ }), +/* 434 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +/** + * Module dependencies + */ + +var Snapdragon = __webpack_require__(358); +var define = __webpack_require__(355); +var extend = __webpack_require__(340); + +/** + * Local dependencies + */ + +var compilers = __webpack_require__(426); +var parsers = __webpack_require__(432); + +/** + * Customize Snapdragon parser and renderer + */ + +function Extglob(options) { + this.options = extend({source: 'extglob'}, options); + this.snapdragon = this.options.snapdragon || new Snapdragon(this.options); + this.snapdragon.patterns = this.snapdragon.patterns || {}; + this.compiler = this.snapdragon.compiler; + this.parser = this.snapdragon.parser; + + compilers(this.snapdragon); + parsers(this.snapdragon); + + /** + * Override Snapdragon `.parse` method + */ + + define(this.snapdragon, 'parse', function(str, options) { + var parsed = Snapdragon.prototype.parse.apply(this, arguments); + parsed.input = str; + + // escape unmatched brace/bracket/parens + var last = this.parser.stack.pop(); + if (last && this.options.strict !== true) { + var node = last.nodes[0]; + node.val = '\\' + node.val; + var sibling = node.parent.nodes[1]; + if (sibling.type === 'star') { + sibling.loose = true; + } + } + + // add non-enumerable parser reference + define(parsed, 'parser', this.parser); + return parsed; + }); + + /** + * Decorate `.parse` method + */ + + define(this, 'parse', function(ast, options) { + return this.snapdragon.parse.apply(this.snapdragon, arguments); + }); + + /** + * Decorate `.compile` method + */ + + define(this, 'compile', function(ast, options) { + return this.snapdragon.compile.apply(this.snapdragon, arguments); + }); + +} + +/** + * Expose `Extglob` + */ + +module.exports = Extglob; + + +/***/ }), +/* 435 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var extglob = __webpack_require__(425); +var nanomatch = __webpack_require__(416); +var regexNot = __webpack_require__(338); +var toRegex = __webpack_require__(321); +var not; + +/** + * Characters to use in negation regex (we want to "not" match + * characters that are matched by other parsers) + */ + +var TEXT = '([!@*?+]?\\(|\\)|\\[:?(?=.*?:?\\])|:?\\]|[*+?!^$.\\\\/])+'; +var createNotRegex = function(opts) { + return not || (not = textRegex(TEXT)); +}; + +/** + * Parsers + */ + +module.exports = function(snapdragon) { + var parsers = snapdragon.parser.parsers; + + // register nanomatch parsers + snapdragon.use(nanomatch.parsers); + + // get references to some specific nanomatch parsers before they + // are overridden by the extglob and/or parsers + var escape = parsers.escape; + var slash = parsers.slash; + var qmark = parsers.qmark; + var plus = parsers.plus; + var star = parsers.star; + var dot = parsers.dot; + + // register extglob parsers + snapdragon.use(extglob.parsers); + + // custom micromatch parsers + snapdragon.parser + .use(function() { + // override "notRegex" created in nanomatch parser + this.notRegex = /^\!+(?!\()/; + }) + // reset the referenced parsers + .capture('escape', escape) + .capture('slash', slash) + .capture('qmark', qmark) + .capture('star', star) + .capture('plus', plus) + .capture('dot', dot) + + /** + * Override `text` parser + */ + + .capture('text', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(createNotRegex(this.options)); + if (!m || !m[0]) return; + + // escape regex boundary characters and simple brackets + var val = m[0].replace(/([[\]^$])/g, '\\$1'); + + return pos({ + type: 'text', + val: val + }); + }); +}; + +/** + * Create text regex + */ + +function textRegex(pattern) { + var notStr = regexNot.create(pattern, {contains: true, strictClose: false}); + var prefix = '(?:[\\^]|\\\\|'; + return toRegex(prefix + notStr + ')', {strictClose: false}); +} + + +/***/ }), +/* 436 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = new (__webpack_require__(420))(); + + +/***/ }), +/* 437 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var utils = module.exports; +var path = __webpack_require__(6); + +/** + * Module dependencies + */ + +var Snapdragon = __webpack_require__(358); +utils.define = __webpack_require__(328); +utils.diff = __webpack_require__(423); +utils.extend = __webpack_require__(334); +utils.pick = __webpack_require__(424); +utils.typeOf = __webpack_require__(331); +utils.unique = __webpack_require__(339); + +/** + * Returns true if the platform is windows, or `path.sep` is `\\`. + * This is defined as a function to allow `path.sep` to be set in unit tests, + * or by the user, if there is a reason to do so. + * @return {Boolean} + */ + +utils.isWindows = function() { + return path.sep === '\\' || process.platform === 'win32'; +}; + +/** + * Get the `Snapdragon` instance to use + */ + +utils.instantiate = function(ast, options) { + var snapdragon; + // if an instance was created by `.parse`, use that instance + if (utils.typeOf(ast) === 'object' && ast.snapdragon) { + snapdragon = ast.snapdragon; + // if the user supplies an instance on options, use that instance + } else if (utils.typeOf(options) === 'object' && options.snapdragon) { + snapdragon = options.snapdragon; + // create a new instance + } else { + snapdragon = new Snapdragon(options); + } + + utils.define(snapdragon, 'parse', function(str, options) { + var parsed = Snapdragon.prototype.parse.apply(this, arguments); + parsed.input = str; + + // escape unmatched brace/bracket/parens + var last = this.parser.stack.pop(); + if (last && this.options.strictErrors !== true) { + var open = last.nodes[0]; + var inner = last.nodes[1]; + if (last.type === 'bracket') { + if (inner.val.charAt(0) === '[') { + inner.val = '\\' + inner.val; + } + + } else { + open.val = '\\' + open.val; + var sibling = open.parent.nodes[1]; + if (sibling.type === 'star') { + sibling.loose = true; + } + } + } + + // add non-enumerable parser reference + utils.define(parsed, 'parser', this.parser); + return parsed; + }); + + return snapdragon; +}; + +/** + * Create the key to use for memoization. The key is generated + * by iterating over the options and concatenating key-value pairs + * to the pattern string. + */ + +utils.createKey = function(pattern, options) { + if (utils.typeOf(options) !== 'object') { + return pattern; + } + var val = pattern; + var keys = Object.keys(options); + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + val += ';' + key + '=' + String(options[key]); + } + return val; +}; + +/** + * Cast `val` to an array + * @return {Array} + */ + +utils.arrayify = function(val) { + if (typeof val === 'string') return [val]; + return val ? (Array.isArray(val) ? val : [val]) : []; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isString = function(val) { + return typeof val === 'string'; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isObject = function(val) { + return utils.typeOf(val) === 'object'; +}; + +/** + * Returns true if the given `str` has special characters + */ + +utils.hasSpecialChars = function(str) { + return /(?:(?:(^|\/)[!.])|[*?+()|\[\]{}]|[+@]\()/.test(str); +}; + +/** + * Escape regex characters in the given string + */ + +utils.escapeRegex = function(str) { + return str.replace(/[-[\]{}()^$|*+?.\\\/\s]/g, '\\$&'); +}; + +/** + * Normalize slashes in the given filepath. + * + * @param {String} `filepath` + * @return {String} + */ + +utils.toPosixPath = function(str) { + return str.replace(/\\+/g, '/'); +}; + +/** + * Strip backslashes before special characters in a string. + * + * @param {String} `str` + * @return {String} + */ + +utils.unescape = function(str) { + return utils.toPosixPath(str.replace(/\\(?=[*+?!.])/g, '')); +}; + +/** + * Strip the prefix from a filepath + * @param {String} `fp` + * @return {String} + */ + +utils.stripPrefix = function(str) { + if (str.charAt(0) !== '.') { + return str; + } + var ch = str.charAt(1); + if (utils.isSlash(ch)) { + return str.slice(2); + } + return str; +}; + +/** + * Returns true if the given str is an escaped or + * unescaped path character + */ + +utils.isSlash = function(str) { + return str === '/' || str === '\\/' || str === '\\' || str === '\\\\'; +}; + +/** + * Returns a function that returns true if the given + * pattern matches or contains a `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.matchPath = function(pattern, options) { + return (options && options.contains) + ? utils.containsPattern(pattern, options) + : utils.equalsPattern(pattern, options); +}; + +/** + * Returns true if the given (original) filepath or unixified path are equal + * to the given pattern. + */ + +utils._equals = function(filepath, unixPath, pattern) { + return pattern === filepath || pattern === unixPath; +}; + +/** + * Returns true if the given (original) filepath or unixified path contain + * the given pattern. + */ + +utils._contains = function(filepath, unixPath, pattern) { + return filepath.indexOf(pattern) !== -1 || unixPath.indexOf(pattern) !== -1; +}; + +/** + * Returns a function that returns true if the given + * pattern is the same as a given `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.equalsPattern = function(pattern, options) { + var unixify = utils.unixify(options); + options = options || {}; + + return function fn(filepath) { + var equal = utils._equals(filepath, unixify(filepath), pattern); + if (equal === true || options.nocase !== true) { + return equal; + } + var lower = filepath.toLowerCase(); + return utils._equals(lower, unixify(lower), pattern); + }; +}; + +/** + * Returns a function that returns true if the given + * pattern contains a `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.containsPattern = function(pattern, options) { + var unixify = utils.unixify(options); + options = options || {}; + + return function(filepath) { + var contains = utils._contains(filepath, unixify(filepath), pattern); + if (contains === true || options.nocase !== true) { + return contains; + } + var lower = filepath.toLowerCase(); + return utils._contains(lower, unixify(lower), pattern); + }; +}; + +/** + * Returns a function that returns true if the given + * regex matches the `filename` of a file path. + * + * @param {RegExp} `re` Matching regex + * @return {Function} + */ + +utils.matchBasename = function(re) { + return function(filepath) { + return re.test(path.basename(filepath)); + }; +}; + +/** + * Determines the filepath to return based on the provided options. + * @return {any} + */ + +utils.value = function(str, unixify, options) { + if (options && options.unixify === false) { + return str; + } + return unixify(str); +}; + +/** + * Returns a function that normalizes slashes in a string to forward + * slashes, strips `./` from beginning of paths, and optionally unescapes + * special characters. + * @return {Function} + */ + +utils.unixify = function(options) { + options = options || {}; + return function(filepath) { + if (utils.isWindows() || options.unixify === true) { + filepath = utils.toPosixPath(filepath); + } + if (options.stripPrefix !== false) { + filepath = utils.stripPrefix(filepath); + } + if (options.unescape === true) { + filepath = utils.unescape(filepath); + } + return filepath; + }; +}; + + +/***/ }), +/* 438 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var readdir = __webpack_require__(439); +var reader_1 = __webpack_require__(452); +var fs_stream_1 = __webpack_require__(456); +var ReaderAsync = /** @class */ (function (_super) { + __extends(ReaderAsync, _super); + function ReaderAsync() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ReaderAsync.prototype, "fsAdapter", { + /** + * Returns FileSystem adapter. + */ + get: function () { + return new fs_stream_1.default(this.options); + }, + enumerable: true, + configurable: true + }); + /** + * Use async API to read entries for Task. + */ + ReaderAsync.prototype.read = function (task) { + var _this = this; + var root = this.getRootDirectory(task); + var options = this.getReaderOptions(task); + var entries = []; + return new Promise(function (resolve, reject) { + var stream = _this.api(root, task, options); + stream.on('error', function (err) { + _this.isEnoentCodeError(err) ? resolve([]) : reject(err); + stream.pause(); + }); + stream.on('data', function (entry) { return entries.push(_this.transform(entry)); }); + stream.on('end', function () { return resolve(entries); }); + }); + }; + /** + * Returns founded paths. + */ + ReaderAsync.prototype.api = function (root, task, options) { + if (task.dynamic) { + return this.dynamicApi(root, options); + } + return this.staticApi(task, options); + }; + /** + * Api for dynamic tasks. + */ + ReaderAsync.prototype.dynamicApi = function (root, options) { + return readdir.readdirStreamStat(root, options); + }; + /** + * Api for static tasks. + */ + ReaderAsync.prototype.staticApi = function (task, options) { + return this.fsAdapter.read(task.patterns, options.filter); + }; + return ReaderAsync; +}(reader_1.default)); +exports.default = ReaderAsync; + + +/***/ }), +/* 439 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const readdirSync = __webpack_require__(440); +const readdirAsync = __webpack_require__(448); +const readdirStream = __webpack_require__(451); + +module.exports = exports = readdirAsyncPath; +exports.readdir = exports.readdirAsync = exports.async = readdirAsyncPath; +exports.readdirAsyncStat = exports.async.stat = readdirAsyncStat; +exports.readdirStream = exports.stream = readdirStreamPath; +exports.readdirStreamStat = exports.stream.stat = readdirStreamStat; +exports.readdirSync = exports.sync = readdirSyncPath; +exports.readdirSyncStat = exports.sync.stat = readdirSyncStat; + +/** + * Synchronous readdir that returns an array of string paths. + * + * @param {string} dir + * @param {object} [options] + * @returns {string[]} + */ +function readdirSyncPath (dir, options) { + return readdirSync(dir, options, {}); +} + +/** + * Synchronous readdir that returns results as an array of {@link fs.Stats} objects + * + * @param {string} dir + * @param {object} [options] + * @returns {fs.Stats[]} + */ +function readdirSyncStat (dir, options) { + return readdirSync(dir, options, { stats: true }); +} + +/** + * Aynchronous readdir (accepts an error-first callback or returns a {@link Promise}). + * Results are an array of path strings. + * + * @param {string} dir + * @param {object} [options] + * @param {function} [callback] + * @returns {Promise} + */ +function readdirAsyncPath (dir, options, callback) { + return readdirAsync(dir, options, callback, {}); +} + +/** + * Aynchronous readdir (accepts an error-first callback or returns a {@link Promise}). + * Results are an array of {@link fs.Stats} objects. + * + * @param {string} dir + * @param {object} [options] + * @param {function} [callback] + * @returns {Promise} + */ +function readdirAsyncStat (dir, options, callback) { + return readdirAsync(dir, options, callback, { stats: true }); +} + +/** + * Aynchronous readdir that returns a {@link stream.Readable} (which is also an {@link EventEmitter}). + * All stream data events ("data", "file", "directory", "symlink") are passed a path string. + * + * @param {string} dir + * @param {object} [options] + * @returns {stream.Readable} + */ +function readdirStreamPath (dir, options) { + return readdirStream(dir, options, {}); +} + +/** + * Aynchronous readdir that returns a {@link stream.Readable} (which is also an {@link EventEmitter}) + * All stream data events ("data", "file", "directory", "symlink") are passed an {@link fs.Stats} object. + * + * @param {string} dir + * @param {object} [options] + * @returns {stream.Readable} + */ +function readdirStreamStat (dir, options) { + return readdirStream(dir, options, { stats: true }); +} + + +/***/ }), +/* 440 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = readdirSync; + +const DirectoryReader = __webpack_require__(441); + +let syncFacade = { + fs: __webpack_require__(446), + forEach: __webpack_require__(447), + sync: true +}; + +/** + * Returns the buffered output from a synchronous {@link DirectoryReader}. + * + * @param {string} dir + * @param {object} [options] + * @param {object} internalOptions + */ +function readdirSync (dir, options, internalOptions) { + internalOptions.facade = syncFacade; + + let reader = new DirectoryReader(dir, options, internalOptions); + let stream = reader.stream; + + let results = []; + let data = stream.read(); + while (data !== null) { + results.push(data); + data = stream.read(); + } + + return results; +} + + +/***/ }), +/* 441 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const Readable = __webpack_require__(17).Readable; +const EventEmitter = __webpack_require__(58).EventEmitter; +const path = __webpack_require__(6); +const normalizeOptions = __webpack_require__(442); +const stat = __webpack_require__(444); +const call = __webpack_require__(445); + +/** + * Asynchronously reads the contents of a directory and streams the results + * via a {@link stream.Readable}. + */ +class DirectoryReader { + /** + * @param {string} dir - The absolute or relative directory path to read + * @param {object} [options] - User-specified options, if any (see {@link normalizeOptions}) + * @param {object} internalOptions - Internal options that aren't part of the public API + * @class + */ + constructor (dir, options, internalOptions) { + this.options = options = normalizeOptions(options, internalOptions); + + // Indicates whether we should keep reading + // This is set false if stream.Readable.push() returns false. + this.shouldRead = true; + + // The directories to read + // (initialized with the top-level directory) + this.queue = [{ + path: dir, + basePath: options.basePath, + posixBasePath: options.posixBasePath, + depth: 0 + }]; + + // The number of directories that are currently being processed + this.pending = 0; + + // The data that has been read, but not yet emitted + this.buffer = []; + + this.stream = new Readable({ objectMode: true }); + this.stream._read = () => { + // Start (or resume) reading + this.shouldRead = true; + + // If we have data in the buffer, then send the next chunk + if (this.buffer.length > 0) { + this.pushFromBuffer(); + } + + // If we have directories queued, then start processing the next one + if (this.queue.length > 0) { + if (this.options.facade.sync) { + while (this.queue.length > 0) { + this.readNextDirectory(); + } + } + else { + this.readNextDirectory(); + } + } + + this.checkForEOF(); + }; + } + + /** + * Reads the next directory in the queue + */ + readNextDirectory () { + let facade = this.options.facade; + let dir = this.queue.shift(); + this.pending++; + + // Read the directory listing + call.safe(facade.fs.readdir, dir.path, (err, items) => { + if (err) { + // fs.readdir threw an error + this.emit('error', err); + return this.finishedReadingDirectory(); + } + + try { + // Process each item in the directory (simultaneously, if async) + facade.forEach( + items, + this.processItem.bind(this, dir), + this.finishedReadingDirectory.bind(this, dir) + ); + } + catch (err2) { + // facade.forEach threw an error + // (probably because fs.readdir returned an invalid result) + this.emit('error', err2); + this.finishedReadingDirectory(); + } + }); + } + + /** + * This method is called after all items in a directory have been processed. + * + * NOTE: This does not necessarily mean that the reader is finished, since there may still + * be other directories queued or pending. + */ + finishedReadingDirectory () { + this.pending--; + + if (this.shouldRead) { + // If we have directories queued, then start processing the next one + if (this.queue.length > 0 && this.options.facade.async) { + this.readNextDirectory(); + } + + this.checkForEOF(); + } + } + + /** + * Determines whether the reader has finished processing all items in all directories. + * If so, then the "end" event is fired (via {@Readable#push}) + */ + checkForEOF () { + if (this.buffer.length === 0 && // The stuff we've already read + this.pending === 0 && // The stuff we're currently reading + this.queue.length === 0) { // The stuff we haven't read yet + // There's no more stuff! + this.stream.push(null); + } + } + + /** + * Processes a single item in a directory. + * + * If the item is a directory, and `option.deep` is enabled, then the item will be added + * to the directory queue. + * + * If the item meets the filter criteria, then it will be emitted to the reader's stream. + * + * @param {object} dir - A directory object from the queue + * @param {string} item - The name of the item (name only, no path) + * @param {function} done - A callback function that is called after the item has been processed + */ + processItem (dir, item, done) { + let stream = this.stream; + let options = this.options; + + let itemPath = dir.basePath + item; + let posixPath = dir.posixBasePath + item; + let fullPath = path.join(dir.path, item); + + // If `options.deep` is a number, and we've already recursed to the max depth, + // then there's no need to check fs.Stats to know if it's a directory. + // If `options.deep` is a function, then we'll need fs.Stats + let maxDepthReached = dir.depth >= options.recurseDepth; + + // Do we need to call `fs.stat`? + let needStats = + !maxDepthReached || // we need the fs.Stats to know if it's a directory + options.stats || // the user wants fs.Stats objects returned + options.recurseFn || // we need fs.Stats for the recurse function + options.filterFn || // we need fs.Stats for the filter function + EventEmitter.listenerCount(stream, 'file') || // we need the fs.Stats to know if it's a file + EventEmitter.listenerCount(stream, 'directory') || // we need the fs.Stats to know if it's a directory + EventEmitter.listenerCount(stream, 'symlink'); // we need the fs.Stats to know if it's a symlink + + // If we don't need stats, then exit early + if (!needStats) { + if (this.filter(itemPath, posixPath)) { + this.pushOrBuffer({ data: itemPath }); + } + return done(); + } + + // Get the fs.Stats object for this path + stat(options.facade.fs, fullPath, (err, stats) => { + if (err) { + // fs.stat threw an error + this.emit('error', err); + return done(); + } + + try { + // Add the item's path to the fs.Stats object + // The base of this path, and its separators are determined by the options + // (i.e. options.basePath and options.sep) + stats.path = itemPath; + + // Add depth of the path to the fs.Stats object for use this in the filter function + stats.depth = dir.depth; + + if (this.shouldRecurse(stats, posixPath, maxDepthReached)) { + // Add this subdirectory to the queue + this.queue.push({ + path: fullPath, + basePath: itemPath + options.sep, + posixBasePath: posixPath + '/', + depth: dir.depth + 1, + }); + } + + // Determine whether this item matches the filter criteria + if (this.filter(stats, posixPath)) { + this.pushOrBuffer({ + data: options.stats ? stats : itemPath, + file: stats.isFile(), + directory: stats.isDirectory(), + symlink: stats.isSymbolicLink(), + }); + } + + done(); + } + catch (err2) { + // An error occurred while processing the item + // (probably during a user-specified function, such as options.deep, options.filter, etc.) + this.emit('error', err2); + done(); + } + }); + } + + /** + * Pushes the given chunk of data to the stream, or adds it to the buffer, + * depending on the state of the stream. + * + * @param {object} chunk + */ + pushOrBuffer (chunk) { + // Add the chunk to the buffer + this.buffer.push(chunk); + + // If we're still reading, then immediately emit the next chunk in the buffer + // (which may or may not be the chunk that we just added) + if (this.shouldRead) { + this.pushFromBuffer(); + } + } + + /** + * Immediately pushes the next chunk in the buffer to the reader's stream. + * The "data" event will always be fired (via {@link Readable#push}). + * In addition, the "file", "directory", and/or "symlink" events may be fired, + * depending on the type of properties of the chunk. + */ + pushFromBuffer () { + let stream = this.stream; + let chunk = this.buffer.shift(); + + // Stream the data + try { + this.shouldRead = stream.push(chunk.data); + } + catch (err) { + this.emit('error', err); + } + + // Also emit specific events, based on the type of chunk + chunk.file && this.emit('file', chunk.data); + chunk.symlink && this.emit('symlink', chunk.data); + chunk.directory && this.emit('directory', chunk.data); + } + + /** + * Determines whether the given directory meets the user-specified recursion criteria. + * If the user didn't specify recursion criteria, then this function will default to true. + * + * @param {fs.Stats} stats - The directory's {@link fs.Stats} object + * @param {string} posixPath - The item's POSIX path (used for glob matching) + * @param {boolean} maxDepthReached - Whether we've already crawled the user-specified depth + * @returns {boolean} + */ + shouldRecurse (stats, posixPath, maxDepthReached) { + let options = this.options; + + if (maxDepthReached) { + // We've already crawled to the maximum depth. So no more recursion. + return false; + } + else if (!stats.isDirectory()) { + // It's not a directory. So don't try to crawl it. + return false; + } + else if (options.recurseGlob) { + // Glob patterns are always tested against the POSIX path, even on Windows + // https://github.com/isaacs/node-glob#windows + return options.recurseGlob.test(posixPath); + } + else if (options.recurseRegExp) { + // Regular expressions are tested against the normal path + // (based on the OS or options.sep) + return options.recurseRegExp.test(stats.path); + } + else if (options.recurseFn) { + try { + // Run the user-specified recursion criteria + return options.recurseFn.call(null, stats); + } + catch (err) { + // An error occurred in the user's code. + // In Sync and Async modes, this will return an error. + // In Streaming mode, we emit an "error" event, but continue processing + this.emit('error', err); + } + } + else { + // No recursion function was specified, and we're within the maximum depth. + // So crawl this directory. + return true; + } + } + + /** + * Determines whether the given item meets the user-specified filter criteria. + * If the user didn't specify a filter, then this function will always return true. + * + * @param {string|fs.Stats} value - Either the item's path, or the item's {@link fs.Stats} object + * @param {string} posixPath - The item's POSIX path (used for glob matching) + * @returns {boolean} + */ + filter (value, posixPath) { + let options = this.options; + + if (options.filterGlob) { + // Glob patterns are always tested against the POSIX path, even on Windows + // https://github.com/isaacs/node-glob#windows + return options.filterGlob.test(posixPath); + } + else if (options.filterRegExp) { + // Regular expressions are tested against the normal path + // (based on the OS or options.sep) + return options.filterRegExp.test(value.path || value); + } + else if (options.filterFn) { + try { + // Run the user-specified filter function + return options.filterFn.call(null, value); + } + catch (err) { + // An error occurred in the user's code. + // In Sync and Async modes, this will return an error. + // In Streaming mode, we emit an "error" event, but continue processing + this.emit('error', err); + } + } + else { + // No filter was specified, so match everything + return true; + } + } + + /** + * Emits an event. If one of the event listeners throws an error, + * then an "error" event is emitted. + * + * @param {string} eventName + * @param {*} data + */ + emit (eventName, data) { + let stream = this.stream; + + try { + stream.emit(eventName, data); + } + catch (err) { + if (eventName === 'error') { + // Don't recursively emit "error" events. + // If the first one fails, then just throw + throw err; + } + else { + stream.emit('error', err); + } + } + } +} + +module.exports = DirectoryReader; + + +/***/ }), +/* 442 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const path = __webpack_require__(6); +const globToRegExp = __webpack_require__(443); + +module.exports = normalizeOptions; + +let isWindows = /^win/.test(process.platform); + +/** + * @typedef {Object} FSFacade + * @property {fs.readdir} readdir + * @property {fs.stat} stat + * @property {fs.lstat} lstat + */ + +/** + * Validates and normalizes the options argument + * + * @param {object} [options] - User-specified options, if any + * @param {object} internalOptions - Internal options that aren't part of the public API + * + * @param {number|boolean|function} [options.deep] + * The number of directories to recursively traverse. Any falsy value or negative number will + * default to zero, so only the top-level contents will be returned. Set to `true` or `Infinity` + * to traverse all subdirectories. Or provide a function that accepts a {@link fs.Stats} object + * and returns a truthy value if the directory's contents should be crawled. + * + * @param {function|string|RegExp} [options.filter] + * A function that accepts a {@link fs.Stats} object and returns a truthy value if the data should + * be returned. Or a RegExp or glob string pattern, to filter by file name. + * + * @param {string} [options.sep] + * The path separator to use. By default, the OS-specific separator will be used, but this can be + * set to a specific value to ensure consistency across platforms. + * + * @param {string} [options.basePath] + * The base path to prepend to each result. If empty, then all results will be relative to `dir`. + * + * @param {FSFacade} [options.fs] + * Synchronous or asynchronous facades for Node.js File System module + * + * @param {object} [internalOptions.facade] + * Synchronous or asynchronous facades for various methods, including for the Node.js File System module + * + * @param {boolean} [internalOptions.emit] + * Indicates whether the reader should emit "file", "directory", and "symlink" events + * + * @param {boolean} [internalOptions.stats] + * Indicates whether the reader should emit {@link fs.Stats} objects instead of path strings + * + * @returns {object} + */ +function normalizeOptions (options, internalOptions) { + if (options === null || options === undefined) { + options = {}; + } + else if (typeof options !== 'object') { + throw new TypeError('options must be an object'); + } + + let recurseDepth, recurseFn, recurseRegExp, recurseGlob, deep = options.deep; + if (deep === null || deep === undefined) { + recurseDepth = 0; + } + else if (typeof deep === 'boolean') { + recurseDepth = deep ? Infinity : 0; + } + else if (typeof deep === 'number') { + if (deep < 0 || isNaN(deep)) { + throw new Error('options.deep must be a positive number'); + } + else if (Math.floor(deep) !== deep) { + throw new Error('options.deep must be an integer'); + } + else { + recurseDepth = deep; + } + } + else if (typeof deep === 'function') { + recurseDepth = Infinity; + recurseFn = deep; + } + else if (deep instanceof RegExp) { + recurseDepth = Infinity; + recurseRegExp = deep; + } + else if (typeof deep === 'string' && deep.length > 0) { + recurseDepth = Infinity; + recurseGlob = globToRegExp(deep, { extended: true, globstar: true }); + } + else { + throw new TypeError('options.deep must be a boolean, number, function, regular expression, or glob pattern'); + } + + let filterFn, filterRegExp, filterGlob, filter = options.filter; + if (filter !== null && filter !== undefined) { + if (typeof filter === 'function') { + filterFn = filter; + } + else if (filter instanceof RegExp) { + filterRegExp = filter; + } + else if (typeof filter === 'string' && filter.length > 0) { + filterGlob = globToRegExp(filter, { extended: true, globstar: true }); + } + else { + throw new TypeError('options.filter must be a function, regular expression, or glob pattern'); + } + } + + let sep = options.sep; + if (sep === null || sep === undefined) { + sep = path.sep; + } + else if (typeof sep !== 'string') { + throw new TypeError('options.sep must be a string'); + } + + let basePath = options.basePath; + if (basePath === null || basePath === undefined) { + basePath = ''; + } + else if (typeof basePath === 'string') { + // Append a path separator to the basePath, if necessary + if (basePath && basePath.substr(-1) !== sep) { + basePath += sep; + } + } + else { + throw new TypeError('options.basePath must be a string'); + } + + // Convert the basePath to POSIX (forward slashes) + // so that glob pattern matching works consistently, even on Windows + let posixBasePath = basePath; + if (posixBasePath && sep !== '/') { + posixBasePath = posixBasePath.replace(new RegExp('\\' + sep, 'g'), '/'); + + /* istanbul ignore if */ + if (isWindows) { + // Convert Windows root paths (C:\) and UNCs (\\) to POSIX root paths + posixBasePath = posixBasePath.replace(/^([a-zA-Z]\:\/|\/\/)/, '/'); + } + } + + // Determine which facade methods to use + let facade; + if (options.fs === null || options.fs === undefined) { + // The user didn't provide their own facades, so use our internal ones + facade = internalOptions.facade; + } + else if (typeof options.fs === 'object') { + // Merge the internal facade methods with the user-provided `fs` facades + facade = Object.assign({}, internalOptions.facade); + facade.fs = Object.assign({}, internalOptions.facade.fs, options.fs); + } + else { + throw new TypeError('options.fs must be an object'); + } + + return { + recurseDepth, + recurseFn, + recurseRegExp, + recurseGlob, + filterFn, + filterRegExp, + filterGlob, + sep, + basePath, + posixBasePath, + facade, + emit: !!internalOptions.emit, + stats: !!internalOptions.stats, + }; +} + + +/***/ }), +/* 443 */ +/***/ (function(module, exports) { + +module.exports = function (glob, opts) { + if (typeof glob !== 'string') { + throw new TypeError('Expected a string'); + } + + var str = String(glob); + + // The regexp we are building, as a string. + var reStr = ""; + + // Whether we are matching so called "extended" globs (like bash) and should + // support single character matching, matching ranges of characters, group + // matching, etc. + var extended = opts ? !!opts.extended : false; + + // When globstar is _false_ (default), '/foo/*' is translated a regexp like + // '^\/foo\/.*$' which will match any string beginning with '/foo/' + // When globstar is _true_, '/foo/*' is translated to regexp like + // '^\/foo\/[^/]*$' which will match any string beginning with '/foo/' BUT + // which does not have a '/' to the right of it. + // E.g. with '/foo/*' these will match: '/foo/bar', '/foo/bar.txt' but + // these will not '/foo/bar/baz', '/foo/bar/baz.txt' + // Lastely, when globstar is _true_, '/foo/**' is equivelant to '/foo/*' when + // globstar is _false_ + var globstar = opts ? !!opts.globstar : false; + + // If we are doing extended matching, this boolean is true when we are inside + // a group (eg {*.html,*.js}), and false otherwise. + var inGroup = false; + + // RegExp flags (eg "i" ) to pass in to RegExp constructor. + var flags = opts && typeof( opts.flags ) === "string" ? opts.flags : ""; + + var c; + for (var i = 0, len = str.length; i < len; i++) { + c = str[i]; + + switch (c) { + case "\\": + case "/": + case "$": + case "^": + case "+": + case ".": + case "(": + case ")": + case "=": + case "!": + case "|": + reStr += "\\" + c; + break; + + case "?": + if (extended) { + reStr += "."; + break; + } + + case "[": + case "]": + if (extended) { + reStr += c; + break; + } + + case "{": + if (extended) { + inGroup = true; + reStr += "("; + break; + } + + case "}": + if (extended) { + inGroup = false; + reStr += ")"; + break; + } + + case ",": + if (inGroup) { + reStr += "|"; + break; + } + reStr += "\\" + c; + break; + + case "*": + // Move over all consecutive "*"'s. + // Also store the previous and next characters + var prevChar = str[i - 1]; + var starCount = 1; + while(str[i + 1] === "*") { + starCount++; + i++; + } + var nextChar = str[i + 1]; + + if (!globstar) { + // globstar is disabled, so treat any number of "*" as one + reStr += ".*"; + } else { + // globstar is enabled, so determine if this is a globstar segment + var isGlobstar = starCount > 1 // multiple "*"'s + && (prevChar === "/" || prevChar === undefined) // from the start of the segment + && (nextChar === "/" || nextChar === undefined) // to the end of the segment + + if (isGlobstar) { + // it's a globstar, so match zero or more path segments + reStr += "(?:[^/]*(?:\/|$))*"; + i++; // move over the "/" + } else { + // it's not a globstar, so only match one path segment + reStr += "[^/]*"; + } + } + break; + + default: + reStr += c; + } + } + + // When regexp 'g' flag is specified don't + // constrain the regular expression with ^ & $ + if (!flags || !~flags.indexOf('g')) { + reStr = "^" + reStr + "$"; + } + + return new RegExp(reStr, flags); +}; + + +/***/ }), +/* 444 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const call = __webpack_require__(445); + +module.exports = stat; + +/** + * Retrieves the {@link fs.Stats} for the given path. If the path is a symbolic link, + * then the Stats of the symlink's target are returned instead. If the symlink is broken, + * then the Stats of the symlink itself are returned. + * + * @param {object} fs - Synchronous or Asynchronouse facade for the "fs" module + * @param {string} path - The path to return stats for + * @param {function} callback + */ +function stat (fs, path, callback) { + let isSymLink = false; + + call.safe(fs.lstat, path, (err, lstats) => { + if (err) { + // fs.lstat threw an eror + return callback(err); + } + + try { + isSymLink = lstats.isSymbolicLink(); + } + catch (err2) { + // lstats.isSymbolicLink() threw an error + // (probably because fs.lstat returned an invalid result) + return callback(err2); + } + + if (isSymLink) { + // Try to resolve the symlink + symlinkStat(fs, path, lstats, callback); + } + else { + // It's not a symlink, so return the stats as-is + callback(null, lstats); + } + }); +} + +/** + * Retrieves the {@link fs.Stats} for the target of the given symlink. + * If the symlink is broken, then the Stats of the symlink itself are returned. + * + * @param {object} fs - Synchronous or Asynchronouse facade for the "fs" module + * @param {string} path - The path of the symlink to return stats for + * @param {object} lstats - The stats of the symlink + * @param {function} callback + */ +function symlinkStat (fs, path, lstats, callback) { + call.safe(fs.stat, path, (err, stats) => { + if (err) { + // The symlink is broken, so return the stats for the link itself + return callback(null, lstats); + } + + try { + // Return the stats for the resolved symlink target, + // and override the `isSymbolicLink` method to indicate that it's a symlink + stats.isSymbolicLink = () => true; + } + catch (err2) { + // Setting stats.isSymbolicLink threw an error + // (probably because fs.stat returned an invalid result) + return callback(err2); + } + + callback(null, stats); + }); +} + + +/***/ }), +/* 445 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +let call = module.exports = { + safe: safeCall, + once: callOnce, +}; + +/** + * Calls a function with the given arguments, and ensures that the error-first callback is _always_ + * invoked exactly once, even if the function throws an error. + * + * @param {function} fn - The function to invoke + * @param {...*} args - The arguments to pass to the function. The final argument must be a callback function. + */ +function safeCall (fn, args) { + // Get the function arguments as an array + args = Array.prototype.slice.call(arguments, 1); + + // Replace the callback function with a wrapper that ensures it will only be called once + let callback = call.once(args.pop()); + args.push(callback); + + try { + fn.apply(null, args); + } + catch (err) { + callback(err); + } +} + +/** + * Returns a wrapper function that ensures the given callback function is only called once. + * Subsequent calls are ignored, unless the first argument is an Error, in which case the + * error is thrown. + * + * @param {function} fn - The function that should only be called once + * @returns {function} + */ +function callOnce (fn) { + let fulfilled = false; + + return function onceWrapper (err) { + if (!fulfilled) { + fulfilled = true; + return fn.apply(this, arguments); + } + else if (err) { + // The callback has already been called, but now an error has occurred + // (most likely inside the callback function). So re-throw the error, + // so it gets handled further up the call stack + throw err; + } + }; +} + + +/***/ }), +/* 446 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const fs = __webpack_require__(5); +const call = __webpack_require__(445); + +/** + * A facade around {@link fs.readdirSync} that allows it to be called + * the same way as {@link fs.readdir}. + * + * @param {string} dir + * @param {function} callback + */ +exports.readdir = function (dir, callback) { + // Make sure the callback is only called once + callback = call.once(callback); + + try { + let items = fs.readdirSync(dir); + callback(null, items); + } + catch (err) { + callback(err); + } +}; + +/** + * A facade around {@link fs.statSync} that allows it to be called + * the same way as {@link fs.stat}. + * + * @param {string} path + * @param {function} callback + */ +exports.stat = function (path, callback) { + // Make sure the callback is only called once + callback = call.once(callback); + + try { + let stats = fs.statSync(path); + callback(null, stats); + } + catch (err) { + callback(err); + } +}; + +/** + * A facade around {@link fs.lstatSync} that allows it to be called + * the same way as {@link fs.lstat}. + * + * @param {string} path + * @param {function} callback + */ +exports.lstat = function (path, callback) { + // Make sure the callback is only called once + callback = call.once(callback); + + try { + let stats = fs.lstatSync(path); + callback(null, stats); + } + catch (err) { + callback(err); + } +}; + + +/***/ }), +/* 447 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = syncForEach; + +/** + * A facade that allows {@link Array.forEach} to be called as though it were asynchronous. + * + * @param {array} array - The array to iterate over + * @param {function} iterator - The function to call for each item in the array + * @param {function} done - The function to call when all iterators have completed + */ +function syncForEach (array, iterator, done) { + array.forEach(item => { + iterator(item, () => { + // Note: No error-handling here because this is currently only ever called + // by DirectoryReader, which never passes an `error` parameter to the callback. + // Instead, DirectoryReader emits an "error" event if an error occurs. + }); + }); + + done(); +} + + +/***/ }), +/* 448 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = readdirAsync; + +const maybe = __webpack_require__(449); +const DirectoryReader = __webpack_require__(441); + +let asyncFacade = { + fs: __webpack_require__(5), + forEach: __webpack_require__(450), + async: true +}; + +/** + * Returns the buffered output from an asynchronous {@link DirectoryReader}, + * via an error-first callback or a {@link Promise}. + * + * @param {string} dir + * @param {object} [options] + * @param {function} [callback] + * @param {object} internalOptions + */ +function readdirAsync (dir, options, callback, internalOptions) { + if (typeof options === 'function') { + callback = options; + options = undefined; + } + + return maybe(callback, new Promise(((resolve, reject) => { + let results = []; + + internalOptions.facade = asyncFacade; + + let reader = new DirectoryReader(dir, options, internalOptions); + let stream = reader.stream; + + stream.on('error', err => { + reject(err); + stream.pause(); + }); + stream.on('data', result => { + results.push(result); + }); + stream.on('end', () => { + resolve(results); + }); + }))); +} + + +/***/ }), +/* 449 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var next = (global.process && process.nextTick) || global.setImmediate || function (f) { + setTimeout(f, 0) +} + +module.exports = function maybe (cb, promise) { + if (cb) { + promise + .then(function (result) { + next(function () { cb(null, result) }) + }, function (err) { + next(function () { cb(err) }) + }) + return undefined + } + else { + return promise + } +} + + +/***/ }), +/* 450 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = asyncForEach; + +/** + * Simultaneously processes all items in the given array. + * + * @param {array} array - The array to iterate over + * @param {function} iterator - The function to call for each item in the array + * @param {function} done - The function to call when all iterators have completed + */ +function asyncForEach (array, iterator, done) { + if (array.length === 0) { + // NOTE: Normally a bad idea to mix sync and async, but it's safe here because + // of the way that this method is currently used by DirectoryReader. + done(); + return; + } + + // Simultaneously process all items in the array. + let pending = array.length; + array.forEach(item => { + iterator(item, () => { + if (--pending === 0) { + done(); + } + }); + }); +} + + +/***/ }), +/* 451 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +module.exports = readdirStream; + +const DirectoryReader = __webpack_require__(441); + +let streamFacade = { + fs: __webpack_require__(5), + forEach: __webpack_require__(450), + async: true +}; + +/** + * Returns the {@link stream.Readable} of an asynchronous {@link DirectoryReader}. + * + * @param {string} dir + * @param {object} [options] + * @param {object} internalOptions + */ +function readdirStream (dir, options, internalOptions) { + internalOptions.facade = streamFacade; + + let reader = new DirectoryReader(dir, options, internalOptions); + return reader.stream; +} + + +/***/ }), +/* 452 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(6); +var deep_1 = __webpack_require__(453); +var entry_1 = __webpack_require__(455); +var pathUtil = __webpack_require__(454); +var Reader = /** @class */ (function () { + function Reader(options) { + this.options = options; + this.micromatchOptions = this.getMicromatchOptions(); + this.entryFilter = new entry_1.default(options, this.micromatchOptions); + this.deepFilter = new deep_1.default(options, this.micromatchOptions); + } + /** + * Returns root path to scanner. + */ + Reader.prototype.getRootDirectory = function (task) { + return path.resolve(this.options.cwd, task.base); + }; + /** + * Returns options for reader. + */ + Reader.prototype.getReaderOptions = function (task) { + return { + basePath: task.base === '.' ? '' : task.base, + filter: this.entryFilter.getFilter(task.positive, task.negative), + deep: this.deepFilter.getFilter(task.positive, task.negative), + sep: '/' + }; + }; + /** + * Returns options for micromatch. + */ + Reader.prototype.getMicromatchOptions = function () { + return { + dot: this.options.dot, + nobrace: !this.options.brace, + noglobstar: !this.options.globstar, + noext: !this.options.extension, + nocase: !this.options.case, + matchBase: this.options.matchBase + }; + }; + /** + * Returns transformed entry. + */ + Reader.prototype.transform = function (entry) { + if (this.options.absolute && !path.isAbsolute(entry.path)) { + entry.path = pathUtil.makeAbsolute(this.options.cwd, entry.path); + } + if (this.options.markDirectories && entry.isDirectory()) { + entry.path += '/'; + } + var item = this.options.stats ? entry : entry.path; + if (this.options.transform === null) { + return item; + } + return this.options.transform(item); + }; + /** + * Returns true if error has ENOENT code. + */ + Reader.prototype.isEnoentCodeError = function (err) { + return err.code === 'ENOENT'; + }; + return Reader; +}()); +exports.default = Reader; + + +/***/ }), +/* 453 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var pathUtils = __webpack_require__(454); +var patternUtils = __webpack_require__(313); +var DeepFilter = /** @class */ (function () { + function DeepFilter(options, micromatchOptions) { + this.options = options; + this.micromatchOptions = micromatchOptions; + } + /** + * Returns filter for directories. + */ + DeepFilter.prototype.getFilter = function (positive, negative) { + var _this = this; + var maxPatternDepth = this.getMaxPatternDepth(positive); + var negativeRe = this.getNegativePatternsRe(negative); + return function (entry) { return _this.filter(entry, negativeRe, maxPatternDepth); }; + }; + /** + * Returns max depth of the provided patterns. + */ + DeepFilter.prototype.getMaxPatternDepth = function (patterns) { + var globstar = patterns.some(patternUtils.hasGlobStar); + return globstar ? Infinity : patternUtils.getMaxNaivePatternsDepth(patterns); + }; + /** + * Returns RegExp's for patterns that can affect the depth of reading. + */ + DeepFilter.prototype.getNegativePatternsRe = function (patterns) { + var affectDepthOfReadingPatterns = patterns.filter(patternUtils.isAffectDepthOfReadingPattern); + return patternUtils.convertPatternsToRe(affectDepthOfReadingPatterns, this.micromatchOptions); + }; + /** + * Returns «true» for directory that should be read. + */ + DeepFilter.prototype.filter = function (entry, negativeRe, maxPatternDepth) { + if (this.isSkippedByDeepOption(entry.depth)) { + return false; + } + if (this.isSkippedByMaxPatternDepth(entry.depth, maxPatternDepth)) { + return false; + } + if (this.isSkippedSymlinkedDirectory(entry)) { + return false; + } + if (this.isSkippedDotDirectory(entry)) { + return false; + } + return this.isSkippedByNegativePatterns(entry, negativeRe); + }; + /** + * Returns «true» when the «deep» option is disabled or number and depth of the entry is greater that the option value. + */ + DeepFilter.prototype.isSkippedByDeepOption = function (entryDepth) { + return !this.options.deep || (typeof this.options.deep === 'number' && entryDepth >= this.options.deep); + }; + /** + * Returns «true» when depth parameter is not an Infinity and entry depth greater that the parameter value. + */ + DeepFilter.prototype.isSkippedByMaxPatternDepth = function (entryDepth, maxPatternDepth) { + return maxPatternDepth !== Infinity && entryDepth >= maxPatternDepth; + }; + /** + * Returns «true» for symlinked directory if the «followSymlinkedDirectories» option is disabled. + */ + DeepFilter.prototype.isSkippedSymlinkedDirectory = function (entry) { + return !this.options.followSymlinkedDirectories && entry.isSymbolicLink(); + }; + /** + * Returns «true» for a directory whose name starts with a period if «dot» option is disabled. + */ + DeepFilter.prototype.isSkippedDotDirectory = function (entry) { + return !this.options.dot && pathUtils.isDotDirectory(entry.path); + }; + /** + * Returns «true» for a directory whose path math to any negative pattern. + */ + DeepFilter.prototype.isSkippedByNegativePatterns = function (entry, negativeRe) { + return !patternUtils.matchAny(entry.path, negativeRe); + }; + return DeepFilter; +}()); +exports.default = DeepFilter; + + +/***/ }), +/* 454 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(6); +/** + * Returns «true» if the last partial of the path starting with a period. + */ +function isDotDirectory(filepath) { + return path.basename(filepath).startsWith('.'); +} +exports.isDotDirectory = isDotDirectory; +/** + * Convert a windows-like path to a unix-style path. + */ +function normalize(filepath) { + return filepath.replace(/\\/g, '/'); +} +exports.normalize = normalize; +/** + * Returns normalized absolute path of provided filepath. + */ +function makeAbsolute(cwd, filepath) { + if (path.isAbsolute(filepath)) { + return normalize(filepath); + } + var fullpath = path.resolve(cwd, filepath); + return normalize(fullpath); +} +exports.makeAbsolute = makeAbsolute; + + +/***/ }), +/* 455 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var pathUtils = __webpack_require__(454); +var patternUtils = __webpack_require__(313); +var DeepFilter = /** @class */ (function () { + function DeepFilter(options, micromatchOptions) { + this.options = options; + this.micromatchOptions = micromatchOptions; + this.index = new Map(); + } + /** + * Returns filter for directories. + */ + DeepFilter.prototype.getFilter = function (positive, negative) { + var _this = this; + var positiveRe = patternUtils.convertPatternsToRe(positive, this.micromatchOptions); + var negativeRe = patternUtils.convertPatternsToRe(negative, this.micromatchOptions); + return function (entry) { return _this.filter(entry, positiveRe, negativeRe); }; + }; + /** + * Returns true if entry must be added to result. + */ + DeepFilter.prototype.filter = function (entry, positiveRe, negativeRe) { + // Exclude duplicate results + if (this.options.unique) { + if (this.isDuplicateEntry(entry)) { + return false; + } + this.createIndexRecord(entry); + } + // Filter files and directories by options + if (this.onlyFileFilter(entry) || this.onlyDirectoryFilter(entry)) { + return false; + } + if (this.isSkippedByAbsoluteNegativePatterns(entry, negativeRe)) { + return false; + } + return this.isMatchToPatterns(entry.path, positiveRe) && !this.isMatchToPatterns(entry.path, negativeRe); + }; + /** + * Return true if the entry already has in the cross reader index. + */ + DeepFilter.prototype.isDuplicateEntry = function (entry) { + return this.index.has(entry.path); + }; + /** + * Create record in the cross reader index. + */ + DeepFilter.prototype.createIndexRecord = function (entry) { + this.index.set(entry.path, undefined); + }; + /** + * Returns true for non-files if the «onlyFiles» option is enabled. + */ + DeepFilter.prototype.onlyFileFilter = function (entry) { + return this.options.onlyFiles && !entry.isFile(); + }; + /** + * Returns true for non-directories if the «onlyDirectories» option is enabled. + */ + DeepFilter.prototype.onlyDirectoryFilter = function (entry) { + return this.options.onlyDirectories && !entry.isDirectory(); + }; + /** + * Return true when `absolute` option is enabled and matched to the negative patterns. + */ + DeepFilter.prototype.isSkippedByAbsoluteNegativePatterns = function (entry, negativeRe) { + if (!this.options.absolute) { + return false; + } + var fullpath = pathUtils.makeAbsolute(this.options.cwd, entry.path); + return this.isMatchToPatterns(fullpath, negativeRe); + }; + /** + * Return true when entry match to provided patterns. + * + * First, just trying to apply patterns to the path. + * Second, trying to apply patterns to the path with final slash (need to micromatch to support «directory/**» patterns). + */ + DeepFilter.prototype.isMatchToPatterns = function (filepath, patternsRe) { + return patternUtils.matchAny(filepath, patternsRe) || patternUtils.matchAny(filepath + '/', patternsRe); + }; + return DeepFilter; +}()); +exports.default = DeepFilter; + + +/***/ }), +/* 456 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var stream = __webpack_require__(17); +var fsStat = __webpack_require__(457); +var fs_1 = __webpack_require__(461); +var FileSystemStream = /** @class */ (function (_super) { + __extends(FileSystemStream, _super); + function FileSystemStream() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Use stream API to read entries for Task. + */ + FileSystemStream.prototype.read = function (patterns, filter) { + var _this = this; + var filepaths = patterns.map(this.getFullEntryPath, this); + var transform = new stream.Transform({ objectMode: true }); + transform._transform = function (index, _enc, done) { + return _this.getEntry(filepaths[index], patterns[index]).then(function (entry) { + if (entry !== null && filter(entry)) { + transform.push(entry); + } + if (index === filepaths.length - 1) { + transform.end(); + } + done(); + }); + }; + for (var i = 0; i < filepaths.length; i++) { + transform.write(i); + } + return transform; + }; + /** + * Return entry for the provided path. + */ + FileSystemStream.prototype.getEntry = function (filepath, pattern) { + var _this = this; + return this.getStat(filepath) + .then(function (stat) { return _this.makeEntry(stat, pattern); }) + .catch(function () { return null; }); + }; + /** + * Return fs.Stats for the provided path. + */ + FileSystemStream.prototype.getStat = function (filepath) { + return fsStat.stat(filepath, { throwErrorOnBrokenSymlinks: false }); + }; + return FileSystemStream; +}(fs_1.default)); +exports.default = FileSystemStream; + + +/***/ }), +/* 457 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const optionsManager = __webpack_require__(458); +const statProvider = __webpack_require__(460); +/** + * Asynchronous API. + */ +function stat(path, opts) { + return new Promise((resolve, reject) => { + statProvider.async(path, optionsManager.prepare(opts), (err, stats) => err ? reject(err) : resolve(stats)); + }); +} +exports.stat = stat; +function statCallback(path, optsOrCallback, callback) { + if (typeof optsOrCallback === 'function') { + callback = optsOrCallback; /* tslint:disable-line: no-parameter-reassignment */ + optsOrCallback = undefined; /* tslint:disable-line: no-parameter-reassignment */ + } + if (typeof callback === 'undefined') { + throw new TypeError('The "callback" argument must be of type Function.'); + } + statProvider.async(path, optionsManager.prepare(optsOrCallback), callback); +} +exports.statCallback = statCallback; +/** + * Synchronous API. + */ +function statSync(path, opts) { + return statProvider.sync(path, optionsManager.prepare(opts)); +} +exports.statSync = statSync; + + +/***/ }), +/* 458 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fsAdapter = __webpack_require__(459); +function prepare(opts) { + const options = Object.assign({ + fs: fsAdapter.getFileSystemAdapter(opts ? opts.fs : undefined), + throwErrorOnBrokenSymlinks: true, + followSymlinks: true + }, opts); + return options; +} +exports.prepare = prepare; + + +/***/ }), +/* 459 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = __webpack_require__(5); +exports.FILE_SYSTEM_ADAPTER = { + lstat: fs.lstat, + stat: fs.stat, + lstatSync: fs.lstatSync, + statSync: fs.statSync +}; +function getFileSystemAdapter(fsMethods) { + if (!fsMethods) { + return exports.FILE_SYSTEM_ADAPTER; + } + return Object.assign({}, exports.FILE_SYSTEM_ADAPTER, fsMethods); +} +exports.getFileSystemAdapter = getFileSystemAdapter; + + +/***/ }), +/* 460 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +function sync(path, options) { + const lstat = options.fs.lstatSync(path); + if (!isFollowedSymlink(lstat, options)) { + return lstat; + } + try { + const stat = options.fs.statSync(path); + stat.isSymbolicLink = () => true; + return stat; + } + catch (err) { + if (!options.throwErrorOnBrokenSymlinks) { + return lstat; + } + throw err; + } +} +exports.sync = sync; +function async(path, options, callback) { + options.fs.lstat(path, (err0, lstat) => { + if (err0) { + return callback(err0, undefined); + } + if (!isFollowedSymlink(lstat, options)) { + return callback(null, lstat); + } + options.fs.stat(path, (err1, stat) => { + if (err1) { + return options.throwErrorOnBrokenSymlinks ? callback(err1) : callback(null, lstat); + } + stat.isSymbolicLink = () => true; + callback(null, stat); + }); + }); +} +exports.async = async; +/** + * Returns `true` for followed symlink. + */ +function isFollowedSymlink(stat, options) { + return stat.isSymbolicLink() && options.followSymlinks; +} +exports.isFollowedSymlink = isFollowedSymlink; + + +/***/ }), +/* 461 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var path = __webpack_require__(6); +var FileSystem = /** @class */ (function () { + function FileSystem(options) { + this.options = options; + } + /** + * Return full path to entry. + */ + FileSystem.prototype.getFullEntryPath = function (filepath) { + return path.resolve(this.options.cwd, filepath); + }; + /** + * Return an implementation of the Entry interface. + */ + FileSystem.prototype.makeEntry = function (stat, pattern) { + return Object.assign(stat, { + path: pattern, + depth: pattern.split('/').length + }); + }; + return FileSystem; +}()); +exports.default = FileSystem; + + +/***/ }), +/* 462 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var stream = __webpack_require__(17); +var readdir = __webpack_require__(439); +var reader_1 = __webpack_require__(452); +var fs_stream_1 = __webpack_require__(456); +var TransformStream = /** @class */ (function (_super) { + __extends(TransformStream, _super); + function TransformStream(reader) { + var _this = _super.call(this, { objectMode: true }) || this; + _this.reader = reader; + return _this; + } + TransformStream.prototype._transform = function (entry, _encoding, callback) { + callback(null, this.reader.transform(entry)); + }; + return TransformStream; +}(stream.Transform)); +var ReaderStream = /** @class */ (function (_super) { + __extends(ReaderStream, _super); + function ReaderStream() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ReaderStream.prototype, "fsAdapter", { + /** + * Returns FileSystem adapter. + */ + get: function () { + return new fs_stream_1.default(this.options); + }, + enumerable: true, + configurable: true + }); + /** + * Use stream API to read entries for Task. + */ + ReaderStream.prototype.read = function (task) { + var _this = this; + var root = this.getRootDirectory(task); + var options = this.getReaderOptions(task); + var transform = new TransformStream(this); + var readable = this.api(root, task, options); + return readable + .on('error', function (err) { return _this.isEnoentCodeError(err) ? null : transform.emit('error', err); }) + .pipe(transform); + }; + /** + * Returns founded paths. + */ + ReaderStream.prototype.api = function (root, task, options) { + if (task.dynamic) { + return this.dynamicApi(root, options); + } + return this.staticApi(task, options); + }; + /** + * Api for dynamic tasks. + */ + ReaderStream.prototype.dynamicApi = function (root, options) { + return readdir.readdirStreamStat(root, options); + }; + /** + * Api for static tasks. + */ + ReaderStream.prototype.staticApi = function (task, options) { + return this.fsAdapter.read(task.patterns, options.filter); + }; + return ReaderStream; +}(reader_1.default)); +exports.default = ReaderStream; + + +/***/ }), +/* 463 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var readdir = __webpack_require__(439); +var reader_1 = __webpack_require__(452); +var fs_sync_1 = __webpack_require__(464); +var ReaderSync = /** @class */ (function (_super) { + __extends(ReaderSync, _super); + function ReaderSync() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(ReaderSync.prototype, "fsAdapter", { + /** + * Returns FileSystem adapter. + */ + get: function () { + return new fs_sync_1.default(this.options); + }, + enumerable: true, + configurable: true + }); + /** + * Use sync API to read entries for Task. + */ + ReaderSync.prototype.read = function (task) { + var root = this.getRootDirectory(task); + var options = this.getReaderOptions(task); + try { + var entries = this.api(root, task, options); + return entries.map(this.transform, this); + } + catch (err) { + if (this.isEnoentCodeError(err)) { + return []; + } + throw err; + } + }; + /** + * Returns founded paths. + */ + ReaderSync.prototype.api = function (root, task, options) { + if (task.dynamic) { + return this.dynamicApi(root, options); + } + return this.staticApi(task, options); + }; + /** + * Api for dynamic tasks. + */ + ReaderSync.prototype.dynamicApi = function (root, options) { + return readdir.readdirSyncStat(root, options); + }; + /** + * Api for static tasks. + */ + ReaderSync.prototype.staticApi = function (task, options) { + return this.fsAdapter.read(task.patterns, options.filter); + }; + return ReaderSync; +}(reader_1.default)); +exports.default = ReaderSync; + + +/***/ }), +/* 464 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +var fsStat = __webpack_require__(457); +var fs_1 = __webpack_require__(461); +var FileSystemSync = /** @class */ (function (_super) { + __extends(FileSystemSync, _super); + function FileSystemSync() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + * Use sync API to read entries for Task. + */ + FileSystemSync.prototype.read = function (patterns, filter) { + var _this = this; + var entries = []; + patterns.forEach(function (pattern) { + var filepath = _this.getFullEntryPath(pattern); + var entry = _this.getEntry(filepath, pattern); + if (entry === null || !filter(entry)) { + return; + } + entries.push(entry); + }); + return entries; + }; + /** + * Return entry for the provided path. + */ + FileSystemSync.prototype.getEntry = function (filepath, pattern) { + try { + var stat = this.getStat(filepath); + return this.makeEntry(stat, pattern); + } + catch (err) { + return null; + } + }; + /** + * Return fs.Stats for the provided path. + */ + FileSystemSync.prototype.getStat = function (filepath) { + return fsStat.statSync(filepath, { throwErrorOnBrokenSymlinks: false }); + }; + return FileSystemSync; +}(fs_1.default)); +exports.default = FileSystemSync; + + +/***/ }), +/* 465 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Flatten nested arrays (max depth is 2) into a non-nested array of non-array items. + */ +function flatten(items) { + return items.reduce(function (collection, item) { return [].concat(collection, item); }, []); +} +exports.flatten = flatten; + + +/***/ }), +/* 466 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var merge2 = __webpack_require__(467); +/** + * Merge multiple streams and propagate their errors into one stream in parallel. + */ +function merge(streams) { + var mergedStream = merge2(streams); + streams.forEach(function (stream) { + stream.on('error', function (err) { return mergedStream.emit('error', err); }); + }); + return mergedStream; +} +exports.merge = merge; + + +/***/ }), +/* 467 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/* + * merge2 + * https://github.com/teambition/merge2 + * + * Copyright (c) 2014-2016 Teambition + * Licensed under the MIT license. + */ +const Stream = __webpack_require__(17) +const PassThrough = Stream.PassThrough +const slice = Array.prototype.slice + +module.exports = merge2 + +function merge2 () { + const streamsQueue = [] + let merging = false + const args = slice.call(arguments) + let options = args[args.length - 1] + + if (options && !Array.isArray(options) && options.pipe == null) args.pop() + else options = {} + + const doEnd = options.end !== false + if (options.objectMode == null) options.objectMode = true + if (options.highWaterMark == null) options.highWaterMark = 64 * 1024 + const mergedStream = PassThrough(options) + + function addStream () { + for (let i = 0, len = arguments.length; i < len; i++) { + streamsQueue.push(pauseStreams(arguments[i], options)) + } + mergeStream() + return this + } + + function mergeStream () { + if (merging) return + merging = true + + let streams = streamsQueue.shift() + if (!streams) { + process.nextTick(endStream) + return + } + if (!Array.isArray(streams)) streams = [streams] + + let pipesCount = streams.length + 1 + + function next () { + if (--pipesCount > 0) return + merging = false + mergeStream() + } + + function pipe (stream) { + function onend () { + stream.removeListener('merge2UnpipeEnd', onend) + stream.removeListener('end', onend) + next() + } + // skip ended stream + if (stream._readableState.endEmitted) return next() + + stream.on('merge2UnpipeEnd', onend) + stream.on('end', onend) + stream.pipe(mergedStream, { end: false }) + // compatible for old stream + stream.resume() + } + + for (let i = 0; i < streams.length; i++) pipe(streams[i]) + + next() + } + + function endStream () { + merging = false + // emit 'queueDrain' when all streams merged. + mergedStream.emit('queueDrain') + return doEnd && mergedStream.end() + } + + mergedStream.setMaxListeners(0) + mergedStream.add = addStream + mergedStream.on('unpipe', function (stream) { + stream.emit('merge2UnpipeEnd') + }) + + if (args.length) addStream.apply(null, args) + return mergedStream +} + +// check and pause streams for pipe. +function pauseStreams (streams, options) { + if (!Array.isArray(streams)) { + // Backwards-compat with old-style streams + if (!streams._readableState && streams.pipe) streams = streams.pipe(PassThrough(options)) + if (!streams._readableState || !streams.pause || !streams.pipe) { + throw new Error('Only readable stream can be merged.') + } + streams.pause() + } else { + for (let i = 0, len = streams.length; i < len; i++) streams[i] = pauseStreams(streams[i], options) + } + return streams +} + + +/***/ }), +/* 468 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const path = __webpack_require__(6); +const arrify = __webpack_require__(469); +const pathType = __webpack_require__(470); + +const getExtensions = extensions => extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]; +const getPath = filepath => filepath[0] === '!' ? filepath.slice(1) : filepath; + +const addExtensions = (file, extensions) => { + if (path.extname(file)) { + return `**/${file}`; + } + + return `**/${file}.${getExtensions(extensions)}`; +}; + +const getGlob = (dir, opts) => { + opts = Object.assign({}, opts); + + if (opts.files && !Array.isArray(opts.files)) { + throw new TypeError(`\`options.files\` must be an \`Array\`, not \`${typeof opts.files}\``); + } + + if (opts.extensions && !Array.isArray(opts.extensions)) { + throw new TypeError(`\`options.extensions\` must be an \`Array\`, not \`${typeof opts.extensions}\``); + } + + if (opts.files && opts.extensions) { + return opts.files.map(x => path.join(dir, addExtensions(x, opts.extensions))); + } else if (opts.files) { + return opts.files.map(x => path.join(dir, `**/${x}`)); + } else if (opts.extensions) { + return [path.join(dir, `**/*.${getExtensions(opts.extensions)}`)]; + } + + return [path.join(dir, '**')]; +}; + +module.exports = (input, opts) => { + return Promise.all(arrify(input).map(x => pathType.dir(getPath(x)) + .then(isDir => isDir ? getGlob(x, opts) : x))) + .then(globs => [].concat.apply([], globs)); +}; + +module.exports.sync = (input, opts) => { + const globs = arrify(input).map(x => pathType.dirSync(getPath(x)) ? getGlob(x, opts) : x); + return [].concat.apply([], globs); +}; + + +/***/ }), +/* 469 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = function (val) { + if (val === null || val === undefined) { + return []; + } + + return Array.isArray(val) ? val : [val]; +}; + + +/***/ }), +/* 470 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const fs = __webpack_require__(5); +const pify = __webpack_require__(471); + +function type(fn, fn2, fp) { + if (typeof fp !== 'string') { + return Promise.reject(new TypeError(`Expected a string, got ${typeof fp}`)); + } + + return pify(fs[fn])(fp) + .then(stats => stats[fn2]()) + .catch(err => { + if (err.code === 'ENOENT') { + return false; + } + + throw err; + }); +} + +function typeSync(fn, fn2, fp) { + if (typeof fp !== 'string') { + throw new TypeError(`Expected a string, got ${typeof fp}`); + } + + try { + return fs[fn](fp)[fn2](); + } catch (err) { + if (err.code === 'ENOENT') { + return false; + } + + throw err; + } +} + +exports.file = type.bind(null, 'stat', 'isFile'); +exports.dir = type.bind(null, 'stat', 'isDirectory'); +exports.symlink = type.bind(null, 'lstat', 'isSymbolicLink'); +exports.fileSync = typeSync.bind(null, 'statSync', 'isFile'); +exports.dirSync = typeSync.bind(null, 'statSync', 'isDirectory'); +exports.symlinkSync = typeSync.bind(null, 'lstatSync', 'isSymbolicLink'); + + +/***/ }), +/* 471 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +const processFn = (fn, opts) => function () { + const P = opts.promiseModule; + const args = new Array(arguments.length); + + for (let i = 0; i < arguments.length; i++) { + args[i] = arguments[i]; + } + + return new P((resolve, reject) => { + if (opts.errorFirst) { + args.push(function (err, result) { + if (opts.multiArgs) { + const results = new Array(arguments.length - 1); + + for (let i = 1; i < arguments.length; i++) { + results[i - 1] = arguments[i]; + } + + if (err) { + results.unshift(err); + reject(results); + } else { + resolve(results); + } + } else if (err) { + reject(err); + } else { + resolve(result); + } + }); + } else { + args.push(function (result) { + if (opts.multiArgs) { + const results = new Array(arguments.length - 1); + + for (let i = 0; i < arguments.length; i++) { + results[i] = arguments[i]; + } + + resolve(results); + } else { + resolve(result); + } + }); + } + + fn.apply(this, args); + }); +}; + +module.exports = (obj, opts) => { + opts = Object.assign({ + exclude: [/.+(Sync|Stream)$/], + errorFirst: true, + promiseModule: Promise + }, opts); + + const filter = key => { + const match = pattern => typeof pattern === 'string' ? key === pattern : pattern.test(key); + return opts.include ? opts.include.some(match) : !opts.exclude.some(match); + }; + + let ret; + if (typeof obj === 'function') { + ret = function () { + if (opts.excludeMain) { + return obj.apply(this, arguments); + } + + return processFn(obj, opts).apply(this, arguments); + }; + } else { + ret = Object.create(Object.getPrototypeOf(obj)); + } + + for (const key in obj) { // eslint-disable-line guard-for-in + const x = obj[key]; + ret[key] = typeof x === 'function' && filter(key) ? processFn(x, opts) : x; + } + + return ret; +}; + + +/***/ }), +/* 472 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const fs = __webpack_require__(5); +const path = __webpack_require__(6); +const fastGlob = __webpack_require__(309); +const gitIgnore = __webpack_require__(473); +const pify = __webpack_require__(471); +const slash = __webpack_require__(474); + +const DEFAULT_IGNORE = [ + '**/node_modules/**', + '**/bower_components/**', + '**/flow-typed/**', + '**/coverage/**', + '**/.git' +]; + +const readFileP = pify(fs.readFile); + +const mapGitIgnorePatternTo = base => ignore => { + if (ignore.startsWith('!')) { + return '!' + path.posix.join(base, ignore.substr(1)); + } + + return path.posix.join(base, ignore); +}; + +const parseGitIgnore = (content, opts) => { + const base = slash(path.relative(opts.cwd, path.dirname(opts.fileName))); + + return content + .split(/\r?\n/) + .filter(Boolean) + .filter(l => l.charAt(0) !== '#') + .map(mapGitIgnorePatternTo(base)); +}; + +const reduceIgnore = files => { + return files.reduce((ignores, file) => { + ignores.add(parseGitIgnore(file.content, { + cwd: file.cwd, + fileName: file.filePath + })); + return ignores; + }, gitIgnore()); +}; + +const getIsIgnoredPredecate = (ignores, cwd) => { + return p => ignores.ignores(slash(path.relative(cwd, p))); +}; + +const getFile = (file, cwd) => { + const filePath = path.join(cwd, file); + return readFileP(filePath, 'utf8') + .then(content => ({ + content, + cwd, + filePath + })); +}; + +const getFileSync = (file, cwd) => { + const filePath = path.join(cwd, file); + const content = fs.readFileSync(filePath, 'utf8'); + + return { + content, + cwd, + filePath + }; +}; + +const normalizeOpts = opts => { + opts = opts || {}; + const ignore = opts.ignore || []; + const cwd = opts.cwd || process.cwd(); + return {ignore, cwd}; +}; + +module.exports = o => { + const opts = normalizeOpts(o); + + return fastGlob('**/.gitignore', {ignore: DEFAULT_IGNORE.concat(opts.ignore), cwd: opts.cwd}) + .then(paths => Promise.all(paths.map(file => getFile(file, opts.cwd)))) + .then(files => reduceIgnore(files)) + .then(ignores => getIsIgnoredPredecate(ignores, opts.cwd)); +}; + +module.exports.sync = o => { + const opts = normalizeOpts(o); + + const paths = fastGlob.sync('**/.gitignore', {ignore: DEFAULT_IGNORE.concat(opts.ignore), cwd: opts.cwd}); + const files = paths.map(file => getFileSync(file, opts.cwd)); + const ignores = reduceIgnore(files); + return getIsIgnoredPredecate(ignores, opts.cwd); +}; + + +/***/ }), +/* 473 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +module.exports = function () { + return new IgnoreBase(); +}; + +// A simple implementation of make-array +function make_array(subject) { + return Array.isArray(subject) ? subject : [subject]; +} + +var REGEX_BLANK_LINE = /^\s+$/; +var REGEX_LEADING_EXCAPED_EXCLAMATION = /^\\\!/; +var REGEX_LEADING_EXCAPED_HASH = /^\\#/; +var SLASH = '/'; +var KEY_IGNORE = typeof Symbol !== 'undefined' ? Symbol.for('node-ignore') +/* istanbul ignore next */ +: 'node-ignore'; + +var IgnoreBase = function () { + function IgnoreBase() { + _classCallCheck(this, IgnoreBase); + + this._rules = []; + this[KEY_IGNORE] = true; + this._initCache(); + } + + _createClass(IgnoreBase, [{ + key: '_initCache', + value: function _initCache() { + this._cache = {}; + } + + // @param {Array.|string|Ignore} pattern + + }, { + key: 'add', + value: function add(pattern) { + this._added = false; + + if (typeof pattern === 'string') { + pattern = pattern.split(/\r?\n/g); + } + + make_array(pattern).forEach(this._addPattern, this); + + // Some rules have just added to the ignore, + // making the behavior changed. + if (this._added) { + this._initCache(); + } + + return this; + } + + // legacy + + }, { + key: 'addPattern', + value: function addPattern(pattern) { + return this.add(pattern); + } + }, { + key: '_addPattern', + value: function _addPattern(pattern) { + // #32 + if (pattern && pattern[KEY_IGNORE]) { + this._rules = this._rules.concat(pattern._rules); + this._added = true; + return; + } + + if (this._checkPattern(pattern)) { + var rule = this._createRule(pattern); + this._added = true; + this._rules.push(rule); + } + } + }, { + key: '_checkPattern', + value: function _checkPattern(pattern) { + // > A blank line matches no files, so it can serve as a separator for readability. + return pattern && typeof pattern === 'string' && !REGEX_BLANK_LINE.test(pattern) + + // > A line starting with # serves as a comment. + && pattern.indexOf('#') !== 0; + } + }, { + key: 'filter', + value: function filter(paths) { + var _this = this; + + return make_array(paths).filter(function (path) { + return _this._filter(path); + }); + } + }, { + key: 'createFilter', + value: function createFilter() { + var _this2 = this; + + return function (path) { + return _this2._filter(path); + }; + } + }, { + key: 'ignores', + value: function ignores(path) { + return !this._filter(path); + } + }, { + key: '_createRule', + value: function _createRule(pattern) { + var origin = pattern; + var negative = false; + + // > An optional prefix "!" which negates the pattern; + if (pattern.indexOf('!') === 0) { + negative = true; + pattern = pattern.substr(1); + } + + pattern = pattern + // > Put a backslash ("\") in front of the first "!" for patterns that begin with a literal "!", for example, `"\!important!.txt"`. + .replace(REGEX_LEADING_EXCAPED_EXCLAMATION, '!') + // > Put a backslash ("\") in front of the first hash for patterns that begin with a hash. + .replace(REGEX_LEADING_EXCAPED_HASH, '#'); + + var regex = make_regex(pattern, negative); + + return { + origin: origin, + pattern: pattern, + negative: negative, + regex: regex + }; + } + + // @returns `Boolean` true if the `path` is NOT ignored + + }, { + key: '_filter', + value: function _filter(path, slices) { + if (!path) { + return false; + } + + if (path in this._cache) { + return this._cache[path]; + } + + if (!slices) { + // path/to/a.js + // ['path', 'to', 'a.js'] + slices = path.split(SLASH); + } + + slices.pop(); + + return this._cache[path] = slices.length + // > It is not possible to re-include a file if a parent directory of that file is excluded. + // If the path contains a parent directory, check the parent first + ? this._filter(slices.join(SLASH) + SLASH, slices) && this._test(path) + + // Or only test the path + : this._test(path); + } + + // @returns {Boolean} true if a file is NOT ignored + + }, { + key: '_test', + value: function _test(path) { + // Explicitly define variable type by setting matched to `0` + var matched = 0; + + this._rules.forEach(function (rule) { + // if matched = true, then we only test negative rules + // if matched = false, then we test non-negative rules + if (!(matched ^ rule.negative)) { + matched = rule.negative ^ rule.regex.test(path); + } + }); + + return !matched; + } + }]); + + return IgnoreBase; +}(); + +// > If the pattern ends with a slash, +// > it is removed for the purpose of the following description, +// > but it would only find a match with a directory. +// > In other words, foo/ will match a directory foo and paths underneath it, +// > but will not match a regular file or a symbolic link foo +// > (this is consistent with the way how pathspec works in general in Git). +// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' +// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call +// you could use option `mark: true` with `glob` + +// '`foo/`' should not continue with the '`..`' + + +var DEFAULT_REPLACER_PREFIX = [ + +// > Trailing spaces are ignored unless they are quoted with backslash ("\") +[ +// (a\ ) -> (a ) +// (a ) -> (a) +// (a \ ) -> (a ) +/\\?\s+$/, function (match) { + return match.indexOf('\\') === 0 ? ' ' : ''; +}], + +// replace (\ ) with ' ' +[/\\\s/g, function () { + return ' '; +}], + +// Escape metacharacters +// which is written down by users but means special for regular expressions. + +// > There are 12 characters with special meanings: +// > - the backslash \, +// > - the caret ^, +// > - the dollar sign $, +// > - the period or dot ., +// > - the vertical bar or pipe symbol |, +// > - the question mark ?, +// > - the asterisk or star *, +// > - the plus sign +, +// > - the opening parenthesis (, +// > - the closing parenthesis ), +// > - and the opening square bracket [, +// > - the opening curly brace {, +// > These special characters are often called "metacharacters". +[/[\\\^$.|?*+()\[{]/g, function (match) { + return '\\' + match; +}], + +// leading slash +[ + +// > A leading slash matches the beginning of the pathname. +// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". +// A leading slash matches the beginning of the pathname +/^\//, function () { + return '^'; +}], + +// replace special metacharacter slash after the leading slash +[/\//g, function () { + return '\\/'; +}], [ +// > A leading "**" followed by a slash means match in all directories. +// > For example, "**/foo" matches file or directory "foo" anywhere, +// > the same as pattern "foo". +// > "**/foo/bar" matches file or directory "bar" anywhere that is directly under directory "foo". +// Notice that the '*'s have been replaced as '\\*' +/^\^*\\\*\\\*\\\//, + +// '**/foo' <-> 'foo' +function () { + return '^(?:.*\\/)?'; +}]]; + +var DEFAULT_REPLACER_SUFFIX = [ +// starting +[ +// there will be no leading '/' (which has been replaced by section "leading slash") +// If starts with '**', adding a '^' to the regular expression also works +/^(?=[^\^])/, function () { + return !/\/(?!$)/.test(this) + // > If the pattern does not contain a slash /, Git treats it as a shell glob pattern + // Actually, if there is only a trailing slash, git also treats it as a shell glob pattern + ? '(?:^|\\/)' + + // > Otherwise, Git treats the pattern as a shell glob suitable for consumption by fnmatch(3) + : '^'; +}], + +// two globstars +[ +// Use lookahead assertions so that we could match more than one `'/**'` +/\\\/\\\*\\\*(?=\\\/|$)/g, + +// Zero, one or several directories +// should not use '*', or it will be replaced by the next replacer + +// Check if it is not the last `'/**'` +function (match, index, str) { + return index + 6 < str.length + + // case: /**/ + // > A slash followed by two consecutive asterisks then a slash matches zero or more directories. + // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. + // '/**/' + ? '(?:\\/[^\\/]+)*' + + // case: /** + // > A trailing `"/**"` matches everything inside. + + // #21: everything inside but it should not include the current folder + : '\\/.+'; +}], + +// intermediate wildcards +[ +// Never replace escaped '*' +// ignore rule '\*' will match the path '*' + +// 'abc.*/' -> go +// 'abc.*' -> skip this rule +/(^|[^\\]+)\\\*(?=.+)/g, + +// '*.js' matches '.js' +// '*.js' doesn't match 'abc' +function (match, p1) { + return p1 + '[^\\/]*'; +}], + +// trailing wildcard +[/(\^|\\\/)?\\\*$/, function (match, p1) { + return (p1 + // '\^': + // '/*' does not match '' + // '/*' does not match everything + + // '\\\/': + // 'abc/*' does not match 'abc/' + ? p1 + '[^/]+' + + // 'a*' matches 'a' + // 'a*' matches 'aa' + : '[^/]*') + '(?=$|\\/$)'; +}], [ +// unescape +/\\\\\\/g, function () { + return '\\'; +}]]; + +var POSITIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [ + +// 'f' +// matches +// - /f(end) +// - /f/ +// - (start)f(end) +// - (start)f/ +// doesn't match +// - oof +// - foo +// pseudo: +// -> (^|/)f(/|$) + +// ending +[ +// 'js' will not match 'js.' +// 'ab' will not match 'abc' +/(?:[^*\/])$/, + +// 'js*' will not match 'a.js' +// 'js/' will not match 'a.js' +// 'js' will match 'a.js' and 'a.js/' +function (match) { + return match + '(?=$|\\/)'; +}]], DEFAULT_REPLACER_SUFFIX); + +var NEGATIVE_REPLACERS = [].concat(DEFAULT_REPLACER_PREFIX, [ + +// #24, #38 +// The MISSING rule of [gitignore docs](https://git-scm.com/docs/gitignore) +// A negative pattern without a trailing wildcard should not +// re-include the things inside that directory. + +// eg: +// ['node_modules/*', '!node_modules'] +// should ignore `node_modules/a.js` +[/(?:[^*])$/, function (match) { + return match + '(?=$|\\/$)'; +}]], DEFAULT_REPLACER_SUFFIX); + +// A simple cache, because an ignore rule only has only one certain meaning +var cache = {}; + +// @param {pattern} +function make_regex(pattern, negative) { + var r = cache[pattern]; + if (r) { + return r; + } + + var replacers = negative ? NEGATIVE_REPLACERS : POSITIVE_REPLACERS; + + var source = replacers.reduce(function (prev, current) { + return prev.replace(current[0], current[1].bind(pattern)); + }, pattern); + + return cache[pattern] = new RegExp(source, 'i'); +} + +// Windows +// -------------------------------------------------------------- +/* istanbul ignore if */ +if ( +// Detect `process` so that it can run in browsers. +typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) { + + var filter = IgnoreBase.prototype._filter; + var make_posix = function make_posix(str) { + return (/^\\\\\?\\/.test(str) || /[^\x00-\x80]+/.test(str) ? str : str.replace(/\\/g, '/') + ); + }; + + IgnoreBase.prototype._filter = function (path, slices) { + path = make_posix(path); + return filter.call(this, path, slices); + }; +} + + +/***/ }), +/* 474 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +module.exports = function (str) { + var isExtendedLengthPath = /^\\\\\?\\/.test(str); + var hasNonAscii = /[^\x00-\x80]+/.test(str); + + if (isExtendedLengthPath || hasNonAscii) { + return str; + } + + return str.replace(/\\/g, '/'); +}; + + +/***/ }), +/* 475 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const parsers_1 = __webpack_require__(102); +const Report_1 = __webpack_require__(116); +const structUtils = __importStar(__webpack_require__(113)); +const IMPORTED_PATTERNS = [ + // This one come from Git urls + [/^git\+https:\/\/.*\.git#.*$/, (version, $0) => $0], + // These ones come from the npm registry + [/^https?:\/\/[^\/]+\/(?:@[^\/]+\/)?([^\/]+)\/-\/\1-[^\/]+\.tgz(?:#|$)/, version => `npm:${version}`], + // This one is from the old Yarn offline mirror - we assume they came from npm + [/^[^\/]+\.tgz#[0-9a-f]+$/, version => `npm:${version}`], +]; +class YarnResolver { + constructor() { + this.resolutions = null; + } + async setup(project, { report }) { + const lockfilePath = `${project.cwd}/${project.configuration.get(`lockfileFilename`)}`; + // No need to enable it if the lockfile doesn't exist + if (!fslib_1.xfs.existsSync(lockfilePath)) + return; + const content = await fslib_1.xfs.readFilePromise(lockfilePath, `utf8`); + const parsed = parsers_1.parseSyml(content); + // No need to enable it either if the lockfile is modern + if (Object.prototype.hasOwnProperty.call(parsed, `__metadata`)) + return; + const resolutions = this.resolutions = new Map(); + for (const key of Object.keys(parsed)) { + const descriptor = structUtils.tryParseDescriptor(key); + if (!descriptor) { + report.reportWarning(Report_1.MessageName.YARN_IMPORT_FAILED, `Failed to parse the string "${key}" into a proper descriptor`); + continue; + } + const { version, resolved } = parsed[key]; + let reference; + for (const [pattern, matcher] of IMPORTED_PATTERNS) { + const match = resolved.match(pattern); + if (match) { + reference = matcher(version, ...match); + break; + } + } + if (!reference) { + report.reportWarning(Report_1.MessageName.YARN_IMPORT_FAILED, `${structUtils.prettyDescriptor(project.configuration, descriptor)}: Only some patterns can be imported from legacy lockfiles (not "${resolved}")`); + continue; + } + const resolution = structUtils.makeLocator(descriptor, reference); + resolutions.set(descriptor.descriptorHash, resolution); + } + } + supportsDescriptor(descriptor, opts) { + if (!this.resolutions) + return false; + return this.resolutions.has(descriptor.descriptorHash); + } + supportsLocator(locator, opts) { + // This resolver only supports the descriptor -> locator part of the + // resolution, not the locator -> package one. + return false; + } + shouldPersistResolution(locator, opts) { + throw new Error(`Assertion failed: This resolver doesn't support resolving locators to packages`); + } + bindDescriptor(descriptor, fromLocator, opts) { + return descriptor; + } + async getCandidates(descriptor, opts) { + if (!this.resolutions) + throw new Error(`Assertion failed: The resolution store should have been setup`); + const resolution = this.resolutions.get(descriptor.descriptorHash); + if (!resolution) + throw new Error(`Assertion failed: The resolution should have been registered`); + return [resolution]; + } + async resolve(locator, opts) { + throw new Error(`Assertion failed: This resolver doesn't support resolving locators to packages`); + } +} +exports.YarnResolver = YarnResolver; + + +/***/ }), +/* 476 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.addMethod = addMethod; +exports.lazy = exports.ref = exports.boolean = void 0; + +var _mixed = _interopRequireDefault(__webpack_require__(478)); + +exports.mixed = _mixed.default; + +var _boolean = _interopRequireDefault(__webpack_require__(654)); + +exports.bool = _boolean.default; + +var _string = _interopRequireDefault(__webpack_require__(656)); + +exports.string = _string.default; + +var _number = _interopRequireDefault(__webpack_require__(658)); + +exports.number = _number.default; + +var _date = _interopRequireDefault(__webpack_require__(659)); + +exports.date = _date.default; + +var _object = _interopRequireDefault(__webpack_require__(661)); + +exports.object = _object.default; + +var _array = _interopRequireDefault(__webpack_require__(685)); + +exports.array = _array.default; + +var _Reference = _interopRequireDefault(__webpack_require__(651)); + +var _Lazy = _interopRequireDefault(__webpack_require__(686)); + +var _ValidationError = _interopRequireDefault(__webpack_require__(619)); + +exports.ValidationError = _ValidationError.default; + +var _reach = _interopRequireDefault(__webpack_require__(653)); + +exports.reach = _reach.default; + +var _isSchema = _interopRequireDefault(__webpack_require__(615)); + +exports.isSchema = _isSchema.default; + +var _setLocale = _interopRequireDefault(__webpack_require__(687)); + +exports.setLocale = _setLocale.default; +var boolean = _boolean.default; +exports.boolean = boolean; + +var ref = function ref(key, options) { + return new _Reference.default(key, options); +}; + +exports.ref = ref; + +var lazy = function lazy(fn) { + return new _Lazy.default(fn); +}; + +exports.lazy = lazy; + +function addMethod(schemaType, name, fn) { + if (!schemaType || !(0, _isSchema.default)(schemaType.prototype)) throw new TypeError('You must provide a yup schema constructor function'); + if (typeof name !== 'string') throw new TypeError('A Method name must be provided'); + if (typeof fn !== 'function') throw new TypeError('Method function must be provided'); + schemaType.prototype[name] = fn; +} + +/***/ }), +/* 477 */ +/***/ (function(module, exports) { + +function _interopRequireDefault(obj) { + return obj && obj.__esModule ? obj : { + default: obj + }; +} + +module.exports = _interopRequireDefault; + +/***/ }), +/* 478 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = SchemaType; + +var _extends2 = _interopRequireDefault(__webpack_require__(479)); + +var _has = _interopRequireDefault(__webpack_require__(480)); + +var _cloneDeepWith = _interopRequireDefault(__webpack_require__(537)); + +var _toArray2 = _interopRequireDefault(__webpack_require__(601)); + +var _locale = __webpack_require__(612); + +var _Condition = _interopRequireDefault(__webpack_require__(614)); + +var _runValidations = _interopRequireDefault(__webpack_require__(616)); + +var _prependDeep = _interopRequireDefault(__webpack_require__(620)); + +var _isSchema = _interopRequireDefault(__webpack_require__(615)); + +var _createValidation = _interopRequireDefault(__webpack_require__(621)); + +var _printValue = _interopRequireDefault(__webpack_require__(613)); + +var _Reference = _interopRequireDefault(__webpack_require__(651)); + +var _reach = __webpack_require__(653); + +var RefSet = +/*#__PURE__*/ +function () { + function RefSet() { + this.list = new Set(); + this.refs = new Map(); + } + + var _proto = RefSet.prototype; + + _proto.toArray = function toArray() { + return (0, _toArray2.default)(this.list).concat((0, _toArray2.default)(this.refs.values())); + }; + + _proto.add = function add(value) { + _Reference.default.isRef(value) ? this.refs.set(value.key, value) : this.list.add(value); + }; + + _proto.delete = function _delete(value) { + _Reference.default.isRef(value) ? this.refs.delete(value.key, value) : this.list.delete(value); + }; + + _proto.has = function has(value, resolve) { + if (this.list.has(value)) return true; + var item, + values = this.refs.values(); + + while (item = values.next(), !item.done) { + if (resolve(item.value) === value) return true; + } + + return false; + }; + + return RefSet; +}(); + +function SchemaType(options) { + var _this = this; + + if (options === void 0) { + options = {}; + } + + if (!(this instanceof SchemaType)) return new SchemaType(); + this._deps = []; + this._conditions = []; + this._options = { + abortEarly: true, + recursive: true + }; + this._exclusive = Object.create(null); + this._whitelist = new RefSet(); + this._blacklist = new RefSet(); + this.tests = []; + this.transforms = []; + this.withMutation(function () { + _this.typeError(_locale.mixed.notType); + }); + if ((0, _has.default)(options, 'default')) this._defaultDefault = options.default; + this._type = options.type || 'mixed'; +} + +var proto = SchemaType.prototype = { + __isYupSchema__: true, + constructor: SchemaType, + clone: function clone() { + var _this2 = this; + + if (this._mutate) return this; // if the nested value is a schema we can skip cloning, since + // they are already immutable + + return (0, _cloneDeepWith.default)(this, function (value) { + if ((0, _isSchema.default)(value) && value !== _this2) return value; + }); + }, + label: function label(_label) { + var next = this.clone(); + next._label = _label; + return next; + }, + meta: function meta(obj) { + if (arguments.length === 0) return this._meta; + var next = this.clone(); + next._meta = (0, _extends2.default)(next._meta || {}, obj); + return next; + }, + withMutation: function withMutation(fn) { + var before = this._mutate; + this._mutate = true; + var result = fn(this); + this._mutate = before; + return result; + }, + concat: function concat(schema) { + if (!schema || schema === this) return this; + if (schema._type !== this._type && this._type !== 'mixed') throw new TypeError("You cannot `concat()` schema's of different types: " + this._type + " and " + schema._type); + var next = (0, _prependDeep.default)(schema.clone(), this); // new undefined default is overriden by old non-undefined one, revert + + if ((0, _has.default)(schema, '_default')) next._default = schema._default; + next.tests = this.tests; + next._exclusive = this._exclusive; // manually add the new tests to ensure + // the deduping logic is consistent + + next.withMutation(function (next) { + schema.tests.forEach(function (fn) { + next.test(fn.OPTIONS); + }); + }); + return next; + }, + isType: function isType(v) { + if (this._nullable && v === null) return true; + return !this._typeCheck || this._typeCheck(v); + }, + resolve: function resolve(options) { + var schema = this; + + if (schema._conditions.length) { + var conditions = schema._conditions; + schema = schema.clone(); + schema._conditions = []; + schema = conditions.reduce(function (schema, condition) { + return condition.resolve(schema, options); + }, schema); + schema = schema.resolve(options); + } + + return schema; + }, + cast: function cast(value, options) { + if (options === void 0) { + options = {}; + } + + var resolvedSchema = this.resolve((0, _extends2.default)({}, options, { + value: value + })); + + var result = resolvedSchema._cast(value, options); + + if (value !== undefined && options.assert !== false && resolvedSchema.isType(result) !== true) { + var formattedValue = (0, _printValue.default)(value); + var formattedResult = (0, _printValue.default)(result); + throw new TypeError("The value of " + (options.path || 'field') + " could not be cast to a value " + ("that satisfies the schema type: \"" + resolvedSchema._type + "\". \n\n") + ("attempted value: " + formattedValue + " \n") + (formattedResult !== formattedValue ? "result of cast: " + formattedResult : '')); + } + + return result; + }, + _cast: function _cast(rawValue) { + var _this3 = this; + + var value = rawValue === undefined ? rawValue : this.transforms.reduce(function (value, fn) { + return fn.call(_this3, value, rawValue); + }, rawValue); + + if (value === undefined && (0, _has.default)(this, '_default')) { + value = this.default(); + } + + return value; + }, + _validate: function _validate(_value, options) { + var _this4 = this; + + if (options === void 0) { + options = {}; + } + + var value = _value; + var originalValue = options.originalValue != null ? options.originalValue : _value; + + var isStrict = this._option('strict', options); + + var endEarly = this._option('abortEarly', options); + + var sync = options.sync; + var path = options.path; + var label = this._label; + + if (!isStrict) { + value = this._cast(value, (0, _extends2.default)({ + assert: false + }, options)); + } // value is cast, we can check if it meets type requirements + + + var validationParams = { + value: value, + path: path, + schema: this, + options: options, + label: label, + originalValue: originalValue, + sync: sync + }; + var initialTests = []; + if (this._typeError) initialTests.push(this._typeError(validationParams)); + if (this._whitelistError) initialTests.push(this._whitelistError(validationParams)); + if (this._blacklistError) initialTests.push(this._blacklistError(validationParams)); + return (0, _runValidations.default)({ + validations: initialTests, + endEarly: endEarly, + value: value, + path: path, + sync: sync + }).then(function (value) { + return (0, _runValidations.default)({ + path: path, + sync: sync, + value: value, + endEarly: endEarly, + validations: _this4.tests.map(function (fn) { + return fn(validationParams); + }) + }); + }); + }, + validate: function validate(value, options) { + if (options === void 0) { + options = {}; + } + + var schema = this.resolve((0, _extends2.default)({}, options, { + value: value + })); + return schema._validate(value, options); + }, + validateSync: function validateSync(value, options) { + if (options === void 0) { + options = {}; + } + + var schema = this.resolve((0, _extends2.default)({}, options, { + value: value + })); + var result, err; + + schema._validate(value, (0, _extends2.default)({}, options, { + sync: true + })).then(function (r) { + return result = r; + }).catch(function (e) { + return err = e; + }); + + if (err) throw err; + return result; + }, + isValid: function isValid(value, options) { + return this.validate(value, options).then(function () { + return true; + }).catch(function (err) { + if (err.name === 'ValidationError') return false; + throw err; + }); + }, + isValidSync: function isValidSync(value, options) { + try { + this.validateSync(value, options); + return true; + } catch (err) { + if (err.name === 'ValidationError') return false; + throw err; + } + }, + getDefault: function getDefault(options) { + if (options === void 0) { + options = {}; + } + + var schema = this.resolve(options); + return schema.default(); + }, + default: function _default(def) { + if (arguments.length === 0) { + var defaultValue = (0, _has.default)(this, '_default') ? this._default : this._defaultDefault; + return typeof defaultValue === 'function' ? defaultValue.call(this) : (0, _cloneDeepWith.default)(defaultValue); + } + + var next = this.clone(); + next._default = def; + return next; + }, + strict: function strict(isStrict) { + if (isStrict === void 0) { + isStrict = true; + } + + var next = this.clone(); + next._options.strict = isStrict; + return next; + }, + _isPresent: function _isPresent(value) { + return value != null; + }, + required: function required(message) { + if (message === void 0) { + message = _locale.mixed.required; + } + + return this.test({ + message: message, + name: 'required', + exclusive: true, + test: function test(value) { + return this.schema._isPresent(value); + } + }); + }, + notRequired: function notRequired() { + var next = this.clone(); + next.tests = next.tests.filter(function (test) { + return test.OPTIONS.name !== 'required'; + }); + return next; + }, + nullable: function nullable(isNullable) { + if (isNullable === void 0) { + isNullable = true; + } + + var next = this.clone(); + next._nullable = isNullable; + return next; + }, + transform: function transform(fn) { + var next = this.clone(); + next.transforms.push(fn); + return next; + }, + + /** + * Adds a test function to the schema's queue of tests. + * tests can be exclusive or non-exclusive. + * + * - exclusive tests, will replace any existing tests of the same name. + * - non-exclusive: can be stacked + * + * If a non-exclusive test is added to a schema with an exclusive test of the same name + * the exclusive test is removed and further tests of the same name will be stacked. + * + * If an exclusive test is added to a schema with non-exclusive tests of the same name + * the previous tests are removed and further tests of the same name will replace each other. + */ + test: function test() { + var opts; + + if (arguments.length === 1) { + if (typeof (arguments.length <= 0 ? undefined : arguments[0]) === 'function') { + opts = { + test: arguments.length <= 0 ? undefined : arguments[0] + }; + } else { + opts = arguments.length <= 0 ? undefined : arguments[0]; + } + } else if (arguments.length === 2) { + opts = { + name: arguments.length <= 0 ? undefined : arguments[0], + test: arguments.length <= 1 ? undefined : arguments[1] + }; + } else { + opts = { + name: arguments.length <= 0 ? undefined : arguments[0], + message: arguments.length <= 1 ? undefined : arguments[1], + test: arguments.length <= 2 ? undefined : arguments[2] + }; + } + + if (opts.message === undefined) opts.message = _locale.mixed.default; + if (typeof opts.test !== 'function') throw new TypeError('`test` is a required parameters'); + var next = this.clone(); + var validate = (0, _createValidation.default)(opts); + var isExclusive = opts.exclusive || opts.name && next._exclusive[opts.name] === true; + + if (opts.exclusive && !opts.name) { + throw new TypeError('Exclusive tests must provide a unique `name` identifying the test'); + } + + next._exclusive[opts.name] = !!opts.exclusive; + next.tests = next.tests.filter(function (fn) { + if (fn.OPTIONS.name === opts.name) { + if (isExclusive) return false; + if (fn.OPTIONS.test === validate.OPTIONS.test) return false; + } + + return true; + }); + next.tests.push(validate); + return next; + }, + when: function when(keys, options) { + if (arguments.length === 1) { + options = keys; + keys = '.'; + } + + var next = this.clone(), + deps = [].concat(keys).map(function (key) { + return new _Reference.default(key); + }); + deps.forEach(function (dep) { + if (dep.isSibling) next._deps.push(dep.key); + }); + + next._conditions.push(new _Condition.default(deps, options)); + + return next; + }, + typeError: function typeError(message) { + var next = this.clone(); + next._typeError = (0, _createValidation.default)({ + message: message, + name: 'typeError', + test: function test(value) { + if (value !== undefined && !this.schema.isType(value)) return this.createError({ + params: { + type: this.schema._type + } + }); + return true; + } + }); + return next; + }, + oneOf: function oneOf(enums, message) { + if (message === void 0) { + message = _locale.mixed.oneOf; + } + + var next = this.clone(); + enums.forEach(function (val) { + next._whitelist.add(val); + + next._blacklist.delete(val); + }); + next._whitelistError = (0, _createValidation.default)({ + message: message, + name: 'oneOf', + test: function test(value) { + if (value === undefined) return true; + var valids = this.schema._whitelist; + return valids.has(value, this.resolve) ? true : this.createError({ + params: { + values: valids.toArray().join(', ') + } + }); + } + }); + return next; + }, + notOneOf: function notOneOf(enums, message) { + if (message === void 0) { + message = _locale.mixed.notOneOf; + } + + var next = this.clone(); + enums.forEach(function (val) { + next._blacklist.add(val); + + next._whitelist.delete(val); + }); + next._blacklistError = (0, _createValidation.default)({ + message: message, + name: 'notOneOf', + test: function test(value) { + var invalids = this.schema._blacklist; + if (invalids.has(value, this.resolve)) return this.createError({ + params: { + values: invalids.toArray().join(', ') + } + }); + return true; + } + }); + return next; + }, + strip: function strip(_strip) { + if (_strip === void 0) { + _strip = true; + } + + var next = this.clone(); + next._strip = _strip; + return next; + }, + _option: function _option(key, overrides) { + return (0, _has.default)(overrides, key) ? overrides[key] : this._options[key]; + }, + describe: function describe() { + var next = this.clone(); + return { + type: next._type, + meta: next._meta, + label: next._label, + tests: next.tests.map(function (fn) { + return { + name: fn.OPTIONS.name, + params: fn.OPTIONS.params + }; + }).filter(function (n, idx, list) { + return list.findIndex(function (c) { + return c.name === n.name; + }) === idx; + }) + }; + } +}; +var _arr = ['validate', 'validateSync']; + +var _loop = function _loop() { + var method = _arr[_i]; + + proto[method + "At"] = function (path, value, options) { + if (options === void 0) { + options = {}; + } + + var _getIn = (0, _reach.getIn)(this, path, value, options.context), + parent = _getIn.parent, + parentPath = _getIn.parentPath, + schema = _getIn.schema; + + return schema[method](parent && parent[parentPath], (0, _extends2.default)({}, options, { + parent: parent, + path: path + })); + }; +}; + +for (var _i = 0; _i < _arr.length; _i++) { + _loop(); +} + +var _arr2 = ['equals', 'is']; + +for (var _i2 = 0; _i2 < _arr2.length; _i2++) { + var alias = _arr2[_i2]; + proto[alias] = proto.oneOf; +} + +var _arr3 = ['not', 'nope']; + +for (var _i3 = 0; _i3 < _arr3.length; _i3++) { + var _alias = _arr3[_i3]; + proto[_alias] = proto.notOneOf; +} + +proto.optional = proto.notRequired; +module.exports = exports["default"]; + +/***/ }), +/* 479 */ +/***/ (function(module, exports) { + +function _extends() { + module.exports = _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +module.exports = _extends; + +/***/ }), +/* 480 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseHas = __webpack_require__(481), + hasPath = __webpack_require__(482); + +/** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ +function has(object, path) { + return object != null && hasPath(object, path, baseHas); +} + +module.exports = has; + + +/***/ }), +/* 481 */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); +} + +module.exports = baseHas; + + +/***/ }), +/* 482 */ +/***/ (function(module, exports, __webpack_require__) { + +var castPath = __webpack_require__(483), + isArguments = __webpack_require__(532), + isArray = __webpack_require__(484), + isIndex = __webpack_require__(534), + isLength = __webpack_require__(535), + toKey = __webpack_require__(536); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; + + +/***/ }), +/* 483 */ +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(484), + isKey = __webpack_require__(485), + stringToPath = __webpack_require__(494), + toString = __webpack_require__(529); + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); +} + +module.exports = castPath; + + +/***/ }), +/* 484 */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; + + +/***/ }), +/* 485 */ +/***/ (function(module, exports, __webpack_require__) { + +var isArray = __webpack_require__(484), + isSymbol = __webpack_require__(486); + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/; + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +module.exports = isKey; + + +/***/ }), +/* 486 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(487), + isObjectLike = __webpack_require__(493); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; + + +/***/ }), +/* 487 */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(488), + getRawTag = __webpack_require__(491), + objectToString = __webpack_require__(492); + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +module.exports = baseGetTag; + + +/***/ }), +/* 488 */ +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(489); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +module.exports = Symbol; + + +/***/ }), +/* 489 */ +/***/ (function(module, exports, __webpack_require__) { + +var freeGlobal = __webpack_require__(490); + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +module.exports = root; + + +/***/ }), +/* 490 */ +/***/ (function(module, exports) { + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +module.exports = freeGlobal; + + +/***/ }), +/* 491 */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(488); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; +} + +module.exports = getRawTag; + + +/***/ }), +/* 492 */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +module.exports = objectToString; + + +/***/ }), +/* 493 */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +module.exports = isObjectLike; + + +/***/ }), +/* 494 */ +/***/ (function(module, exports, __webpack_require__) { + +var memoizeCapped = __webpack_require__(495); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; + + +/***/ }), +/* 495 */ +/***/ (function(module, exports, __webpack_require__) { + +var memoize = __webpack_require__(496); + +/** Used as the maximum memoize cache size. */ +var MAX_MEMOIZE_SIZE = 500; + +/** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ +function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; +} + +module.exports = memoizeCapped; + + +/***/ }), +/* 496 */ +/***/ (function(module, exports, __webpack_require__) { + +var MapCache = __webpack_require__(497); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Expose `MapCache`. +memoize.Cache = MapCache; + +module.exports = memoize; + + +/***/ }), +/* 497 */ +/***/ (function(module, exports, __webpack_require__) { + +var mapCacheClear = __webpack_require__(498), + mapCacheDelete = __webpack_require__(523), + mapCacheGet = __webpack_require__(526), + mapCacheHas = __webpack_require__(527), + mapCacheSet = __webpack_require__(528); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; + + +/***/ }), +/* 498 */ +/***/ (function(module, exports, __webpack_require__) { + +var Hash = __webpack_require__(499), + ListCache = __webpack_require__(514), + Map = __webpack_require__(522); + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +module.exports = mapCacheClear; + + +/***/ }), +/* 499 */ +/***/ (function(module, exports, __webpack_require__) { + +var hashClear = __webpack_require__(500), + hashDelete = __webpack_require__(510), + hashGet = __webpack_require__(511), + hashHas = __webpack_require__(512), + hashSet = __webpack_require__(513); + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +module.exports = Hash; + + +/***/ }), +/* 500 */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(501); + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; +} + +module.exports = hashClear; + + +/***/ }), +/* 501 */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(502); + +/* Built-in method references that are verified to be native. */ +var nativeCreate = getNative(Object, 'create'); + +module.exports = nativeCreate; + + +/***/ }), +/* 502 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsNative = __webpack_require__(503), + getValue = __webpack_require__(509); + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +module.exports = getNative; + + +/***/ }), +/* 503 */ +/***/ (function(module, exports, __webpack_require__) { + +var isFunction = __webpack_require__(504), + isMasked = __webpack_require__(506), + isObject = __webpack_require__(505), + toSource = __webpack_require__(508); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; + + +/***/ }), +/* 504 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(487), + isObject = __webpack_require__(505); + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +module.exports = isFunction; + + +/***/ }), +/* 505 */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +module.exports = isObject; + + +/***/ }), +/* 506 */ +/***/ (function(module, exports, __webpack_require__) { + +var coreJsData = __webpack_require__(507); + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +module.exports = isMasked; + + +/***/ }), +/* 507 */ +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(489); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; + + +/***/ }), +/* 508 */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var funcProto = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +module.exports = toSource; + + +/***/ }), +/* 509 */ +/***/ (function(module, exports) { + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +module.exports = getValue; + + +/***/ }), +/* 510 */ +/***/ (function(module, exports) { + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; + + +/***/ }), +/* 511 */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(501); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; + + +/***/ }), +/* 512 */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(501); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); +} + +module.exports = hashHas; + + +/***/ }), +/* 513 */ +/***/ (function(module, exports, __webpack_require__) { + +var nativeCreate = __webpack_require__(501); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +module.exports = hashSet; + + +/***/ }), +/* 514 */ +/***/ (function(module, exports, __webpack_require__) { + +var listCacheClear = __webpack_require__(515), + listCacheDelete = __webpack_require__(516), + listCacheGet = __webpack_require__(519), + listCacheHas = __webpack_require__(520), + listCacheSet = __webpack_require__(521); + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +module.exports = ListCache; + + +/***/ }), +/* 515 */ +/***/ (function(module, exports) { + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; + this.size = 0; +} + +module.exports = listCacheClear; + + +/***/ }), +/* 516 */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(517); + +/** Used for built-in method references. */ +var arrayProto = Array.prototype; + +/** Built-in value references. */ +var splice = arrayProto.splice; + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; +} + +module.exports = listCacheDelete; + + +/***/ }), +/* 517 */ +/***/ (function(module, exports, __webpack_require__) { + +var eq = __webpack_require__(518); + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +module.exports = assocIndexOf; + + +/***/ }), +/* 518 */ +/***/ (function(module, exports) { + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +module.exports = eq; + + +/***/ }), +/* 519 */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(517); + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +module.exports = listCacheGet; + + +/***/ }), +/* 520 */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(517); + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +module.exports = listCacheHas; + + +/***/ }), +/* 521 */ +/***/ (function(module, exports, __webpack_require__) { + +var assocIndexOf = __webpack_require__(517); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; + + +/***/ }), +/* 522 */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(502), + root = __webpack_require__(489); + +/* Built-in method references that are verified to be native. */ +var Map = getNative(root, 'Map'); + +module.exports = Map; + + +/***/ }), +/* 523 */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(524); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; + + +/***/ }), +/* 524 */ +/***/ (function(module, exports, __webpack_require__) { + +var isKeyable = __webpack_require__(525); + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +module.exports = getMapData; + + +/***/ }), +/* 525 */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +module.exports = isKeyable; + + +/***/ }), +/* 526 */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(524); + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +module.exports = mapCacheGet; + + +/***/ }), +/* 527 */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(524); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; + + +/***/ }), +/* 528 */ +/***/ (function(module, exports, __webpack_require__) { + +var getMapData = __webpack_require__(524); + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; +} + +module.exports = mapCacheSet; + + +/***/ }), +/* 529 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseToString = __webpack_require__(530); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +module.exports = toString; + + +/***/ }), +/* 530 */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(488), + arrayMap = __webpack_require__(531), + isArray = __webpack_require__(484), + isSymbol = __webpack_require__(486); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = baseToString; + + +/***/ }), +/* 531 */ +/***/ (function(module, exports) { + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +module.exports = arrayMap; + + +/***/ }), +/* 532 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsArguments = __webpack_require__(533), + isObjectLike = __webpack_require__(493); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +module.exports = isArguments; + + +/***/ }), +/* 533 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(487), + isObjectLike = __webpack_require__(493); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; +} + +module.exports = baseIsArguments; + + +/***/ }), +/* 534 */ +/***/ (function(module, exports) { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +module.exports = isIndex; + + +/***/ }), +/* 535 */ +/***/ (function(module, exports) { + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +module.exports = isLength; + + +/***/ }), +/* 536 */ +/***/ (function(module, exports, __webpack_require__) { + +var isSymbol = __webpack_require__(486); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; + + +/***/ }), +/* 537 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseClone = __webpack_require__(538); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ +function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); +} + +module.exports = cloneDeepWith; + + +/***/ }), +/* 538 */ +/***/ (function(module, exports, __webpack_require__) { + +var Stack = __webpack_require__(539), + arrayEach = __webpack_require__(545), + assignValue = __webpack_require__(546), + baseAssign = __webpack_require__(549), + baseAssignIn = __webpack_require__(565), + cloneBuffer = __webpack_require__(569), + copyArray = __webpack_require__(570), + copySymbols = __webpack_require__(571), + copySymbolsIn = __webpack_require__(575), + getAllKeys = __webpack_require__(579), + getAllKeysIn = __webpack_require__(581), + getTag = __webpack_require__(582), + initCloneArray = __webpack_require__(587), + initCloneByTag = __webpack_require__(588), + initCloneObject = __webpack_require__(595), + isArray = __webpack_require__(484), + isBuffer = __webpack_require__(554), + isMap = __webpack_require__(597), + isObject = __webpack_require__(505), + isSet = __webpack_require__(599), + keys = __webpack_require__(551); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values supported by `_.clone`. */ +var cloneableTags = {}; +cloneableTags[argsTag] = cloneableTags[arrayTag] = +cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = +cloneableTags[boolTag] = cloneableTags[dateTag] = +cloneableTags[float32Tag] = cloneableTags[float64Tag] = +cloneableTags[int8Tag] = cloneableTags[int16Tag] = +cloneableTags[int32Tag] = cloneableTags[mapTag] = +cloneableTags[numberTag] = cloneableTags[objectTag] = +cloneableTags[regexpTag] = cloneableTags[setTag] = +cloneableTags[stringTag] = cloneableTags[symbolTag] = +cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = +cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; +cloneableTags[errorTag] = cloneableTags[funcTag] = +cloneableTags[weakMapTag] = false; + +/** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ +function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + + return result; + } + + if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + + return result; + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; +} + +module.exports = baseClone; + + +/***/ }), +/* 539 */ +/***/ (function(module, exports, __webpack_require__) { + +var ListCache = __webpack_require__(514), + stackClear = __webpack_require__(540), + stackDelete = __webpack_require__(541), + stackGet = __webpack_require__(542), + stackHas = __webpack_require__(543), + stackSet = __webpack_require__(544); + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +module.exports = Stack; + + +/***/ }), +/* 540 */ +/***/ (function(module, exports, __webpack_require__) { + +var ListCache = __webpack_require__(514); + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; + this.size = 0; +} + +module.exports = stackClear; + + +/***/ }), +/* 541 */ +/***/ (function(module, exports) { + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +module.exports = stackDelete; + + +/***/ }), +/* 542 */ +/***/ (function(module, exports) { + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +module.exports = stackGet; + + +/***/ }), +/* 543 */ +/***/ (function(module, exports) { + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +module.exports = stackHas; + + +/***/ }), +/* 544 */ +/***/ (function(module, exports, __webpack_require__) { + +var ListCache = __webpack_require__(514), + Map = __webpack_require__(522), + MapCache = __webpack_require__(497); + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; +} + +module.exports = stackSet; + + +/***/ }), +/* 545 */ +/***/ (function(module, exports) { + +/** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ +function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; +} + +module.exports = arrayEach; + + +/***/ }), +/* 546 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(547), + eq = __webpack_require__(518); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignValue; + + +/***/ }), +/* 547 */ +/***/ (function(module, exports, __webpack_require__) { + +var defineProperty = __webpack_require__(548); + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +module.exports = baseAssignValue; + + +/***/ }), +/* 548 */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(502); + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +module.exports = defineProperty; + + +/***/ }), +/* 549 */ +/***/ (function(module, exports, __webpack_require__) { + +var copyObject = __webpack_require__(550), + keys = __webpack_require__(551); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; + + +/***/ }), +/* 550 */ +/***/ (function(module, exports, __webpack_require__) { + +var assignValue = __webpack_require__(546), + baseAssignValue = __webpack_require__(547); + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +module.exports = copyObject; + + +/***/ }), +/* 551 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayLikeKeys = __webpack_require__(552), + baseKeys = __webpack_require__(560), + isArrayLike = __webpack_require__(564); + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +module.exports = keys; + + +/***/ }), +/* 552 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseTimes = __webpack_require__(553), + isArguments = __webpack_require__(532), + isArray = __webpack_require__(484), + isBuffer = __webpack_require__(554), + isIndex = __webpack_require__(534), + isTypedArray = __webpack_require__(556); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +module.exports = arrayLikeKeys; + + +/***/ }), +/* 553 */ +/***/ (function(module, exports) { + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +module.exports = baseTimes; + + +/***/ }), +/* 554 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(489), + stubFalse = __webpack_require__(555); + +/** Detect free variable `exports`. */ +var freeExports = true && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +module.exports = isBuffer; + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(161)(module))) + +/***/ }), +/* 555 */ +/***/ (function(module, exports) { + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +module.exports = stubFalse; + + +/***/ }), +/* 556 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsTypedArray = __webpack_require__(557), + baseUnary = __webpack_require__(558), + nodeUtil = __webpack_require__(559); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +module.exports = isTypedArray; + + +/***/ }), +/* 557 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(487), + isLength = __webpack_require__(535), + isObjectLike = __webpack_require__(493); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; + + +/***/ }), +/* 558 */ +/***/ (function(module, exports) { + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +module.exports = baseUnary; + + +/***/ }), +/* 559 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var freeGlobal = __webpack_require__(490); + +/** Detect free variable `exports`. */ +var freeExports = true && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +module.exports = nodeUtil; + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(161)(module))) + +/***/ }), +/* 560 */ +/***/ (function(module, exports, __webpack_require__) { + +var isPrototype = __webpack_require__(561), + nativeKeys = __webpack_require__(562); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +module.exports = baseKeys; + + +/***/ }), +/* 561 */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +module.exports = isPrototype; + + +/***/ }), +/* 562 */ +/***/ (function(module, exports, __webpack_require__) { + +var overArg = __webpack_require__(563); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +module.exports = nativeKeys; + + +/***/ }), +/* 563 */ +/***/ (function(module, exports) { + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +module.exports = overArg; + + +/***/ }), +/* 564 */ +/***/ (function(module, exports, __webpack_require__) { + +var isFunction = __webpack_require__(504), + isLength = __webpack_require__(535); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +module.exports = isArrayLike; + + +/***/ }), +/* 565 */ +/***/ (function(module, exports, __webpack_require__) { + +var copyObject = __webpack_require__(550), + keysIn = __webpack_require__(566); + +/** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); +} + +module.exports = baseAssignIn; + + +/***/ }), +/* 566 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayLikeKeys = __webpack_require__(552), + baseKeysIn = __webpack_require__(567), + isArrayLike = __webpack_require__(564); + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +module.exports = keysIn; + + +/***/ }), +/* 567 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(505), + isPrototype = __webpack_require__(561), + nativeKeysIn = __webpack_require__(568); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = baseKeysIn; + + +/***/ }), +/* 568 */ +/***/ (function(module, exports) { + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +module.exports = nativeKeysIn; + + +/***/ }), +/* 569 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var root = __webpack_require__(489); + +/** Detect free variable `exports`. */ +var freeExports = true && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; + +/** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ +function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; +} + +module.exports = cloneBuffer; + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(161)(module))) + +/***/ }), +/* 570 */ +/***/ (function(module, exports) { + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; + + +/***/ }), +/* 571 */ +/***/ (function(module, exports, __webpack_require__) { + +var copyObject = __webpack_require__(550), + getSymbols = __webpack_require__(572); + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; + + +/***/ }), +/* 572 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayFilter = __webpack_require__(573), + stubArray = __webpack_require__(574); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); +}; + +module.exports = getSymbols; + + +/***/ }), +/* 573 */ +/***/ (function(module, exports) { + +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; + + +/***/ }), +/* 574 */ +/***/ (function(module, exports) { + +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +module.exports = stubArray; + + +/***/ }), +/* 575 */ +/***/ (function(module, exports, __webpack_require__) { + +var copyObject = __webpack_require__(550), + getSymbolsIn = __webpack_require__(576); + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); +} + +module.exports = copySymbolsIn; + + +/***/ }), +/* 576 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayPush = __webpack_require__(577), + getPrototype = __webpack_require__(578), + getSymbols = __webpack_require__(572), + stubArray = __webpack_require__(574); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeGetSymbols = Object.getOwnPropertySymbols; + +/** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ +var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; +}; + +module.exports = getSymbolsIn; + + +/***/ }), +/* 577 */ +/***/ (function(module, exports) { + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +module.exports = arrayPush; + + +/***/ }), +/* 578 */ +/***/ (function(module, exports, __webpack_require__) { + +var overArg = __webpack_require__(563); + +/** Built-in value references. */ +var getPrototype = overArg(Object.getPrototypeOf, Object); + +module.exports = getPrototype; + + +/***/ }), +/* 579 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetAllKeys = __webpack_require__(580), + getSymbols = __webpack_require__(572), + keys = __webpack_require__(551); + +/** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); +} + +module.exports = getAllKeys; + + +/***/ }), +/* 580 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayPush = __webpack_require__(577), + isArray = __webpack_require__(484); + +/** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ +function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); +} + +module.exports = baseGetAllKeys; + + +/***/ }), +/* 581 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetAllKeys = __webpack_require__(580), + getSymbolsIn = __webpack_require__(576), + keysIn = __webpack_require__(566); + +/** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ +function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); +} + +module.exports = getAllKeysIn; + + +/***/ }), +/* 582 */ +/***/ (function(module, exports, __webpack_require__) { + +var DataView = __webpack_require__(583), + Map = __webpack_require__(522), + Promise = __webpack_require__(584), + Set = __webpack_require__(585), + WeakMap = __webpack_require__(586), + baseGetTag = __webpack_require__(487), + toSource = __webpack_require__(508); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + setTag = '[object Set]', + weakMapTag = '[object WeakMap]'; + +var dataViewTag = '[object DataView]'; + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +module.exports = getTag; + + +/***/ }), +/* 583 */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(502), + root = __webpack_require__(489); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; + + +/***/ }), +/* 584 */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(502), + root = __webpack_require__(489); + +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); + +module.exports = Promise; + + +/***/ }), +/* 585 */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(502), + root = __webpack_require__(489); + +/* Built-in method references that are verified to be native. */ +var Set = getNative(root, 'Set'); + +module.exports = Set; + + +/***/ }), +/* 586 */ +/***/ (function(module, exports, __webpack_require__) { + +var getNative = __webpack_require__(502), + root = __webpack_require__(489); + +/* Built-in method references that are verified to be native. */ +var WeakMap = getNative(root, 'WeakMap'); + +module.exports = WeakMap; + + +/***/ }), +/* 587 */ +/***/ (function(module, exports) { + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ +function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; +} + +module.exports = initCloneArray; + + +/***/ }), +/* 588 */ +/***/ (function(module, exports, __webpack_require__) { + +var cloneArrayBuffer = __webpack_require__(589), + cloneDataView = __webpack_require__(591), + cloneRegExp = __webpack_require__(592), + cloneSymbol = __webpack_require__(593), + cloneTypedArray = __webpack_require__(594); + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } +} + +module.exports = initCloneByTag; + + +/***/ }), +/* 589 */ +/***/ (function(module, exports, __webpack_require__) { + +var Uint8Array = __webpack_require__(590); + +/** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ +function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; +} + +module.exports = cloneArrayBuffer; + + +/***/ }), +/* 590 */ +/***/ (function(module, exports, __webpack_require__) { + +var root = __webpack_require__(489); + +/** Built-in value references. */ +var Uint8Array = root.Uint8Array; + +module.exports = Uint8Array; + + +/***/ }), +/* 591 */ +/***/ (function(module, exports, __webpack_require__) { + +var cloneArrayBuffer = __webpack_require__(589); + +/** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ +function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); +} + +module.exports = cloneDataView; + + +/***/ }), +/* 592 */ +/***/ (function(module, exports) { + +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +module.exports = cloneRegExp; + + +/***/ }), +/* 593 */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(488); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ +function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; +} + +module.exports = cloneSymbol; + + +/***/ }), +/* 594 */ +/***/ (function(module, exports, __webpack_require__) { + +var cloneArrayBuffer = __webpack_require__(589); + +/** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ +function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); +} + +module.exports = cloneTypedArray; + + +/***/ }), +/* 595 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseCreate = __webpack_require__(596), + getPrototype = __webpack_require__(578), + isPrototype = __webpack_require__(561); + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; +} + +module.exports = initCloneObject; + + +/***/ }), +/* 596 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(505); + +/** Built-in value references. */ +var objectCreate = Object.create; + +/** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ +var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; +}()); + +module.exports = baseCreate; + + +/***/ }), +/* 597 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsMap = __webpack_require__(598), + baseUnary = __webpack_require__(558), + nodeUtil = __webpack_require__(559); + +/* Node.js helper references. */ +var nodeIsMap = nodeUtil && nodeUtil.isMap; + +/** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ +var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + +module.exports = isMap; + + +/***/ }), +/* 598 */ +/***/ (function(module, exports, __webpack_require__) { + +var getTag = __webpack_require__(582), + isObjectLike = __webpack_require__(493); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]'; + +/** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ +function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; +} + +module.exports = baseIsMap; + + +/***/ }), +/* 599 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsSet = __webpack_require__(600), + baseUnary = __webpack_require__(558), + nodeUtil = __webpack_require__(559); + +/* Node.js helper references. */ +var nodeIsSet = nodeUtil && nodeUtil.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + +module.exports = isSet; + + +/***/ }), +/* 600 */ +/***/ (function(module, exports, __webpack_require__) { + +var getTag = __webpack_require__(582), + isObjectLike = __webpack_require__(493); + +/** `Object#toString` result references. */ +var setTag = '[object Set]'; + +/** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ +function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; +} + +module.exports = baseIsSet; + + +/***/ }), +/* 601 */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(488), + copyArray = __webpack_require__(570), + getTag = __webpack_require__(582), + isArrayLike = __webpack_require__(564), + isString = __webpack_require__(602), + iteratorToArray = __webpack_require__(603), + mapToArray = __webpack_require__(604), + setToArray = __webpack_require__(605), + stringToArray = __webpack_require__(606), + values = __webpack_require__(610); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** Built-in value references. */ +var symIterator = Symbol ? Symbol.iterator : undefined; + +/** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ +function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); +} + +module.exports = toArray; + + +/***/ }), +/* 602 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGetTag = __webpack_require__(487), + isArray = __webpack_require__(484), + isObjectLike = __webpack_require__(493); + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +module.exports = isString; + + +/***/ }), +/* 603 */ +/***/ (function(module, exports) { + +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; +} + +module.exports = iteratorToArray; + + +/***/ }), +/* 604 */ +/***/ (function(module, exports) { + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +module.exports = mapToArray; + + +/***/ }), +/* 605 */ +/***/ (function(module, exports) { + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +module.exports = setToArray; + + +/***/ }), +/* 606 */ +/***/ (function(module, exports, __webpack_require__) { + +var asciiToArray = __webpack_require__(607), + hasUnicode = __webpack_require__(608), + unicodeToArray = __webpack_require__(609); + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +module.exports = stringToArray; + + +/***/ }), +/* 607 */ +/***/ (function(module, exports) { + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +module.exports = asciiToArray; + + +/***/ }), +/* 608 */ +/***/ (function(module, exports) { + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +module.exports = hasUnicode; + + +/***/ }), +/* 609 */ +/***/ (function(module, exports) { + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +module.exports = unicodeToArray; + + +/***/ }), +/* 610 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseValues = __webpack_require__(611), + keys = __webpack_require__(551); + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object == null ? [] : baseValues(object, keys(object)); +} + +module.exports = values; + + +/***/ }), +/* 611 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayMap = __webpack_require__(531); + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +module.exports = baseValues; + + +/***/ }), +/* 612 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = exports.array = exports.object = exports.boolean = exports.date = exports.number = exports.string = exports.mixed = void 0; + +var _printValue = _interopRequireDefault(__webpack_require__(613)); + +var mixed = { + default: '${path} is invalid', + required: '${path} is a required field', + oneOf: '${path} must be one of the following values: ${values}', + notOneOf: '${path} must not be one of the following values: ${values}', + notType: function notType(_ref) { + var path = _ref.path, + type = _ref.type, + value = _ref.value, + originalValue = _ref.originalValue; + var isCast = originalValue != null && originalValue !== value; + var msg = path + " must be a `" + type + "` type, " + ("but the final value was: `" + (0, _printValue.default)(value, true) + "`") + (isCast ? " (cast from the value `" + (0, _printValue.default)(originalValue, true) + "`)." : '.'); + + if (value === null) { + msg += "\n If \"null\" is intended as an empty value be sure to mark the schema as `.nullable()`"; + } + + return msg; + } +}; +exports.mixed = mixed; +var string = { + length: '${path} must be exactly ${length} characters', + min: '${path} must be at least ${min} characters', + max: '${path} must be at most ${max} characters', + matches: '${path} must match the following: "${regex}"', + email: '${path} must be a valid email', + url: '${path} must be a valid URL', + trim: '${path} must be a trimmed string', + lowercase: '${path} must be a lowercase string', + uppercase: '${path} must be a upper case string' +}; +exports.string = string; +var number = { + min: '${path} must be greater than or equal to ${min}', + max: '${path} must be less than or equal to ${max}', + lessThan: '${path} must be less than ${less}', + moreThan: '${path} must be greater than ${more}', + notEqual: '${path} must be not equal to ${notEqual}', + positive: '${path} must be a positive number', + negative: '${path} must be a negative number', + integer: '${path} must be an integer' +}; +exports.number = number; +var date = { + min: '${path} field must be later than ${min}', + max: '${path} field must be at earlier than ${max}' +}; +exports.date = date; +var boolean = {}; +exports.boolean = boolean; +var object = { + noUnknown: '${path} field cannot have keys not specified in the object shape' +}; +exports.object = object; +var array = { + min: '${path} field must have at least ${min} items', + max: '${path} field must have less than or equal to ${max} items' +}; +exports.array = array; +var _default = { + mixed: mixed, + string: string, + number: number, + date: date, + object: object, + array: array, + boolean: boolean +}; +exports.default = _default; + +/***/ }), +/* 613 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; +exports.default = printValue; +var toString = Object.prototype.toString; +var errorToString = Error.prototype.toString; +var regExpToString = RegExp.prototype.toString; +var symbolToString = typeof Symbol !== 'undefined' ? Symbol.prototype.toString : function () { + return ''; +}; +var SYMBOL_REGEXP = /^Symbol\((.*)\)(.*)$/; + +function printNumber(val) { + if (val != +val) return 'NaN'; + var isNegativeZero = val === 0 && 1 / val < 0; + return isNegativeZero ? '-0' : '' + val; +} + +function printSimpleValue(val, quoteStrings) { + if (quoteStrings === void 0) { + quoteStrings = false; + } + + if (val == null || val === true || val === false) return '' + val; + var typeOf = typeof val; + if (typeOf === 'number') return printNumber(val); + if (typeOf === 'string') return quoteStrings ? "\"" + val + "\"" : val; + if (typeOf === 'function') return '[Function ' + (val.name || 'anonymous') + ']'; + if (typeOf === 'symbol') return symbolToString.call(val).replace(SYMBOL_REGEXP, 'Symbol($1)'); + var tag = toString.call(val).slice(8, -1); + if (tag === 'Date') return isNaN(val.getTime()) ? '' + val : val.toISOString(val); + if (tag === 'Error' || val instanceof Error) return '[' + errorToString.call(val) + ']'; + if (tag === 'RegExp') return regExpToString.call(val); + return null; +} + +function printValue(value, quoteStrings) { + var result = printSimpleValue(value, quoteStrings); + if (result !== null) return result; + return JSON.stringify(value, function (key, value) { + var result = printSimpleValue(this[key], quoteStrings); + if (result !== null) return result; + return value; + }, 2); +} + +module.exports = exports["default"]; + +/***/ }), +/* 614 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = void 0; + +var _has = _interopRequireDefault(__webpack_require__(480)); + +var _isSchema = _interopRequireDefault(__webpack_require__(615)); + +var Condition = +/*#__PURE__*/ +function () { + function Condition(refs, options) { + this.refs = refs; + + if (typeof options === 'function') { + this.fn = options; + return; + } + + if (!(0, _has.default)(options, 'is')) throw new TypeError('`is:` is required for `when()` conditions'); + if (!options.then && !options.otherwise) throw new TypeError('either `then:` or `otherwise:` is required for `when()` conditions'); + var is = options.is, + then = options.then, + otherwise = options.otherwise; + var check = typeof is === 'function' ? is : function () { + for (var _len = arguments.length, values = new Array(_len), _key = 0; _key < _len; _key++) { + values[_key] = arguments[_key]; + } + + return values.every(function (value) { + return value === is; + }); + }; + + this.fn = function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var options = args.pop(); + var schema = args.pop(); + var branch = check.apply(void 0, args) ? then : otherwise; + if (!branch) return undefined; + if (typeof branch === 'function') return branch(schema); + return schema.concat(branch.resolve(options)); + }; + } + + var _proto = Condition.prototype; + + _proto.resolve = function resolve(base, options) { + var values = this.refs.map(function (ref) { + return ref.getValue(options); + }); + var schema = this.fn.apply(base, values.concat(base, options)); + if (schema === undefined || schema === base) return base; + if (!(0, _isSchema.default)(schema)) throw new TypeError('conditions must return a schema object'); + return schema.resolve(options); + }; + + return Condition; +}(); + +var _default = Condition; +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 615 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; +exports.default = void 0; + +var _default = function _default(obj) { + return obj && obj.__isYupSchema__; +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 616 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.propagateErrors = propagateErrors; +exports.settled = settled; +exports.collectErrors = collectErrors; +exports.default = runValidations; + +var _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(617)); + +var _synchronousPromise = __webpack_require__(618); + +var _ValidationError = _interopRequireDefault(__webpack_require__(619)); + +var promise = function promise(sync) { + return sync ? _synchronousPromise.SynchronousPromise : Promise; +}; + +var unwrapError = function unwrapError(errors) { + if (errors === void 0) { + errors = []; + } + + return errors.inner && errors.inner.length ? errors.inner : [].concat(errors); +}; + +function scopeToValue(promises, value, sync) { + //console.log('scopeToValue', promises, value) + var p = promise(sync).all(promises); //console.log('scopeToValue B', p) + + var b = p.catch(function (err) { + if (err.name === 'ValidationError') err.value = value; + throw err; + }); //console.log('scopeToValue c', b) + + var c = b.then(function () { + return value; + }); //console.log('scopeToValue d', c) + + return c; +} +/** + * If not failing on the first error, catch the errors + * and collect them in an array + */ + + +function propagateErrors(endEarly, errors) { + return endEarly ? null : function (err) { + errors.push(err); + return err.value; + }; +} + +function settled(promises, sync) { + var Promise = promise(sync); + return Promise.all(promises.map(function (p) { + return Promise.resolve(p).then(function (value) { + return { + fulfilled: true, + value: value + }; + }, function (value) { + return { + fulfilled: false, + value: value + }; + }); + })); +} + +function collectErrors(_ref) { + var validations = _ref.validations, + value = _ref.value, + path = _ref.path, + sync = _ref.sync, + errors = _ref.errors, + sort = _ref.sort; + errors = unwrapError(errors); + return settled(validations, sync).then(function (results) { + var nestedErrors = results.filter(function (r) { + return !r.fulfilled; + }).reduce(function (arr, _ref2) { + var error = _ref2.value; + + // we are only collecting validation errors + if (!_ValidationError.default.isError(error)) { + throw error; + } + + return arr.concat(error); + }, []); + if (sort) nestedErrors.sort(sort); //show parent errors after the nested ones: name.first, name + + errors = nestedErrors.concat(errors); + if (errors.length) throw new _ValidationError.default(errors, value, path); + return value; + }); +} + +function runValidations(_ref3) { + var endEarly = _ref3.endEarly, + options = (0, _objectWithoutPropertiesLoose2.default)(_ref3, ["endEarly"]); + if (endEarly) return scopeToValue(options.validations, options.value, options.sync); + return collectErrors(options); +} + +/***/ }), +/* 617 */ +/***/ (function(module, exports) { + +function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; +} + +module.exports = _objectWithoutPropertiesLoose; + +/***/ }), +/* 618 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/* jshint node: true */ + +function makeArrayFrom(obj) { + return Array.prototype.slice.apply(obj); +} +var + PENDING = "pending", + RESOLVED = "resolved", + REJECTED = "rejected"; + +function SynchronousPromise(handler) { + this.status = PENDING; + this._continuations = []; + this._parent = null; + this._paused = false; + if (handler) { + handler.call( + this, + this._continueWith.bind(this), + this._failWith.bind(this) + ); + } +} + +function looksLikeAPromise(obj) { + return obj && typeof (obj.then) === "function"; +} + +SynchronousPromise.prototype = { + then: function (nextFn, catchFn) { + var next = SynchronousPromise.unresolved()._setParent(this); + if (this._isRejected()) { + if (this._paused) { + this._continuations.push({ + promise: next, + nextFn: nextFn, + catchFn: catchFn + }); + return next; + } + if (catchFn) { + try { + var catchResult = catchFn(this._error); + if (looksLikeAPromise(catchResult)) { + this._chainPromiseData(catchResult, next); + return next; + } else { + return SynchronousPromise.resolve(catchResult)._setParent(this); + } + } catch (e) { + return SynchronousPromise.reject(e)._setParent(this); + } + } + return SynchronousPromise.reject(this._error)._setParent(this); + } + this._continuations.push({ + promise: next, + nextFn: nextFn, + catchFn: catchFn + }); + this._runResolutions(); + return next; + }, + catch: function (handler) { + if (this._isResolved()) { + return SynchronousPromise.resolve(this._data)._setParent(this); + } + var next = SynchronousPromise.unresolved()._setParent(this); + this._continuations.push({ + promise: next, + catchFn: handler + }); + this._runRejections(); + return next; + }, + pause: function () { + this._paused = true; + return this; + }, + resume: function () { + var firstPaused = this._findFirstPaused(); + if (firstPaused) { + firstPaused._paused = false; + firstPaused._runResolutions(); + firstPaused._runRejections(); + } + return this; + }, + _findAncestry: function () { + return this._continuations.reduce(function (acc, cur) { + if (cur.promise) { + var node = { + promise: cur.promise, + children: cur.promise._findAncestry() + }; + acc.push(node); + } + return acc; + }, []); + }, + _setParent: function (parent) { + if (this._parent) { + throw new Error("parent already set"); + } + this._parent = parent; + return this; + }, + _continueWith: function (data) { + var firstPending = this._findFirstPending(); + if (firstPending) { + firstPending._data = data; + firstPending._setResolved(); + } + }, + _findFirstPending: function () { + return this._findFirstAncestor(function (test) { + return test._isPending && test._isPending(); + }); + }, + _findFirstPaused: function () { + return this._findFirstAncestor(function (test) { + return test._paused; + }); + }, + _findFirstAncestor: function (matching) { + var test = this; + var result; + while (test) { + if (matching(test)) { + result = test; + } + test = test._parent; + } + return result; + }, + _failWith: function (error) { + var firstRejected = this._findFirstPending(); + if (firstRejected) { + firstRejected._error = error; + firstRejected._setRejected(); + } + }, + _takeContinuations: function () { + return this._continuations.splice(0, this._continuations.length); + }, + _runRejections: function () { + if (this._paused || !this._isRejected()) { + return; + } + var + error = this._error, + continuations = this._takeContinuations(), + self = this; + continuations.forEach(function (cont) { + if (cont.catchFn) { + try { + var catchResult = cont.catchFn(error); + self._handleUserFunctionResult(catchResult, cont.promise); + } catch (e) { + var message = e.message; + cont.promise.reject(e); + } + } else { + cont.promise.reject(error); + } + }); + }, + _runResolutions: function () { + if (this._paused || !this._isResolved()) { + return; + } + var continuations = this._takeContinuations(); + if (looksLikeAPromise(this._data)) { + return this._handleWhenResolvedDataIsPromise(this._data); + } + var data = this._data; + var self = this; + continuations.forEach(function (cont) { + if (cont.nextFn) { + try { + var result = cont.nextFn(data); + self._handleUserFunctionResult(result, cont.promise); + } catch (e) { + self._handleResolutionError(e, cont); + } + } else if (cont.promise) { + cont.promise.resolve(data); + } + }); + }, + _handleResolutionError: function (e, continuation) { + this._setRejected(); + if (continuation.catchFn) { + try { + continuation.catchFn(e); + return; + } catch (e2) { + e = e2; + } + } + if (continuation.promise) { + continuation.promise.reject(e); + } + }, + _handleWhenResolvedDataIsPromise: function (data) { + var self = this; + return data.then(function (result) { + self._data = result; + self._runResolutions(); + }).catch(function (error) { + self._error = error; + self._setRejected(); + self._runRejections(); + }); + }, + _handleUserFunctionResult: function (data, nextSynchronousPromise) { + if (looksLikeAPromise(data)) { + this._chainPromiseData(data, nextSynchronousPromise); + } else { + nextSynchronousPromise.resolve(data); + } + }, + _chainPromiseData: function (promiseData, nextSynchronousPromise) { + promiseData.then(function (newData) { + nextSynchronousPromise.resolve(newData); + }).catch(function (newError) { + nextSynchronousPromise.reject(newError); + }); + }, + _setResolved: function () { + this.status = RESOLVED; + if (!this._paused) { + this._runResolutions(); + } + }, + _setRejected: function () { + this.status = REJECTED; + if (!this._paused) { + this._runRejections(); + } + }, + _isPending: function () { + return this.status === PENDING; + }, + _isResolved: function () { + return this.status === RESOLVED; + }, + _isRejected: function () { + return this.status === REJECTED; + } +}; + +SynchronousPromise.resolve = function (result) { + return new SynchronousPromise(function (resolve, reject) { + if (looksLikeAPromise(result)) { + result.then(function (newResult) { + resolve(newResult); + }).catch(function (error) { + reject(error); + }); + } else { + resolve(result); + } + }); +}; + +SynchronousPromise.reject = function (result) { + return new SynchronousPromise(function (resolve, reject) { + reject(result); + }); +}; + +SynchronousPromise.unresolved = function () { + return new SynchronousPromise(function (resolve, reject) { + this.resolve = resolve; + this.reject = reject; + }); +}; + +SynchronousPromise.all = function () { + var args = makeArrayFrom(arguments); + if (Array.isArray(args[0])) { + args = args[0]; + } + if (!args.length) { + return SynchronousPromise.resolve([]); + } + return new SynchronousPromise(function (resolve, reject) { + var + allData = [], + numResolved = 0, + doResolve = function () { + if (numResolved === args.length) { + resolve(allData); + } + }, + rejected = false, + doReject = function (err) { + if (rejected) { + return; + } + rejected = true; + reject(err); + }; + args.forEach(function (arg, idx) { + SynchronousPromise.resolve(arg).then(function (thisResult) { + allData[idx] = thisResult; + numResolved += 1; + doResolve(); + }).catch(function (err) { + doReject(err); + }); + }); + }); +}; + +/* jshint ignore:start */ +if (Promise === SynchronousPromise) { + throw new Error("Please use SynchronousPromise.installGlobally() to install globally"); +} +var RealPromise = Promise; +SynchronousPromise.installGlobally = function(__awaiter) { + if (Promise === SynchronousPromise) { + return __awaiter; + } + var result = patchAwaiterIfRequired(__awaiter); + Promise = SynchronousPromise; + return result; +}; + +SynchronousPromise.uninstallGlobally = function() { + if (Promise === SynchronousPromise) { + Promise = RealPromise; + } +}; + +function patchAwaiterIfRequired(__awaiter) { + if (typeof(__awaiter) === "undefined" || __awaiter.__patched) { + return __awaiter; + } + var originalAwaiter = __awaiter; + __awaiter = function() { + var Promise = RealPromise; + originalAwaiter.apply(this, makeArrayFrom(arguments)); + }; + __awaiter.__patched = true; + return __awaiter; +} +/* jshint ignore:end */ + +module.exports = { + SynchronousPromise: SynchronousPromise +}; + +/***/ }), +/* 619 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = ValidationError; + +var _printValue = _interopRequireDefault(__webpack_require__(613)); + +var strReg = /\$\{\s*(\w+)\s*\}/g; + +var replace = function replace(str) { + return function (params) { + return str.replace(strReg, function (_, key) { + return (0, _printValue.default)(params[key]); + }); + }; +}; + +function ValidationError(errors, value, field, type) { + var _this = this; + + this.name = 'ValidationError'; + this.value = value; + this.path = field; + this.type = type; + this.errors = []; + this.inner = []; + if (errors) [].concat(errors).forEach(function (err) { + _this.errors = _this.errors.concat(err.errors || err); + if (err.inner) _this.inner = _this.inner.concat(err.inner.length ? err.inner : err); + }); + this.message = this.errors.length > 1 ? this.errors.length + " errors occurred" : this.errors[0]; + if (Error.captureStackTrace) Error.captureStackTrace(this, ValidationError); +} + +ValidationError.prototype = Object.create(Error.prototype); +ValidationError.prototype.constructor = ValidationError; + +ValidationError.isError = function (err) { + return err && err.name === 'ValidationError'; +}; + +ValidationError.formatError = function (message, params) { + if (typeof message === 'string') message = replace(message); + + var fn = function fn(params) { + params.path = params.label || params.path || 'this'; + return typeof message === 'function' ? message(params) : message; + }; + + return arguments.length === 1 ? fn : fn(params); +}; + +module.exports = exports["default"]; + +/***/ }), +/* 620 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = prependDeep; + +var _has = _interopRequireDefault(__webpack_require__(480)); + +var _isSchema = _interopRequireDefault(__webpack_require__(615)); + +var isObject = function isObject(obj) { + return Object.prototype.toString.call(obj) === '[object Object]'; +}; + +function prependDeep(target, source) { + for (var key in source) { + if ((0, _has.default)(source, key)) { + var sourceVal = source[key], + targetVal = target[key]; + + if (targetVal === undefined) { + target[key] = sourceVal; + } else if (targetVal === sourceVal) { + continue; + } else if ((0, _isSchema.default)(targetVal)) { + if ((0, _isSchema.default)(sourceVal)) target[key] = sourceVal.concat(targetVal); + } else if (isObject(targetVal)) { + if (isObject(sourceVal)) target[key] = prependDeep(targetVal, sourceVal); + } else if (Array.isArray(targetVal)) { + if (Array.isArray(sourceVal)) target[key] = sourceVal.concat(targetVal); + } + } + } + + return target; +} + +module.exports = exports["default"]; + +/***/ }), +/* 621 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.createErrorFactory = createErrorFactory; +exports.default = createValidation; + +var _objectWithoutPropertiesLoose2 = _interopRequireDefault(__webpack_require__(617)); + +var _extends2 = _interopRequireDefault(__webpack_require__(479)); + +var _mapValues = _interopRequireDefault(__webpack_require__(622)); + +var _ValidationError = _interopRequireDefault(__webpack_require__(619)); + +var _Reference = _interopRequireDefault(__webpack_require__(651)); + +var _synchronousPromise = __webpack_require__(618); + +var formatError = _ValidationError.default.formatError; + +var thenable = function thenable(p) { + return p && typeof p.then === 'function' && typeof p.catch === 'function'; +}; + +function runTest(testFn, ctx, value, sync) { + var result = testFn.call(ctx, value); + if (!sync) return Promise.resolve(result); + + if (thenable(result)) { + throw new Error("Validation test of type: \"" + ctx.type + "\" returned a Promise during a synchronous validate. " + "This test will finish after the validate call has returned"); + } + + return _synchronousPromise.SynchronousPromise.resolve(result); +} + +function resolveParams(oldParams, newParams, resolve) { + return (0, _mapValues.default)((0, _extends2.default)({}, oldParams, newParams), resolve); +} + +function createErrorFactory(_ref) { + var value = _ref.value, + label = _ref.label, + resolve = _ref.resolve, + originalValue = _ref.originalValue, + opts = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["value", "label", "resolve", "originalValue"]); + return function createError(_temp) { + var _ref2 = _temp === void 0 ? {} : _temp, + _ref2$path = _ref2.path, + path = _ref2$path === void 0 ? opts.path : _ref2$path, + _ref2$message = _ref2.message, + message = _ref2$message === void 0 ? opts.message : _ref2$message, + _ref2$type = _ref2.type, + type = _ref2$type === void 0 ? opts.name : _ref2$type, + params = _ref2.params; + + params = (0, _extends2.default)({ + path: path, + value: value, + originalValue: originalValue, + label: label + }, resolveParams(opts.params, params, resolve)); + return (0, _extends2.default)(new _ValidationError.default(formatError(message, params), value, path, type), { + params: params + }); + }; +} + +function createValidation(options) { + var name = options.name, + message = options.message, + test = options.test, + params = options.params; + + function validate(_ref3) { + var value = _ref3.value, + path = _ref3.path, + label = _ref3.label, + options = _ref3.options, + originalValue = _ref3.originalValue, + sync = _ref3.sync, + rest = (0, _objectWithoutPropertiesLoose2.default)(_ref3, ["value", "path", "label", "options", "originalValue", "sync"]); + var parent = options.parent; + + var resolve = function resolve(item) { + return _Reference.default.isRef(item) ? item.getValue({ + value: value, + parent: parent, + context: options.context + }) : item; + }; + + var createError = createErrorFactory({ + message: message, + path: path, + value: value, + originalValue: originalValue, + params: params, + label: label, + resolve: resolve, + name: name + }); + var ctx = (0, _extends2.default)({ + path: path, + parent: parent, + type: name, + createError: createError, + resolve: resolve, + options: options + }, rest); + return runTest(test, ctx, value, sync).then(function (validOrError) { + if (_ValidationError.default.isError(validOrError)) throw validOrError;else if (!validOrError) throw createError(); + }); + } + + validate.OPTIONS = options; + return validate; +} + +/***/ }), +/* 622 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(547), + baseForOwn = __webpack_require__(623), + baseIteratee = __webpack_require__(626); + +/** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ +function mapValues(object, iteratee) { + var result = {}; + iteratee = baseIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; +} + +module.exports = mapValues; + + +/***/ }), +/* 623 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseFor = __webpack_require__(624), + keys = __webpack_require__(551); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +module.exports = baseForOwn; + + +/***/ }), +/* 624 */ +/***/ (function(module, exports, __webpack_require__) { + +var createBaseFor = __webpack_require__(625); + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +module.exports = baseFor; + + +/***/ }), +/* 625 */ +/***/ (function(module, exports) { + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +module.exports = createBaseFor; + + +/***/ }), +/* 626 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseMatches = __webpack_require__(627), + baseMatchesProperty = __webpack_require__(642), + identity = __webpack_require__(647), + isArray = __webpack_require__(484), + property = __webpack_require__(648); + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +module.exports = baseIteratee; + + +/***/ }), +/* 627 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsMatch = __webpack_require__(628), + getMatchData = __webpack_require__(639), + matchesStrictComparable = __webpack_require__(641); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +module.exports = baseMatches; + + +/***/ }), +/* 628 */ +/***/ (function(module, exports, __webpack_require__) { + +var Stack = __webpack_require__(539), + baseIsEqual = __webpack_require__(629); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; + + +/***/ }), +/* 629 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsEqualDeep = __webpack_require__(630), + isObjectLike = __webpack_require__(493); + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); +} + +module.exports = baseIsEqual; + + +/***/ }), +/* 630 */ +/***/ (function(module, exports, __webpack_require__) { + +var Stack = __webpack_require__(539), + equalArrays = __webpack_require__(631), + equalByTag = __webpack_require__(637), + equalObjects = __webpack_require__(638), + getTag = __webpack_require__(582), + isArray = __webpack_require__(484), + isBuffer = __webpack_require__(554), + isTypedArray = __webpack_require__(556); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + objectTag = '[object Object]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); +} + +module.exports = baseIsEqualDeep; + + +/***/ }), +/* 631 */ +/***/ (function(module, exports, __webpack_require__) { + +var SetCache = __webpack_require__(632), + arraySome = __webpack_require__(635), + cacheHas = __webpack_require__(636); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +module.exports = equalArrays; + + +/***/ }), +/* 632 */ +/***/ (function(module, exports, __webpack_require__) { + +var MapCache = __webpack_require__(497), + setCacheAdd = __webpack_require__(633), + setCacheHas = __webpack_require__(634); + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; + + +/***/ }), +/* 633 */ +/***/ (function(module, exports) { + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +module.exports = setCacheAdd; + + +/***/ }), +/* 634 */ +/***/ (function(module, exports) { + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +module.exports = setCacheHas; + + +/***/ }), +/* 635 */ +/***/ (function(module, exports) { + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +module.exports = arraySome; + + +/***/ }), +/* 636 */ +/***/ (function(module, exports) { + +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +module.exports = cacheHas; + + +/***/ }), +/* 637 */ +/***/ (function(module, exports, __webpack_require__) { + +var Symbol = __webpack_require__(488), + Uint8Array = __webpack_require__(590), + eq = __webpack_require__(518), + equalArrays = __webpack_require__(631), + mapToArray = __webpack_require__(604), + setToArray = __webpack_require__(605); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +module.exports = equalByTag; + + +/***/ }), +/* 638 */ +/***/ (function(module, exports, __webpack_require__) { + +var getAllKeys = __webpack_require__(579); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +module.exports = equalObjects; + + +/***/ }), +/* 639 */ +/***/ (function(module, exports, __webpack_require__) { + +var isStrictComparable = __webpack_require__(640), + keys = __webpack_require__(551); + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +module.exports = getMatchData; + + +/***/ }), +/* 640 */ +/***/ (function(module, exports, __webpack_require__) { + +var isObject = __webpack_require__(505); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; + + +/***/ }), +/* 641 */ +/***/ (function(module, exports) { + +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +module.exports = matchesStrictComparable; + + +/***/ }), +/* 642 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseIsEqual = __webpack_require__(629), + get = __webpack_require__(643), + hasIn = __webpack_require__(645), + isKey = __webpack_require__(485), + isStrictComparable = __webpack_require__(640), + matchesStrictComparable = __webpack_require__(641), + toKey = __webpack_require__(536); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} + +module.exports = baseMatchesProperty; + + +/***/ }), +/* 643 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGet = __webpack_require__(644); + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +module.exports = get; + + +/***/ }), +/* 644 */ +/***/ (function(module, exports, __webpack_require__) { + +var castPath = __webpack_require__(483), + toKey = __webpack_require__(536); + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +module.exports = baseGet; + + +/***/ }), +/* 645 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseHasIn = __webpack_require__(646), + hasPath = __webpack_require__(482); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; + + +/***/ }), +/* 646 */ +/***/ (function(module, exports) { + +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +module.exports = baseHasIn; + + +/***/ }), +/* 647 */ +/***/ (function(module, exports) { + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +module.exports = identity; + + +/***/ }), +/* 648 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseProperty = __webpack_require__(649), + basePropertyDeep = __webpack_require__(650), + isKey = __webpack_require__(485), + toKey = __webpack_require__(536); + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} + +module.exports = property; + + +/***/ }), +/* 649 */ +/***/ (function(module, exports) { + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; + + +/***/ }), +/* 650 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseGet = __webpack_require__(644); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +module.exports = basePropertyDeep; + + +/***/ }), +/* 651 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = void 0; + +var _extends2 = _interopRequireDefault(__webpack_require__(479)); + +var _propertyExpr = __webpack_require__(652); + +var prefixes = { + context: '$', + value: '.' +}; + +var Reference = +/*#__PURE__*/ +function () { + function Reference(key, options) { + if (options === void 0) { + options = {}; + } + + if (typeof key !== 'string') throw new TypeError('ref must be a string, got: ' + key); + this.key = key.trim(); + if (key === '') throw new TypeError('ref must be a non-empty string'); + this.isContext = this.key[0] === prefixes.context; + this.isValue = this.key[0] === prefixes.value; + this.isSibling = !this.isContext && !this.isValue; + var prefix = this.isContext ? prefixes.context : this.isValue ? prefixes.value : ''; + this.path = this.key.slice(prefix.length); + this.getter = this.path && (0, _propertyExpr.getter)(this.path, true); + this.map = options.map; + } + + var _proto = Reference.prototype; + + _proto.getValue = function getValue(options) { + var result = this.isContext ? options.context : this.isValue ? options.value : options.parent; + if (this.getter) result = this.getter(result || {}); + if (this.map) result = this.map(result); + return result; + }; + + _proto.cast = function cast(value, options) { + return this.getValue((0, _extends2.default)({}, options, { + value: value + })); + }; + + _proto.resolve = function resolve() { + return this; + }; + + _proto.describe = function describe() { + return { + type: 'ref', + key: this.key + }; + }; + + _proto.toString = function toString() { + return "Ref(" + this.key + ")"; + }; + + Reference.isRef = function isRef(value) { + return value && value.__isYupRef; + }; + + return Reference; +}(); + +exports.default = Reference; +Reference.prototype.__isYupRef = true; +module.exports = exports["default"]; + +/***/ }), +/* 652 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; +/** + * Based on Kendo UI Core expression code + */ + + +function Cache(maxSize) { + this._maxSize = maxSize + this.clear() +} +Cache.prototype.clear = function() { + this._size = 0 + this._values = {} +} +Cache.prototype.get = function(key) { + return this._values[key] +} +Cache.prototype.set = function(key, value) { + this._size >= this._maxSize && this.clear() + if (!this._values.hasOwnProperty(key)) { + this._size++ + } + return this._values[key] = value +} + +var SPLIT_REGEX = /[^.^\]^[]+|(?=\[\]|\.\.)/g, + DIGIT_REGEX = /^\d+$/, + LEAD_DIGIT_REGEX = /^\d/, + SPEC_CHAR_REGEX = /[~`!#$%\^&*+=\-\[\]\\';,/{}|\\":<>\?]/g, + CLEAN_QUOTES_REGEX = /^\s*(['"]?)(.*?)(\1)\s*$/, + MAX_CACHE_SIZE = 512 + +var contentSecurityPolicy = false, + pathCache = new Cache(MAX_CACHE_SIZE), + setCache = new Cache(MAX_CACHE_SIZE), + getCache = new Cache(MAX_CACHE_SIZE) + +try { + new Function('') +} catch (error) { + contentSecurityPolicy = true +} + +module.exports = { + Cache: Cache, + + expr: expr, + + split: split, + + normalizePath: normalizePath, + + setter: contentSecurityPolicy + ? function(path) { + var parts = normalizePath(path) + return function(data, value) { + return setterFallback(parts, data, value) + } + } + : function(path) { + return setCache.get(path) || setCache.set( + path, + new Function( + 'data, value', + expr(path, 'data') + ' = value' + ) + ) + }, + + getter: contentSecurityPolicy + ? function(path, safe) { + var parts = normalizePath(path) + return function(data) { + return getterFallback(parts, safe, data) + } + } + : function(path, safe) { + var key = path + '_' + safe + return getCache.get(key) || getCache.set( + key, + new Function('data', 'return ' + expr(path, safe, 'data')) + ) + }, + + join: function(segments) { + return segments.reduce(function(path, part) { + return ( + path + + (isQuoted(part) || DIGIT_REGEX.test(part) + ? '[' + part + ']' + : (path ? '.' : '') + part) + ) + }, '') + }, + + forEach: function(path, cb, thisArg) { + forEach(split(path), cb, thisArg) + } +} + +function setterFallback(parts, data, value) { + var index = 0, + len = parts.length + while (index < len - 1) { + data = data[parts[index++]] + } + data[parts[index]] = value +} + +function getterFallback(parts, safe, data) { + var index = 0, + len = parts.length + while (index < len) { + if (data != null || !safe) { + data = data[parts[index++]] + } else { + return + } + } + return data +} + +function normalizePath(path) { + return pathCache.get(path) || pathCache.set( + path, + split(path).map(function(part) { + return part.replace(CLEAN_QUOTES_REGEX, '$2') + }) + ) +} + +function split(path) { + return path.match(SPLIT_REGEX) +} + +function expr(expression, safe, param) { + expression = expression || '' + + if (typeof safe === 'string') { + param = safe + safe = false + } + + param = param || 'data' + + if (expression && expression.charAt(0) !== '[') expression = '.' + expression + + return safe ? makeSafe(expression, param) : param + expression +} + +function forEach(parts, iter, thisArg) { + var len = parts.length, + part, + idx, + isArray, + isBracket + + for (idx = 0; idx < len; idx++) { + part = parts[idx] + + if (part) { + if (shouldBeQuoted(part)) { + part = '"' + part + '"' + } + + isBracket = isQuoted(part) + isArray = !isBracket && /^\d+$/.test(part) + + iter.call(thisArg, part, isBracket, isArray, idx, parts) + } + } +} + +function isQuoted(str) { + return ( + typeof str === 'string' && str && ["'", '"'].indexOf(str.charAt(0)) !== -1 + ) +} + +function makeSafe(path, param) { + var result = param, + parts = split(path), + isLast + + forEach(parts, function(part, isBracket, isArray, idx, parts) { + isLast = idx === parts.length - 1 + + part = isBracket || isArray ? '[' + part + ']' : '.' + part + + result += part + (!isLast ? ' || {})' : ')') + }) + + return new Array(parts.length + 1).join('(') + result +} + +function hasLeadingNumber(part) { + return part.match(LEAD_DIGIT_REGEX) && !part.match(DIGIT_REGEX) +} + +function hasSpecialChars(part) { + return SPEC_CHAR_REGEX.test(part) +} + +function shouldBeQuoted(part) { + return !isQuoted(part) && (hasLeadingNumber(part) || hasSpecialChars(part)) +} + + +/***/ }), +/* 653 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.getIn = getIn; +exports.default = void 0; + +var _propertyExpr = __webpack_require__(652); + +var _has = _interopRequireDefault(__webpack_require__(480)); + +var trim = function trim(part) { + return part.substr(0, part.length - 1).substr(1); +}; + +function getIn(schema, path, value, context) { + var parent, lastPart, lastPartDebug; // if only one "value" arg then use it for both + + context = context || value; + if (!path) return { + parent: parent, + parentPath: path, + schema: schema + }; + (0, _propertyExpr.forEach)(path, function (_part, isBracket, isArray) { + var part = isBracket ? trim(_part) : _part; + + if (isArray || (0, _has.default)(schema, '_subType')) { + // we skipped an array: foo[].bar + var idx = isArray ? parseInt(part, 10) : 0; + schema = schema.resolve({ + context: context, + parent: parent, + value: value + })._subType; + + if (value) { + if (isArray && idx >= value.length) { + throw new Error("Yup.reach cannot resolve an array item at index: " + _part + ", in the path: " + path + ". " + "because there is no value at that index. "); + } + + value = value[idx]; + } + } + + if (!isArray) { + schema = schema.resolve({ + context: context, + parent: parent, + value: value + }); + if (!(0, _has.default)(schema, 'fields') || !(0, _has.default)(schema.fields, part)) throw new Error("The schema does not contain the path: " + path + ". " + ("(failed at: " + lastPartDebug + " which is a type: \"" + schema._type + "\") ")); + schema = schema.fields[part]; + parent = value; + value = value && value[part]; + lastPart = part; + lastPartDebug = isBracket ? '[' + _part + ']' : '.' + _part; + } + }); + return { + schema: schema, + parent: parent, + parentPath: lastPart + }; +} + +var reach = function reach(obj, path, value, context) { + return getIn(obj, path, value, context).schema; +}; + +var _default = reach; +exports.default = _default; + +/***/ }), +/* 654 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = void 0; + +var _inherits = _interopRequireDefault(__webpack_require__(655)); + +var _mixed = _interopRequireDefault(__webpack_require__(478)); + +var _default = BooleanSchema; +exports.default = _default; + +function BooleanSchema() { + var _this = this; + + if (!(this instanceof BooleanSchema)) return new BooleanSchema(); + + _mixed.default.call(this, { + type: 'boolean' + }); + + this.withMutation(function () { + _this.transform(function (value) { + if (!this.isType(value)) { + if (/^(true|1)$/i.test(value)) return true; + if (/^(false|0)$/i.test(value)) return false; + } + + return value; + }); + }); +} + +(0, _inherits.default)(BooleanSchema, _mixed.default, { + _typeCheck: function _typeCheck(v) { + if (v instanceof Boolean) v = v.valueOf(); + return typeof v === 'boolean'; + } +}); +module.exports = exports["default"]; + +/***/ }), +/* 655 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = inherits; + +var _extends2 = _interopRequireDefault(__webpack_require__(479)); + +function inherits(ctor, superCtor, spec) { + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + (0, _extends2.default)(ctor.prototype, spec); +} + +module.exports = exports["default"]; + +/***/ }), +/* 656 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = StringSchema; + +var _inherits = _interopRequireDefault(__webpack_require__(655)); + +var _mixed = _interopRequireDefault(__webpack_require__(478)); + +var _locale = __webpack_require__(612); + +var _isAbsent = _interopRequireDefault(__webpack_require__(657)); + +// eslint-disable-next-line +var rEmail = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i; // eslint-disable-next-line + +var rUrl = /^((https?|ftp):)?\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i; + +var isTrimmed = function isTrimmed(value) { + return (0, _isAbsent.default)(value) || value === value.trim(); +}; + +function StringSchema() { + var _this = this; + + if (!(this instanceof StringSchema)) return new StringSchema(); + + _mixed.default.call(this, { + type: 'string' + }); + + this.withMutation(function () { + _this.transform(function (value) { + if (this.isType(value)) return value; + return value != null && value.toString ? value.toString() : value; + }); + }); +} + +(0, _inherits.default)(StringSchema, _mixed.default, { + _typeCheck: function _typeCheck(value) { + if (value instanceof String) value = value.valueOf(); + return typeof value === 'string'; + }, + _isPresent: function _isPresent(value) { + return _mixed.default.prototype._cast.call(this, value) && value.length > 0; + }, + length: function length(_length, message) { + if (message === void 0) { + message = _locale.string.length; + } + + return this.test({ + message: message, + name: 'length', + exclusive: true, + params: { + length: _length + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value.length === this.resolve(_length); + } + }); + }, + min: function min(_min, message) { + if (message === void 0) { + message = _locale.string.min; + } + + return this.test({ + message: message, + name: 'min', + exclusive: true, + params: { + min: _min + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value.length >= this.resolve(_min); + } + }); + }, + max: function max(_max, message) { + if (message === void 0) { + message = _locale.string.max; + } + + return this.test({ + name: 'max', + exclusive: true, + message: message, + params: { + max: _max + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value.length <= this.resolve(_max); + } + }); + }, + matches: function matches(regex, options) { + var excludeEmptyString = false; + var message; + + if (options) { + if (options.message || options.hasOwnProperty('excludeEmptyString')) { + excludeEmptyString = options.excludeEmptyString; + message = options.message; + } else message = options; + } + + return this.test({ + message: message || _locale.string.matches, + params: { + regex: regex + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value === '' && excludeEmptyString || regex.test(value); + } + }); + }, + email: function email(message) { + if (message === void 0) { + message = _locale.string.email; + } + + return this.matches(rEmail, { + message: message, + excludeEmptyString: true + }); + }, + url: function url(message) { + if (message === void 0) { + message = _locale.string.url; + } + + return this.matches(rUrl, { + message: message, + excludeEmptyString: true + }); + }, + //-- transforms -- + ensure: function ensure() { + return this.default('').transform(function (val) { + return val === null ? '' : val; + }); + }, + trim: function trim(message) { + if (message === void 0) { + message = _locale.string.trim; + } + + return this.transform(function (val) { + return val != null ? val.trim() : val; + }).test({ + message: message, + name: 'trim', + test: isTrimmed + }); + }, + lowercase: function lowercase(message) { + if (message === void 0) { + message = _locale.string.lowercase; + } + + return this.transform(function (value) { + return !(0, _isAbsent.default)(value) ? value.toLowerCase() : value; + }).test({ + message: message, + name: 'string_case', + exclusive: true, + test: function test(value) { + return (0, _isAbsent.default)(value) || value === value.toLowerCase(); + } + }); + }, + uppercase: function uppercase(message) { + if (message === void 0) { + message = _locale.string.uppercase; + } + + return this.transform(function (value) { + return !(0, _isAbsent.default)(value) ? value.toUpperCase() : value; + }).test({ + message: message, + name: 'string_case', + exclusive: true, + test: function test(value) { + return (0, _isAbsent.default)(value) || value === value.toUpperCase(); + } + }); + } +}); +module.exports = exports["default"]; + +/***/ }), +/* 657 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; +exports.default = void 0; + +var _default = function _default(value) { + return value == null; +}; + +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 658 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = NumberSchema; + +var _inherits = _interopRequireDefault(__webpack_require__(655)); + +var _mixed = _interopRequireDefault(__webpack_require__(478)); + +var _locale = __webpack_require__(612); + +var _isAbsent = _interopRequireDefault(__webpack_require__(657)); + +var isNaN = function isNaN(value) { + return value != +value; +}; + +var isInteger = function isInteger(val) { + return (0, _isAbsent.default)(val) || val === (val | 0); +}; + +function NumberSchema() { + var _this = this; + + if (!(this instanceof NumberSchema)) return new NumberSchema(); + + _mixed.default.call(this, { + type: 'number' + }); + + this.withMutation(function () { + _this.transform(function (value) { + var parsed = value; + + if (typeof parsed === 'string') { + parsed = parsed.replace(/\s/g, ''); + if (parsed === '') return NaN; // don't use parseFloat to avoid positives on alpha-numeric strings + + parsed = +parsed; + } + + if (this.isType(parsed)) return parsed; + return parseFloat(parsed); + }); + }); +} + +(0, _inherits.default)(NumberSchema, _mixed.default, { + _typeCheck: function _typeCheck(value) { + if (value instanceof Number) value = value.valueOf(); + return typeof value === 'number' && !isNaN(value); + }, + min: function min(_min, message) { + if (message === void 0) { + message = _locale.number.min; + } + + return this.test({ + message: message, + name: 'min', + exclusive: true, + params: { + min: _min + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value >= this.resolve(_min); + } + }); + }, + max: function max(_max, message) { + if (message === void 0) { + message = _locale.number.max; + } + + return this.test({ + message: message, + name: 'max', + exclusive: true, + params: { + max: _max + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value <= this.resolve(_max); + } + }); + }, + lessThan: function lessThan(less, message) { + if (message === void 0) { + message = _locale.number.lessThan; + } + + return this.test({ + message: message, + name: 'max', + exclusive: true, + params: { + less: less + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value < this.resolve(less); + } + }); + }, + moreThan: function moreThan(more, message) { + if (message === void 0) { + message = _locale.number.moreThan; + } + + return this.test({ + message: message, + name: 'min', + exclusive: true, + params: { + more: more + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value > this.resolve(more); + } + }); + }, + positive: function positive(msg) { + if (msg === void 0) { + msg = _locale.number.positive; + } + + return this.moreThan(0, msg); + }, + negative: function negative(msg) { + if (msg === void 0) { + msg = _locale.number.negative; + } + + return this.lessThan(0, msg); + }, + integer: function integer(message) { + if (message === void 0) { + message = _locale.number.integer; + } + + return this.test({ + name: 'integer', + message: message, + test: isInteger + }); + }, + truncate: function truncate() { + return this.transform(function (value) { + return !(0, _isAbsent.default)(value) ? value | 0 : value; + }); + }, + round: function round(method) { + var avail = ['ceil', 'floor', 'round', 'trunc']; + method = method && method.toLowerCase() || 'round'; // this exists for symemtry with the new Math.trunc + + if (method === 'trunc') return this.truncate(); + if (avail.indexOf(method.toLowerCase()) === -1) throw new TypeError('Only valid options for round() are: ' + avail.join(', ')); + return this.transform(function (value) { + return !(0, _isAbsent.default)(value) ? Math[method](value) : value; + }); + } +}); +module.exports = exports["default"]; + +/***/ }), +/* 659 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = void 0; + +var _mixed = _interopRequireDefault(__webpack_require__(478)); + +var _inherits = _interopRequireDefault(__webpack_require__(655)); + +var _isodate = _interopRequireDefault(__webpack_require__(660)); + +var _locale = __webpack_require__(612); + +var _isAbsent = _interopRequireDefault(__webpack_require__(657)); + +var _Reference = _interopRequireDefault(__webpack_require__(651)); + +var invalidDate = new Date(''); + +var isDate = function isDate(obj) { + return Object.prototype.toString.call(obj) === '[object Date]'; +}; + +var _default = DateSchema; +exports.default = _default; + +function DateSchema() { + var _this = this; + + if (!(this instanceof DateSchema)) return new DateSchema(); + + _mixed.default.call(this, { + type: 'date' + }); + + this.withMutation(function () { + _this.transform(function (value) { + if (this.isType(value)) return value; + value = (0, _isodate.default)(value); + return value ? new Date(value) : invalidDate; + }); + }); +} + +(0, _inherits.default)(DateSchema, _mixed.default, { + _typeCheck: function _typeCheck(v) { + return isDate(v) && !isNaN(v.getTime()); + }, + min: function min(_min, message) { + if (message === void 0) { + message = _locale.date.min; + } + + var limit = _min; + + if (!_Reference.default.isRef(limit)) { + limit = this.cast(_min); + if (!this._typeCheck(limit)) throw new TypeError('`min` must be a Date or a value that can be `cast()` to a Date'); + } + + return this.test({ + message: message, + name: 'min', + exclusive: true, + params: { + min: _min + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value >= this.resolve(limit); + } + }); + }, + max: function max(_max, message) { + if (message === void 0) { + message = _locale.date.max; + } + + var limit = _max; + + if (!_Reference.default.isRef(limit)) { + limit = this.cast(_max); + if (!this._typeCheck(limit)) throw new TypeError('`max` must be a Date or a value that can be `cast()` to a Date'); + } + + return this.test({ + message: message, + name: 'max', + exclusive: true, + params: { + max: _max + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value <= this.resolve(limit); + } + }); + } +}); +module.exports = exports["default"]; + +/***/ }), +/* 660 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; +exports.default = parseIsoDate; + +/* eslint-disable */ + +/** + * + * Date.parse with progressive enhancement for ISO 8601 + * NON-CONFORMANT EDITION. + * © 2011 Colin Snover + * Released under MIT license. + */ +// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm +var isoReg = /^(\d{4}|[+\-]\d{6})(?:-?(\d{2})(?:-?(\d{2}))?)?(?:[ T]?(\d{2}):?(\d{2})(?::?(\d{2})(?:[,\.](\d{1,}))?)?(?:(Z)|([+\-])(\d{2})(?::?(\d{2}))?)?)?$/; + +function parseIsoDate(date) { + var numericKeys = [1, 4, 5, 6, 7, 10, 11], + minutesOffset = 0, + timestamp, + struct; + + if (struct = isoReg.exec(date)) { + // avoid NaN timestamps caused by “undefined” values being passed to Date.UTC + for (var i = 0, k; k = numericKeys[i]; ++i) { + struct[k] = +struct[k] || 0; + } // allow undefined days and months + + + struct[2] = (+struct[2] || 1) - 1; + struct[3] = +struct[3] || 1; // allow arbitrary sub-second precision beyond milliseconds + + struct[7] = struct[7] ? String(struct[7]).substr(0, 3) : 0; // timestamps without timezone identifiers should be considered local time + + if ((struct[8] === undefined || struct[8] === '') && (struct[9] === undefined || struct[9] === '')) timestamp = +new Date(struct[1], struct[2], struct[3], struct[4], struct[5], struct[6], struct[7]);else { + if (struct[8] !== 'Z' && struct[9] !== undefined) { + minutesOffset = struct[10] * 60 + struct[11]; + if (struct[9] === '+') minutesOffset = 0 - minutesOffset; + } + + timestamp = Date.UTC(struct[1], struct[2], struct[3], struct[4], struct[5] + minutesOffset, struct[6], struct[7]); + } + } else timestamp = Date.parse ? Date.parse(date) : NaN; + + return timestamp; +} + +module.exports = exports["default"]; + +/***/ }), +/* 661 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireWildcard = __webpack_require__(662); + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = ObjectSchema; + +var _taggedTemplateLiteralLoose2 = _interopRequireDefault(__webpack_require__(663)); + +var _extends2 = _interopRequireDefault(__webpack_require__(479)); + +var _has = _interopRequireDefault(__webpack_require__(480)); + +var _snakeCase2 = _interopRequireDefault(__webpack_require__(664)); + +var _camelCase2 = _interopRequireDefault(__webpack_require__(674)); + +var _mapKeys = _interopRequireDefault(__webpack_require__(680)); + +var _mapValues = _interopRequireDefault(__webpack_require__(622)); + +var _propertyExpr = __webpack_require__(652); + +var _mixed = _interopRequireDefault(__webpack_require__(478)); + +var _locale = __webpack_require__(612); + +var _sortFields = _interopRequireDefault(__webpack_require__(681)); + +var _sortByKeyOrder = _interopRequireDefault(__webpack_require__(683)); + +var _inherits = _interopRequireDefault(__webpack_require__(655)); + +var _makePath = _interopRequireDefault(__webpack_require__(684)); + +var _runValidations = _interopRequireWildcard(__webpack_require__(616)); + +function _templateObject2() { + var data = (0, _taggedTemplateLiteralLoose2.default)(["", ".", ""]); + + _templateObject2 = function _templateObject2() { + return data; + }; + + return data; +} + +function _templateObject() { + var data = (0, _taggedTemplateLiteralLoose2.default)(["", ".", ""]); + + _templateObject = function _templateObject() { + return data; + }; + + return data; +} + +var isObject = function isObject(obj) { + return Object.prototype.toString.call(obj) === '[object Object]'; +}; + +function unknown(ctx, value) { + var known = Object.keys(ctx.fields); + return Object.keys(value).filter(function (key) { + return known.indexOf(key) === -1; + }); +} + +function ObjectSchema(spec) { + var _this2 = this; + + if (!(this instanceof ObjectSchema)) return new ObjectSchema(spec); + + _mixed.default.call(this, { + type: 'object', + default: function _default() { + var _this = this; + + if (!this._nodes.length) return undefined; + var dft = {}; + + this._nodes.forEach(function (key) { + dft[key] = _this.fields[key].default ? _this.fields[key].default() : undefined; + }); + + return dft; + } + }); + + this.fields = Object.create(null); + this._nodes = []; + this._excludedEdges = []; + this.withMutation(function () { + _this2.transform(function coerce(value) { + if (typeof value === 'string') { + try { + value = JSON.parse(value); + } catch (err) { + value = null; + } + } + + if (this.isType(value)) return value; + return null; + }); + + if (spec) { + _this2.shape(spec); + } + }); +} + +(0, _inherits.default)(ObjectSchema, _mixed.default, { + _typeCheck: function _typeCheck(value) { + return isObject(value) || typeof value === 'function'; + }, + _cast: function _cast(_value, options) { + var _this3 = this; + + if (options === void 0) { + options = {}; + } + + var value = _mixed.default.prototype._cast.call(this, _value, options); //should ignore nulls here + + + if (value === undefined) return this.default(); + if (!this._typeCheck(value)) return value; + var fields = this.fields; + var strip = this._option('stripUnknown', options) === true; + + var props = this._nodes.concat(Object.keys(value).filter(function (v) { + return _this3._nodes.indexOf(v) === -1; + })); + + var intermediateValue = {}; // is filled during the transform below + + var innerOptions = (0, _extends2.default)({}, options, { + parent: intermediateValue, + __validating: false + }); + var isChanged = false; + props.forEach(function (prop) { + var field = fields[prop]; + var exists = (0, _has.default)(value, prop); + + if (field) { + var fieldValue; + var strict = field._options && field._options.strict; // safe to mutate since this is fired in sequence + + innerOptions.path = (0, _makePath.default)(_templateObject(), options.path, prop); + innerOptions.value = value[prop]; + field = field.resolve(innerOptions); + + if (field._strip === true) { + isChanged = isChanged || prop in value; + return; + } + + fieldValue = !options.__validating || !strict ? field.cast(value[prop], innerOptions) : value[prop]; + if (fieldValue !== undefined) intermediateValue[prop] = fieldValue; + } else if (exists && !strip) intermediateValue[prop] = value[prop]; + + if (intermediateValue[prop] !== value[prop]) isChanged = true; + }); + return isChanged ? intermediateValue : value; + }, + _validate: function _validate(_value, opts) { + var _this4 = this; + + if (opts === void 0) { + opts = {}; + } + + var endEarly, recursive; + var sync = opts.sync; + var errors = []; + var originalValue = opts.originalValue != null ? opts.originalValue : _value; + endEarly = this._option('abortEarly', opts); + recursive = this._option('recursive', opts); + opts = (0, _extends2.default)({}, opts, { + __validating: true, + originalValue: originalValue + }); + return _mixed.default.prototype._validate.call(this, _value, opts).catch((0, _runValidations.propagateErrors)(endEarly, errors)).then(function (value) { + if (!recursive || !isObject(value)) { + // only iterate though actual objects + if (errors.length) throw errors[0]; + return value; + } + + originalValue = originalValue || value; + + var validations = _this4._nodes.map(function (key) { + var path = (0, _makePath.default)(_templateObject2(), opts.path, key); + var field = _this4.fields[key]; + var innerOptions = (0, _extends2.default)({}, opts, { + path: path, + parent: value, + originalValue: originalValue[key] + }); + + if (field && field.validate) { + // inner fields are always strict: + // 1. this isn't strict so the casting will also have cast inner values + // 2. this is strict in which case the nested values weren't cast either + innerOptions.strict = true; + return field.validate(value[key], innerOptions); + } + + return Promise.resolve(true); + }); + + return (0, _runValidations.default)({ + sync: sync, + validations: validations, + value: value, + errors: errors, + endEarly: endEarly, + path: opts.path, + sort: (0, _sortByKeyOrder.default)(_this4.fields) + }); + }); + }, + concat: function concat(schema) { + var next = _mixed.default.prototype.concat.call(this, schema); + + next._nodes = (0, _sortFields.default)(next.fields, next._excludedEdges); + return next; + }, + shape: function shape(schema, excludes) { + if (excludes === void 0) { + excludes = []; + } + + var next = this.clone(); + var fields = (0, _extends2.default)(next.fields, schema); + next.fields = fields; + + if (excludes.length) { + if (!Array.isArray(excludes[0])) excludes = [excludes]; + var keys = excludes.map(function (_ref) { + var first = _ref[0], + second = _ref[1]; + return first + "-" + second; + }); + next._excludedEdges = next._excludedEdges.concat(keys); + } + + next._nodes = (0, _sortFields.default)(fields, next._excludedEdges); + return next; + }, + from: function from(_from, to, alias) { + var fromGetter = (0, _propertyExpr.getter)(_from, true); + return this.transform(function (obj) { + if (obj == null) return obj; + var newObj = obj; + + if ((0, _has.default)(obj, _from)) { + newObj = (0, _extends2.default)({}, obj); + if (!alias) delete newObj[_from]; + newObj[to] = fromGetter(obj); + } + + return newObj; + }); + }, + noUnknown: function noUnknown(noAllow, message) { + if (noAllow === void 0) { + noAllow = true; + } + + if (message === void 0) { + message = _locale.object.noUnknown; + } + + if (typeof noAllow === 'string') { + message = noAllow; + noAllow = true; + } + + var next = this.test({ + name: 'noUnknown', + exclusive: true, + message: message, + test: function test(value) { + return value == null || !noAllow || unknown(this.schema, value).length === 0; + } + }); + next._options.stripUnknown = noAllow; + return next; + }, + unknown: function unknown(allow, message) { + if (allow === void 0) { + allow = true; + } + + if (message === void 0) { + message = _locale.object.noUnknown; + } + + return this.noUnknown(!allow, message); + }, + transformKeys: function transformKeys(fn) { + return this.transform(function (obj) { + return obj && (0, _mapKeys.default)(obj, function (_, key) { + return fn(key); + }); + }); + }, + camelCase: function camelCase() { + return this.transformKeys(_camelCase2.default); + }, + snakeCase: function snakeCase() { + return this.transformKeys(_snakeCase2.default); + }, + constantCase: function constantCase() { + return this.transformKeys(function (key) { + return (0, _snakeCase2.default)(key).toUpperCase(); + }); + }, + describe: function describe() { + var base = _mixed.default.prototype.describe.call(this); + + base.fields = (0, _mapValues.default)(this.fields, function (value) { + return value.describe(); + }); + return base; + } +}); +module.exports = exports["default"]; + +/***/ }), +/* 662 */ +/***/ (function(module, exports) { + +function _interopRequireWildcard(obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; + + if (desc.get || desc.set) { + Object.defineProperty(newObj, key, desc); + } else { + newObj[key] = obj[key]; + } + } + } + } + + newObj.default = obj; + return newObj; + } +} + +module.exports = _interopRequireWildcard; + +/***/ }), +/* 663 */ +/***/ (function(module, exports) { + +function _taggedTemplateLiteralLoose(strings, raw) { + if (!raw) { + raw = strings.slice(0); + } + + strings.raw = raw; + return strings; +} + +module.exports = _taggedTemplateLiteralLoose; + +/***/ }), +/* 664 */ +/***/ (function(module, exports, __webpack_require__) { + +var createCompounder = __webpack_require__(665); + +/** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ +var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); +}); + +module.exports = snakeCase; + + +/***/ }), +/* 665 */ +/***/ (function(module, exports, __webpack_require__) { + +var arrayReduce = __webpack_require__(666), + deburr = __webpack_require__(667), + words = __webpack_require__(670); + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]"; + +/** Used to match apostrophes. */ +var reApos = RegExp(rsApos, 'g'); + +/** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ +function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; +} + +module.exports = createCompounder; + + +/***/ }), +/* 666 */ +/***/ (function(module, exports) { + +/** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ +function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; +} + +module.exports = arrayReduce; + + +/***/ }), +/* 667 */ +/***/ (function(module, exports, __webpack_require__) { + +var deburrLetter = __webpack_require__(668), + toString = __webpack_require__(529); + +/** Used to match Latin Unicode letters (excluding mathematical operators). */ +var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + +/** Used to compose unicode character classes. */ +var rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; + +/** Used to compose unicode capture groups. */ +var rsCombo = '[' + rsComboRange + ']'; + +/** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ +var reComboMark = RegExp(rsCombo, 'g'); + +/** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ +function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); +} + +module.exports = deburr; + + +/***/ }), +/* 668 */ +/***/ (function(module, exports, __webpack_require__) { + +var basePropertyOf = __webpack_require__(669); + +/** Used to map Latin Unicode letters to basic Latin letters. */ +var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' +}; + +/** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +var deburrLetter = basePropertyOf(deburredLetters); + +module.exports = deburrLetter; + + +/***/ }), +/* 669 */ +/***/ (function(module, exports) { + +/** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = basePropertyOf; + + +/***/ }), +/* 670 */ +/***/ (function(module, exports, __webpack_require__) { + +var asciiWords = __webpack_require__(671), + hasUnicodeWord = __webpack_require__(672), + toString = __webpack_require__(529), + unicodeWords = __webpack_require__(673); + +/** + * Splits `string` into an array of its words. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {RegExp|string} [pattern] The pattern to match words. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the words of `string`. + * @example + * + * _.words('fred, barney, & pebbles'); + * // => ['fred', 'barney', 'pebbles'] + * + * _.words('fred, barney, & pebbles', /[^, ]+/g); + * // => ['fred', 'barney', '&', 'pebbles'] + */ +function words(string, pattern, guard) { + string = toString(string); + pattern = guard ? undefined : pattern; + + if (pattern === undefined) { + return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); + } + return string.match(pattern) || []; +} + +module.exports = words; + + +/***/ }), +/* 671 */ +/***/ (function(module, exports) { + +/** Used to match words composed of alphanumeric characters. */ +var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + +/** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function asciiWords(string) { + return string.match(reAsciiWord) || []; +} + +module.exports = asciiWords; + + +/***/ }), +/* 672 */ +/***/ (function(module, exports) { + +/** Used to detect strings that need a more robust regexp to match words. */ +var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + +/** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ +function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); +} + +module.exports = hasUnicodeWord; + + +/***/ }), +/* 673 */ +/***/ (function(module, exports) { + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + +/** Used to compose unicode capture groups. */ +var rsApos = "['\u2019]", + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; + +/** Used to match complex or compound words. */ +var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji +].join('|'), 'g'); + +/** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ +function unicodeWords(string) { + return string.match(reUnicodeWord) || []; +} + +module.exports = unicodeWords; + + +/***/ }), +/* 674 */ +/***/ (function(module, exports, __webpack_require__) { + +var capitalize = __webpack_require__(675), + createCompounder = __webpack_require__(665); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); + +module.exports = camelCase; + + +/***/ }), +/* 675 */ +/***/ (function(module, exports, __webpack_require__) { + +var toString = __webpack_require__(529), + upperFirst = __webpack_require__(676); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +module.exports = capitalize; + + +/***/ }), +/* 676 */ +/***/ (function(module, exports, __webpack_require__) { + +var createCaseFirst = __webpack_require__(677); + +/** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ +var upperFirst = createCaseFirst('toUpperCase'); + +module.exports = upperFirst; + + +/***/ }), +/* 677 */ +/***/ (function(module, exports, __webpack_require__) { + +var castSlice = __webpack_require__(678), + hasUnicode = __webpack_require__(608), + stringToArray = __webpack_require__(606), + toString = __webpack_require__(529); + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +module.exports = createCaseFirst; + + +/***/ }), +/* 678 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseSlice = __webpack_require__(679); + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +module.exports = castSlice; + + +/***/ }), +/* 679 */ +/***/ (function(module, exports) { + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +module.exports = baseSlice; + + +/***/ }), +/* 680 */ +/***/ (function(module, exports, __webpack_require__) { + +var baseAssignValue = __webpack_require__(547), + baseForOwn = __webpack_require__(623), + baseIteratee = __webpack_require__(626); + +/** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ +function mapKeys(object, iteratee) { + var result = {}; + iteratee = baseIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; +} + +module.exports = mapKeys; + + +/***/ }), +/* 681 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = sortFields; + +var _has = _interopRequireDefault(__webpack_require__(480)); + +var _toposort = _interopRequireDefault(__webpack_require__(682)); + +var _propertyExpr = __webpack_require__(652); + +var _Reference = _interopRequireDefault(__webpack_require__(651)); + +var _isSchema = _interopRequireDefault(__webpack_require__(615)); + +function sortFields(fields, excludes) { + if (excludes === void 0) { + excludes = []; + } + + var edges = [], + nodes = []; + + function addNode(depPath, key) { + var node = (0, _propertyExpr.split)(depPath)[0]; + if (!~nodes.indexOf(node)) nodes.push(node); + if (!~excludes.indexOf(key + "-" + node)) edges.push([key, node]); + } + + for (var key in fields) { + if ((0, _has.default)(fields, key)) { + var value = fields[key]; + if (!~nodes.indexOf(key)) nodes.push(key); + if (_Reference.default.isRef(value) && value.isSibling) addNode(value.path, key);else if ((0, _isSchema.default)(value) && value._deps) value._deps.forEach(function (path) { + return addNode(path, key); + }); + } + } + + return _toposort.default.array(nodes, edges).reverse(); +} + +module.exports = exports["default"]; + +/***/ }), +/* 682 */ +/***/ (function(module, exports) { + + +/** + * Topological sorting function + * + * @param {Array} edges + * @returns {Array} + */ + +module.exports = function(edges) { + return toposort(uniqueNodes(edges), edges) +} + +module.exports.array = toposort + +function toposort(nodes, edges) { + var cursor = nodes.length + , sorted = new Array(cursor) + , visited = {} + , i = cursor + // Better data structures make algorithm much faster. + , outgoingEdges = makeOutgoingEdges(edges) + , nodesHash = makeNodesHash(nodes) + + // check for unknown nodes + edges.forEach(function(edge) { + if (!nodesHash.has(edge[0]) || !nodesHash.has(edge[1])) { + throw new Error('Unknown node. There is an unknown node in the supplied edges.') + } + }) + + while (i--) { + if (!visited[i]) visit(nodes[i], i, new Set()) + } + + return sorted + + function visit(node, i, predecessors) { + if(predecessors.has(node)) { + var nodeRep + try { + nodeRep = ", node was:" + JSON.stringify(node) + } catch(e) { + nodeRep = "" + } + throw new Error('Cyclic dependency' + nodeRep) + } + + if (!nodesHash.has(node)) { + throw new Error('Found unknown node. Make sure to provided all involved nodes. Unknown node: '+JSON.stringify(node)) + } + + if (visited[i]) return; + visited[i] = true + + var outgoing = outgoingEdges.get(node) || new Set() + outgoing = Array.from(outgoing) + + if (i = outgoing.length) { + predecessors.add(node) + do { + var child = outgoing[--i] + visit(child, nodesHash.get(child), predecessors) + } while (i) + predecessors.delete(node) + } + + sorted[--cursor] = node + } +} + +function uniqueNodes(arr){ + var res = new Set() + for (var i = 0, len = arr.length; i < len; i++) { + var edge = arr[i] + res.add(edge[0]) + res.add(edge[1]) + } + return Array.from(res) +} + +function makeOutgoingEdges(arr){ + var edges = new Map() + for (var i = 0, len = arr.length; i < len; i++) { + var edge = arr[i] + if (!edges.has(edge[0])) edges.set(edge[0], new Set()) + if (!edges.has(edge[1])) edges.set(edge[1], new Set()) + edges.get(edge[0]).add(edge[1]) + } + return edges +} + +function makeNodesHash(arr){ + var res = new Map() + for (var i = 0, len = arr.length; i < len; i++) { + res.set(arr[i], i) + } + return res +} + + +/***/ }), +/* 683 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; +exports.default = sortByKeyOrder; + +function findIndex(arr, err) { + var idx = Infinity; + arr.some(function (key, ii) { + if (err.path.indexOf(key) !== -1) { + idx = ii; + return true; + } + }); + return idx; +} + +function sortByKeyOrder(fields) { + var keys = Object.keys(fields); + return function (a, b) { + return findIndex(keys, a) - findIndex(keys, b); + }; +} + +module.exports = exports["default"]; + +/***/ }), +/* 684 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +exports.__esModule = true; +exports.default = makePath; + +function makePath(strings) { + for (var _len = arguments.length, values = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + values[_key - 1] = arguments[_key]; + } + + var path = strings.reduce(function (str, next) { + var value = values.shift(); + return str + (value == null ? '' : value) + next; + }); + return path.replace(/^\./, ''); +} + +module.exports = exports["default"]; + +/***/ }), +/* 685 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireWildcard = __webpack_require__(662); + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = void 0; + +var _extends2 = _interopRequireDefault(__webpack_require__(479)); + +var _taggedTemplateLiteralLoose2 = _interopRequireDefault(__webpack_require__(663)); + +var _inherits = _interopRequireDefault(__webpack_require__(655)); + +var _isAbsent = _interopRequireDefault(__webpack_require__(657)); + +var _isSchema = _interopRequireDefault(__webpack_require__(615)); + +var _makePath = _interopRequireDefault(__webpack_require__(684)); + +var _printValue = _interopRequireDefault(__webpack_require__(613)); + +var _mixed = _interopRequireDefault(__webpack_require__(478)); + +var _locale = __webpack_require__(612); + +var _runValidations = _interopRequireWildcard(__webpack_require__(616)); + +function _templateObject() { + var data = (0, _taggedTemplateLiteralLoose2.default)(["", "[", "]"]); + + _templateObject = function _templateObject() { + return data; + }; + + return data; +} + +var _default = ArraySchema; +exports.default = _default; + +function ArraySchema(type) { + var _this = this; + + if (!(this instanceof ArraySchema)) return new ArraySchema(type); + + _mixed.default.call(this, { + type: 'array' + }); // `undefined` specifically means uninitialized, as opposed to + // "no subtype" + + + this._subType = undefined; + this.withMutation(function () { + _this.transform(function (values) { + if (typeof values === 'string') try { + values = JSON.parse(values); + } catch (err) { + values = null; + } + return this.isType(values) ? values : null; + }); + + if (type) _this.of(type); + }); +} + +(0, _inherits.default)(ArraySchema, _mixed.default, { + _typeCheck: function _typeCheck(v) { + return Array.isArray(v); + }, + _cast: function _cast(_value, _opts) { + var _this2 = this; + + var value = _mixed.default.prototype._cast.call(this, _value, _opts); //should ignore nulls here + + + if (!this._typeCheck(value) || !this._subType) return value; + var isChanged = false; + var castArray = value.map(function (v) { + var castElement = _this2._subType.cast(v, _opts); + + if (castElement !== v) { + isChanged = true; + } + + return castElement; + }); + return isChanged ? castArray : value; + }, + _validate: function _validate(_value, options) { + var _this3 = this; + + if (options === void 0) { + options = {}; + } + + var errors = []; + var sync = options.sync; + var path = options.path; + var subType = this._subType; + + var endEarly = this._option('abortEarly', options); + + var recursive = this._option('recursive', options); + + var originalValue = options.originalValue != null ? options.originalValue : _value; + return _mixed.default.prototype._validate.call(this, _value, options).catch((0, _runValidations.propagateErrors)(endEarly, errors)).then(function (value) { + if (!recursive || !subType || !_this3._typeCheck(value)) { + if (errors.length) throw errors[0]; + return value; + } + + originalValue = originalValue || value; + var validations = value.map(function (item, idx) { + var path = (0, _makePath.default)(_templateObject(), options.path, idx); // object._validate note for isStrict explanation + + var innerOptions = (0, _extends2.default)({}, options, { + path: path, + strict: true, + parent: value, + originalValue: originalValue[idx] + }); + if (subType.validate) return subType.validate(item, innerOptions); + return true; + }); + return (0, _runValidations.default)({ + sync: sync, + path: path, + value: value, + errors: errors, + endEarly: endEarly, + validations: validations + }); + }); + }, + _isPresent: function _isPresent(value) { + return _mixed.default.prototype._cast.call(this, value) && value.length > 0; + }, + of: function of(schema) { + var next = this.clone(); + if (schema !== false && !(0, _isSchema.default)(schema)) throw new TypeError('`array.of()` sub-schema must be a valid yup schema, or `false` to negate a current sub-schema. ' + 'not: ' + (0, _printValue.default)(schema)); + next._subType = schema; + return next; + }, + min: function min(_min, message) { + message = message || _locale.array.min; + return this.test({ + message: message, + name: 'min', + exclusive: true, + params: { + min: _min + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value.length >= this.resolve(_min); + } + }); + }, + max: function max(_max, message) { + message = message || _locale.array.max; + return this.test({ + message: message, + name: 'max', + exclusive: true, + params: { + max: _max + }, + test: function test(value) { + return (0, _isAbsent.default)(value) || value.length <= this.resolve(_max); + } + }); + }, + ensure: function ensure() { + var _this4 = this; + + return this.default(function () { + return []; + }).transform(function (val) { + if (_this4.isType(val)) return val; + return val === null ? [] : [].concat(val); + }); + }, + compact: function compact(rejector) { + var reject = !rejector ? function (v) { + return !!v; + } : function (v, i, a) { + return !rejector(v, i, a); + }; + return this.transform(function (values) { + return values != null ? values.filter(reject) : values; + }); + }, + describe: function describe() { + var base = _mixed.default.prototype.describe.call(this); + + if (this._subType) base.innerType = this._subType.describe(); + return base; + } +}); +module.exports = exports["default"]; + +/***/ }), +/* 686 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = void 0; + +var _isSchema = _interopRequireDefault(__webpack_require__(615)); + +var Lazy = +/*#__PURE__*/ +function () { + function Lazy(mapFn) { + this._resolve = function (value, options) { + var schema = mapFn(value, options); + if (!(0, _isSchema.default)(schema)) throw new TypeError('lazy() functions must return a valid schema'); + return schema.resolve(options); + }; + } + + var _proto = Lazy.prototype; + + _proto.resolve = function resolve(options) { + return this._resolve(options.value, options); + }; + + _proto.cast = function cast(value, options) { + return this._resolve(value, options).cast(value, options); + }; + + _proto.validate = function validate(value, options) { + return this._resolve(value, options).validate(value, options); + }; + + _proto.validateSync = function validateSync(value, options) { + return this._resolve(value, options).validateSync(value, options); + }; + + _proto.validateAt = function validateAt(path, value, options) { + return this._resolve(value, options).validateAt(path, value, options); + }; + + _proto.validateSyncAt = function validateSyncAt(path, value, options) { + return this._resolve(value, options).validateSyncAt(path, value, options); + }; + + return Lazy; +}(); + +Lazy.prototype.__isYupSchema__ = true; +var _default = Lazy; +exports.default = _default; +module.exports = exports["default"]; + +/***/ }), +/* 687 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +var _interopRequireDefault = __webpack_require__(477); + +exports.__esModule = true; +exports.default = setLocale; + +var _locale = _interopRequireDefault(__webpack_require__(612)); + +function setLocale(custom) { + Object.keys(custom).forEach(function (type) { + Object.keys(custom[type]).forEach(function (method) { + _locale.default[type][method] = custom[type][method]; + }); + }); +} + +module.exports = exports["default"]; + +/***/ }), +/* 688 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +// @ts-ignore +const pluginConfiguration_raw_js_1 = __importDefault(__webpack_require__(689)); +exports.pluginConfiguration = pluginConfiguration_raw_js_1.default; + + +/***/ }), +/* 689 */ +/***/ (function(module, exports, __webpack_require__) { + +module.exports = { + modules: new Map([ + ["@berry/cli", __webpack_require__(690)], + ["@berry/core", __webpack_require__(1)], + ["@berry/fslib", __webpack_require__(3)], + ["@berry/parsers", __webpack_require__(102)], + ["@berry/shell", __webpack_require__(101)], + ["@berry/plugin-essentials", __webpack_require__(692)], + ["@berry/plugin-constraints", __webpack_require__(996)], + ["@berry/plugin-dlx", __webpack_require__(1005)], + ["@berry/plugin-file", __webpack_require__(1007)], + ["@berry/plugin-github", __webpack_require__(1014)], + ["@berry/plugin-http", __webpack_require__(1018)], + ["@berry/plugin-init", __webpack_require__(1022)], + ["@berry/plugin-link", __webpack_require__(1024)], + ["@berry/plugin-npm", __webpack_require__(1030)], + ["@berry/plugin-pnp", __webpack_require__(1036)], + + ]), + plugins: new Set([ + "@berry/plugin-essentials", + "@berry/plugin-constraints", + "@berry/plugin-dlx", + "@berry/plugin-file", + "@berry/plugin-github", + "@berry/plugin-http", + "@berry/plugin-init", + "@berry/plugin-link", + "@berry/plugin-npm", + "@berry/plugin-pnp", + + ]), +}; + + +/***/ }), +/* 690 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +var WorkspaceRequiredError_1 = __webpack_require__(691); +exports.WorkspaceRequiredError = WorkspaceRequiredError_1.WorkspaceRequiredError; + + +/***/ }), +/* 691 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +Object.defineProperty(exports, "__esModule", { value: true }); +const clipanion_1 = __webpack_require__(169); +class WorkspaceRequiredError extends clipanion_1.UsageError { + constructor(cwd) { + super(`This command can only be run from within a workspace of your project.`); + } +} +exports.WorkspaceRequiredError = WorkspaceRequiredError; + + +/***/ }), +/* 692 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const core_1 = __webpack_require__(1); +const _entry_1 = __importDefault(__webpack_require__(693)); +const add_1 = __importDefault(__webpack_require__(694)); +const bin_1 = __importDefault(__webpack_require__(972)); +const clean_1 = __importDefault(__webpack_require__(973)); +const set_1 = __importDefault(__webpack_require__(974)); +const config_1 = __importDefault(__webpack_require__(975)); +const help_1 = __importDefault(__webpack_require__(976)); +const install_1 = __importDefault(__webpack_require__(977)); +const link_1 = __importDefault(__webpack_require__(978)); +const node_1 = __importDefault(__webpack_require__(979)); +const remove_1 = __importDefault(__webpack_require__(987)); +const run_1 = __importDefault(__webpack_require__(988)); +const resolution_1 = __importDefault(__webpack_require__(989)); +const version_1 = __importDefault(__webpack_require__(990)); +const up_1 = __importDefault(__webpack_require__(991)); +const why_1 = __importDefault(__webpack_require__(992)); +const foreach_1 = __importDefault(__webpack_require__(994)); +const list_1 = __importDefault(__webpack_require__(995)); +const suggestUtils = __importStar(__webpack_require__(971)); +exports.suggestUtils = suggestUtils; +; +const plugin = { + configuration: { + frozenInstalls: { + description: `If true, prevents the install command from modifying the lockfile`, + type: core_1.SettingsType.BOOLEAN, + default: false, + }, + }, + commands: [ + clean_1.default, + set_1.default, + resolution_1.default, + version_1.default, + foreach_1.default, + list_1.default, + _entry_1.default, + add_1.default, + bin_1.default, + config_1.default, + help_1.default, + install_1.default, + link_1.default, + node_1.default, + remove_1.default, + run_1.default, + up_1.default, + why_1.default, + ], +}; +// eslint-disable-next-line arca/no-default-export +exports.default = plugin; + + +/***/ }), +/* 693 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0) + t[p[i]] = s[p[i]]; + return t; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fslib_1 = __webpack_require__(3); +const path_1 = __webpack_require__(6); +// eslint-disable-next-line arca/no-default-export +exports.default = (clipanion) => clipanion + .command(`entry [... args]`) + .describe(`select whether to use install or run`) + .flags({ proxyArguments: true, defaultCommand: true, hiddenCommand: true }) + .action(async (_a) => { + var { cwd, version, args, stdout } = _a, env = __rest(_a, ["cwd", "version", "args", "stdout"]); + // berry --version + if (args.length === 1 && args[0] === `--version`) { + stdout.write(`v2.0.0\n`); + // berry --help + } + else if (args.length === 1 && (args[0] === `--help` || args[0] === `-h`)) { + clipanion.usage(env.argv0, { stream: stdout }); + // berry --frozen-lockfile + } + else if (args.length === 0 || args[0].charAt(0) === `-`) { + return await clipanion.run(null, [`install`, ...args], Object.assign({ cwd, stdout }, env)); + // berry ~/projects/foo install + } + else if (args.length !== 0 && args[0].match(/[\\\/]/)) { + const newCwd = path_1.posix.resolve(cwd, fslib_1.NodeFS.toPortablePath(args[0])); + return await clipanion.run(null, args.slice(1), Object.assign({ cwd: newCwd, stdout }, env)); + // berry start + } + else { + return await clipanion.run(null, [`run`, ...args], Object.assign({ cwd, stdout }, env)); + } +}); + + +/***/ }), +/* 694 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const cli_1 = __webpack_require__(690); +const core_1 = __webpack_require__(1); +const core_2 = __webpack_require__(1); +const core_3 = __webpack_require__(1); +const inquirer_1 = __importDefault(__webpack_require__(695)); +const suggestUtils = __importStar(__webpack_require__(971)); +// eslint-disable-next-line arca/no-default-export +exports.default = (clipanion, pluginConfiguration) => clipanion + .command(`add [... packages] [-E,--exact] [-T,--tilde] [-D,--dev] [-P,--peer] [-i,--interactive] [-q,--quiet] [--cached]`) + .describe(`add dependencies to the project`) + .detail(` + This command adds a package to the package.json for the nearest workspace. + + - The package will by default be added to the regular \`dependencies\` field, but this behavior can be overriden thanks to the \`-D,--dev\` flag (which will cause the dependency to be added to the \`devDependencies\` field instead) and the \`-P,--peer\` flag (which will do the same but for \`peerDependencies\`). + + - If the added package doesn't specify a range at all its \`latest\` tag will be resolved and the returned version will be used to generate a new semver range (using the \`^\` modifier by default, or the \`~\` modifier if \`-T,--tilde\` is specified, or no modifier at all if \`-E,--exact\` is specified). Two exceptions to this rule: the first one is that if the package is a workspace then its local version will be used, and the second one is that if you use \`-P,--peer\` the default range will be \`*\` and won't be resolved at all. + + - If the added package specifies a tag range (such as \`latest\` or \`rc\`), Yarn will resolve this tag to a semver version and use that in the resulting package.json entry (meaning that \`yarn add foo@latest\` will have exactly the same effect as \`yarn add foo\`). + + If the \`-i,--interactive\` option is used (or if the \`preferInteractive\` settings is toggled on) the command will first try to check whether other workspaces in the project use the specified package and, if so, will offer to reuse them. + + If the \`--cached\` option is used, Yarn will preferably reuse the highest version already used somewhere within the project, even if through a transitive dependency. + + For a compilation of all the supported protocols, please consult the dedicated page from our website: . + `) + .example(`Add a regular package to the current workspace`, `yarn add lodash`) + .example(`Add a specific version for a package to the current workspace`, `yarn add lodash@1.2.3`) + .action(async ({ cwd, stdin, stdout, packages, exact, tilde, dev, peer, cached, interactive, quiet }) => { + const configuration = await core_1.Configuration.find(cwd, pluginConfiguration); + const { project, workspace } = await core_2.Project.find(configuration, cwd); + const cache = await core_1.Cache.find(configuration); + if (!workspace) + throw new cli_1.WorkspaceRequiredError(cwd); + // @ts-ignore + const prompt = inquirer_1.default.createPromptModule({ + input: stdin, + output: stdout, + }); + const target = peer + ? suggestUtils.Target.PEER + : dev + ? suggestUtils.Target.DEVELOPMENT + : suggestUtils.Target.REGULAR; + const modifier = exact + ? suggestUtils.Modifier.EXACT + : tilde + ? suggestUtils.Modifier.TILDE + : suggestUtils.Modifier.CARET; + const strategies = [ + ...interactive ? [ + suggestUtils.Strategy.REUSE, + ] : [], + ...cached ? [ + suggestUtils.Strategy.CACHE, + ] : [], + suggestUtils.Strategy.PROJECT, + suggestUtils.Strategy.LATEST, + ]; + const maxResults = interactive + ? Infinity + : 1; + const allSuggestions = await Promise.all(packages.map(async (pseudoDescriptor) => { + const request = pseudoDescriptor.match(/^\.{0,2}\//) + ? await suggestUtils.extractDescriptorFromPath(pseudoDescriptor, { cache, cwd, workspace }) + : core_3.structUtils.parseDescriptor(pseudoDescriptor); + const suggestions = await suggestUtils.getSuggestedDescriptors(request, null, { project, cache, target, modifier, strategies, maxResults }); + return [request, suggestions]; + })); + const checkReport = await core_1.LightReport.start({ configuration, stdout, suggestInstall: false }, async (report) => { + for (const [request, suggestions] of allSuggestions) { + const nonNullSuggestions = suggestions.filter(suggestion => { + return suggestion.descriptor !== null; + }); + if (nonNullSuggestions.length === 0) { + if (!project.configuration.get(`enableNetwork`)) { + report.reportError(core_1.MessageName.CANT_SUGGEST_RESOLUTIONS, `${core_3.structUtils.prettyDescriptor(configuration, request)} can't be resolved to a satisfying range (note: network resolution has been disabled)`); + } + else { + report.reportError(core_1.MessageName.CANT_SUGGEST_RESOLUTIONS, `${core_3.structUtils.prettyDescriptor(configuration, request)} can't be resolved to a satisfying range`); + } + } + } + }); + if (checkReport.hasErrors()) + return checkReport.exitCode(); + let askedQuestions = false; + const afterWorkspaceDependencyAdditionList = []; + const afterWorkspaceDependencyReplacementList = []; + for (const [request, suggestions] of allSuggestions) { + let selected; + const nonNullSuggestions = suggestions.filter(suggestion => { + return suggestion.descriptor !== null; + }); + if (nonNullSuggestions.length === 1) { + selected = nonNullSuggestions[0].descriptor; + } + else { + askedQuestions = true; + ({ answer: selected } = await prompt({ + type: `list`, + name: `answer`, + message: `Which range to you want to use?`, + choices: suggestions.map(({ descriptor, reason }) => descriptor ? { + name: reason, + value: descriptor, + short: core_3.structUtils.prettyDescriptor(project.configuration, descriptor), + } : { + name: reason, + disabled: () => true, + }), + })); + } + const current = workspace.manifest[target].get(selected.identHash); + if (typeof current === `undefined` || current.descriptorHash !== selected.descriptorHash) { + workspace.manifest[target].set(selected.identHash, selected); + if (typeof current === `undefined`) { + afterWorkspaceDependencyAdditionList.push([ + workspace, + target, + selected, + ]); + } + else { + afterWorkspaceDependencyReplacementList.push([ + workspace, + target, + current, + selected, + ]); + } + } + } + await configuration.triggerMultipleHooks((hooks) => hooks.afterWorkspaceDependencyAddition, afterWorkspaceDependencyAdditionList); + await configuration.triggerMultipleHooks((hooks) => hooks.afterWorkspaceDependencyReplacement, afterWorkspaceDependencyReplacementList); + if (askedQuestions) + stdout.write(`\n`); + let installReport; + if (quiet) { + installReport = await core_1.LightReport.start({ configuration, stdout }, async (report) => { + await project.install({ cache, report }); + }); + } + else { + installReport = await core_2.StreamReport.start({ configuration, stdout }, async (report) => { + await project.install({ cache, report }); + }); + } + return installReport.exitCode(); +}); + + +/***/ }), +/* 695 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * Inquirer.js + * A collection of common interactive command line user interfaces. + */ + +var inquirer = module.exports; + +/** + * Client interfaces + */ + +inquirer.prompts = {}; + +inquirer.Separator = __webpack_require__(696); + +inquirer.ui = { + BottomBar: __webpack_require__(698), + Prompt: __webpack_require__(706) +}; + +/** + * Create a new self-contained prompt module. + */ +inquirer.createPromptModule = function(opt) { + var promptModule = function(questions) { + var ui = new inquirer.ui.Prompt(promptModule.prompts, opt); + var promise = ui.run(questions); + + // Monkey patch the UI on the promise object so + // that it remains publicly accessible. + promise.ui = ui; + + return promise; + }; + promptModule.prompts = {}; + + /** + * Register a prompt type + * @param {String} name Prompt type name + * @param {Function} prompt Prompt constructor + * @return {inquirer} + */ + + promptModule.registerPrompt = function(name, prompt) { + promptModule.prompts[name] = prompt; + return this; + }; + + /** + * Register the defaults provider prompts + */ + + promptModule.restoreDefaultPrompts = function() { + this.registerPrompt('list', __webpack_require__(910)); + this.registerPrompt('input', __webpack_require__(929)); + this.registerPrompt('number', __webpack_require__(930)); + this.registerPrompt('confirm', __webpack_require__(931)); + this.registerPrompt('rawlist', __webpack_require__(932)); + this.registerPrompt('expand', __webpack_require__(933)); + this.registerPrompt('checkbox', __webpack_require__(934)); + this.registerPrompt('password', __webpack_require__(935)); + this.registerPrompt('editor', __webpack_require__(936)); + }; + + promptModule.restoreDefaultPrompts(); + + return promptModule; +}; + +/** + * Public CLI helper interface + * @param {Array|Object|Rx.Observable} questions - Questions settings array + * @param {Function} cb - Callback being passed the user answers + * @return {inquirer.ui.Prompt} + */ + +inquirer.prompt = inquirer.createPromptModule(); + +// Expose helper functions on the top level for easiest usage by common users +inquirer.registerPrompt = function(name, prompt) { + inquirer.prompt.registerPrompt(name, prompt); +}; +inquirer.restoreDefaultPrompts = function() { + inquirer.prompt.restoreDefaultPrompts(); +}; + + +/***/ }), +/* 696 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var chalk = __webpack_require__(158); +var figures = __webpack_require__(697); + +/** + * Separator object + * Used to space/separate choices group + * @constructor + * @param {String} line Separation line content (facultative) + */ + +class Separator { + constructor(line) { + this.type = 'separator'; + this.line = chalk.dim(line || new Array(15).join(figures.line)); + } + + /** + * Stringify separator + * @return {String} the separator display string + */ + toString() { + return this.line; + } +} + +/** + * Helper function returning false if object is a separator + * @param {Object} obj object to test against + * @return {Boolean} `false` if object is a separator + */ + +Separator.exclude = function(obj) { + return obj.type !== 'separator'; +}; + +module.exports = Separator; + + +/***/ }), +/* 697 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +const escapeStringRegexp = __webpack_require__(159); + +const platform = process.platform; + +const main = { + tick: '✔', + cross: '✖', + star: '★', + square: '▇', + squareSmall: '◻', + squareSmallFilled: '◼', + play: '▶', + circle: '◯', + circleFilled: '◉', + circleDotted: '◌', + circleDouble: '◎', + circleCircle: 'ⓞ', + circleCross: 'ⓧ', + circlePipe: 'Ⓘ', + circleQuestionMark: '?⃝', + bullet: '●', + dot: '․', + line: '─', + ellipsis: '…', + pointer: '❯', + pointerSmall: '›', + info: 'ℹ', + warning: '⚠', + hamburger: '☰', + smiley: '㋡', + mustache: '෴', + heart: '♥', + arrowUp: '↑', + arrowDown: '↓', + arrowLeft: '←', + arrowRight: '→', + radioOn: '◉', + radioOff: '◯', + checkboxOn: '☒', + checkboxOff: '☐', + checkboxCircleOn: 'ⓧ', + checkboxCircleOff: 'Ⓘ', + questionMarkPrefix: '?⃝', + oneHalf: '½', + oneThird: '⅓', + oneQuarter: '¼', + oneFifth: '⅕', + oneSixth: '⅙', + oneSeventh: '⅐', + oneEighth: '⅛', + oneNinth: '⅑', + oneTenth: '⅒', + twoThirds: '⅔', + twoFifths: '⅖', + threeQuarters: '¾', + threeFifths: '⅗', + threeEighths: '⅜', + fourFifths: '⅘', + fiveSixths: '⅚', + fiveEighths: '⅝', + sevenEighths: '⅞' +}; + +const win = { + tick: '√', + cross: '×', + star: '*', + square: '█', + squareSmall: '[ ]', + squareSmallFilled: '[█]', + play: '►', + circle: '( )', + circleFilled: '(*)', + circleDotted: '( )', + circleDouble: '( )', + circleCircle: '(○)', + circleCross: '(×)', + circlePipe: '(│)', + circleQuestionMark: '(?)', + bullet: '*', + dot: '.', + line: '─', + ellipsis: '...', + pointer: '>', + pointerSmall: '»', + info: 'i', + warning: '‼', + hamburger: '≡', + smiley: '☺', + mustache: '┌─┐', + heart: main.heart, + arrowUp: main.arrowUp, + arrowDown: main.arrowDown, + arrowLeft: main.arrowLeft, + arrowRight: main.arrowRight, + radioOn: '(*)', + radioOff: '( )', + checkboxOn: '[×]', + checkboxOff: '[ ]', + checkboxCircleOn: '(×)', + checkboxCircleOff: '( )', + questionMarkPrefix: '?', + oneHalf: '1/2', + oneThird: '1/3', + oneQuarter: '1/4', + oneFifth: '1/5', + oneSixth: '1/6', + oneSeventh: '1/7', + oneEighth: '1/8', + oneNinth: '1/9', + oneTenth: '1/10', + twoThirds: '2/3', + twoFifths: '2/5', + threeQuarters: '3/4', + threeFifths: '3/5', + threeEighths: '3/8', + fourFifths: '4/5', + fiveSixths: '5/6', + fiveEighths: '5/8', + sevenEighths: '7/8' +}; + +if (platform === 'linux') { + // the main one doesn't look that good on Ubuntu + main.questionMarkPrefix = '?'; +} + +const figures = platform === 'win32' ? win : main; + +const fn = str => { + if (figures === main) { + return str; + } + + Object.keys(main).forEach(key => { + if (main[key] === figures[key]) { + return; + } + + str = str.replace(new RegExp(escapeStringRegexp(main[key]), 'g'), figures[key]); + }); + + return str; +}; + +module.exports = Object.assign(fn, figures); + + +/***/ }), +/* 698 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +/** + * Sticky bottom bar user interface + */ + +var through = __webpack_require__(699); +var Base = __webpack_require__(700); +var rlUtils = __webpack_require__(704); +var _ = __webpack_require__(701); + +class BottomBar extends Base { + constructor(opt) { + opt = opt || {}; + + super(opt); + + this.log = through(this.writeLog.bind(this)); + this.bottomBar = opt.bottomBar || ''; + this.render(); + } + + /** + * Render the prompt to screen + * @return {BottomBar} self + */ + + render() { + this.write(this.bottomBar); + return this; + } + + clean() { + rlUtils.clearLine(this.rl, this.bottomBar.split('\n').length); + return this; + } + + /** + * Update the bottom bar content and rerender + * @param {String} bottomBar Bottom bar content + * @return {BottomBar} self + */ + + updateBottomBar(bottomBar) { + rlUtils.clearLine(this.rl, 1); + this.rl.output.unmute(); + this.clean(); + this.bottomBar = bottomBar; + this.render(); + this.rl.output.mute(); + return this; + } + + /** + * Write out log data + * @param {String} data - The log data to be output + * @return {BottomBar} self + */ + + writeLog(data) { + this.rl.output.unmute(); + this.clean(); + this.rl.output.write(this.enforceLF(data.toString())); + this.render(); + this.rl.output.mute(); + return this; + } + + /** + * Make sure line end on a line feed + * @param {String} str Input string + * @return {String} The input string with a final line feed + */ + + enforceLF(str) { + return str.match(/[\r\n]$/) ? str : str + '\n'; + } + + /** + * Helper for writing message in Prompt + * @param {BottomBar} prompt - The Prompt object that extends tty + * @param {String} message - The message to be output + */ + write(message) { + var msgLines = message.split(/\n/); + this.height = msgLines.length; + + // Write message to screen and setPrompt to control backspace + this.rl.setPrompt(_.last(msgLines)); + + if (this.rl.output.rows === 0 && this.rl.output.columns === 0) { + /* When it's a tty through serial port there's no terminal info and the render will malfunction, + so we need enforce the cursor to locate to the leftmost position for rendering. */ + rlUtils.left(this.rl, message.length + this.rl.line.length); + } + this.rl.output.write(message); + } +} + +module.exports = BottomBar; + + +/***/ }), +/* 699 */ +/***/ (function(module, exports, __webpack_require__) { + +var Stream = __webpack_require__(17) + +// through +// +// a stream that does nothing but re-emit the input. +// useful for aggregating a series of changing but not ending streams into one stream) + +exports = module.exports = through +through.through = through + +//create a readable writable stream. + +function through (write, end, opts) { + write = write || function (data) { this.queue(data) } + end = end || function () { this.queue(null) } + + var ended = false, destroyed = false, buffer = [], _ended = false + var stream = new Stream() + stream.readable = stream.writable = true + stream.paused = false + +// stream.autoPause = !(opts && opts.autoPause === false) + stream.autoDestroy = !(opts && opts.autoDestroy === false) + + stream.write = function (data) { + write.call(this, data) + return !stream.paused + } + + function drain() { + while(buffer.length && !stream.paused) { + var data = buffer.shift() + if(null === data) + return stream.emit('end') + else + stream.emit('data', data) + } + } + + stream.queue = stream.push = function (data) { +// console.error(ended) + if(_ended) return stream + if(data === null) _ended = true + buffer.push(data) + drain() + return stream + } + + //this will be registered as the first 'end' listener + //must call destroy next tick, to make sure we're after any + //stream piped from here. + //this is only a problem if end is not emitted synchronously. + //a nicer way to do this is to make sure this is the last listener for 'end' + + stream.on('end', function () { + stream.readable = false + if(!stream.writable && stream.autoDestroy) + process.nextTick(function () { + stream.destroy() + }) + }) + + function _end () { + stream.writable = false + end.call(stream) + if(!stream.readable && stream.autoDestroy) + stream.destroy() + } + + stream.end = function (data) { + if(ended) return + ended = true + if(arguments.length) stream.write(data) + _end() // will emit or queue + return stream + } + + stream.destroy = function () { + if(destroyed) return + destroyed = true + ended = true + buffer.length = 0 + stream.writable = stream.readable = false + stream.emit('close') + return stream + } + + stream.pause = function () { + if(stream.paused) return + stream.paused = true + return stream + } + + stream.resume = function () { + if(stream.paused) { + stream.paused = false + stream.emit('resume') + } + drain() + //may have become paused again, + //as drain emits 'data'. + if(!stream.paused) + stream.emit('drain') + return stream + } + return stream +} + + + +/***/ }), +/* 700 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + +var _ = __webpack_require__(701); +var MuteStream = __webpack_require__(702); +var readline = __webpack_require__(703); + +/** + * Base interface class other can inherits from + */ + +class UI { + constructor(opt) { + // Instantiate the Readline interface + // @Note: Don't reassign if already present (allow test to override the Stream) + if (!this.rl) { + this.rl = readline.createInterface(setupReadlineOptions(opt)); + } + this.rl.resume(); + + this.onForceClose = this.onForceClose.bind(this); + + // Make sure new prompt start on a newline when closing + process.on('exit', this.onForceClose); + + // Terminate process on SIGINT (which will call process.on('exit') in return) + this.rl.on('SIGINT', this.onForceClose); + } + + /** + * Handle the ^C exit + * @return {null} + */ + + onForceClose() { + this.close(); + process.kill(process.pid, 'SIGINT'); + console.log(''); + } + + /** + * Close the interface and cleanup listeners + */ + + close() { + // Remove events listeners + this.rl.removeListener('SIGINT', this.onForceClose); + process.removeListener('exit', this.onForceClose); + + this.rl.output.unmute(); + + if (this.activePrompt && typeof this.activePrompt.close === 'function') { + this.activePrompt.close(); + } + + // Close the readline + this.rl.output.end(); + this.rl.pause(); + this.rl.close(); + } +} + +function setupReadlineOptions(opt) { + opt = opt || {}; + + // Default `input` to stdin + var input = opt.input || process.stdin; + + // Add mute capabilities to the output + var ms = new MuteStream(); + ms.pipe(opt.output || process.stdout); + var output = ms; + + return _.extend( + { + terminal: true, + input: input, + output: output + }, + _.omit(opt, ['input', 'output']) + ); +} + +module.exports = UI; + + +/***/ }), +/* 701 */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_RESULT__;/** + * @license + * Lodash + * Copyright JS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.11'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g, + reTrimStart = /^\s+/, + reTrimEnd = /\s+$/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = true && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + + return result; + } + + if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + + return result; + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + value = iteratee(value); + + var low = 0, + high = array == null ? 0 : array.length, + valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + result[pair[0]] = pair[1]; + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': '