Upgrade eslint-plugin-import
[email protected]
Bug: none
Change-Id: I0ad7ba9133af3db19c448a284d79bdfc08101dea
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3268294
Commit-Queue: Tim van der Lippe <[email protected]>
Auto-Submit: Tim van der Lippe <[email protected]>
Reviewed-by: Jack Franklin <[email protected]>
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
index a48caf5..c6a17bb 100644
--- a/node_modules/.package-lock.json
+++ b/node_modules/.package-lock.json
@@ -1235,16 +1235,16 @@
}
},
"node_modules/array-includes": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
- "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2",
+ "es-abstract": "^1.19.1",
"get-intrinsic": "^1.1.1",
- "is-string": "^1.0.5"
+ "is-string": "^1.0.7"
},
"engines": {
"node": ">= 0.4"
@@ -1263,14 +1263,14 @@
}
},
"node_modules/array.prototype.flat": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
- "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
+ "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
+ "es-abstract": "^1.19.0"
},
"engines": {
"node": ">= 0.4"
@@ -1833,24 +1833,6 @@
"node": ">=10"
}
},
- "node_modules/cosmiconfig/node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -2319,22 +2301,26 @@
}
},
"node_modules/es-abstract": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
- "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
+ "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
"is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.3",
- "is-string": "^1.0.6",
- "object-inspect": "^1.10.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
"string.prototype.trimend": "^1.0.4",
@@ -2495,12 +2481,13 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
- "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz",
+ "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==",
"dev": true,
"dependencies": {
"debug": "^3.2.7",
+ "find-up": "^2.1.0",
"pkg-dir": "^2.0.0"
},
"engines": {
@@ -2516,25 +2503,81 @@
"ms": "^2.1.1"
}
},
- "node_modules/eslint-plugin-import": {
- "version": "2.24.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz",
- "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==",
+ "node_modules/eslint-module-utils/node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.3",
- "array.prototype.flat": "^1.2.4",
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.25.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz",
+ "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
"debug": "^2.6.9",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.6.2",
- "find-up": "^2.0.0",
+ "eslint-module-utils": "^2.7.0",
"has": "^1.0.3",
- "is-core-module": "^2.6.0",
+ "is-core-module": "^2.7.0",
+ "is-glob": "^4.0.3",
"minimatch": "^3.0.4",
- "object.values": "^1.1.4",
- "pkg-up": "^2.0.0",
- "read-pkg-up": "^3.0.0",
+ "object.values": "^1.1.5",
"resolve": "^1.20.0",
"tsconfig-paths": "^3.11.0"
},
@@ -2542,7 +2585,7 @@
"node": ">=4"
},
"peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0"
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
"node_modules/eslint-plugin-import/node_modules/debug": {
@@ -2566,109 +2609,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/eslint-plugin-import/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/eslint-plugin-import/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "node_modules/eslint-plugin-import/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "dependencies": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "dependencies": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/eslint-plugin-lit-a11y": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-2.1.0.tgz",
@@ -3442,6 +3388,22 @@
"node": ">=8"
}
},
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -3610,6 +3572,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -3811,6 +3788,20 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
+ "node_modules/internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -3818,10 +3809,13 @@
"dev": true
},
"node_modules/is-bigint": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
- "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -3839,12 +3833,13 @@
}
},
"node_modules/is-boolean-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
- "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3854,9 +3849,9 @@
}
},
"node_modules/is-callable": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -3866,9 +3861,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
- "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -3878,10 +3873,13 @@
}
},
"node_modules/is-date-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
- "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -3908,9 +3906,9 @@
}
},
"node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
@@ -3941,10 +3939,13 @@
}
},
"node_modules/is-number-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
- "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
+ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
"dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -3971,13 +3972,13 @@
}
},
"node_modules/is-regex": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
- "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "has-symbols": "^1.0.2"
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3995,11 +3996,23 @@
"node": ">=6"
}
},
- "node_modules/is-string": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
- "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
"dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -4040,6 +4053,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-weakref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
+ "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
@@ -4499,21 +4524,6 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
- "node_modules/load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -5342,14 +5352,14 @@
}
},
"node_modules/object.values": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
- "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.2"
+ "es-abstract": "^1.19.1"
},
"engines": {
"node": ">= 0.4"
@@ -5482,16 +5492,21 @@
}
},
"node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"dependencies": {
+ "@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parse-literals": {
@@ -5617,15 +5632,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -5696,76 +5702,6 @@
"node": ">=4"
}
},
- "node_modules/pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
- "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
- "dev": true,
- "dependencies": {
- "find-up": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/postcss": {
"version": "8.3.11",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz",
@@ -6066,21 +6002,6 @@
"node": ">=8"
}
},
- "node_modules/read-pkg/node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/read-pkg/node_modules/type-fest": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
@@ -6369,6 +6290,20 @@
"node": ">=8"
}
},
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
diff --git a/node_modules/array-includes/.eslintrc b/node_modules/array-includes/.eslintrc
index 0df206d..dc67ea5 100644
--- a/node_modules/array-includes/.eslintrc
+++ b/node_modules/array-includes/.eslintrc
@@ -7,7 +7,16 @@
"complexity": 0,
"id-length": [2, { "min": 1, "max": 26 }],
"max-statements": [2, 14],
- "new-cap": [2, { capIsNewExceptions: ["GetIntrinsic", "ToObject", "ToInteger", "ToLength", "SameValueZero", "RequireObjectCoercible"] }],
+ "new-cap": [2, {
+ "capIsNewExceptions": [
+ "GetIntrinsic",
+ "ToObject",
+ "ToIntegerOrInfinity",
+ "ToLength",
+ "SameValueZero",
+ "RequireObjectCoercible",
+ ],
+ }],
},
"overrides": [
diff --git a/node_modules/array-includes/.nycrc b/node_modules/array-includes/.nycrc
index 1826526..bdd626c 100644
--- a/node_modules/array-includes/.nycrc
+++ b/node_modules/array-includes/.nycrc
@@ -2,10 +2,6 @@
"all": true,
"check-coverage": false,
"reporter": ["text-summary", "text", "html", "json"],
- "lines": 86,
- "statements": 85.93,
- "functions": 82.43,
- "branches": 76.06,
"exclude": [
"coverage",
"test"
diff --git a/node_modules/array-includes/CHANGELOG.md b/node_modules/array-includes/CHANGELOG.md
index 7e8a56e..0b35673 100644
--- a/node_modules/array-includes/CHANGELOG.md
+++ b/node_modules/array-includes/CHANGELOG.md
@@ -1,3 +1,14 @@
+3.1.4 / 2021-10-04
+=================
+ * [Robustness] avoid a runtime `Math.max` call
+ * [readme] add github actions/codecov badges
+ * [readme] fix repo URLs; remove travis badge
+ * [Deps] update `es-abstract`, `is-string`
+ * [meta] use `prepublishOnly` script for npm 7+
+ * [actions] update workflows
+ * [actions] use `node/install` instead of `node/run`; use `codecov` action
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@es-shims/api`, `aud`, `tape`
+
3.1.3 / 2021-02-20
=================
* [Deps] update `call-bind`, `es-abstract`, `get-intrinsic`
diff --git a/node_modules/array-includes/README.md b/node_modules/array-includes/README.md
index fb87587..5e29042 100644
--- a/node_modules/array-includes/README.md
+++ b/node_modules/array-includes/README.md
@@ -1,6 +1,7 @@
# array-includes <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
-[![Build Status][travis-svg]][travis-url]
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
[![dependency status][deps-svg]][deps-url]
[![dev dependency status][dev-deps-svg]][dev-deps-url]
[![License][license-image]][license-url]
@@ -10,7 +11,7 @@
An ES7/ES2016 spec-compliant `Array.prototype.includes` shim/polyfill/replacement that works as far down as ES3.
-This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the proposed [spec](http://www.ecma-international.org/ecma-262/6.0/).
+This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the proposed [spec](https://262.ecma-international.org/6.0/).
Because `Array.prototype.includes` depends on a receiver (the `this` value), the main export takes the array to operate on as the first argument.
@@ -80,15 +81,17 @@
Simply clone the repo, `npm install`, and run `npm test`
[package-url]: https://npmjs.org/package/array-includes
-[npm-version-svg]: http://versionbadg.es/es-shims/array-includes.svg
-[travis-svg]: https://travis-ci.org/es-shims/array-includes.svg
-[travis-url]: https://travis-ci.org/es-shims/array-includes
+[npm-version-svg]: https://versionbadg.es/es-shims/array-includes.svg
[deps-svg]: https://david-dm.org/es-shims/array-includes.svg
[deps-url]: https://david-dm.org/es-shims/array-includes
[dev-deps-svg]: https://david-dm.org/es-shims/array-includes/dev-status.svg
[dev-deps-url]: https://david-dm.org/es-shims/array-includes#info=devDependencies
[npm-badge-png]: https://nodei.co/npm/array-includes.png?downloads=true&stars=true
-[license-image]: http://img.shields.io/npm/l/array-includes.svg
+[license-image]: https://img.shields.io/npm/l/array-includes.svg
[license-url]: LICENSE
-[downloads-image]: http://img.shields.io/npm/dm/array-includes.svg
-[downloads-url]: http://npm-stat.com/charts.html?package=array-includes
+[downloads-image]: https://img.shields.io/npm/dm/array-includes.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=array-includes
+[codecov-image]: https://codecov.io/gh/es-shims/array-includes/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/es-shims/array-includes/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/array-includes
+[actions-url]: https://github.com/es-shims/array-includes/actions
diff --git a/node_modules/array-includes/implementation.js b/node_modules/array-includes/implementation.js
index 7823d5a..1211641 100644
--- a/node_modules/array-includes/implementation.js
+++ b/node_modules/array-includes/implementation.js
@@ -1,9 +1,9 @@
'use strict';
-var ToInteger = require('es-abstract/2020/ToInteger');
-var ToLength = require('es-abstract/2020/ToLength');
-var ToObject = require('es-abstract/2020/ToObject');
-var SameValueZero = require('es-abstract/2020/SameValueZero');
+var ToIntegerOrInfinity = require('es-abstract/2021/ToIntegerOrInfinity');
+var ToLength = require('es-abstract/2021/ToLength');
+var ToObject = require('es-abstract/2021/ToObject');
+var SameValueZero = require('es-abstract/2021/SameValueZero');
var $isNaN = require('es-abstract/helpers/isNaN');
var $isFinite = require('es-abstract/helpers/isFinite');
var GetIntrinsic = require('get-intrinsic');
@@ -12,9 +12,10 @@
var $charAt = callBound('String.prototype.charAt');
var $indexOf = GetIntrinsic('%Array.prototype.indexOf%'); // TODO: use callBind.apply without breaking IE 8
+var $max = GetIntrinsic('%Math.max%');
module.exports = function includes(searchElement) {
- var fromIndex = arguments.length > 1 ? ToInteger(arguments[1]) : 0;
+ var fromIndex = arguments.length > 1 ? ToIntegerOrInfinity(arguments[1]) : 0;
if ($indexOf && !$isNaN(searchElement) && $isFinite(fromIndex) && typeof searchElement !== 'undefined') {
return $indexOf.apply(this, arguments) > -1;
}
@@ -24,7 +25,7 @@
if (length === 0) {
return false;
}
- var k = fromIndex >= 0 ? fromIndex : Math.max(0, length + fromIndex);
+ var k = fromIndex >= 0 ? fromIndex : $max(0, length + fromIndex);
while (k < length) {
if (SameValueZero(searchElement, isString(O) ? $charAt(O, k) : O[k])) {
return true;
diff --git a/node_modules/array-includes/index.js b/node_modules/array-includes/index.js
index bed832e..92cda1c 100644
--- a/node_modules/array-includes/index.js
+++ b/node_modules/array-includes/index.js
@@ -1,7 +1,7 @@
'use strict';
var define = require('define-properties');
-var RequireObjectCoercible = require('es-abstract/2020/RequireObjectCoercible');
+var RequireObjectCoercible = require('es-abstract/2021/RequireObjectCoercible');
var callBind = require('call-bind');
var callBound = require('call-bind/callBound');
diff --git a/node_modules/array-includes/package.json b/node_modules/array-includes/package.json
index aa5c91b..9987f10 100644
--- a/node_modules/array-includes/package.json
+++ b/node_modules/array-includes/package.json
@@ -1,6 +1,6 @@
{
"name": "array-includes",
- "version": "3.1.3",
+ "version": "3.1.4",
"author": {
"name": "Jordan Harband",
"email": "[email protected]",
@@ -20,7 +20,8 @@
"license": "MIT",
"main": "index.js",
"scripts": {
- "prepublish": "safe-publish-latest",
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "prepublishOnly": "safe-publish-latest",
"pretest": "npm run --silent lint && evalmd README.md",
"test": "npm run --silent tests-only",
"posttest": "npx aud --production",
@@ -46,16 +47,16 @@
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2",
+ "es-abstract": "^1.19.1",
"get-intrinsic": "^1.1.1",
- "is-string": "^1.0.5"
+ "is-string": "^1.0.7"
},
"devDependencies": {
- "@es-shims/api": "^2.1.2",
- "@ljharb/eslint-config": "^17.5.1",
- "aud": "^1.1.4",
- "eslint": "^7.20.0",
- "evalmd": "0.0.19",
+ "@es-shims/api": "^2.2.2",
+ "@ljharb/eslint-config": "^18.0.0",
+ "aud": "^1.1.5",
+ "eslint": "^7.32.0",
+ "evalmd": "^0.0.19",
"foreach": "^2.0.5",
"function-bind": "^1.1.1",
"functions-have-names": "^1.2.2",
@@ -63,7 +64,7 @@
"indexof": "^0.0.1",
"nyc": "^10.3.2",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.0"
+ "tape": "^5.3.1"
},
"testling": {
"files": [
diff --git a/node_modules/array.prototype.flat/.eslintrc b/node_modules/array.prototype.flat/.eslintrc
index 5a5c9c0..e1003c6 100644
--- a/node_modules/array.prototype.flat/.eslintrc
+++ b/node_modules/array.prototype.flat/.eslintrc
@@ -19,7 +19,7 @@
"HasProperty",
"IsArray",
"Set",
- "ToInteger",
+ "ToIntegerOrInfinity",
"ToLength",
"ToObject",
"ToString"
diff --git a/node_modules/array.prototype.flat/.nycrc b/node_modules/array.prototype.flat/.nycrc
index d0fe23b..bdd626c 100644
--- a/node_modules/array.prototype.flat/.nycrc
+++ b/node_modules/array.prototype.flat/.nycrc
@@ -2,10 +2,6 @@
"all": true,
"check-coverage": false,
"reporter": ["text-summary", "text", "html", "json"],
- "lines": 96,
- "statements": 96,
- "functions": 80,
- "branches": 87,
"exclude": [
"coverage",
"test"
diff --git a/node_modules/array.prototype.flat/CHANGELOG.md b/node_modules/array.prototype.flat/CHANGELOG.md
index d5e3b74..1aeb67c 100644
--- a/node_modules/array.prototype.flat/CHANGELOG.md
+++ b/node_modules/array.prototype.flat/CHANGELOG.md
@@ -1,3 +1,25 @@
+1.2.5 / 2021-10-01
+=================
+ * [readme] add github actions/codecov badges; remove travis badge
+ * [Deps] update `call-bind`, `es-abstract`
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@es-shims/api`, `aud`, `has-strict-mode`, `object-inspect`, `tape`
+ * [meta] use `prepublishOnly`, for npm 7+
+ * [actions] use `node/install` instead of `node/run`; use `codecov` action
+ * [actions] update workflows
+ * [Tests] increase coverage
+ * [meta] fix changelog for v1.2.4
+
+1.2.4 / 2020-11-18
+=================
+ * [meta] do not publish Github Action workflows
+ * [Deps] update `es-abstract`; add `call-bind` where applicable
+ * [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape`
+ * [Tests] run `nyc` on all tests
+ * [Tests] add `implementation` test; run `es-shim-api` in postlint; use `tape` runner
+ * [Tests] migrate tests to Github Actions
+ * [actions] add "Allow Edits" workflow
+ * [actions] switch Automatic Rebase workflow to `pull_request_target` event
+
1.2.3 / 2019-12-12
=================
* [Refactor] use split-up `es-abstract` (65% bundle size decrease)
diff --git a/node_modules/array.prototype.flat/README.md b/node_modules/array.prototype.flat/README.md
index 1ada9f3..712ffce 100644
--- a/node_modules/array.prototype.flat/README.md
+++ b/node_modules/array.prototype.flat/README.md
@@ -1,6 +1,7 @@
# array.prototype.flat <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
-[![Build Status][travis-svg]][travis-url]
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
[![dependency status][deps-svg]][deps-url]
[![dev dependency status][dev-deps-svg]][dev-deps-url]
[![License][license-image]][license-url]
@@ -58,15 +59,17 @@
Simply clone the repo, `npm install`, and run `npm test`
[package-url]: https://npmjs.org/package/array.prototype.flat
-[npm-version-svg]: http://versionbadg.es/es-shims/Array.prototype.flat.svg
-[travis-svg]: https://travis-ci.org/es-shims/Array.prototype.flat.svg
-[travis-url]: https://travis-ci.org/es-shims/Array.prototype.flat
+[npm-version-svg]: https://versionbadg.es/es-shims/Array.prototype.flat.svg
[deps-svg]: https://david-dm.org/es-shims/Array.prototype.flat.svg
[deps-url]: https://david-dm.org/es-shims/Array.prototype.flat
[dev-deps-svg]: https://david-dm.org/es-shims/Array.prototype.flat/dev-status.svg
[dev-deps-url]: https://david-dm.org/es-shims/Array.prototype.flat#info=devDependencies
[npm-badge-png]: https://nodei.co/npm/array.prototype.flat.png?downloads=true&stars=true
-[license-image]: http://img.shields.io/npm/l/array.prototype.flat.svg
+[license-image]: https://img.shields.io/npm/l/array.prototype.flat.svg
[license-url]: LICENSE
-[downloads-image]: http://img.shields.io/npm/dm/array.prototype.flat.svg
-[downloads-url]: http://npm-stat.com/charts.html?package=array.prototype.flat
+[downloads-image]: https://img.shields.io/npm/dm/array.prototype.flat.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=array.prototype.flat
+[codecov-image]: https://codecov.io/gh/es-shims/Array.prototype.flat/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/es-shims/Array.prototype.flat/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/Array.prototype.flat
+[actions-url]: https://github.com/es-shims/Array.prototype.flat/actions
diff --git a/node_modules/array.prototype.flat/implementation.js b/node_modules/array.prototype.flat/implementation.js
index 68a0d28..3697937 100644
--- a/node_modules/array.prototype.flat/implementation.js
+++ b/node_modules/array.prototype.flat/implementation.js
@@ -1,11 +1,11 @@
'use strict';
-var ArraySpeciesCreate = require('es-abstract/2020/ArraySpeciesCreate');
-var FlattenIntoArray = require('es-abstract/2020/FlattenIntoArray');
-var Get = require('es-abstract/2020/Get');
-var ToInteger = require('es-abstract/2020/ToInteger');
-var ToLength = require('es-abstract/2020/ToLength');
-var ToObject = require('es-abstract/2020/ToObject');
+var ArraySpeciesCreate = require('es-abstract/2021/ArraySpeciesCreate');
+var FlattenIntoArray = require('es-abstract/2021/FlattenIntoArray');
+var Get = require('es-abstract/2021/Get');
+var ToIntegerOrInfinity = require('es-abstract/2021/ToIntegerOrInfinity');
+var ToLength = require('es-abstract/2021/ToLength');
+var ToObject = require('es-abstract/2021/ToObject');
module.exports = function flat() {
var O = ToObject(this);
@@ -13,7 +13,7 @@
var depthNum = 1;
if (arguments.length > 0 && typeof arguments[0] !== 'undefined') {
- depthNum = ToInteger(arguments[0]);
+ depthNum = ToIntegerOrInfinity(arguments[0]);
}
var A = ArraySpeciesCreate(O, 0);
diff --git a/node_modules/array.prototype.flat/package.json b/node_modules/array.prototype.flat/package.json
index 97159a1..9cb2d1d 100644
--- a/node_modules/array.prototype.flat/package.json
+++ b/node_modules/array.prototype.flat/package.json
@@ -1,6 +1,6 @@
{
"name": "array.prototype.flat",
- "version": "1.2.4",
+ "version": "1.2.5",
"author": {
"name": "Jordan Harband",
"email": "[email protected]",
@@ -20,7 +20,8 @@
"license": "MIT",
"main": "index.js",
"scripts": {
- "prepublish": "safe-publish-latest",
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "prepublishOnly": "safe-publish-latest",
"pretest": "npm run --silent lint && evalmd README.md",
"test": "npm run tests-only",
"posttest": "aud --production",
@@ -46,23 +47,23 @@
"es-shim API"
],
"dependencies": {
- "call-bind": "^1.0.0",
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
+ "es-abstract": "^1.19.0"
},
"devDependencies": {
- "@es-shims/api": "^2.1.2",
- "@ljharb/eslint-config": "^17.2.0",
- "aud": "^1.1.3",
+ "@es-shims/api": "^2.2.1",
+ "@ljharb/eslint-config": "^18.0.0",
+ "aud": "^1.1.5",
"covert": "^1.1.1",
- "eslint": "^7.13.0",
+ "eslint": "^7.32.0",
"evalmd": "^0.0.19",
"function-bind": "^1.1.1",
- "has-strict-mode": "^1.0.0",
+ "has-strict-mode": "^1.0.1",
"nyc": "^10.3.2",
- "object-inspect": "^1.8.0",
+ "object-inspect": "^1.11.0",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.0.1"
+ "tape": "^5.3.1"
},
"testling": {
"files": [
diff --git a/node_modules/array.prototype.flat/test/shimmed.js b/node_modules/array.prototype.flat/test/shimmed.js
index bbd7861..a9f396e 100644
--- a/node_modules/array.prototype.flat/test/shimmed.js
+++ b/node_modules/array.prototype.flat/test/shimmed.js
@@ -1,6 +1,6 @@
'use strict';
-require('../shim')();
+require('../auto');
var test = require('tape');
var defineProperties = require('define-properties');
diff --git a/node_modules/cosmiconfig/node_modules/parse-json/index.js b/node_modules/cosmiconfig/node_modules/parse-json/index.js
deleted file mode 100644
index c2b9347..0000000
--- a/node_modules/cosmiconfig/node_modules/parse-json/index.js
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-const errorEx = require('error-ex');
-const fallback = require('json-parse-even-better-errors');
-const {default: LinesAndColumns} = require('lines-and-columns');
-const {codeFrameColumns} = require('@babel/code-frame');
-
-const JSONError = errorEx('JSONError', {
- fileName: errorEx.append('in %s'),
- codeFrame: errorEx.append('\n\n%s\n')
-});
-
-const parseJson = (string, reviver, filename) => {
- if (typeof reviver === 'string') {
- filename = reviver;
- reviver = null;
- }
-
- try {
- try {
- return JSON.parse(string, reviver);
- } catch (error) {
- fallback(string, reviver);
- throw error;
- }
- } catch (error) {
- error.message = error.message.replace(/\n/g, '');
- const indexMatch = error.message.match(/in JSON at position (\d+) while parsing/);
-
- const jsonError = new JSONError(error);
- if (filename) {
- jsonError.fileName = filename;
- }
-
- if (indexMatch && indexMatch.length > 0) {
- const lines = new LinesAndColumns(string);
- const index = Number(indexMatch[1]);
- const location = lines.locationForIndex(index);
-
- const codeFrame = codeFrameColumns(
- string,
- {start: {line: location.line + 1, column: location.column + 1}},
- {highlightCode: true}
- );
-
- jsonError.codeFrame = codeFrame;
- }
-
- throw jsonError;
- }
-};
-
-parseJson.JSONError = JSONError;
-
-module.exports = parseJson;
diff --git a/node_modules/cosmiconfig/node_modules/parse-json/license b/node_modules/cosmiconfig/node_modules/parse-json/license
deleted file mode 100644
index fa7ceba..0000000
--- a/node_modules/cosmiconfig/node_modules/parse-json/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus <[email protected]> (https://sindresorhus.com)
-
-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.
diff --git a/node_modules/cosmiconfig/node_modules/parse-json/package.json b/node_modules/cosmiconfig/node_modules/parse-json/package.json
deleted file mode 100644
index ee5df1f..0000000
--- a/node_modules/cosmiconfig/node_modules/parse-json/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "parse-json",
- "version": "5.2.0",
- "description": "Parse JSON with more helpful errors",
- "license": "MIT",
- "repository": "sindresorhus/parse-json",
- "funding": "https://github.com/sponsors/sindresorhus",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "https://sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && nyc ava"
- },
- "files": [
- "index.js",
- "vendor"
- ],
- "keywords": [
- "parse",
- "json",
- "graceful",
- "error",
- "message",
- "humanize",
- "friendly",
- "helpful",
- "string"
- ],
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "devDependencies": {
- "ava": "^1.4.1",
- "nyc": "^14.1.1",
- "xo": "^0.24.0"
- }
-}
diff --git a/node_modules/cosmiconfig/node_modules/parse-json/readme.md b/node_modules/cosmiconfig/node_modules/parse-json/readme.md
deleted file mode 100644
index 5363097..0000000
--- a/node_modules/cosmiconfig/node_modules/parse-json/readme.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# parse-json
-
-> Parse JSON with more helpful errors
-
-## Install
-
-```
-$ npm install parse-json
-```
-
-## Usage
-
-```js
-const parseJson = require('parse-json');
-
-const json = '{\n\t"foo": true,\n}';
-
-
-JSON.parse(json);
-/*
-undefined:3
-}
-^
-SyntaxError: Unexpected token }
-*/
-
-
-parseJson(json);
-/*
-JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}'
-
- 1 | {
- 2 | "foo": true,
-> 3 | }
- | ^
-*/
-
-
-parseJson(json, 'foo.json');
-/*
-JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
-
- 1 | {
- 2 | "foo": true,
-> 3 | }
- | ^
-*/
-
-
-// You can also add the filename at a later point
-try {
- parseJson(json);
-} catch (error) {
- if (error instanceof parseJson.JSONError) {
- error.fileName = 'foo.json';
- }
-
- throw error;
-}
-/*
-JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
-
- 1 | {
- 2 | "foo": true,
-> 3 | }
- | ^
-*/
-```
-
-## API
-
-### parseJson(string, reviver?, filename?)
-
-Throws a `JSONError` when there is a parsing error.
-
-#### string
-
-Type: `string`
-
-#### reviver
-
-Type: `Function`
-
-Prescribes how the value originally produced by parsing is transformed, before being returned. See [`JSON.parse` docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter
-) for more.
-
-#### filename
-
-Type: `string`
-
-Filename displayed in the error message.
-
-### parseJson.JSONError
-
-Exposed for `instanceof` checking.
-
-#### fileName
-
-Type: `string`
-
-The filename displayed in the error message.
-
-#### codeFrame
-
-Type: `string`
-
-The printable section of the JSON which produces the error.
-
----
-
-<div align="center">
- <b>
- <a href="https://tidelift.com/subscription/pkg/npm-parse-json?utm_source=npm-parse-json&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
- </b>
- <br>
- <sub>
- Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
- </sub>
-</div>
diff --git a/node_modules/es-abstract/.eslintrc b/node_modules/es-abstract/.eslintrc
index 1a0d2d2..c1e4e57 100644
--- a/node_modules/es-abstract/.eslintrc
+++ b/node_modules/es-abstract/.eslintrc
@@ -46,10 +46,13 @@
],
"extends": "@ljharb/eslint-config/node/latest",
"rules": {
+ "complexity": 0,
"func-style": 0,
"max-lines-per-function": 0,
"max-nested-callbacks": 0,
+ "max-statements": 0,
"no-throw-literal": 0,
+ "operator-linebreak": [2, "before"],
},
},
{
diff --git a/node_modules/es-abstract/.gitattributes b/node_modules/es-abstract/.gitattributes
deleted file mode 100644
index cbdb52f..0000000
--- a/node_modules/es-abstract/.gitattributes
+++ /dev/null
@@ -1,625 +0,0 @@
-2015/AbstractRelationalComparison.js spackled linguist-generated=true
-2015/DateFromTime.js spackled linguist-generated=true
-2015/Day.js spackled linguist-generated=true
-2015/DayFromYear.js spackled linguist-generated=true
-2015/DayWithinYear.js spackled linguist-generated=true
-2015/DaysInYear.js spackled linguist-generated=true
-2015/HourFromTime.js spackled linguist-generated=true
-2015/InLeapYear.js spackled linguist-generated=true
-2015/IsCallable.js spackled linguist-generated=true
-2015/IsPropertyDescriptor.js spackled linguist-generated=true
-2015/MakeDate.js spackled linguist-generated=true
-2015/MakeDay.js spackled linguist-generated=true
-2015/MakeTime.js spackled linguist-generated=true
-2015/MinFromTime.js spackled linguist-generated=true
-2015/MonthFromTime.js spackled linguist-generated=true
-2015/SameValue.js spackled linguist-generated=true
-2015/SecFromTime.js spackled linguist-generated=true
-2015/StrictEqualityComparison.js spackled linguist-generated=true
-2015/TimeClip.js spackled linguist-generated=true
-2015/TimeFromYear.js spackled linguist-generated=true
-2015/TimeWithinDay.js spackled linguist-generated=true
-2015/ToBoolean.js spackled linguist-generated=true
-2015/ToInt32.js spackled linguist-generated=true
-2015/ToPropertyDescriptor.js spackled linguist-generated=true
-2015/ToUint16.js spackled linguist-generated=true
-2015/ToUint32.js spackled linguist-generated=true
-2015/WeekDay.js spackled linguist-generated=true
-2015/YearFromTime.js spackled linguist-generated=true
-2015/abs.js spackled linguist-generated=true
-2015/floor.js spackled linguist-generated=true
-2015/modulo.js spackled linguist-generated=true
-2015/msFromTime.js spackled linguist-generated=true
-2016/AbstractEqualityComparison.js spackled linguist-generated=true
-2016/AbstractRelationalComparison.js spackled linguist-generated=true
-2016/AdvanceStringIndex.js spackled linguist-generated=true
-2016/ArrayCreate.js spackled linguist-generated=true
-2016/ArraySetLength.js spackled linguist-generated=true
-2016/ArraySpeciesCreate.js spackled linguist-generated=true
-2016/Call.js spackled linguist-generated=true
-2016/CanonicalNumericIndexString.js spackled linguist-generated=true
-2016/CompletePropertyDescriptor.js spackled linguist-generated=true
-2016/CreateDataProperty.js spackled linguist-generated=true
-2016/CreateDataPropertyOrThrow.js spackled linguist-generated=true
-2016/CreateHTML.js spackled linguist-generated=true
-2016/CreateIterResultObject.js spackled linguist-generated=true
-2016/CreateListFromArrayLike.js spackled linguist-generated=true
-2016/CreateMethodProperty.js spackled linguist-generated=true
-2016/DateFromTime.js spackled linguist-generated=true
-2016/Day.js spackled linguist-generated=true
-2016/DayFromYear.js spackled linguist-generated=true
-2016/DayWithinYear.js spackled linguist-generated=true
-2016/DaysInYear.js spackled linguist-generated=true
-2016/DefinePropertyOrThrow.js spackled linguist-generated=true
-2016/DeletePropertyOrThrow.js spackled linguist-generated=true
-2016/EnumerableOwnNames.js spackled linguist-generated=true
-2016/FromPropertyDescriptor.js spackled linguist-generated=true
-2016/Get.js spackled linguist-generated=true
-2016/GetIterator.js spackled linguist-generated=true
-2016/GetMethod.js spackled linguist-generated=true
-2016/GetOwnPropertyKeys.js spackled linguist-generated=true
-2016/GetPrototypeFromConstructor.js spackled linguist-generated=true
-2016/GetSubstitution.js spackled linguist-generated=true
-2016/GetV.js spackled linguist-generated=true
-2016/HasOwnProperty.js spackled linguist-generated=true
-2016/HasProperty.js spackled linguist-generated=true
-2016/HourFromTime.js spackled linguist-generated=true
-2016/InLeapYear.js spackled linguist-generated=true
-2016/InstanceofOperator.js spackled linguist-generated=true
-2016/Invoke.js spackled linguist-generated=true
-2016/IsAccessorDescriptor.js spackled linguist-generated=true
-2016/IsArray.js spackled linguist-generated=true
-2016/IsCallable.js spackled linguist-generated=true
-2016/IsConcatSpreadable.js spackled linguist-generated=true
-2016/IsConstructor.js spackled linguist-generated=true
-2016/IsDataDescriptor.js spackled linguist-generated=true
-2016/IsExtensible.js spackled linguist-generated=true
-2016/IsGenericDescriptor.js spackled linguist-generated=true
-2016/IsInteger.js spackled linguist-generated=true
-2016/IsPromise.js spackled linguist-generated=true
-2016/IsPropertyDescriptor.js spackled linguist-generated=true
-2016/IsPropertyKey.js spackled linguist-generated=true
-2016/IsRegExp.js spackled linguist-generated=true
-2016/IteratorClose.js spackled linguist-generated=true
-2016/IteratorComplete.js spackled linguist-generated=true
-2016/IteratorNext.js spackled linguist-generated=true
-2016/IteratorStep.js spackled linguist-generated=true
-2016/IteratorValue.js spackled linguist-generated=true
-2016/MakeDate.js spackled linguist-generated=true
-2016/MakeDay.js spackled linguist-generated=true
-2016/MakeTime.js spackled linguist-generated=true
-2016/MinFromTime.js spackled linguist-generated=true
-2016/MonthFromTime.js spackled linguist-generated=true
-2016/ObjectCreate.js spackled linguist-generated=true
-2016/OrdinaryCreateFromConstructor.js spackled linguist-generated=true
-2016/OrdinaryDefineOwnProperty.js spackled linguist-generated=true
-2016/OrdinaryGetOwnProperty.js spackled linguist-generated=true
-2016/OrdinaryHasInstance.js spackled linguist-generated=true
-2016/OrdinaryHasProperty.js spackled linguist-generated=true
-2016/QuoteJSONString.js spackled linguist-generated=true
-2016/RegExpCreate.js spackled linguist-generated=true
-2016/RegExpExec.js spackled linguist-generated=true
-2016/RequireObjectCoercible.js spackled linguist-generated=true
-2016/SameValue.js spackled linguist-generated=true
-2016/SameValueZero.js spackled linguist-generated=true
-2016/SecFromTime.js spackled linguist-generated=true
-2016/Set.js spackled linguist-generated=true
-2016/SetFunctionName.js spackled linguist-generated=true
-2016/SetIntegrityLevel.js spackled linguist-generated=true
-2016/SpeciesConstructor.js spackled linguist-generated=true
-2016/SplitMatch.js spackled linguist-generated=true
-2016/StrictEqualityComparison.js spackled linguist-generated=true
-2016/StringCreate.js spackled linguist-generated=true
-2016/SymbolDescriptiveString.js spackled linguist-generated=true
-2016/TestIntegrityLevel.js spackled linguist-generated=true
-2016/TimeClip.js spackled linguist-generated=true
-2016/TimeFromYear.js spackled linguist-generated=true
-2016/TimeWithinDay.js spackled linguist-generated=true
-2016/ToBoolean.js spackled linguist-generated=true
-2016/ToDateString.js spackled linguist-generated=true
-2016/ToInt16.js spackled linguist-generated=true
-2016/ToInt32.js spackled linguist-generated=true
-2016/ToInt8.js spackled linguist-generated=true
-2016/ToInteger.js spackled linguist-generated=true
-2016/ToLength.js spackled linguist-generated=true
-2016/ToNumber.js spackled linguist-generated=true
-2016/ToObject.js spackled linguist-generated=true
-2016/ToPrimitive.js spackled linguist-generated=true
-2016/ToPropertyDescriptor.js spackled linguist-generated=true
-2016/ToPropertyKey.js spackled linguist-generated=true
-2016/ToString.js spackled linguist-generated=true
-2016/ToUint16.js spackled linguist-generated=true
-2016/ToUint32.js spackled linguist-generated=true
-2016/ToUint8.js spackled linguist-generated=true
-2016/ToUint8Clamp.js spackled linguist-generated=true
-2016/Type.js spackled linguist-generated=true
-2016/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true
-2016/WeekDay.js spackled linguist-generated=true
-2016/YearFromTime.js spackled linguist-generated=true
-2016/abs.js spackled linguist-generated=true
-2016/floor.js spackled linguist-generated=true
-2016/modulo.js spackled linguist-generated=true
-2016/msFromTime.js spackled linguist-generated=true
-2016/thisBooleanValue.js spackled linguist-generated=true
-2016/thisNumberValue.js spackled linguist-generated=true
-2016/thisStringValue.js spackled linguist-generated=true
-2016/thisTimeValue.js spackled linguist-generated=true
-2017/AbstractEqualityComparison.js spackled linguist-generated=true
-2017/AbstractRelationalComparison.js spackled linguist-generated=true
-2017/AdvanceStringIndex.js spackled linguist-generated=true
-2017/ArrayCreate.js spackled linguist-generated=true
-2017/ArraySetLength.js spackled linguist-generated=true
-2017/ArraySpeciesCreate.js spackled linguist-generated=true
-2017/Call.js spackled linguist-generated=true
-2017/CanonicalNumericIndexString.js spackled linguist-generated=true
-2017/CompletePropertyDescriptor.js spackled linguist-generated=true
-2017/CreateDataProperty.js spackled linguist-generated=true
-2017/CreateDataPropertyOrThrow.js spackled linguist-generated=true
-2017/CreateHTML.js spackled linguist-generated=true
-2017/CreateIterResultObject.js spackled linguist-generated=true
-2017/CreateListFromArrayLike.js spackled linguist-generated=true
-2017/CreateMethodProperty.js spackled linguist-generated=true
-2017/DateFromTime.js spackled linguist-generated=true
-2017/Day.js spackled linguist-generated=true
-2017/DayFromYear.js spackled linguist-generated=true
-2017/DayWithinYear.js spackled linguist-generated=true
-2017/DaysInYear.js spackled linguist-generated=true
-2017/DefinePropertyOrThrow.js spackled linguist-generated=true
-2017/DeletePropertyOrThrow.js spackled linguist-generated=true
-2017/FromPropertyDescriptor.js spackled linguist-generated=true
-2017/Get.js spackled linguist-generated=true
-2017/GetIterator.js spackled linguist-generated=true
-2017/GetMethod.js spackled linguist-generated=true
-2017/GetOwnPropertyKeys.js spackled linguist-generated=true
-2017/GetPrototypeFromConstructor.js spackled linguist-generated=true
-2017/GetSubstitution.js spackled linguist-generated=true
-2017/GetV.js spackled linguist-generated=true
-2017/HasOwnProperty.js spackled linguist-generated=true
-2017/HasProperty.js spackled linguist-generated=true
-2017/HourFromTime.js spackled linguist-generated=true
-2017/InLeapYear.js spackled linguist-generated=true
-2017/InstanceofOperator.js spackled linguist-generated=true
-2017/Invoke.js spackled linguist-generated=true
-2017/IsAccessorDescriptor.js spackled linguist-generated=true
-2017/IsArray.js spackled linguist-generated=true
-2017/IsCallable.js spackled linguist-generated=true
-2017/IsConcatSpreadable.js spackled linguist-generated=true
-2017/IsConstructor.js spackled linguist-generated=true
-2017/IsDataDescriptor.js spackled linguist-generated=true
-2017/IsExtensible.js spackled linguist-generated=true
-2017/IsGenericDescriptor.js spackled linguist-generated=true
-2017/IsInteger.js spackled linguist-generated=true
-2017/IsPromise.js spackled linguist-generated=true
-2017/IsPropertyDescriptor.js spackled linguist-generated=true
-2017/IsPropertyKey.js spackled linguist-generated=true
-2017/IsRegExp.js spackled linguist-generated=true
-2017/IteratorClose.js spackled linguist-generated=true
-2017/IteratorComplete.js spackled linguist-generated=true
-2017/IteratorNext.js spackled linguist-generated=true
-2017/IteratorStep.js spackled linguist-generated=true
-2017/IteratorValue.js spackled linguist-generated=true
-2017/MakeDate.js spackled linguist-generated=true
-2017/MakeDay.js spackled linguist-generated=true
-2017/MakeTime.js spackled linguist-generated=true
-2017/MinFromTime.js spackled linguist-generated=true
-2017/MonthFromTime.js spackled linguist-generated=true
-2017/ObjectCreate.js spackled linguist-generated=true
-2017/OrdinaryCreateFromConstructor.js spackled linguist-generated=true
-2017/OrdinaryDefineOwnProperty.js spackled linguist-generated=true
-2017/OrdinaryGetOwnProperty.js spackled linguist-generated=true
-2017/OrdinaryGetPrototypeOf.js spackled linguist-generated=true
-2017/OrdinaryHasInstance.js spackled linguist-generated=true
-2017/OrdinaryHasProperty.js spackled linguist-generated=true
-2017/OrdinarySetPrototypeOf.js spackled linguist-generated=true
-2017/QuoteJSONString.js spackled linguist-generated=true
-2017/RegExpCreate.js spackled linguist-generated=true
-2017/RegExpExec.js spackled linguist-generated=true
-2017/RequireObjectCoercible.js spackled linguist-generated=true
-2017/SameValue.js spackled linguist-generated=true
-2017/SameValueNonNumber.js spackled linguist-generated=true
-2017/SameValueZero.js spackled linguist-generated=true
-2017/SecFromTime.js spackled linguist-generated=true
-2017/Set.js spackled linguist-generated=true
-2017/SetFunctionName.js spackled linguist-generated=true
-2017/SetIntegrityLevel.js spackled linguist-generated=true
-2017/SpeciesConstructor.js spackled linguist-generated=true
-2017/SplitMatch.js spackled linguist-generated=true
-2017/StrictEqualityComparison.js spackled linguist-generated=true
-2017/StringCreate.js spackled linguist-generated=true
-2017/SymbolDescriptiveString.js spackled linguist-generated=true
-2017/TestIntegrityLevel.js spackled linguist-generated=true
-2017/TimeClip.js spackled linguist-generated=true
-2017/TimeFromYear.js spackled linguist-generated=true
-2017/TimeWithinDay.js spackled linguist-generated=true
-2017/ToBoolean.js spackled linguist-generated=true
-2017/ToDateString.js spackled linguist-generated=true
-2017/ToInt16.js spackled linguist-generated=true
-2017/ToInt32.js spackled linguist-generated=true
-2017/ToInt8.js spackled linguist-generated=true
-2017/ToInteger.js spackled linguist-generated=true
-2017/ToLength.js spackled linguist-generated=true
-2017/ToNumber.js spackled linguist-generated=true
-2017/ToObject.js spackled linguist-generated=true
-2017/ToPrimitive.js spackled linguist-generated=true
-2017/ToPropertyDescriptor.js spackled linguist-generated=true
-2017/ToPropertyKey.js spackled linguist-generated=true
-2017/ToString.js spackled linguist-generated=true
-2017/ToUint16.js spackled linguist-generated=true
-2017/ToUint32.js spackled linguist-generated=true
-2017/ToUint8.js spackled linguist-generated=true
-2017/ToUint8Clamp.js spackled linguist-generated=true
-2017/Type.js spackled linguist-generated=true
-2017/UTF16Decode.js spackled linguist-generated=true
-2017/UTF16Encoding.js spackled linguist-generated=true
-2017/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true
-2017/WeekDay.js spackled linguist-generated=true
-2017/YearFromTime.js spackled linguist-generated=true
-2017/abs.js spackled linguist-generated=true
-2017/floor.js spackled linguist-generated=true
-2017/modulo.js spackled linguist-generated=true
-2017/msFromTime.js spackled linguist-generated=true
-2017/thisBooleanValue.js spackled linguist-generated=true
-2017/thisNumberValue.js spackled linguist-generated=true
-2017/thisStringValue.js spackled linguist-generated=true
-2017/thisTimeValue.js spackled linguist-generated=true
-2018/AbstractEqualityComparison.js spackled linguist-generated=true
-2018/AbstractRelationalComparison.js spackled linguist-generated=true
-2018/AdvanceStringIndex.js spackled linguist-generated=true
-2018/ArrayCreate.js spackled linguist-generated=true
-2018/ArraySetLength.js spackled linguist-generated=true
-2018/ArraySpeciesCreate.js spackled linguist-generated=true
-2018/Call.js spackled linguist-generated=true
-2018/CanonicalNumericIndexString.js spackled linguist-generated=true
-2018/CompletePropertyDescriptor.js spackled linguist-generated=true
-2018/CreateDataProperty.js spackled linguist-generated=true
-2018/CreateDataPropertyOrThrow.js spackled linguist-generated=true
-2018/CreateHTML.js spackled linguist-generated=true
-2018/CreateIterResultObject.js spackled linguist-generated=true
-2018/CreateListFromArrayLike.js spackled linguist-generated=true
-2018/CreateMethodProperty.js spackled linguist-generated=true
-2018/DateFromTime.js spackled linguist-generated=true
-2018/Day.js spackled linguist-generated=true
-2018/DayFromYear.js spackled linguist-generated=true
-2018/DayWithinYear.js spackled linguist-generated=true
-2018/DaysInYear.js spackled linguist-generated=true
-2018/DefinePropertyOrThrow.js spackled linguist-generated=true
-2018/DeletePropertyOrThrow.js spackled linguist-generated=true
-2018/FromPropertyDescriptor.js spackled linguist-generated=true
-2018/Get.js spackled linguist-generated=true
-2018/GetIterator.js spackled linguist-generated=true
-2018/GetMethod.js spackled linguist-generated=true
-2018/GetOwnPropertyKeys.js spackled linguist-generated=true
-2018/GetPrototypeFromConstructor.js spackled linguist-generated=true
-2018/GetV.js spackled linguist-generated=true
-2018/HasOwnProperty.js spackled linguist-generated=true
-2018/HasProperty.js spackled linguist-generated=true
-2018/HourFromTime.js spackled linguist-generated=true
-2018/InLeapYear.js spackled linguist-generated=true
-2018/InstanceofOperator.js spackled linguist-generated=true
-2018/Invoke.js spackled linguist-generated=true
-2018/IsAccessorDescriptor.js spackled linguist-generated=true
-2018/IsArray.js spackled linguist-generated=true
-2018/IsCallable.js spackled linguist-generated=true
-2018/IsConcatSpreadable.js spackled linguist-generated=true
-2018/IsConstructor.js spackled linguist-generated=true
-2018/IsDataDescriptor.js spackled linguist-generated=true
-2018/IsExtensible.js spackled linguist-generated=true
-2018/IsGenericDescriptor.js spackled linguist-generated=true
-2018/IsInteger.js spackled linguist-generated=true
-2018/IsPromise.js spackled linguist-generated=true
-2018/IsPropertyKey.js spackled linguist-generated=true
-2018/IsRegExp.js spackled linguist-generated=true
-2018/IterableToList.js spackled linguist-generated=true
-2018/IteratorClose.js spackled linguist-generated=true
-2018/IteratorComplete.js spackled linguist-generated=true
-2018/IteratorNext.js spackled linguist-generated=true
-2018/IteratorStep.js spackled linguist-generated=true
-2018/IteratorValue.js spackled linguist-generated=true
-2018/MakeDate.js spackled linguist-generated=true
-2018/MakeDay.js spackled linguist-generated=true
-2018/MakeTime.js spackled linguist-generated=true
-2018/MinFromTime.js spackled linguist-generated=true
-2018/MonthFromTime.js spackled linguist-generated=true
-2018/ObjectCreate.js spackled linguist-generated=true
-2018/OrdinaryCreateFromConstructor.js spackled linguist-generated=true
-2018/OrdinaryDefineOwnProperty.js spackled linguist-generated=true
-2018/OrdinaryGetOwnProperty.js spackled linguist-generated=true
-2018/OrdinaryGetPrototypeOf.js spackled linguist-generated=true
-2018/OrdinaryHasInstance.js spackled linguist-generated=true
-2018/OrdinaryHasProperty.js spackled linguist-generated=true
-2018/OrdinarySetPrototypeOf.js spackled linguist-generated=true
-2018/RegExpCreate.js spackled linguist-generated=true
-2018/RegExpExec.js spackled linguist-generated=true
-2018/RequireObjectCoercible.js spackled linguist-generated=true
-2018/SameValue.js spackled linguist-generated=true
-2018/SameValueNonNumber.js spackled linguist-generated=true
-2018/SameValueZero.js spackled linguist-generated=true
-2018/SecFromTime.js spackled linguist-generated=true
-2018/Set.js spackled linguist-generated=true
-2018/SetFunctionName.js spackled linguist-generated=true
-2018/SetIntegrityLevel.js spackled linguist-generated=true
-2018/SpeciesConstructor.js spackled linguist-generated=true
-2018/SplitMatch.js spackled linguist-generated=true
-2018/StrictEqualityComparison.js spackled linguist-generated=true
-2018/StringCreate.js spackled linguist-generated=true
-2018/StringGetOwnProperty.js spackled linguist-generated=true
-2018/SymbolDescriptiveString.js spackled linguist-generated=true
-2018/TestIntegrityLevel.js spackled linguist-generated=true
-2018/TimeClip.js spackled linguist-generated=true
-2018/TimeFromYear.js spackled linguist-generated=true
-2018/TimeWithinDay.js spackled linguist-generated=true
-2018/ToBoolean.js spackled linguist-generated=true
-2018/ToDateString.js spackled linguist-generated=true
-2018/ToIndex.js spackled linguist-generated=true
-2018/ToInt16.js spackled linguist-generated=true
-2018/ToInt32.js spackled linguist-generated=true
-2018/ToInt8.js spackled linguist-generated=true
-2018/ToInteger.js spackled linguist-generated=true
-2018/ToLength.js spackled linguist-generated=true
-2018/ToNumber.js spackled linguist-generated=true
-2018/ToObject.js spackled linguist-generated=true
-2018/ToPrimitive.js spackled linguist-generated=true
-2018/ToPropertyDescriptor.js spackled linguist-generated=true
-2018/ToPropertyKey.js spackled linguist-generated=true
-2018/ToString.js spackled linguist-generated=true
-2018/ToUint16.js spackled linguist-generated=true
-2018/ToUint32.js spackled linguist-generated=true
-2018/ToUint8.js spackled linguist-generated=true
-2018/ToUint8Clamp.js spackled linguist-generated=true
-2018/Type.js spackled linguist-generated=true
-2018/UTF16Decode.js spackled linguist-generated=true
-2018/UTF16Encoding.js spackled linguist-generated=true
-2018/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true
-2018/WeekDay.js spackled linguist-generated=true
-2018/YearFromTime.js spackled linguist-generated=true
-2018/abs.js spackled linguist-generated=true
-2018/floor.js spackled linguist-generated=true
-2018/modulo.js spackled linguist-generated=true
-2018/msFromTime.js spackled linguist-generated=true
-2018/thisBooleanValue.js spackled linguist-generated=true
-2018/thisNumberValue.js spackled linguist-generated=true
-2018/thisStringValue.js spackled linguist-generated=true
-2018/thisTimeValue.js spackled linguist-generated=true
-2019/AbstractEqualityComparison.js spackled linguist-generated=true
-2019/AbstractRelationalComparison.js spackled linguist-generated=true
-2019/AdvanceStringIndex.js spackled linguist-generated=true
-2019/ArrayCreate.js spackled linguist-generated=true
-2019/ArraySetLength.js spackled linguist-generated=true
-2019/ArraySpeciesCreate.js spackled linguist-generated=true
-2019/Call.js spackled linguist-generated=true
-2019/CanonicalNumericIndexString.js spackled linguist-generated=true
-2019/CompletePropertyDescriptor.js spackled linguist-generated=true
-2019/CopyDataProperties.js spackled linguist-generated=true
-2019/CreateDataProperty.js spackled linguist-generated=true
-2019/CreateDataPropertyOrThrow.js spackled linguist-generated=true
-2019/CreateHTML.js spackled linguist-generated=true
-2019/CreateIterResultObject.js spackled linguist-generated=true
-2019/CreateListFromArrayLike.js spackled linguist-generated=true
-2019/CreateMethodProperty.js spackled linguist-generated=true
-2019/DateFromTime.js spackled linguist-generated=true
-2019/DateString.js spackled linguist-generated=true
-2019/Day.js spackled linguist-generated=true
-2019/DayFromYear.js spackled linguist-generated=true
-2019/DayWithinYear.js spackled linguist-generated=true
-2019/DaysInYear.js spackled linguist-generated=true
-2019/DefinePropertyOrThrow.js spackled linguist-generated=true
-2019/DeletePropertyOrThrow.js spackled linguist-generated=true
-2019/EnumerableOwnPropertyNames.js spackled linguist-generated=true
-2019/FromPropertyDescriptor.js spackled linguist-generated=true
-2019/Get.js spackled linguist-generated=true
-2019/GetIterator.js spackled linguist-generated=true
-2019/GetMethod.js spackled linguist-generated=true
-2019/GetOwnPropertyKeys.js spackled linguist-generated=true
-2019/GetPrototypeFromConstructor.js spackled linguist-generated=true
-2019/GetSubstitution.js spackled linguist-generated=true
-2019/GetV.js spackled linguist-generated=true
-2019/HasOwnProperty.js spackled linguist-generated=true
-2019/HasProperty.js spackled linguist-generated=true
-2019/HourFromTime.js spackled linguist-generated=true
-2019/InLeapYear.js spackled linguist-generated=true
-2019/InstanceofOperator.js spackled linguist-generated=true
-2019/Invoke.js spackled linguist-generated=true
-2019/IsAccessorDescriptor.js spackled linguist-generated=true
-2019/IsArray.js spackled linguist-generated=true
-2019/IsCallable.js spackled linguist-generated=true
-2019/IsConcatSpreadable.js spackled linguist-generated=true
-2019/IsConstructor.js spackled linguist-generated=true
-2019/IsDataDescriptor.js spackled linguist-generated=true
-2019/IsExtensible.js spackled linguist-generated=true
-2019/IsGenericDescriptor.js spackled linguist-generated=true
-2019/IsInteger.js spackled linguist-generated=true
-2019/IsPromise.js spackled linguist-generated=true
-2019/IsPropertyKey.js spackled linguist-generated=true
-2019/IsRegExp.js spackled linguist-generated=true
-2019/IsStringPrefix.js spackled linguist-generated=true
-2019/IterableToList.js spackled linguist-generated=true
-2019/IteratorClose.js spackled linguist-generated=true
-2019/IteratorComplete.js spackled linguist-generated=true
-2019/IteratorNext.js spackled linguist-generated=true
-2019/IteratorStep.js spackled linguist-generated=true
-2019/IteratorValue.js spackled linguist-generated=true
-2019/MakeDate.js spackled linguist-generated=true
-2019/MakeDay.js spackled linguist-generated=true
-2019/MakeTime.js spackled linguist-generated=true
-2019/MinFromTime.js spackled linguist-generated=true
-2019/MonthFromTime.js spackled linguist-generated=true
-2019/NumberToString.js spackled linguist-generated=true
-2019/ObjectCreate.js spackled linguist-generated=true
-2019/OrdinaryCreateFromConstructor.js spackled linguist-generated=true
-2019/OrdinaryDefineOwnProperty.js spackled linguist-generated=true
-2019/OrdinaryGetOwnProperty.js spackled linguist-generated=true
-2019/OrdinaryGetPrototypeOf.js spackled linguist-generated=true
-2019/OrdinaryHasInstance.js spackled linguist-generated=true
-2019/OrdinaryHasProperty.js spackled linguist-generated=true
-2019/OrdinarySetPrototypeOf.js spackled linguist-generated=true
-2019/PromiseResolve.js spackled linguist-generated=true
-2019/RegExpCreate.js spackled linguist-generated=true
-2019/RegExpExec.js spackled linguist-generated=true
-2019/RequireObjectCoercible.js spackled linguist-generated=true
-2019/SameValue.js spackled linguist-generated=true
-2019/SameValueNonNumber.js spackled linguist-generated=true
-2019/SameValueZero.js spackled linguist-generated=true
-2019/SecFromTime.js spackled linguist-generated=true
-2019/Set.js spackled linguist-generated=true
-2019/SetFunctionLength.js spackled linguist-generated=true
-2019/SetFunctionName.js spackled linguist-generated=true
-2019/SetIntegrityLevel.js spackled linguist-generated=true
-2019/SpeciesConstructor.js spackled linguist-generated=true
-2019/SplitMatch.js spackled linguist-generated=true
-2019/StrictEqualityComparison.js spackled linguist-generated=true
-2019/StringCreate.js spackled linguist-generated=true
-2019/StringGetOwnProperty.js spackled linguist-generated=true
-2019/SymbolDescriptiveString.js spackled linguist-generated=true
-2019/TestIntegrityLevel.js spackled linguist-generated=true
-2019/TimeClip.js spackled linguist-generated=true
-2019/TimeFromYear.js spackled linguist-generated=true
-2019/TimeString.js spackled linguist-generated=true
-2019/TimeWithinDay.js spackled linguist-generated=true
-2019/ToBoolean.js spackled linguist-generated=true
-2019/ToDateString.js spackled linguist-generated=true
-2019/ToIndex.js spackled linguist-generated=true
-2019/ToInt16.js spackled linguist-generated=true
-2019/ToInt32.js spackled linguist-generated=true
-2019/ToInt8.js spackled linguist-generated=true
-2019/ToInteger.js spackled linguist-generated=true
-2019/ToLength.js spackled linguist-generated=true
-2019/ToNumber.js spackled linguist-generated=true
-2019/ToObject.js spackled linguist-generated=true
-2019/ToPrimitive.js spackled linguist-generated=true
-2019/ToPropertyDescriptor.js spackled linguist-generated=true
-2019/ToPropertyKey.js spackled linguist-generated=true
-2019/ToString.js spackled linguist-generated=true
-2019/ToUint16.js spackled linguist-generated=true
-2019/ToUint32.js spackled linguist-generated=true
-2019/ToUint8.js spackled linguist-generated=true
-2019/ToUint8Clamp.js spackled linguist-generated=true
-2019/Type.js spackled linguist-generated=true
-2019/UTF16Decode.js spackled linguist-generated=true
-2019/UTF16Encoding.js spackled linguist-generated=true
-2019/UnicodeEscape.js spackled linguist-generated=true
-2019/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true
-2019/WeekDay.js spackled linguist-generated=true
-2019/YearFromTime.js spackled linguist-generated=true
-2019/abs.js spackled linguist-generated=true
-2019/floor.js spackled linguist-generated=true
-2019/modulo.js spackled linguist-generated=true
-2019/msFromTime.js spackled linguist-generated=true
-2019/thisBooleanValue.js spackled linguist-generated=true
-2019/thisNumberValue.js spackled linguist-generated=true
-2019/thisStringValue.js spackled linguist-generated=true
-2019/thisSymbolValue.js spackled linguist-generated=true
-2020/AbstractEqualityComparison.js spackled linguist-generated=true
-2020/AbstractRelationalComparison.js spackled linguist-generated=true
-2020/AddEntriesFromIterable.js spackled linguist-generated=true
-2020/ArrayCreate.js spackled linguist-generated=true
-2020/ArraySetLength.js spackled linguist-generated=true
-2020/ArraySpeciesCreate.js spackled linguist-generated=true
-2020/Call.js spackled linguist-generated=true
-2020/CanonicalNumericIndexString.js spackled linguist-generated=true
-2020/CompletePropertyDescriptor.js spackled linguist-generated=true
-2020/CreateDataProperty.js spackled linguist-generated=true
-2020/CreateDataPropertyOrThrow.js spackled linguist-generated=true
-2020/CreateHTML.js spackled linguist-generated=true
-2020/CreateIterResultObject.js spackled linguist-generated=true
-2020/CreateMethodProperty.js spackled linguist-generated=true
-2020/DateFromTime.js spackled linguist-generated=true
-2020/DateString.js spackled linguist-generated=true
-2020/Day.js spackled linguist-generated=true
-2020/DayFromYear.js spackled linguist-generated=true
-2020/DayWithinYear.js spackled linguist-generated=true
-2020/DaysInYear.js spackled linguist-generated=true
-2020/DefinePropertyOrThrow.js spackled linguist-generated=true
-2020/DeletePropertyOrThrow.js spackled linguist-generated=true
-2020/EnumerableOwnPropertyNames.js spackled linguist-generated=true
-2020/FromPropertyDescriptor.js spackled linguist-generated=true
-2020/Get.js spackled linguist-generated=true
-2020/GetMethod.js spackled linguist-generated=true
-2020/GetOwnPropertyKeys.js spackled linguist-generated=true
-2020/GetPrototypeFromConstructor.js spackled linguist-generated=true
-2020/GetSubstitution.js spackled linguist-generated=true
-2020/GetV.js spackled linguist-generated=true
-2020/HasOwnProperty.js spackled linguist-generated=true
-2020/HasProperty.js spackled linguist-generated=true
-2020/HourFromTime.js spackled linguist-generated=true
-2020/InLeapYear.js spackled linguist-generated=true
-2020/InstanceofOperator.js spackled linguist-generated=true
-2020/Invoke.js spackled linguist-generated=true
-2020/IsAccessorDescriptor.js spackled linguist-generated=true
-2020/IsArray.js spackled linguist-generated=true
-2020/IsCallable.js spackled linguist-generated=true
-2020/IsConcatSpreadable.js spackled linguist-generated=true
-2020/IsConstructor.js spackled linguist-generated=true
-2020/IsDataDescriptor.js spackled linguist-generated=true
-2020/IsExtensible.js spackled linguist-generated=true
-2020/IsGenericDescriptor.js spackled linguist-generated=true
-2020/IsInteger.js spackled linguist-generated=true
-2020/IsPromise.js spackled linguist-generated=true
-2020/IsPropertyKey.js spackled linguist-generated=true
-2020/IsRegExp.js spackled linguist-generated=true
-2020/IsStringPrefix.js spackled linguist-generated=true
-2020/IteratorClose.js spackled linguist-generated=true
-2020/IteratorComplete.js spackled linguist-generated=true
-2020/IteratorNext.js spackled linguist-generated=true
-2020/IteratorStep.js spackled linguist-generated=true
-2020/IteratorValue.js spackled linguist-generated=true
-2020/MakeDate.js spackled linguist-generated=true
-2020/MakeDay.js spackled linguist-generated=true
-2020/MakeTime.js spackled linguist-generated=true
-2020/MinFromTime.js spackled linguist-generated=true
-2020/MonthFromTime.js spackled linguist-generated=true
-2020/OrdinaryDefineOwnProperty.js spackled linguist-generated=true
-2020/OrdinaryGetOwnProperty.js spackled linguist-generated=true
-2020/OrdinaryGetPrototypeOf.js spackled linguist-generated=true
-2020/OrdinaryHasInstance.js spackled linguist-generated=true
-2020/OrdinaryHasProperty.js spackled linguist-generated=true
-2020/OrdinarySetPrototypeOf.js spackled linguist-generated=true
-2020/PromiseResolve.js spackled linguist-generated=true
-2020/RegExpCreate.js spackled linguist-generated=true
-2020/RegExpExec.js spackled linguist-generated=true
-2020/RequireObjectCoercible.js spackled linguist-generated=true
-2020/SameValue.js spackled linguist-generated=true
-2020/SameValueZero.js spackled linguist-generated=true
-2020/SecFromTime.js spackled linguist-generated=true
-2020/Set.js spackled linguist-generated=true
-2020/SetFunctionName.js spackled linguist-generated=true
-2020/SetIntegrityLevel.js spackled linguist-generated=true
-2020/SpeciesConstructor.js spackled linguist-generated=true
-2020/SplitMatch.js spackled linguist-generated=true
-2020/StrictEqualityComparison.js spackled linguist-generated=true
-2020/StringCreate.js spackled linguist-generated=true
-2020/StringGetOwnProperty.js spackled linguist-generated=true
-2020/SymbolDescriptiveString.js spackled linguist-generated=true
-2020/TestIntegrityLevel.js spackled linguist-generated=true
-2020/TimeClip.js spackled linguist-generated=true
-2020/TimeFromYear.js spackled linguist-generated=true
-2020/TimeString.js spackled linguist-generated=true
-2020/TimeWithinDay.js spackled linguist-generated=true
-2020/ToBoolean.js spackled linguist-generated=true
-2020/ToDateString.js spackled linguist-generated=true
-2020/ToInt16.js spackled linguist-generated=true
-2020/ToInt32.js spackled linguist-generated=true
-2020/ToInt8.js spackled linguist-generated=true
-2020/ToLength.js spackled linguist-generated=true
-2020/ToObject.js spackled linguist-generated=true
-2020/ToPrimitive.js spackled linguist-generated=true
-2020/ToPropertyDescriptor.js spackled linguist-generated=true
-2020/ToPropertyKey.js spackled linguist-generated=true
-2020/ToString.js spackled linguist-generated=true
-2020/ToUint16.js spackled linguist-generated=true
-2020/ToUint32.js spackled linguist-generated=true
-2020/ToUint8.js spackled linguist-generated=true
-2020/ToUint8Clamp.js spackled linguist-generated=true
-2020/TrimString.js spackled linguist-generated=true
-2020/UTF16Encoding.js spackled linguist-generated=true
-2020/ValidateAndApplyPropertyDescriptor.js spackled linguist-generated=true
-2020/WeekDay.js spackled linguist-generated=true
-2020/YearFromTime.js spackled linguist-generated=true
-2020/abs.js spackled linguist-generated=true
-2020/floor.js spackled linguist-generated=true
-2020/modulo.js spackled linguist-generated=true
-2020/msFromTime.js spackled linguist-generated=true
-2020/thisBooleanValue.js spackled linguist-generated=true
-2020/thisNumberValue.js spackled linguist-generated=true
-2020/thisStringValue.js spackled linguist-generated=true
-2020/thisSymbolValue.js spackled linguist-generated=true
-2020/thisTimeValue.js spackled linguist-generated=true
\ No newline at end of file
diff --git a/node_modules/es-abstract/2015/CharacterRange.js b/node_modules/es-abstract/2015/CharacterRange.js
new file mode 100644
index 0000000..70e4b52
--- /dev/null
+++ b/node_modules/es-abstract/2015/CharacterRange.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $push = callBound('%Array.prototype.push%');
+
+module.exports = function CharacterRange(A, B) {
+ if (A.length !== 1 || B.length !== 1) {
+ throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+ }
+
+ var a = A[0];
+ var b = B[0];
+
+ var i = $charCodeAt(a, 0);
+ var j = $charCodeAt(b, 0);
+
+ if (!(i <= j)) {
+ throw new $TypeError('Assertion failed: i is not <= j');
+ }
+
+ var arr = [];
+ for (var k = i; k <= j; k += 1) {
+ $push(arr, $fromCharCode(k));
+ }
+ return arr;
+};
diff --git a/node_modules/es-abstract/2015/IsCompatiblePropertyDescriptor.js b/node_modules/es-abstract/2015/IsCompatiblePropertyDescriptor.js
new file mode 100644
index 0000000..8bdaf3e
--- /dev/null
+++ b/node_modules/es-abstract/2015/IsCompatiblePropertyDescriptor.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+ return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
+};
diff --git a/node_modules/es-abstract/2015/Set.js b/node_modules/es-abstract/2015/Set.js
index ea49e81..0971498 100644
--- a/node_modules/es-abstract/2015/Set.js
+++ b/node_modules/es-abstract/2015/Set.js
@@ -36,12 +36,12 @@
throw new $TypeError('Attempted to assign to readonly property.');
}
return true;
- } else {
- try {
- O[P] = V; // eslint-disable-line no-param-reassign
- return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
- } catch (e) {
- return false;
- }
}
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+ } catch (e) {
+ return false;
+ }
+
};
diff --git a/node_modules/es-abstract/2015/SetFunctionName.js b/node_modules/es-abstract/2015/SetFunctionName.js
index f59cb7b..03ec222 100644
--- a/node_modules/es-abstract/2015/SetFunctionName.js
+++ b/node_modules/es-abstract/2015/SetFunctionName.js
@@ -6,7 +6,7 @@
var $TypeError = GetIntrinsic('%TypeError%');
-var getSymbolDescription = require('../helpers/getSymbolDescription');
+var getSymbolDescription = require('get-symbol-description');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var IsExtensible = require('./IsExtensible');
diff --git a/node_modules/es-abstract/2015/ToNumber.js b/node_modules/es-abstract/2015/ToNumber.js
index e776bb2..197b5c5 100644
--- a/node_modules/es-abstract/2015/ToNumber.js
+++ b/node_modules/es-abstract/2015/ToNumber.js
@@ -48,12 +48,12 @@
return ToNumber($parseInteger($strSlice(value, 2), 8));
} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
return NaN;
- } else {
- var trimmed = $trim(value);
- if (trimmed !== value) {
- return ToNumber(trimmed);
- }
}
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+
}
return $Number(value);
};
diff --git a/node_modules/es-abstract/2016/CharacterRange.js b/node_modules/es-abstract/2016/CharacterRange.js
new file mode 100644
index 0000000..70e4b52
--- /dev/null
+++ b/node_modules/es-abstract/2016/CharacterRange.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $push = callBound('%Array.prototype.push%');
+
+module.exports = function CharacterRange(A, B) {
+ if (A.length !== 1 || B.length !== 1) {
+ throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+ }
+
+ var a = A[0];
+ var b = B[0];
+
+ var i = $charCodeAt(a, 0);
+ var j = $charCodeAt(b, 0);
+
+ if (!(i <= j)) {
+ throw new $TypeError('Assertion failed: i is not <= j');
+ }
+
+ var arr = [];
+ for (var k = i; k <= j; k += 1) {
+ $push(arr, $fromCharCode(k));
+ }
+ return arr;
+};
diff --git a/node_modules/es-abstract/2016/IsCompatiblePropertyDescriptor.js b/node_modules/es-abstract/2016/IsCompatiblePropertyDescriptor.js
new file mode 100644
index 0000000..8bdaf3e
--- /dev/null
+++ b/node_modules/es-abstract/2016/IsCompatiblePropertyDescriptor.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+ return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
+};
diff --git a/node_modules/es-abstract/2016/Set.js b/node_modules/es-abstract/2016/Set.js
index ea49e81..0971498 100644
--- a/node_modules/es-abstract/2016/Set.js
+++ b/node_modules/es-abstract/2016/Set.js
@@ -36,12 +36,12 @@
throw new $TypeError('Attempted to assign to readonly property.');
}
return true;
- } else {
- try {
- O[P] = V; // eslint-disable-line no-param-reassign
- return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
- } catch (e) {
- return false;
- }
}
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+ } catch (e) {
+ return false;
+ }
+
};
diff --git a/node_modules/es-abstract/2016/SetFunctionName.js b/node_modules/es-abstract/2016/SetFunctionName.js
index f59cb7b..03ec222 100644
--- a/node_modules/es-abstract/2016/SetFunctionName.js
+++ b/node_modules/es-abstract/2016/SetFunctionName.js
@@ -6,7 +6,7 @@
var $TypeError = GetIntrinsic('%TypeError%');
-var getSymbolDescription = require('../helpers/getSymbolDescription');
+var getSymbolDescription = require('get-symbol-description');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var IsExtensible = require('./IsExtensible');
diff --git a/node_modules/es-abstract/2016/ToNumber.js b/node_modules/es-abstract/2016/ToNumber.js
index e776bb2..197b5c5 100644
--- a/node_modules/es-abstract/2016/ToNumber.js
+++ b/node_modules/es-abstract/2016/ToNumber.js
@@ -48,12 +48,12 @@
return ToNumber($parseInteger($strSlice(value, 2), 8));
} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
return NaN;
- } else {
- var trimmed = $trim(value);
- if (trimmed !== value) {
- return ToNumber(trimmed);
- }
}
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+
}
return $Number(value);
};
diff --git a/node_modules/es-abstract/2017/CharacterRange.js b/node_modules/es-abstract/2017/CharacterRange.js
new file mode 100644
index 0000000..70e4b52
--- /dev/null
+++ b/node_modules/es-abstract/2017/CharacterRange.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $push = callBound('%Array.prototype.push%');
+
+module.exports = function CharacterRange(A, B) {
+ if (A.length !== 1 || B.length !== 1) {
+ throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+ }
+
+ var a = A[0];
+ var b = B[0];
+
+ var i = $charCodeAt(a, 0);
+ var j = $charCodeAt(b, 0);
+
+ if (!(i <= j)) {
+ throw new $TypeError('Assertion failed: i is not <= j');
+ }
+
+ var arr = [];
+ for (var k = i; k <= j; k += 1) {
+ $push(arr, $fromCharCode(k));
+ }
+ return arr;
+};
diff --git a/node_modules/es-abstract/2017/IsCompatiblePropertyDescriptor.js b/node_modules/es-abstract/2017/IsCompatiblePropertyDescriptor.js
new file mode 100644
index 0000000..8bdaf3e
--- /dev/null
+++ b/node_modules/es-abstract/2017/IsCompatiblePropertyDescriptor.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+ return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
+};
diff --git a/node_modules/es-abstract/2017/IsSharedArrayBuffer.js b/node_modules/es-abstract/2017/IsSharedArrayBuffer.js
new file mode 100644
index 0000000..8e96e33
--- /dev/null
+++ b/node_modules/es-abstract/2017/IsSharedArrayBuffer.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+// https://262.ecma-international.org/8.0/#sec-issharedarraybuffer
+
+module.exports = function IsSharedArrayBuffer(obj) {
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ return isSharedArrayBuffer(obj);
+};
diff --git a/node_modules/es-abstract/2017/OrdinaryToPrimitive.js b/node_modules/es-abstract/2017/OrdinaryToPrimitive.js
new file mode 100644
index 0000000..e1dbe14
--- /dev/null
+++ b/node_modules/es-abstract/2017/OrdinaryToPrimitive.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive
+
+module.exports = function OrdinaryToPrimitive(O, hint) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (/* Type(hint) !== 'String' || */ hint !== 'string' && hint !== 'number') {
+ throw new $TypeError('Assertion failed: `hint` must be "string" or "number"');
+ }
+
+ var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+
+ for (var i = 0; i < methodNames.length; i += 1) {
+ var name = methodNames[i];
+ var method = Get(O, name);
+ if (IsCallable(method)) {
+ var result = Call(method, O);
+ if (Type(result) !== 'Object') {
+ return result;
+ }
+ }
+ }
+
+ throw new $TypeError('No primitive value for ' + inspect(O));
+};
diff --git a/node_modules/es-abstract/2017/Set.js b/node_modules/es-abstract/2017/Set.js
index ea49e81..0971498 100644
--- a/node_modules/es-abstract/2017/Set.js
+++ b/node_modules/es-abstract/2017/Set.js
@@ -36,12 +36,12 @@
throw new $TypeError('Attempted to assign to readonly property.');
}
return true;
- } else {
- try {
- O[P] = V; // eslint-disable-line no-param-reassign
- return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
- } catch (e) {
- return false;
- }
}
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+ } catch (e) {
+ return false;
+ }
+
};
diff --git a/node_modules/es-abstract/2017/SetFunctionName.js b/node_modules/es-abstract/2017/SetFunctionName.js
index f59cb7b..03ec222 100644
--- a/node_modules/es-abstract/2017/SetFunctionName.js
+++ b/node_modules/es-abstract/2017/SetFunctionName.js
@@ -6,7 +6,7 @@
var $TypeError = GetIntrinsic('%TypeError%');
-var getSymbolDescription = require('../helpers/getSymbolDescription');
+var getSymbolDescription = require('get-symbol-description');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var IsExtensible = require('./IsExtensible');
diff --git a/node_modules/es-abstract/2017/ToNumber.js b/node_modules/es-abstract/2017/ToNumber.js
index e776bb2..197b5c5 100644
--- a/node_modules/es-abstract/2017/ToNumber.js
+++ b/node_modules/es-abstract/2017/ToNumber.js
@@ -48,12 +48,12 @@
return ToNumber($parseInteger($strSlice(value, 2), 8));
} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
return NaN;
- } else {
- var trimmed = $trim(value);
- if (trimmed !== value) {
- return ToNumber(trimmed);
- }
}
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+
}
return $Number(value);
};
diff --git a/node_modules/es-abstract/2018/AbstractRelationalComparison.js b/node_modules/es-abstract/2018/AbstractRelationalComparison.js
index 0dfed5f..7c6472f 100644
--- a/node_modules/es-abstract/2018/AbstractRelationalComparison.js
+++ b/node_modules/es-abstract/2018/AbstractRelationalComparison.js
@@ -7,15 +7,14 @@
var $isNaN = require('../helpers/isNaN');
var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
+var IsStringPrefix = require('./IsStringPrefix');
var ToNumber = require('./ToNumber');
var ToPrimitive = require('./ToPrimitive');
var Type = require('./Type');
-// https://262.ecma-international.org/5.1/#sec-11.8.5
+// https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison
-// eslint-disable-next-line max-statements
module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
if (Type(LeftFirst) !== 'Boolean') {
throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
@@ -29,35 +28,34 @@
py = ToPrimitive(y, $Number);
px = ToPrimitive(x, $Number);
}
- var bothStrings = Type(px) === 'String' && Type(py) === 'String';
- if (!bothStrings) {
- var nx = ToNumber(px);
- var ny = ToNumber(py);
- if ($isNaN(nx) || $isNaN(ny)) {
- return undefined;
- }
- if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ if (Type(px) === 'String' && Type(py) === 'String') {
+ if (IsStringPrefix(py, px)) {
return false;
}
- if (nx === Infinity) {
- return false;
- }
- if (ny === Infinity) {
+ if (IsStringPrefix(px, py)) {
return true;
}
- if (ny === -Infinity) {
- return false;
- }
- if (nx === -Infinity) {
- return true;
- }
- return nx < ny; // by now, these are both nonzero, finite, and not equal
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f
}
- if (isPrefixOf(py, px)) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
return false;
}
- if (isPrefixOf(px, py)) {
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
return true;
}
- return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
};
diff --git a/node_modules/es-abstract/2018/CharacterRange.js b/node_modules/es-abstract/2018/CharacterRange.js
new file mode 100644
index 0000000..70e4b52
--- /dev/null
+++ b/node_modules/es-abstract/2018/CharacterRange.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $push = callBound('%Array.prototype.push%');
+
+module.exports = function CharacterRange(A, B) {
+ if (A.length !== 1 || B.length !== 1) {
+ throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+ }
+
+ var a = A[0];
+ var b = B[0];
+
+ var i = $charCodeAt(a, 0);
+ var j = $charCodeAt(b, 0);
+
+ if (!(i <= j)) {
+ throw new $TypeError('Assertion failed: i is not <= j');
+ }
+
+ var arr = [];
+ for (var k = i; k <= j; k += 1) {
+ $push(arr, $fromCharCode(k));
+ }
+ return arr;
+};
diff --git a/node_modules/es-abstract/2018/IsCompatiblePropertyDescriptor.js b/node_modules/es-abstract/2018/IsCompatiblePropertyDescriptor.js
new file mode 100644
index 0000000..8bdaf3e
--- /dev/null
+++ b/node_modules/es-abstract/2018/IsCompatiblePropertyDescriptor.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+ return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
+};
diff --git a/node_modules/es-abstract/2018/IsSharedArrayBuffer.js b/node_modules/es-abstract/2018/IsSharedArrayBuffer.js
new file mode 100644
index 0000000..8e96e33
--- /dev/null
+++ b/node_modules/es-abstract/2018/IsSharedArrayBuffer.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+// https://262.ecma-international.org/8.0/#sec-issharedarraybuffer
+
+module.exports = function IsSharedArrayBuffer(obj) {
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ return isSharedArrayBuffer(obj);
+};
diff --git a/node_modules/es-abstract/2018/OrdinaryToPrimitive.js b/node_modules/es-abstract/2018/OrdinaryToPrimitive.js
new file mode 100644
index 0000000..e1dbe14
--- /dev/null
+++ b/node_modules/es-abstract/2018/OrdinaryToPrimitive.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive
+
+module.exports = function OrdinaryToPrimitive(O, hint) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (/* Type(hint) !== 'String' || */ hint !== 'string' && hint !== 'number') {
+ throw new $TypeError('Assertion failed: `hint` must be "string" or "number"');
+ }
+
+ var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+
+ for (var i = 0; i < methodNames.length; i += 1) {
+ var name = methodNames[i];
+ var method = Get(O, name);
+ if (IsCallable(method)) {
+ var result = Call(method, O);
+ if (Type(result) !== 'Object') {
+ return result;
+ }
+ }
+ }
+
+ throw new $TypeError('No primitive value for ' + inspect(O));
+};
diff --git a/node_modules/es-abstract/2018/Set.js b/node_modules/es-abstract/2018/Set.js
index ea49e81..0971498 100644
--- a/node_modules/es-abstract/2018/Set.js
+++ b/node_modules/es-abstract/2018/Set.js
@@ -36,12 +36,12 @@
throw new $TypeError('Attempted to assign to readonly property.');
}
return true;
- } else {
- try {
- O[P] = V; // eslint-disable-line no-param-reassign
- return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
- } catch (e) {
- return false;
- }
}
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+ } catch (e) {
+ return false;
+ }
+
};
diff --git a/node_modules/es-abstract/2018/SetFunctionName.js b/node_modules/es-abstract/2018/SetFunctionName.js
index f59cb7b..03ec222 100644
--- a/node_modules/es-abstract/2018/SetFunctionName.js
+++ b/node_modules/es-abstract/2018/SetFunctionName.js
@@ -6,7 +6,7 @@
var $TypeError = GetIntrinsic('%TypeError%');
-var getSymbolDescription = require('../helpers/getSymbolDescription');
+var getSymbolDescription = require('get-symbol-description');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var IsExtensible = require('./IsExtensible');
diff --git a/node_modules/es-abstract/2018/ToNumber.js b/node_modules/es-abstract/2018/ToNumber.js
index e776bb2..197b5c5 100644
--- a/node_modules/es-abstract/2018/ToNumber.js
+++ b/node_modules/es-abstract/2018/ToNumber.js
@@ -48,12 +48,12 @@
return ToNumber($parseInteger($strSlice(value, 2), 8));
} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
return NaN;
- } else {
- var trimmed = $trim(value);
- if (trimmed !== value) {
- return ToNumber(trimmed);
- }
}
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+
}
return $Number(value);
};
diff --git a/node_modules/es-abstract/2019/AbstractRelationalComparison.js b/node_modules/es-abstract/2019/AbstractRelationalComparison.js
index 0dfed5f..7c6472f 100644
--- a/node_modules/es-abstract/2019/AbstractRelationalComparison.js
+++ b/node_modules/es-abstract/2019/AbstractRelationalComparison.js
@@ -7,15 +7,14 @@
var $isNaN = require('../helpers/isNaN');
var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
+var IsStringPrefix = require('./IsStringPrefix');
var ToNumber = require('./ToNumber');
var ToPrimitive = require('./ToPrimitive');
var Type = require('./Type');
-// https://262.ecma-international.org/5.1/#sec-11.8.5
+// https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison
-// eslint-disable-next-line max-statements
module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
if (Type(LeftFirst) !== 'Boolean') {
throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
@@ -29,35 +28,34 @@
py = ToPrimitive(y, $Number);
px = ToPrimitive(x, $Number);
}
- var bothStrings = Type(px) === 'String' && Type(py) === 'String';
- if (!bothStrings) {
- var nx = ToNumber(px);
- var ny = ToNumber(py);
- if ($isNaN(nx) || $isNaN(ny)) {
- return undefined;
- }
- if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ if (Type(px) === 'String' && Type(py) === 'String') {
+ if (IsStringPrefix(py, px)) {
return false;
}
- if (nx === Infinity) {
- return false;
- }
- if (ny === Infinity) {
+ if (IsStringPrefix(px, py)) {
return true;
}
- if (ny === -Infinity) {
- return false;
- }
- if (nx === -Infinity) {
- return true;
- }
- return nx < ny; // by now, these are both nonzero, finite, and not equal
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f
}
- if (isPrefixOf(py, px)) {
+ var nx = ToNumber(px);
+ var ny = ToNumber(py);
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return undefined;
+ }
+ if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
return false;
}
- if (isPrefixOf(px, py)) {
+ if (nx === Infinity) {
+ return false;
+ }
+ if (ny === Infinity) {
return true;
}
- return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+ if (ny === -Infinity) {
+ return false;
+ }
+ if (nx === -Infinity) {
+ return true;
+ }
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
};
diff --git a/node_modules/es-abstract/2019/CharacterRange.js b/node_modules/es-abstract/2019/CharacterRange.js
new file mode 100644
index 0000000..70e4b52
--- /dev/null
+++ b/node_modules/es-abstract/2019/CharacterRange.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $push = callBound('%Array.prototype.push%');
+
+module.exports = function CharacterRange(A, B) {
+ if (A.length !== 1 || B.length !== 1) {
+ throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+ }
+
+ var a = A[0];
+ var b = B[0];
+
+ var i = $charCodeAt(a, 0);
+ var j = $charCodeAt(b, 0);
+
+ if (!(i <= j)) {
+ throw new $TypeError('Assertion failed: i is not <= j');
+ }
+
+ var arr = [];
+ for (var k = i; k <= j; k += 1) {
+ $push(arr, $fromCharCode(k));
+ }
+ return arr;
+};
diff --git a/node_modules/es-abstract/2019/IsCompatiblePropertyDescriptor.js b/node_modules/es-abstract/2019/IsCompatiblePropertyDescriptor.js
new file mode 100644
index 0000000..8bdaf3e
--- /dev/null
+++ b/node_modules/es-abstract/2019/IsCompatiblePropertyDescriptor.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+ return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
+};
diff --git a/node_modules/es-abstract/2019/IsSharedArrayBuffer.js b/node_modules/es-abstract/2019/IsSharedArrayBuffer.js
new file mode 100644
index 0000000..8e96e33
--- /dev/null
+++ b/node_modules/es-abstract/2019/IsSharedArrayBuffer.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+// https://262.ecma-international.org/8.0/#sec-issharedarraybuffer
+
+module.exports = function IsSharedArrayBuffer(obj) {
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ return isSharedArrayBuffer(obj);
+};
diff --git a/node_modules/es-abstract/2019/OrdinaryToPrimitive.js b/node_modules/es-abstract/2019/OrdinaryToPrimitive.js
new file mode 100644
index 0000000..e1dbe14
--- /dev/null
+++ b/node_modules/es-abstract/2019/OrdinaryToPrimitive.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive
+
+module.exports = function OrdinaryToPrimitive(O, hint) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (/* Type(hint) !== 'String' || */ hint !== 'string' && hint !== 'number') {
+ throw new $TypeError('Assertion failed: `hint` must be "string" or "number"');
+ }
+
+ var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+
+ for (var i = 0; i < methodNames.length; i += 1) {
+ var name = methodNames[i];
+ var method = Get(O, name);
+ if (IsCallable(method)) {
+ var result = Call(method, O);
+ if (Type(result) !== 'Object') {
+ return result;
+ }
+ }
+ }
+
+ throw new $TypeError('No primitive value for ' + inspect(O));
+};
diff --git a/node_modules/es-abstract/2019/Set.js b/node_modules/es-abstract/2019/Set.js
index ea49e81..0971498 100644
--- a/node_modules/es-abstract/2019/Set.js
+++ b/node_modules/es-abstract/2019/Set.js
@@ -36,12 +36,12 @@
throw new $TypeError('Attempted to assign to readonly property.');
}
return true;
- } else {
- try {
- O[P] = V; // eslint-disable-line no-param-reassign
- return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
- } catch (e) {
- return false;
- }
}
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+ } catch (e) {
+ return false;
+ }
+
};
diff --git a/node_modules/es-abstract/2019/SetFunctionName.js b/node_modules/es-abstract/2019/SetFunctionName.js
index f59cb7b..03ec222 100644
--- a/node_modules/es-abstract/2019/SetFunctionName.js
+++ b/node_modules/es-abstract/2019/SetFunctionName.js
@@ -6,7 +6,7 @@
var $TypeError = GetIntrinsic('%TypeError%');
-var getSymbolDescription = require('../helpers/getSymbolDescription');
+var getSymbolDescription = require('get-symbol-description');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var IsExtensible = require('./IsExtensible');
diff --git a/node_modules/es-abstract/2019/ToNumber.js b/node_modules/es-abstract/2019/ToNumber.js
index e776bb2..197b5c5 100644
--- a/node_modules/es-abstract/2019/ToNumber.js
+++ b/node_modules/es-abstract/2019/ToNumber.js
@@ -48,12 +48,12 @@
return ToNumber($parseInteger($strSlice(value, 2), 8));
} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
return NaN;
- } else {
- var trimmed = $trim(value);
- if (trimmed !== value) {
- return ToNumber(trimmed);
- }
}
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+
}
return $Number(value);
};
diff --git a/node_modules/es-abstract/2020/AbstractEqualityComparison.js b/node_modules/es-abstract/2020/AbstractEqualityComparison.js
index c776194..83b2949 100644
--- a/node_modules/es-abstract/2020/AbstractEqualityComparison.js
+++ b/node_modules/es-abstract/2020/AbstractEqualityComparison.js
@@ -1,16 +1,20 @@
'use strict';
+var StrictEqualityComparison = require('./StrictEqualityComparison');
+var StringToBigInt = require('./StringToBigInt');
var ToNumber = require('./ToNumber');
var ToPrimitive = require('./ToPrimitive');
var Type = require('./Type');
-// https://ecma-international.org/ecma-262/6.0/#sec-abstract-equality-comparison
+var isNaN = require('../helpers/isNaN');
+
+// https://ecma-international.org/ecma-262/11.0/#sec-abstract-equality-comparison
module.exports = function AbstractEqualityComparison(x, y) {
var xType = Type(x);
var yType = Type(y);
if (xType === yType) {
- return x === y; // ES6+ specified this shortcut anyways.
+ return StrictEqualityComparison(x, y);
}
if (x == null && y == null) {
return true;
@@ -21,17 +25,33 @@
if (xType === 'String' && yType === 'Number') {
return AbstractEqualityComparison(ToNumber(x), y);
}
+ if (xType === 'BigInt' && yType === 'String') {
+ var n = StringToBigInt(y);
+ if (isNaN(n)) {
+ return false;
+ }
+ return AbstractEqualityComparison(x, n);
+ }
+ if (xType === 'String' && yType === 'BigInt') {
+ return AbstractEqualityComparison(y, x);
+ }
if (xType === 'Boolean') {
return AbstractEqualityComparison(ToNumber(x), y);
}
if (yType === 'Boolean') {
return AbstractEqualityComparison(x, ToNumber(y));
}
- if ((xType === 'String' || xType === 'Number' || xType === 'Symbol') && yType === 'Object') {
+ if ((xType === 'String' || xType === 'Number' || xType === 'BigInt' || xType === 'Symbol') && yType === 'Object') {
return AbstractEqualityComparison(x, ToPrimitive(y));
}
- if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'Symbol')) {
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'BigInt' || yType === 'Symbol')) {
return AbstractEqualityComparison(ToPrimitive(x), y);
}
+ if ((xType === 'BigInt' && yType === 'Number') || (xType === 'Number' && yType === 'BigInt')) {
+ if (isNaN(x) || isNaN(y) || x === Infinity || y === Infinity || x === -Infinity || y === -Infinity) {
+ return false;
+ }
+ return x == y; // eslint-disable-line eqeqeq
+ }
return false;
};
diff --git a/node_modules/es-abstract/2020/AbstractRelationalComparison.js b/node_modules/es-abstract/2020/AbstractRelationalComparison.js
index 0dfed5f..5348294 100644
--- a/node_modules/es-abstract/2020/AbstractRelationalComparison.js
+++ b/node_modules/es-abstract/2020/AbstractRelationalComparison.js
@@ -6,16 +6,19 @@
var $TypeError = GetIntrinsic('%TypeError%');
var $isNaN = require('../helpers/isNaN');
-var $isFinite = require('../helpers/isFinite');
-var isPrefixOf = require('../helpers/isPrefixOf');
-var ToNumber = require('./ToNumber');
+var IsStringPrefix = require('./IsStringPrefix');
+var StringToBigInt = require('./StringToBigInt');
+var ToNumeric = require('./ToNumeric');
var ToPrimitive = require('./ToPrimitive');
var Type = require('./Type');
-// https://262.ecma-international.org/5.1/#sec-11.8.5
+var BigIntLessThan = require('./BigInt/lessThan');
+var NumberLessThan = require('./Number/lessThan');
-// eslint-disable-next-line max-statements
+// https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison
+
+// eslint-disable-next-line max-statements, max-lines-per-function
module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
if (Type(LeftFirst) !== 'Boolean') {
throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
@@ -29,35 +32,51 @@
py = ToPrimitive(y, $Number);
px = ToPrimitive(x, $Number);
}
- var bothStrings = Type(px) === 'String' && Type(py) === 'String';
- if (!bothStrings) {
- var nx = ToNumber(px);
- var ny = ToNumber(py);
- if ($isNaN(nx) || $isNaN(ny)) {
- return undefined;
- }
- if ($isFinite(nx) && $isFinite(ny) && nx === ny) {
+ if (Type(px) === 'String' && Type(py) === 'String') {
+ if (IsStringPrefix(py, px)) {
return false;
}
- if (nx === Infinity) {
- return false;
- }
- if (ny === Infinity) {
+ if (IsStringPrefix(px, py)) {
return true;
}
- if (ny === -Infinity) {
- return false;
- }
- if (nx === -Infinity) {
- return true;
- }
- return nx < ny; // by now, these are both nonzero, finite, and not equal
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f
}
- if (isPrefixOf(py, px)) {
- return false;
+
+ var pxType = Type(px);
+ var pyType = Type(py);
+ var nx;
+ var ny;
+ if (pxType === 'BigInt' && pyType === 'String') {
+ ny = StringToBigInt(py);
+ if ($isNaN(ny)) {
+ return void undefined;
+ }
+ return BigIntLessThan(px, ny);
}
- if (isPrefixOf(px, py)) {
+ if (pxType === 'String' && pyType === 'BigInt') {
+ nx = StringToBigInt(px);
+ if ($isNaN(nx)) {
+ return void undefined;
+ }
+ return BigIntLessThan(px, ny);
+ }
+
+ nx = ToNumeric(px);
+ ny = ToNumeric(py);
+ var nxType = Type(nx);
+ if (nxType === Type(ny)) {
+ return nxType === 'Number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny);
+ }
+
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return void undefined;
+ }
+ if (nx === -Infinity || ny === Infinity) {
return true;
}
- return px < py; // both strings, neither a prefix of the other. shortcut for steps c-f
+ if (nx === Infinity || ny === -Infinity) {
+ return false;
+ }
+
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
};
diff --git a/node_modules/es-abstract/2020/CharacterRange.js b/node_modules/es-abstract/2020/CharacterRange.js
new file mode 100644
index 0000000..70e4b52
--- /dev/null
+++ b/node_modules/es-abstract/2020/CharacterRange.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $push = callBound('%Array.prototype.push%');
+
+module.exports = function CharacterRange(A, B) {
+ if (A.length !== 1 || B.length !== 1) {
+ throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+ }
+
+ var a = A[0];
+ var b = B[0];
+
+ var i = $charCodeAt(a, 0);
+ var j = $charCodeAt(b, 0);
+
+ if (!(i <= j)) {
+ throw new $TypeError('Assertion failed: i is not <= j');
+ }
+
+ var arr = [];
+ for (var k = i; k <= j; k += 1) {
+ $push(arr, $fromCharCode(k));
+ }
+ return arr;
+};
diff --git a/node_modules/es-abstract/2020/CreateRegExpStringIterator.js b/node_modules/es-abstract/2020/CreateRegExpStringIterator.js
new file mode 100644
index 0000000..dd493e4
--- /dev/null
+++ b/node_modules/es-abstract/2020/CreateRegExpStringIterator.js
@@ -0,0 +1,111 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);
+var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var CreateIterResultObject = require('./CreateIterResultObject');
+var CreateMethodProperty = require('./CreateMethodProperty');
+var Get = require('./Get');
+var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');
+var RegExpExec = require('./RegExpExec');
+var Set = require('./Set');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var SLOT = require('internal-slot');
+
+var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('`S` must be a string');
+ }
+ if (Type(global) !== 'Boolean') {
+ throw new $TypeError('`global` must be a boolean');
+ }
+ if (Type(fullUnicode) !== 'Boolean') {
+ throw new $TypeError('`fullUnicode` must be a boolean');
+ }
+ SLOT.set(this, '[[IteratingRegExp]]', R);
+ SLOT.set(this, '[[IteratedString]]', S);
+ SLOT.set(this, '[[Global]]', global);
+ SLOT.set(this, '[[Unicode]]', fullUnicode);
+ SLOT.set(this, '[[Done]]', false);
+};
+
+if (IteratorPrototype) {
+ RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);
+}
+
+var RegExpStringIteratorNext = function next() {
+ var O = this; // eslint-disable-line no-invalid-this
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('receiver must be an object');
+ }
+ if (
+ !(O instanceof RegExpStringIterator)
+ || !SLOT.has(O, '[[IteratingRegExp]]')
+ || !SLOT.has(O, '[[IteratedString]]')
+ || !SLOT.has(O, '[[Global]]')
+ || !SLOT.has(O, '[[Unicode]]')
+ || !SLOT.has(O, '[[Done]]')
+ ) {
+ throw new $TypeError('"this" value must be a RegExpStringIterator instance');
+ }
+ if (SLOT.get(O, '[[Done]]')) {
+ return CreateIterResultObject(undefined, true);
+ }
+ var R = SLOT.get(O, '[[IteratingRegExp]]');
+ var S = SLOT.get(O, '[[IteratedString]]');
+ var global = SLOT.get(O, '[[Global]]');
+ var fullUnicode = SLOT.get(O, '[[Unicode]]');
+ var match = RegExpExec(R, S);
+ if (match === null) {
+ SLOT.set(O, '[[Done]]', true);
+ return CreateIterResultObject(undefined, true);
+ }
+ if (global) {
+ var matchStr = ToString(Get(match, '0'));
+ if (matchStr === '') {
+ var thisIndex = ToLength(Get(R, 'lastIndex'));
+ var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);
+ Set(R, 'lastIndex', nextIndex, true);
+ }
+ return CreateIterResultObject(match, false);
+ }
+ SLOT.set(O, '[[Done]]', true);
+ return CreateIterResultObject(match, false);
+};
+CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);
+
+if (hasSymbols) {
+ if (Symbol.toStringTag) {
+ if ($defineProperty) {
+ $defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {
+ configurable: true,
+ enumerable: false,
+ value: 'RegExp String Iterator',
+ writable: false
+ });
+ } else {
+ RegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';
+ }
+ }
+
+ if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {
+ var iteratorFn = function SymbolIterator() {
+ return this;
+ };
+ CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);
+ }
+}
+
+// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator
+module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {
+ // assert R.global === global && R.unicode === fullUnicode?
+ return new RegExpStringIterator(R, S, global, fullUnicode);
+};
diff --git a/node_modules/es-abstract/2020/IsCompatiblePropertyDescriptor.js b/node_modules/es-abstract/2020/IsCompatiblePropertyDescriptor.js
new file mode 100644
index 0000000..8bdaf3e
--- /dev/null
+++ b/node_modules/es-abstract/2020/IsCompatiblePropertyDescriptor.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+ return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
+};
diff --git a/node_modules/es-abstract/2020/IsSharedArrayBuffer.js b/node_modules/es-abstract/2020/IsSharedArrayBuffer.js
new file mode 100644
index 0000000..8e96e33
--- /dev/null
+++ b/node_modules/es-abstract/2020/IsSharedArrayBuffer.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+// https://262.ecma-international.org/8.0/#sec-issharedarraybuffer
+
+module.exports = function IsSharedArrayBuffer(obj) {
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ return isSharedArrayBuffer(obj);
+};
diff --git a/node_modules/es-abstract/2020/NumberToBigInt.js b/node_modules/es-abstract/2020/NumberToBigInt.js
index a186988..8464984 100644
--- a/node_modules/es-abstract/2020/NumberToBigInt.js
+++ b/node_modules/es-abstract/2020/NumberToBigInt.js
@@ -4,6 +4,7 @@
var $BigInt = GetIntrinsic('%BigInt%', true);
var $RangeError = GetIntrinsic('%RangeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
var $TypeError = GetIntrinsic('%TypeError%');
var IsInteger = require('./IsInteger');
@@ -18,5 +19,8 @@
if (!IsInteger(number)) {
throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer');
}
+ if (!$BigInt) {
+ throw new $SyntaxError('BigInts are not supported in this environment');
+ }
return $BigInt(number);
};
diff --git a/node_modules/es-abstract/2020/OrdinaryToPrimitive.js b/node_modules/es-abstract/2020/OrdinaryToPrimitive.js
new file mode 100644
index 0000000..e1dbe14
--- /dev/null
+++ b/node_modules/es-abstract/2020/OrdinaryToPrimitive.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive
+
+module.exports = function OrdinaryToPrimitive(O, hint) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (/* Type(hint) !== 'String' || */ hint !== 'string' && hint !== 'number') {
+ throw new $TypeError('Assertion failed: `hint` must be "string" or "number"');
+ }
+
+ var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+
+ for (var i = 0; i < methodNames.length; i += 1) {
+ var name = methodNames[i];
+ var method = Get(O, name);
+ if (IsCallable(method)) {
+ var result = Call(method, O);
+ if (Type(result) !== 'Object') {
+ return result;
+ }
+ }
+ }
+
+ throw new $TypeError('No primitive value for ' + inspect(O));
+};
diff --git a/node_modules/es-abstract/2020/Set.js b/node_modules/es-abstract/2020/Set.js
index ea49e81..0971498 100644
--- a/node_modules/es-abstract/2020/Set.js
+++ b/node_modules/es-abstract/2020/Set.js
@@ -36,12 +36,12 @@
throw new $TypeError('Attempted to assign to readonly property.');
}
return true;
- } else {
- try {
- O[P] = V; // eslint-disable-line no-param-reassign
- return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
- } catch (e) {
- return false;
- }
}
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+ } catch (e) {
+ return false;
+ }
+
};
diff --git a/node_modules/es-abstract/2020/SetFunctionName.js b/node_modules/es-abstract/2020/SetFunctionName.js
index f59cb7b..03ec222 100644
--- a/node_modules/es-abstract/2020/SetFunctionName.js
+++ b/node_modules/es-abstract/2020/SetFunctionName.js
@@ -6,7 +6,7 @@
var $TypeError = GetIntrinsic('%TypeError%');
-var getSymbolDescription = require('../helpers/getSymbolDescription');
+var getSymbolDescription = require('get-symbol-description');
var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
var IsExtensible = require('./IsExtensible');
diff --git a/node_modules/es-abstract/2020/StringToBigInt.js b/node_modules/es-abstract/2020/StringToBigInt.js
new file mode 100644
index 0000000..0bc3cec
--- /dev/null
+++ b/node_modules/es-abstract/2020/StringToBigInt.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+// https://262.ecma-international.org/11.0/#sec-stringtobigint
+
+module.exports = function StringToBigInt(argument) {
+ if (typeof argument !== 'string') {
+ throw new $TypeError('`argument` must be a string');
+ }
+ if (!$BigInt) {
+ throw new $SyntaxError('BigInts are not supported in this environment');
+ }
+ try {
+ return $BigInt(argument);
+ } catch (e) {
+ return NaN;
+ }
+};
diff --git a/node_modules/es-abstract/2020/ToBigInt.js b/node_modules/es-abstract/2020/ToBigInt.js
new file mode 100644
index 0000000..aa24d7b
--- /dev/null
+++ b/node_modules/es-abstract/2020/ToBigInt.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $asIntN = GetIntrinsic('%BigInt.asIntN%', true);
+var $Number = GetIntrinsic('%Number%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://262.ecma-international.org/11.0/#sec-tobigint
+
+module.exports = function ToBigInt(argument) {
+ if (!$BigInt) {
+ throw new $SyntaxError('BigInts are not supported in this environment');
+ }
+
+ var prim = ToPrimitive(argument, $Number);
+
+ if (typeof prim === 'number') {
+ return $asIntN(0, prim);
+ }
+ return $BigInt(prim);
+};
diff --git a/node_modules/es-abstract/2020/ToBigInt64.js b/node_modules/es-abstract/2020/ToBigInt64.js
new file mode 100644
index 0000000..65c1c55
--- /dev/null
+++ b/node_modules/es-abstract/2020/ToBigInt64.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $pow = GetIntrinsic('%Math.pow%');
+
+var ToBigInt = require('./ToBigInt');
+var BigIntRemainder = require('./BigInt/remainder');
+
+var modBigInt = require('../helpers/modBigInt');
+
+// BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31)));
+
+// BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32)));
+
+// https://262.ecma-international.org/11.0/#sec-tobigint64
+
+module.exports = function ToBigInt64(argument) {
+ var n = ToBigInt(argument);
+ var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour);
+ return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit;
+};
diff --git a/node_modules/es-abstract/2020/ToBigUint64.js b/node_modules/es-abstract/2020/ToBigUint64.js
new file mode 100644
index 0000000..ff68236
--- /dev/null
+++ b/node_modules/es-abstract/2020/ToBigUint64.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $pow = GetIntrinsic('%Math.pow%');
+
+var ToBigInt = require('./ToBigInt');
+var BigIntRemainder = require('./BigInt/remainder');
+
+var modBigInt = require('../helpers/modBigInt');
+
+// BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32)));
+
+// https://262.ecma-international.org/11.0/#sec-tobiguint64
+
+module.exports = function ToBigUint64(argument) {
+ var n = ToBigInt(argument);
+ var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour);
+ return int64bit;
+};
diff --git a/node_modules/es-abstract/2020/ToNumber.js b/node_modules/es-abstract/2020/ToNumber.js
index fcddeb6..3b00377 100644
--- a/node_modules/es-abstract/2020/ToNumber.js
+++ b/node_modules/es-abstract/2020/ToNumber.js
@@ -51,12 +51,12 @@
return ToNumber($parseInteger($strSlice(value, 2), 8));
} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
return NaN;
- } else {
- var trimmed = $trim(value);
- if (trimmed !== value) {
- return ToNumber(trimmed);
- }
}
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+
}
return $Number(value);
};
diff --git a/node_modules/es-abstract/2021/AbstractEqualityComparison.js b/node_modules/es-abstract/2021/AbstractEqualityComparison.js
new file mode 100644
index 0000000..83b2949
--- /dev/null
+++ b/node_modules/es-abstract/2021/AbstractEqualityComparison.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var StrictEqualityComparison = require('./StrictEqualityComparison');
+var StringToBigInt = require('./StringToBigInt');
+var ToNumber = require('./ToNumber');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+var isNaN = require('../helpers/isNaN');
+
+// https://ecma-international.org/ecma-262/11.0/#sec-abstract-equality-comparison
+
+module.exports = function AbstractEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType === yType) {
+ return StrictEqualityComparison(x, y);
+ }
+ if (x == null && y == null) {
+ return true;
+ }
+ if (xType === 'Number' && yType === 'String') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if (xType === 'String' && yType === 'Number') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (xType === 'BigInt' && yType === 'String') {
+ var n = StringToBigInt(y);
+ if (isNaN(n)) {
+ return false;
+ }
+ return AbstractEqualityComparison(x, n);
+ }
+ if (xType === 'String' && yType === 'BigInt') {
+ return AbstractEqualityComparison(y, x);
+ }
+ if (xType === 'Boolean') {
+ return AbstractEqualityComparison(ToNumber(x), y);
+ }
+ if (yType === 'Boolean') {
+ return AbstractEqualityComparison(x, ToNumber(y));
+ }
+ if ((xType === 'String' || xType === 'Number' || xType === 'BigInt' || xType === 'Symbol') && yType === 'Object') {
+ return AbstractEqualityComparison(x, ToPrimitive(y));
+ }
+ if (xType === 'Object' && (yType === 'String' || yType === 'Number' || yType === 'BigInt' || yType === 'Symbol')) {
+ return AbstractEqualityComparison(ToPrimitive(x), y);
+ }
+ if ((xType === 'BigInt' && yType === 'Number') || (xType === 'Number' && yType === 'BigInt')) {
+ if (isNaN(x) || isNaN(y) || x === Infinity || y === Infinity || x === -Infinity || y === -Infinity) {
+ return false;
+ }
+ return x == y; // eslint-disable-line eqeqeq
+ }
+ return false;
+};
diff --git a/node_modules/es-abstract/2021/AbstractRelationalComparison.js b/node_modules/es-abstract/2021/AbstractRelationalComparison.js
new file mode 100644
index 0000000..5348294
--- /dev/null
+++ b/node_modules/es-abstract/2021/AbstractRelationalComparison.js
@@ -0,0 +1,82 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+
+var IsStringPrefix = require('./IsStringPrefix');
+var StringToBigInt = require('./StringToBigInt');
+var ToNumeric = require('./ToNumeric');
+var ToPrimitive = require('./ToPrimitive');
+var Type = require('./Type');
+
+var BigIntLessThan = require('./BigInt/lessThan');
+var NumberLessThan = require('./Number/lessThan');
+
+// https://262.ecma-international.org/9.0/#sec-abstract-relational-comparison
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function AbstractRelationalComparison(x, y, LeftFirst) {
+ if (Type(LeftFirst) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: LeftFirst argument must be a Boolean');
+ }
+ var px;
+ var py;
+ if (LeftFirst) {
+ px = ToPrimitive(x, $Number);
+ py = ToPrimitive(y, $Number);
+ } else {
+ py = ToPrimitive(y, $Number);
+ px = ToPrimitive(x, $Number);
+ }
+ if (Type(px) === 'String' && Type(py) === 'String') {
+ if (IsStringPrefix(py, px)) {
+ return false;
+ }
+ if (IsStringPrefix(px, py)) {
+ return true;
+ }
+ return px < py; // both strings, neither a prefix of the other. shortcut for steps 3 c-f
+ }
+
+ var pxType = Type(px);
+ var pyType = Type(py);
+ var nx;
+ var ny;
+ if (pxType === 'BigInt' && pyType === 'String') {
+ ny = StringToBigInt(py);
+ if ($isNaN(ny)) {
+ return void undefined;
+ }
+ return BigIntLessThan(px, ny);
+ }
+ if (pxType === 'String' && pyType === 'BigInt') {
+ nx = StringToBigInt(px);
+ if ($isNaN(nx)) {
+ return void undefined;
+ }
+ return BigIntLessThan(px, ny);
+ }
+
+ nx = ToNumeric(px);
+ ny = ToNumeric(py);
+ var nxType = Type(nx);
+ if (nxType === Type(ny)) {
+ return nxType === 'Number' ? NumberLessThan(nx, ny) : BigIntLessThan(nx, ny);
+ }
+
+ if ($isNaN(nx) || $isNaN(ny)) {
+ return void undefined;
+ }
+ if (nx === -Infinity || ny === Infinity) {
+ return true;
+ }
+ if (nx === Infinity || ny === -Infinity) {
+ return false;
+ }
+
+ return nx < ny; // by now, these are both nonzero, finite, and not equal
+};
diff --git a/node_modules/es-abstract/2021/AddEntriesFromIterable.js b/node_modules/es-abstract/2021/AddEntriesFromIterable.js
new file mode 100644
index 0000000..a0a5e71
--- /dev/null
+++ b/node_modules/es-abstract/2021/AddEntriesFromIterable.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var inspect = require('object-inspect');
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var GetIterator = require('./GetIterator');
+var IsCallable = require('./IsCallable');
+var IteratorClose = require('./IteratorClose');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/10.0//#sec-add-entries-from-iterable
+
+module.exports = function AddEntriesFromIterable(target, iterable, adder) {
+ if (!IsCallable(adder)) {
+ throw new $TypeError('Assertion failed: `adder` is not callable');
+ }
+ if (iterable == null) {
+ throw new $TypeError('Assertion failed: `iterable` is present, and not nullish');
+ }
+ var iteratorRecord = GetIterator(iterable);
+ while (true) { // eslint-disable-line no-constant-condition
+ var next = IteratorStep(iteratorRecord);
+ if (!next) {
+ return target;
+ }
+ var nextItem = IteratorValue(next);
+ if (Type(nextItem) !== 'Object') {
+ var error = new $TypeError('iterator next must return an Object, got ' + inspect(nextItem));
+ return IteratorClose(
+ iteratorRecord,
+ function () { throw error; } // eslint-disable-line no-loop-func
+ );
+ }
+ try {
+ var k = Get(nextItem, '0');
+ var v = Get(nextItem, '1');
+ Call(adder, target, [k, v]);
+ } catch (e) {
+ return IteratorClose(
+ iteratorRecord,
+ function () { throw e; }
+ );
+ }
+ }
+};
diff --git a/node_modules/es-abstract/2021/AddToKeptObjects.js b/node_modules/es-abstract/2021/AddToKeptObjects.js
new file mode 100644
index 0000000..c3088d9
--- /dev/null
+++ b/node_modules/es-abstract/2021/AddToKeptObjects.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+var SLOT = require('internal-slot');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var ClearKeptObjects = require('./ClearKeptObjects');
+var Type = require('./Type');
+
+var $push = callBound('Array.prototype.push');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-addtokeptobjects
+
+module.exports = function AddToKeptObjects(object) {
+ if (Type(object) !== 'Object') {
+ throw new $TypeError('Assertion failed: `object` must be an Object');
+ }
+ $push(SLOT.get(ClearKeptObjects, '[[es-abstract internal: KeptAlive]]'), object);
+};
diff --git a/node_modules/es-abstract/2021/AdvanceStringIndex.js b/node_modules/es-abstract/2021/AdvanceStringIndex.js
new file mode 100644
index 0000000..eeae531
--- /dev/null
+++ b/node_modules/es-abstract/2021/AdvanceStringIndex.js
@@ -0,0 +1,34 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var CodePointAt = require('./CodePointAt');
+var IsIntegralNumber = require('./IsIntegralNumber');
+var Type = require('./Type');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-advancestringindex
+
+module.exports = function AdvanceStringIndex(S, index, unicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ if (!IsIntegralNumber(index) || index < 0 || index > MAX_SAFE_INTEGER) {
+ throw new $TypeError('Assertion failed: `length` must be an integer >= 0 and <= 2**53');
+ }
+ if (Type(unicode) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `unicode` must be a Boolean');
+ }
+ if (!unicode) {
+ return index + 1;
+ }
+ var length = S.length;
+ if ((index + 1) >= length) {
+ return index + 1;
+ }
+ var cp = CodePointAt(S, index);
+ return index + cp['[[CodeUnitCount]]'];
+};
diff --git a/node_modules/es-abstract/2021/ApplyStringOrNumericBinaryOperator.js b/node_modules/es-abstract/2021/ApplyStringOrNumericBinaryOperator.js
new file mode 100644
index 0000000..824a105
--- /dev/null
+++ b/node_modules/es-abstract/2021/ApplyStringOrNumericBinaryOperator.js
@@ -0,0 +1,80 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var HasOwnProperty = require('./HasOwnProperty');
+var ToNumeric = require('./ToNumeric');
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var NumberAdd = require('./Number/add');
+var NumberBitwiseAND = require('./Number/bitwiseAND');
+var NumberBitwiseOR = require('./Number/bitwiseOR');
+var NumberBitwiseXOR = require('./Number/bitwiseXOR');
+var NumberDivide = require('./Number/divide');
+var NumberExponentiate = require('./Number/exponentiate');
+var NumberLeftShift = require('./Number/leftShift');
+var NumberMultiply = require('./Number/multiply');
+var NumberRemainder = require('./Number/remainder');
+var NumberSignedRightShift = require('./Number/signedRightShift');
+var NumberSubtract = require('./Number/subtract');
+var NumberUnsignedRightShift = require('./Number/unsignedRightShift');
+var BigIntAdd = require('./BigInt/add');
+var BigIntBitwiseAND = require('./BigInt/bitwiseAND');
+var BigIntBitwiseOR = require('./BigInt/bitwiseOR');
+var BigIntBitwiseXOR = require('./BigInt/bitwiseXOR');
+var BigIntDivide = require('./BigInt/divide');
+var BigIntExponentiate = require('./BigInt/exponentiate');
+var BigIntLeftShift = require('./BigInt/leftShift');
+var BigIntMultiply = require('./BigInt/multiply');
+var BigIntRemainder = require('./BigInt/remainder');
+var BigIntSignedRightShift = require('./BigInt/signedRightShift');
+var BigIntSubtract = require('./BigInt/subtract');
+var BigIntUnsignedRightShift = require('./BigInt/unsignedRightShift');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-applystringornumericbinaryoperator
+
+// https://ecma-international.org/ecma-262/12.0/#step-applystringornumericbinaryoperator-operations-table
+var table = {
+ '**': [NumberExponentiate, BigIntExponentiate],
+ '*': [NumberMultiply, BigIntMultiply],
+ '/': [NumberDivide, BigIntDivide],
+ '%': [NumberRemainder, BigIntRemainder],
+ '+': [NumberAdd, BigIntAdd],
+ '-': [NumberSubtract, BigIntSubtract],
+ '<<': [NumberLeftShift, BigIntLeftShift],
+ '>>': [NumberSignedRightShift, BigIntSignedRightShift],
+ '>>>': [NumberUnsignedRightShift, BigIntUnsignedRightShift],
+ '&': [NumberBitwiseAND, BigIntBitwiseAND],
+ '^': [NumberBitwiseXOR, BigIntBitwiseXOR],
+ '|': [NumberBitwiseOR, BigIntBitwiseOR]
+};
+
+module.exports = function ApplyStringOrNumericBinaryOperator(lval, opText, rval) {
+ if (Type(opText) !== 'String' || !HasOwnProperty(table, opText)) {
+ throw new $TypeError('Assertion failed: `opText` must be a valid operation string');
+ }
+ if (opText === '+') {
+ var lprim = ToPrimitive(lval);
+ var rprim = ToPrimitive(rval);
+ if (Type(lprim) === 'String' || Type(rprim) === 'String') {
+ var lstr = ToString(lprim);
+ var rstr = ToString(rprim);
+ return lstr + rstr;
+ }
+ /* eslint no-param-reassign: 1 */
+ lval = lprim;
+ rval = rprim;
+ }
+ var lnum = ToNumeric(lval);
+ var rnum = ToNumeric(rval);
+ var T = Type(lnum);
+ if (T !== Type(rnum)) {
+ throw new $TypeError('types of ' + lnum + ' and ' + rnum + ' differ');
+ }
+ var Operation = table[opText][T === 'BigInt' ? 1 : 0];
+ return Operation(lnum, rnum);
+};
diff --git a/node_modules/es-abstract/2021/ArrayCreate.js b/node_modules/es-abstract/2021/ArrayCreate.js
new file mode 100644
index 0000000..5f3e154
--- /dev/null
+++ b/node_modules/es-abstract/2021/ArrayCreate.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $ArrayPrototype = GetIntrinsic('%Array.prototype%');
+var $RangeError = GetIntrinsic('%RangeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsIntegralNumber = require('./IsIntegralNumber');
+
+var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1;
+
+var $setProto = GetIntrinsic('%Object.setPrototypeOf%', true) || (
+ // eslint-disable-next-line no-proto, no-negated-condition
+ [].__proto__ !== $ArrayPrototype
+ ? null
+ : function (O, proto) {
+ O.__proto__ = proto; // eslint-disable-line no-proto, no-param-reassign
+ return O;
+ }
+);
+
+// https://www.ecma-international.org/ecma-262/12.0/#sec-arraycreate
+
+module.exports = function ArrayCreate(length) {
+ if (!IsIntegralNumber(length) || length < 0) {
+ throw new $TypeError('Assertion failed: `length` must be an integer Number >= 0');
+ }
+ if (length > MAX_ARRAY_LENGTH) {
+ throw new $RangeError('length is greater than (2**32 - 1)');
+ }
+ var proto = arguments.length > 1 ? arguments[1] : $ArrayPrototype;
+ var A = []; // steps 3, 5
+ if (proto !== $ArrayPrototype) { // step 4
+ if (!$setProto) {
+ throw new $SyntaxError('ArrayCreate: a `proto` argument that is not `Array.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+ }
+ $setProto(A, proto);
+ }
+ if (length !== 0) { // bypasses the need for step 6
+ A.length = length;
+ }
+ /* step 6, the above as a shortcut for the below
+ OrdinaryDefineOwnProperty(A, 'length', {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': true
+ });
+ */
+ return A;
+};
diff --git a/node_modules/es-abstract/2021/ArraySetLength.js b/node_modules/es-abstract/2021/ArraySetLength.js
new file mode 100644
index 0000000..08db9c2
--- /dev/null
+++ b/node_modules/es-abstract/2021/ArraySetLength.js
@@ -0,0 +1,85 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var assign = require('object.assign');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsArray = require('./IsArray');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var OrdinaryDefineOwnProperty = require('./OrdinaryDefineOwnProperty');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var ToUint32 = require('./ToUint32');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-arraysetlength
+
+// eslint-disable-next-line max-statements, max-lines-per-function
+module.exports = function ArraySetLength(A, Desc) {
+ if (!IsArray(A)) {
+ throw new $TypeError('Assertion failed: A must be an Array');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!('[[Value]]' in Desc)) {
+ return OrdinaryDefineOwnProperty(A, 'length', Desc);
+ }
+ var newLenDesc = assign({}, Desc);
+ var newLen = ToUint32(Desc['[[Value]]']);
+ var numberLen = ToNumber(Desc['[[Value]]']);
+ if (newLen !== numberLen) {
+ throw new $RangeError('Invalid array length');
+ }
+ newLenDesc['[[Value]]'] = newLen;
+ var oldLenDesc = OrdinaryGetOwnProperty(A, 'length');
+ if (!IsDataDescriptor(oldLenDesc)) {
+ throw new $TypeError('Assertion failed: an array had a non-data descriptor on `length`');
+ }
+ var oldLen = oldLenDesc['[[Value]]'];
+ if (newLen >= oldLen) {
+ return OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ }
+ if (!oldLenDesc['[[Writable]]']) {
+ return false;
+ }
+ var newWritable;
+ if (!('[[Writable]]' in newLenDesc) || newLenDesc['[[Writable]]']) {
+ newWritable = true;
+ } else {
+ newWritable = false;
+ newLenDesc['[[Writable]]'] = true;
+ }
+ var succeeded = OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ if (!succeeded) {
+ return false;
+ }
+ while (newLen < oldLen) {
+ oldLen -= 1;
+ // eslint-disable-next-line no-param-reassign
+ var deleteSucceeded = delete A[ToString(oldLen)];
+ if (!deleteSucceeded) {
+ newLenDesc['[[Value]]'] = oldLen + 1;
+ if (!newWritable) {
+ newLenDesc['[[Writable]]'] = false;
+ OrdinaryDefineOwnProperty(A, 'length', newLenDesc);
+ return false;
+ }
+ }
+ }
+ if (!newWritable) {
+ return OrdinaryDefineOwnProperty(A, 'length', { '[[Writable]]': false });
+ }
+ return true;
+};
diff --git a/node_modules/es-abstract/2021/ArraySpeciesCreate.js b/node_modules/es-abstract/2021/ArraySpeciesCreate.js
new file mode 100644
index 0000000..d908fa3
--- /dev/null
+++ b/node_modules/es-abstract/2021/ArraySpeciesCreate.js
@@ -0,0 +1,48 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var ArrayCreate = require('./ArrayCreate');
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsConstructor = require('./IsConstructor');
+var IsIntegralNumber = require('./IsIntegralNumber');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-arrayspeciescreate
+
+module.exports = function ArraySpeciesCreate(originalArray, length) {
+ if (!IsIntegralNumber(length) || length < 0) {
+ throw new $TypeError('Assertion failed: length must be an integer >= 0');
+ }
+
+ var isArray = IsArray(originalArray);
+ if (!isArray) {
+ return ArrayCreate(length);
+ }
+
+ var C = Get(originalArray, 'constructor');
+ // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
+ // if (IsConstructor(C)) {
+ // if C is another realm's Array, C = undefined
+ // Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
+ // }
+ if ($species && Type(C) === 'Object') {
+ C = Get(C, $species);
+ if (C === null) {
+ C = void 0;
+ }
+ }
+
+ if (typeof C === 'undefined') {
+ return ArrayCreate(length);
+ }
+ if (!IsConstructor(C)) {
+ throw new $TypeError('C must be a constructor');
+ }
+ return new C(length); // Construct(C, length);
+};
+
diff --git a/node_modules/es-abstract/2021/BigInt/add.js b/node_modules/es-abstract/2021/BigInt/add.js
new file mode 100644
index 0000000..22b5db4
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/add.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-add
+
+module.exports = function BigIntAdd(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ // shortcut for the actual spec mechanics
+ return x + y;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/bitwiseAND.js b/node_modules/es-abstract/2021/BigInt/bitwiseAND.js
new file mode 100644
index 0000000..83cd2c3
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/bitwiseAND.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var BigIntBitwiseOp = require('../BigIntBitwiseOp');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseAND
+
+module.exports = function BigIntBitwiseAND(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+ return BigIntBitwiseOp('&', x, y);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/bitwiseNOT.js b/node_modules/es-abstract/2021/BigInt/bitwiseNOT.js
new file mode 100644
index 0000000..9a444df
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/bitwiseNOT.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseNOT
+
+module.exports = function BigIntBitwiseNOT(x) {
+ if (Type(x) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` argument must be a BigInt');
+ }
+ return -x - $BigInt(1);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/bitwiseOR.js b/node_modules/es-abstract/2021/BigInt/bitwiseOR.js
new file mode 100644
index 0000000..3c1b571
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/bitwiseOR.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var BigIntBitwiseOp = require('../BigIntBitwiseOp');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseOR
+
+module.exports = function BigIntBitwiseOR(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+ return BigIntBitwiseOp('|', x, y);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/bitwiseXOR.js b/node_modules/es-abstract/2021/BigInt/bitwiseXOR.js
new file mode 100644
index 0000000..45f8217
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/bitwiseXOR.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var BigIntBitwiseOp = require('../BigIntBitwiseOp');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-bitwiseXOR
+
+module.exports = function BigIntBitwiseXOR(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+ return BigIntBitwiseOp('^', x, y);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/divide.js b/node_modules/es-abstract/2021/BigInt/divide.js
new file mode 100644
index 0000000..5706e7d
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/divide.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-divide
+
+module.exports = function BigIntDivide(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+ if (y === $BigInt(0)) {
+ throw new $RangeError('Division by zero');
+ }
+ // shortcut for the actual spec mechanics
+ return x / y;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/equal.js b/node_modules/es-abstract/2021/BigInt/equal.js
new file mode 100644
index 0000000..a28826d
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/equal.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-equal
+
+module.exports = function BigIntEqual(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+ // shortcut for the actual spec mechanics
+ return x === y;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/exponentiate.js b/node_modules/es-abstract/2021/BigInt/exponentiate.js
new file mode 100644
index 0000000..2365838
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/exponentiate.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-exponentiate
+
+module.exports = function BigIntExponentiate(base, exponent) {
+ if (Type(base) !== 'BigInt' || Type(exponent) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be BigInts');
+ }
+ if (exponent < $BigInt(0)) {
+ throw new $RangeError('Exponent must be positive');
+ }
+ if (/* base === $BigInt(0) && */ exponent === $BigInt(0)) {
+ return $BigInt(1);
+ }
+
+ var square = base;
+ var remaining = exponent;
+ while (remaining > $BigInt(0)) {
+ square += exponent;
+ --remaining; // eslint-disable-line no-plusplus
+ }
+ return square;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/index.js b/node_modules/es-abstract/2021/BigInt/index.js
new file mode 100644
index 0000000..63ec52d
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/index.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var add = require('./add');
+var bitwiseAND = require('./bitwiseAND');
+var bitwiseNOT = require('./bitwiseNOT');
+var bitwiseOR = require('./bitwiseOR');
+var bitwiseXOR = require('./bitwiseXOR');
+var divide = require('./divide');
+var equal = require('./equal');
+var exponentiate = require('./exponentiate');
+var leftShift = require('./leftShift');
+var lessThan = require('./lessThan');
+var multiply = require('./multiply');
+var remainder = require('./remainder');
+var sameValue = require('./sameValue');
+var sameValueZero = require('./sameValueZero');
+var signedRightShift = require('./signedRightShift');
+var subtract = require('./subtract');
+var toString = require('./toString');
+var unaryMinus = require('./unaryMinus');
+var unsignedRightShift = require('./unsignedRightShift');
+
+module.exports = {
+ add: add,
+ bitwiseAND: bitwiseAND,
+ bitwiseNOT: bitwiseNOT,
+ bitwiseOR: bitwiseOR,
+ bitwiseXOR: bitwiseXOR,
+ divide: divide,
+ equal: equal,
+ exponentiate: exponentiate,
+ leftShift: leftShift,
+ lessThan: lessThan,
+ multiply: multiply,
+ remainder: remainder,
+ sameValue: sameValue,
+ sameValueZero: sameValueZero,
+ signedRightShift: signedRightShift,
+ subtract: subtract,
+ toString: toString,
+ unaryMinus: unaryMinus,
+ unsignedRightShift: unsignedRightShift
+};
diff --git a/node_modules/es-abstract/2021/BigInt/leftShift.js b/node_modules/es-abstract/2021/BigInt/leftShift.js
new file mode 100644
index 0000000..d2a5702
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/leftShift.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-leftShift
+
+module.exports = function BigIntLeftShift(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ // shortcut for the actual spec mechanics
+ return x << y;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/lessThan.js b/node_modules/es-abstract/2021/BigInt/lessThan.js
new file mode 100644
index 0000000..0b3cd6b
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/lessThan.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-lessThan
+
+module.exports = function BigIntLessThan(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ // shortcut for the actual spec mechanics
+ return x < y;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/multiply.js b/node_modules/es-abstract/2021/BigInt/multiply.js
new file mode 100644
index 0000000..6e5d56c
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/multiply.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-multiply
+
+module.exports = function BigIntMultiply(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ // shortcut for the actual spec mechanics
+ return x * y;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/remainder.js b/node_modules/es-abstract/2021/BigInt/remainder.js
new file mode 100644
index 0000000..d2dc678
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/remainder.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+var zero = $BigInt && $BigInt(0);
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-remainder
+
+module.exports = function BigIntRemainder(n, d) {
+ if (Type(n) !== 'BigInt' || Type(d) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `n` and `d` arguments must be BigInts');
+ }
+
+ if (d === zero) {
+ throw new $RangeError('Division by zero');
+ }
+
+ if (n === zero) {
+ return zero;
+ }
+
+ // shortcut for the actual spec mechanics
+ return n % d;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/sameValue.js b/node_modules/es-abstract/2021/BigInt/sameValue.js
new file mode 100644
index 0000000..63ff063
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/sameValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+var BigIntEqual = require('./equal');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValue
+
+module.exports = function BigIntSameValue(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ return BigIntEqual(x, y);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/sameValueZero.js b/node_modules/es-abstract/2021/BigInt/sameValueZero.js
new file mode 100644
index 0000000..39f262c
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/sameValueZero.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+var BigIntEqual = require('./equal');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-sameValueZero
+
+module.exports = function BigIntSameValueZero(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ return BigIntEqual(x, y);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/signedRightShift.js b/node_modules/es-abstract/2021/BigInt/signedRightShift.js
new file mode 100644
index 0000000..f63c642
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/signedRightShift.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+var BigIntLeftShift = require('./leftShift');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-signedRightShift
+
+module.exports = function BigIntSignedRightShift(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ return BigIntLeftShift(x, -y);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/subtract.js b/node_modules/es-abstract/2021/BigInt/subtract.js
new file mode 100644
index 0000000..0490784
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/subtract.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-subtract
+
+module.exports = function BigIntSubtract(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ // shortcut for the actual spec mechanics
+ return x - y;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/toString.js b/node_modules/es-abstract/2021/BigInt/toString.js
new file mode 100644
index 0000000..858d955
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/toString.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-tostring
+
+module.exports = function BigIntToString(x) {
+ if (Type(x) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` must be a BigInt');
+ }
+
+ return $String(x);
+};
diff --git a/node_modules/es-abstract/2021/BigInt/unaryMinus.js b/node_modules/es-abstract/2021/BigInt/unaryMinus.js
new file mode 100644
index 0000000..ee0f7ef
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/unaryMinus.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+var zero = $BigInt && $BigInt(0);
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unaryMinus
+
+module.exports = function BigIntUnaryMinus(x) {
+ if (Type(x) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` argument must be a BigInt');
+ }
+
+ if (x === zero) {
+ return zero;
+ }
+
+ return -x;
+};
diff --git a/node_modules/es-abstract/2021/BigInt/unsignedRightShift.js b/node_modules/es-abstract/2021/BigInt/unsignedRightShift.js
new file mode 100644
index 0000000..7ad94f7
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigInt/unsignedRightShift.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-bigint-unsignedRightShift
+
+module.exports = function BigIntUnsignedRightShift(x, y) {
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be BigInts');
+ }
+
+ throw new $TypeError('BigInts have no unsigned right shift, use >> instead');
+};
diff --git a/node_modules/es-abstract/2021/BigIntBitwiseOp.js b/node_modules/es-abstract/2021/BigIntBitwiseOp.js
new file mode 100644
index 0000000..1af4cad
--- /dev/null
+++ b/node_modules/es-abstract/2021/BigIntBitwiseOp.js
@@ -0,0 +1,66 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+// var $BigInt = GetIntrinsic('%BigInt%', true);
+// var $pow = GetIntrinsic('%Math.pow%');
+
+// var BinaryAnd = require('./BinaryAnd');
+// var BinaryOr = require('./BinaryOr');
+// var BinaryXor = require('./BinaryXor');
+var Type = require('./Type');
+// var modulo = require('./modulo');
+
+// var zero = $BigInt && $BigInt(0);
+// var negOne = $BigInt && $BigInt(-1);
+// var two = $BigInt && $BigInt(2);
+
+// https://262.ecma-international.org/11.0/#sec-bigintbitwiseop
+
+module.exports = function BigIntBitwiseOp(op, x, y) {
+ if (op !== '&' && op !== '|' && op !== '^') {
+ throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`');
+ }
+ if (Type(x) !== 'BigInt' || Type(y) !== 'BigInt') {
+ throw new $TypeError('`x` and `y` must be BigInts');
+ }
+
+ if (op === '&') {
+ return x & y;
+ }
+ if (op === '|') {
+ return x | y;
+ }
+ return x ^ y;
+ /*
+ var result = zero;
+ var shift = 0;
+ while (x !== zero && x !== negOne && y !== zero && y !== negOne) {
+ var xDigit = modulo(x, two);
+ var yDigit = modulo(y, two);
+ if (op === '&') {
+ result += $pow(2, shift) * BinaryAnd(xDigit, yDigit);
+ } else if (op === '|') {
+ result += $pow(2, shift) * BinaryOr(xDigit, yDigit);
+ } else if (op === '^') {
+ result += $pow(2, shift) * BinaryXor(xDigit, yDigit);
+ }
+ shift += 1;
+ x = (x - xDigit) / two;
+ y = (y - yDigit) / two;
+ }
+ var tmp;
+ if (op === '&') {
+ tmp = BinaryAnd(modulo(x, two), modulo(y, two));
+ } else if (op === '|') {
+ tmp = BinaryAnd(modulo(x, two), modulo(y, two));
+ } else {
+ tmp = BinaryXor(modulo(x, two), modulo(y, two));
+ }
+ if (tmp !== 0) {
+ result -= $pow(2, shift);
+ }
+ return result;
+ */
+};
diff --git a/node_modules/es-abstract/2021/BinaryAnd.js b/node_modules/es-abstract/2021/BinaryAnd.js
new file mode 100644
index 0000000..c617f38
--- /dev/null
+++ b/node_modules/es-abstract/2021/BinaryAnd.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://262.ecma-international.org/11.0/#sec-binaryand
+
+module.exports = function BinaryAnd(x, y) {
+ if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) {
+ throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1');
+ }
+ return x & y;
+};
diff --git a/node_modules/es-abstract/2021/BinaryOr.js b/node_modules/es-abstract/2021/BinaryOr.js
new file mode 100644
index 0000000..6de0955
--- /dev/null
+++ b/node_modules/es-abstract/2021/BinaryOr.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://262.ecma-international.org/11.0/#sec-binaryor
+
+module.exports = function BinaryOr(x, y) {
+ if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) {
+ throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1');
+ }
+ return x | y;
+};
diff --git a/node_modules/es-abstract/2021/BinaryXor.js b/node_modules/es-abstract/2021/BinaryXor.js
new file mode 100644
index 0000000..189d7d8
--- /dev/null
+++ b/node_modules/es-abstract/2021/BinaryXor.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://262.ecma-international.org/11.0/#sec-binaryxor
+
+module.exports = function BinaryXor(x, y) {
+ if ((x !== 0 && x !== 1) || (y !== 0 && y !== 1)) {
+ throw new $TypeError('Assertion failed: `x` and `y` must be either 0 or 1');
+ }
+ return x ^ y;
+};
diff --git a/node_modules/es-abstract/2021/ByteListBitwiseOp.js b/node_modules/es-abstract/2021/ByteListBitwiseOp.js
new file mode 100644
index 0000000..4e3c1f1
--- /dev/null
+++ b/node_modules/es-abstract/2021/ByteListBitwiseOp.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $push = callBound('Array.prototype.push');
+
+var IsArray = require('./IsArray');
+
+var isByteValue = require('../helpers/isByteValue');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-bytelistbitwiseop
+
+module.exports = function ByteListBitwiseOp(op, xBytes, yBytes) {
+ if (op !== '&' && op !== '^' && op !== '|') {
+ throw new $TypeError('Assertion failed: `op` must be `&`, `^`, or `|`');
+ }
+ if (!IsArray(xBytes) || !IsArray(yBytes) || xBytes.length !== yBytes.length) {
+ throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)');
+ }
+
+ var result = [];
+
+ for (var i = 0; i < xBytes.length; i += 1) {
+ var xByte = xBytes[i];
+ var yByte = yBytes[i];
+ if (!isByteValue(xByte) || !isByteValue(yByte)) {
+ throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be same-length sequences of byte values (an integer 0-255, inclusive)');
+ }
+ var resultByte;
+ if (op === '&') {
+ resultByte = xByte & yByte;
+ } else if (op === '^') {
+ resultByte = xByte ^ yByte;
+ } else {
+ resultByte = xByte | yByte;
+ }
+ $push(result, resultByte);
+ }
+
+ return result;
+};
diff --git a/node_modules/es-abstract/2021/ByteListEqual.js b/node_modules/es-abstract/2021/ByteListEqual.js
new file mode 100644
index 0000000..adc2378
--- /dev/null
+++ b/node_modules/es-abstract/2021/ByteListEqual.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsArray = require('./IsArray');
+
+var isByteValue = require('../helpers/isByteValue');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-bytelistequal
+
+module.exports = function ByteListEqual(xBytes, yBytes) {
+ if (!IsArray(xBytes) || !IsArray(yBytes)) {
+ throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)');
+ }
+
+ if (xBytes.length !== yBytes.length) {
+ return false;
+ }
+
+ for (var i = 0; i < xBytes.length; i += 1) {
+ var xByte = xBytes[i];
+ var yByte = yBytes[i];
+ if (!isByteValue(xByte) || !isByteValue(yByte)) {
+ throw new $TypeError('Assertion failed: `xBytes` and `yBytes` must be sequences of byte values (an integer 0-255, inclusive)');
+ }
+ if (xByte !== yByte) {
+ return false;
+ }
+ }
+ return true;
+};
diff --git a/node_modules/es-abstract/2021/Call.js b/node_modules/es-abstract/2021/Call.js
new file mode 100644
index 0000000..4b238c6
--- /dev/null
+++ b/node_modules/es-abstract/2021/Call.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsArray = require('./IsArray');
+
+var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-call
+
+module.exports = function Call(F, V) {
+ var argumentsList = arguments.length > 2 ? arguments[2] : [];
+ if (!IsArray(argumentsList)) {
+ throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
+ }
+ return $apply(F, V, argumentsList);
+};
diff --git a/node_modules/es-abstract/2021/CanonicalNumericIndexString.js b/node_modules/es-abstract/2021/CanonicalNumericIndexString.js
new file mode 100644
index 0000000..feb878c
--- /dev/null
+++ b/node_modules/es-abstract/2021/CanonicalNumericIndexString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-canonicalnumericindexstring
+
+module.exports = function CanonicalNumericIndexString(argument) {
+ if (Type(argument) !== 'String') {
+ throw new $TypeError('Assertion failed: `argument` must be a String');
+ }
+ if (argument === '-0') { return -0; }
+ var n = ToNumber(argument);
+ if (SameValue(ToString(n), argument)) { return n; }
+ return void 0;
+};
diff --git a/node_modules/es-abstract/2021/CharacterRange.js b/node_modules/es-abstract/2021/CharacterRange.js
new file mode 100644
index 0000000..70e4b52
--- /dev/null
+++ b/node_modules/es-abstract/2021/CharacterRange.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $charCodeAt = callBound('%String.prototype.charCodeAt%');
+var $push = callBound('%Array.prototype.push%');
+
+module.exports = function CharacterRange(A, B) {
+ if (A.length !== 1 || B.length !== 1) {
+ throw new $TypeError('Assertion failed: CharSets A and B contain exactly one character');
+ }
+
+ var a = A[0];
+ var b = B[0];
+
+ var i = $charCodeAt(a, 0);
+ var j = $charCodeAt(b, 0);
+
+ if (!(i <= j)) {
+ throw new $TypeError('Assertion failed: i is not <= j');
+ }
+
+ var arr = [];
+ for (var k = i; k <= j; k += 1) {
+ $push(arr, $fromCharCode(k));
+ }
+ return arr;
+};
diff --git a/node_modules/es-abstract/2021/ClearKeptObjects.js b/node_modules/es-abstract/2021/ClearKeptObjects.js
new file mode 100644
index 0000000..9397f59
--- /dev/null
+++ b/node_modules/es-abstract/2021/ClearKeptObjects.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var SLOT = require('internal-slot');
+var keptObjects = [];
+
+// https://ecma-international.org/ecma-262/12.0/#sec-clear-kept-objects
+
+module.exports = function ClearKeptObjects() {
+ keptObjects.length = 0;
+};
+
+SLOT.set(module.exports, '[[es-abstract internal: KeptAlive]]', keptObjects);
diff --git a/node_modules/es-abstract/2021/CodePointAt.js b/node_modules/es-abstract/2021/CodePointAt.js
new file mode 100644
index 0000000..7a9ac1b
--- /dev/null
+++ b/node_modules/es-abstract/2021/CodePointAt.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var callBound = require('call-bind/callBound');
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+var Type = require('./Type');
+var UTF16SurrogatePairToCodePoint = require('./UTF16SurrogatePairToCodePoint');
+
+var $charAt = callBound('String.prototype.charAt');
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-codepointat
+
+module.exports = function CodePointAt(string, position) {
+ if (Type(string) !== 'String') {
+ throw new $TypeError('Assertion failed: `string` must be a String');
+ }
+ var size = string.length;
+ if (position < 0 || position >= size) {
+ throw new $TypeError('Assertion failed: `position` must be >= 0, and < the length of `string`');
+ }
+ var first = $charCodeAt(string, position);
+ var cp = $charAt(string, position);
+ var firstIsLeading = isLeadingSurrogate(first);
+ var firstIsTrailing = isTrailingSurrogate(first);
+ if (!firstIsLeading && !firstIsTrailing) {
+ return {
+ '[[CodePoint]]': cp,
+ '[[CodeUnitCount]]': 1,
+ '[[IsUnpairedSurrogate]]': false
+ };
+ }
+ if (firstIsTrailing || (position + 1 === size)) {
+ return {
+ '[[CodePoint]]': cp,
+ '[[CodeUnitCount]]': 1,
+ '[[IsUnpairedSurrogate]]': true
+ };
+ }
+ var second = $charCodeAt(string, position + 1);
+ if (!isTrailingSurrogate(second)) {
+ return {
+ '[[CodePoint]]': cp,
+ '[[CodeUnitCount]]': 1,
+ '[[IsUnpairedSurrogate]]': true
+ };
+ }
+
+ return {
+ '[[CodePoint]]': UTF16SurrogatePairToCodePoint(first, second),
+ '[[CodeUnitCount]]': 2,
+ '[[IsUnpairedSurrogate]]': false
+ };
+};
diff --git a/node_modules/es-abstract/2021/CodePointsToString.js b/node_modules/es-abstract/2021/CodePointsToString.js
new file mode 100644
index 0000000..403126c
--- /dev/null
+++ b/node_modules/es-abstract/2021/CodePointsToString.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint');
+var IsArray = require('./IsArray');
+
+var forEach = require('../helpers/forEach');
+var isCodePoint = require('../helpers/isCodePoint');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-codepointstostring
+
+module.exports = function CodePointsToString(text) {
+ if (!IsArray(text)) {
+ throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points');
+ }
+ var result = '';
+ forEach(text, function (cp) {
+ if (!isCodePoint(cp)) {
+ throw new $TypeError('Assertion failed: `text` must be a sequence of Unicode Code Points');
+ }
+ result += UTF16EncodeCodePoint(cp);
+ });
+ return result;
+};
diff --git a/node_modules/es-abstract/2021/CompletePropertyDescriptor.js b/node_modules/es-abstract/2021/CompletePropertyDescriptor.js
new file mode 100644
index 0000000..548bf41
--- /dev/null
+++ b/node_modules/es-abstract/2021/CompletePropertyDescriptor.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-completepropertydescriptor
+
+module.exports = function CompletePropertyDescriptor(Desc) {
+ /* eslint no-param-reassign: 0 */
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (!has(Desc, '[[Value]]')) {
+ Desc['[[Value]]'] = void 0;
+ }
+ if (!has(Desc, '[[Writable]]')) {
+ Desc['[[Writable]]'] = false;
+ }
+ } else {
+ if (!has(Desc, '[[Get]]')) {
+ Desc['[[Get]]'] = void 0;
+ }
+ if (!has(Desc, '[[Set]]')) {
+ Desc['[[Set]]'] = void 0;
+ }
+ }
+ if (!has(Desc, '[[Enumerable]]')) {
+ Desc['[[Enumerable]]'] = false;
+ }
+ if (!has(Desc, '[[Configurable]]')) {
+ Desc['[[Configurable]]'] = false;
+ }
+ return Desc;
+};
diff --git a/node_modules/es-abstract/2021/CopyDataProperties.js b/node_modules/es-abstract/2021/CopyDataProperties.js
new file mode 100644
index 0000000..1b0c7df
--- /dev/null
+++ b/node_modules/es-abstract/2021/CopyDataProperties.js
@@ -0,0 +1,70 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+var forEach = require('../helpers/forEach');
+var every = require('../helpers/every');
+var some = require('../helpers/some');
+var OwnPropertyKeys = require('../helpers/OwnPropertyKeys');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsIntegralNumber = require('./IsIntegralNumber');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var ToNumber = require('./ToNumber');
+var ToObject = require('./ToObject');
+var Type = require('./Type');
+
+// https://www.ecma-international.org/ecma-262/12.0/#sec-copydataproperties
+
+module.exports = function CopyDataProperties(target, source, excludedItems) {
+ if (Type(target) !== 'Object') {
+ throw new $TypeError('Assertion failed: "target" must be an Object');
+ }
+
+ if (!IsArray(excludedItems) || !every(excludedItems, IsPropertyKey)) {
+ throw new $TypeError('Assertion failed: "excludedItems" must be a List of Property Keys');
+ }
+
+ if (typeof source === 'undefined' || source === null) {
+ return target;
+ }
+
+ var from = ToObject(source);
+
+ var keys = OwnPropertyKeys(from);
+ forEach(keys, function (nextKey) {
+ var excluded = some(excludedItems, function (e) {
+ return SameValue(e, nextKey) === true;
+ });
+ /*
+ var excluded = false;
+
+ forEach(excludedItems, function (e) {
+ if (SameValue(e, nextKey) === true) {
+ excluded = true;
+ }
+ });
+ */
+
+ var enumerable = $isEnumerable(from, nextKey) || (
+ // this is to handle string keys being non-enumerable in older engines
+ typeof source === 'string'
+ && nextKey >= 0
+ && IsIntegralNumber(ToNumber(nextKey))
+ );
+ if (excluded === false && enumerable) {
+ var propValue = Get(from, nextKey);
+ CreateDataPropertyOrThrow(target, nextKey, propValue);
+ }
+ });
+
+ return target;
+};
diff --git a/node_modules/es-abstract/2021/CreateDataProperty.js b/node_modules/es-abstract/2021/CreateDataProperty.js
new file mode 100644
index 0000000..ff5ca30
--- /dev/null
+++ b/node_modules/es-abstract/2021/CreateDataProperty.js
@@ -0,0 +1,45 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty
+
+module.exports = function CreateDataProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var oldDesc = OrdinaryGetOwnProperty(O, P);
+ var extensible = !oldDesc || IsExtensible(O);
+ var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
+ if (immutable || !extensible) {
+ return false;
+ }
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': true,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ }
+ );
+};
diff --git a/node_modules/es-abstract/2021/CreateDataPropertyOrThrow.js b/node_modules/es-abstract/2021/CreateDataPropertyOrThrow.js
new file mode 100644
index 0000000..2f7c410
--- /dev/null
+++ b/node_modules/es-abstract/2021/CreateDataPropertyOrThrow.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var CreateDataProperty = require('./CreateDataProperty');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
+
+module.exports = function CreateDataPropertyOrThrow(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ var success = CreateDataProperty(O, P, V);
+ if (!success) {
+ throw new $TypeError('unable to create data property');
+ }
+ return success;
+};
diff --git a/node_modules/es-abstract/2021/CreateHTML.js b/node_modules/es-abstract/2021/CreateHTML.js
new file mode 100644
index 0000000..ccded1e
--- /dev/null
+++ b/node_modules/es-abstract/2021/CreateHTML.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+
+var $replace = callBound('String.prototype.replace');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createhtml
+
+module.exports = function CreateHTML(string, tag, attribute, value) {
+ if (Type(tag) !== 'String' || Type(attribute) !== 'String') {
+ throw new $TypeError('Assertion failed: `tag` and `attribute` must be strings');
+ }
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var p1 = '<' + tag;
+ if (attribute !== '') {
+ var V = ToString(value);
+ var escapedV = $replace(V, /\x22/g, '"');
+ p1 += '\x20' + attribute + '\x3D\x22' + escapedV + '\x22';
+ }
+ return p1 + '>' + S + '</' + tag + '>';
+};
diff --git a/node_modules/es-abstract/2021/CreateIterResultObject.js b/node_modules/es-abstract/2021/CreateIterResultObject.js
new file mode 100644
index 0000000..eea77a5
--- /dev/null
+++ b/node_modules/es-abstract/2021/CreateIterResultObject.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createiterresultobject
+
+module.exports = function CreateIterResultObject(value, done) {
+ if (Type(done) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: Type(done) is not Boolean');
+ }
+ return {
+ value: value,
+ done: done
+ };
+};
diff --git a/node_modules/es-abstract/2021/CreateListFromArrayLike.js b/node_modules/es-abstract/2021/CreateListFromArrayLike.js
new file mode 100644
index 0000000..3e9f5f4
--- /dev/null
+++ b/node_modules/es-abstract/2021/CreateListFromArrayLike.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var callBound = require('call-bind/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $indexOf = callBound('Array.prototype.indexOf', true) || callBound('String.prototype.indexOf');
+var $push = callBound('Array.prototype.push');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var LengthOfArrayLike = require('./LengthOfArrayLike');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/11.0/#sec-createlistfromarraylike
+
+module.exports = function CreateListFromArrayLike(obj) {
+ var elementTypes = arguments.length > 1
+ ? arguments[1]
+ : ['Undefined', 'Null', 'Boolean', 'String', 'Symbol', 'Number', 'Object'];
+
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: `obj` must be an Object');
+ }
+ if (!IsArray(elementTypes)) {
+ throw new $TypeError('Assertion failed: `elementTypes`, if provided, must be an array');
+ }
+ var len = LengthOfArrayLike(obj);
+ var list = [];
+ var index = 0;
+ while (index < len) {
+ var indexName = ToString(index);
+ var next = Get(obj, indexName);
+ var nextType = Type(next);
+ if ($indexOf(elementTypes, nextType) < 0) {
+ throw new $TypeError('item type ' + nextType + ' is not a valid elementType');
+ }
+ $push(list, next);
+ index += 1;
+ }
+ return list;
+};
diff --git a/node_modules/es-abstract/2021/CreateMethodProperty.js b/node_modules/es-abstract/2021/CreateMethodProperty.js
new file mode 100644
index 0000000..53274a5
--- /dev/null
+++ b/node_modules/es-abstract/2021/CreateMethodProperty.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-createmethodproperty
+
+module.exports = function CreateMethodProperty(O, P, V) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var newDesc = {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': false,
+ '[[Value]]': V,
+ '[[Writable]]': true
+ };
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ newDesc
+ );
+};
diff --git a/node_modules/es-abstract/2021/CreateRegExpStringIterator.js b/node_modules/es-abstract/2021/CreateRegExpStringIterator.js
new file mode 100644
index 0000000..dd493e4
--- /dev/null
+++ b/node_modules/es-abstract/2021/CreateRegExpStringIterator.js
@@ -0,0 +1,111 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var IteratorPrototype = GetIntrinsic('%IteratorPrototype%', true);
+var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var CreateIterResultObject = require('./CreateIterResultObject');
+var CreateMethodProperty = require('./CreateMethodProperty');
+var Get = require('./Get');
+var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');
+var RegExpExec = require('./RegExpExec');
+var Set = require('./Set');
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var SLOT = require('internal-slot');
+
+var RegExpStringIterator = function RegExpStringIterator(R, S, global, fullUnicode) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('`S` must be a string');
+ }
+ if (Type(global) !== 'Boolean') {
+ throw new $TypeError('`global` must be a boolean');
+ }
+ if (Type(fullUnicode) !== 'Boolean') {
+ throw new $TypeError('`fullUnicode` must be a boolean');
+ }
+ SLOT.set(this, '[[IteratingRegExp]]', R);
+ SLOT.set(this, '[[IteratedString]]', S);
+ SLOT.set(this, '[[Global]]', global);
+ SLOT.set(this, '[[Unicode]]', fullUnicode);
+ SLOT.set(this, '[[Done]]', false);
+};
+
+if (IteratorPrototype) {
+ RegExpStringIterator.prototype = OrdinaryObjectCreate(IteratorPrototype);
+}
+
+var RegExpStringIteratorNext = function next() {
+ var O = this; // eslint-disable-line no-invalid-this
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('receiver must be an object');
+ }
+ if (
+ !(O instanceof RegExpStringIterator)
+ || !SLOT.has(O, '[[IteratingRegExp]]')
+ || !SLOT.has(O, '[[IteratedString]]')
+ || !SLOT.has(O, '[[Global]]')
+ || !SLOT.has(O, '[[Unicode]]')
+ || !SLOT.has(O, '[[Done]]')
+ ) {
+ throw new $TypeError('"this" value must be a RegExpStringIterator instance');
+ }
+ if (SLOT.get(O, '[[Done]]')) {
+ return CreateIterResultObject(undefined, true);
+ }
+ var R = SLOT.get(O, '[[IteratingRegExp]]');
+ var S = SLOT.get(O, '[[IteratedString]]');
+ var global = SLOT.get(O, '[[Global]]');
+ var fullUnicode = SLOT.get(O, '[[Unicode]]');
+ var match = RegExpExec(R, S);
+ if (match === null) {
+ SLOT.set(O, '[[Done]]', true);
+ return CreateIterResultObject(undefined, true);
+ }
+ if (global) {
+ var matchStr = ToString(Get(match, '0'));
+ if (matchStr === '') {
+ var thisIndex = ToLength(Get(R, 'lastIndex'));
+ var nextIndex = AdvanceStringIndex(S, thisIndex, fullUnicode);
+ Set(R, 'lastIndex', nextIndex, true);
+ }
+ return CreateIterResultObject(match, false);
+ }
+ SLOT.set(O, '[[Done]]', true);
+ return CreateIterResultObject(match, false);
+};
+CreateMethodProperty(RegExpStringIterator.prototype, 'next', RegExpStringIteratorNext);
+
+if (hasSymbols) {
+ if (Symbol.toStringTag) {
+ if ($defineProperty) {
+ $defineProperty(RegExpStringIterator.prototype, Symbol.toStringTag, {
+ configurable: true,
+ enumerable: false,
+ value: 'RegExp String Iterator',
+ writable: false
+ });
+ } else {
+ RegExpStringIterator.prototype[Symbol.toStringTag] = 'RegExp String Iterator';
+ }
+ }
+
+ if (Symbol.iterator && typeof RegExpStringIterator.prototype[Symbol.iterator] !== 'function') {
+ var iteratorFn = function SymbolIterator() {
+ return this;
+ };
+ CreateMethodProperty(RegExpStringIterator.prototype, Symbol.iterator, iteratorFn);
+ }
+}
+
+// https://262.ecma-international.org/11.0/#sec-createregexpstringiterator
+module.exports = function CreateRegExpStringIterator(R, S, global, fullUnicode) {
+ // assert R.global === global && R.unicode === fullUnicode?
+ return new RegExpStringIterator(R, S, global, fullUnicode);
+};
diff --git a/node_modules/es-abstract/2021/DateFromTime.js b/node_modules/es-abstract/2021/DateFromTime.js
new file mode 100644
index 0000000..20e4f2e
--- /dev/null
+++ b/node_modules/es-abstract/2021/DateFromTime.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+var MonthFromTime = require('./MonthFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.5
+
+module.exports = function DateFromTime(t) {
+ var m = MonthFromTime(t);
+ var d = DayWithinYear(t);
+ if (m === 0) {
+ return d + 1;
+ }
+ if (m === 1) {
+ return d - 30;
+ }
+ var leap = InLeapYear(t);
+ if (m === 2) {
+ return d - 58 - leap;
+ }
+ if (m === 3) {
+ return d - 89 - leap;
+ }
+ if (m === 4) {
+ return d - 119 - leap;
+ }
+ if (m === 5) {
+ return d - 150 - leap;
+ }
+ if (m === 6) {
+ return d - 180 - leap;
+ }
+ if (m === 7) {
+ return d - 211 - leap;
+ }
+ if (m === 8) {
+ return d - 242 - leap;
+ }
+ if (m === 9) {
+ return d - 272 - leap;
+ }
+ if (m === 10) {
+ return d - 303 - leap;
+ }
+ if (m === 11) {
+ return d - 333 - leap;
+ }
+ throw new $EvalError('Assertion failed: MonthFromTime returned an impossible value: ' + m);
+};
diff --git a/node_modules/es-abstract/2021/DateString.js b/node_modules/es-abstract/2021/DateString.js
new file mode 100644
index 0000000..939c14c
--- /dev/null
+++ b/node_modules/es-abstract/2021/DateString.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
+var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+
+var $isNaN = require('../helpers/isNaN');
+var padTimeComponent = require('../helpers/padTimeComponent');
+
+var Type = require('./Type');
+var WeekDay = require('./WeekDay');
+var MonthFromTime = require('./MonthFromTime');
+var YearFromTime = require('./YearFromTime');
+var DateFromTime = require('./DateFromTime');
+
+// https://262.ecma-international.org/9.0/#sec-datestring
+
+module.exports = function DateString(tv) {
+ if (Type(tv) !== 'Number' || $isNaN(tv)) {
+ throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+ }
+ var weekday = weekdays[WeekDay(tv)];
+ var month = months[MonthFromTime(tv)];
+ var day = padTimeComponent(DateFromTime(tv));
+ var year = padTimeComponent(YearFromTime(tv), 4);
+ return weekday + '\x20' + month + '\x20' + day + '\x20' + year;
+};
diff --git a/node_modules/es-abstract/2021/Day.js b/node_modules/es-abstract/2021/Day.js
new file mode 100644
index 0000000..51d0103
--- /dev/null
+++ b/node_modules/es-abstract/2021/Day.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var floor = require('./floor');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.2
+
+module.exports = function Day(t) {
+ return floor(t / msPerDay);
+};
diff --git a/node_modules/es-abstract/2021/DayFromYear.js b/node_modules/es-abstract/2021/DayFromYear.js
new file mode 100644
index 0000000..341bf22
--- /dev/null
+++ b/node_modules/es-abstract/2021/DayFromYear.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var floor = require('./floor');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function DayFromYear(y) {
+ return (365 * (y - 1970)) + floor((y - 1969) / 4) - floor((y - 1901) / 100) + floor((y - 1601) / 400);
+};
+
diff --git a/node_modules/es-abstract/2021/DayWithinYear.js b/node_modules/es-abstract/2021/DayWithinYear.js
new file mode 100644
index 0000000..4c58094
--- /dev/null
+++ b/node_modules/es-abstract/2021/DayWithinYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var Day = require('./Day');
+var DayFromYear = require('./DayFromYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.4
+
+module.exports = function DayWithinYear(t) {
+ return Day(t) - DayFromYear(YearFromTime(t));
+};
diff --git a/node_modules/es-abstract/2021/DaysInYear.js b/node_modules/es-abstract/2021/DaysInYear.js
new file mode 100644
index 0000000..7116c69
--- /dev/null
+++ b/node_modules/es-abstract/2021/DaysInYear.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function DaysInYear(y) {
+ if (modulo(y, 4) !== 0) {
+ return 365;
+ }
+ if (modulo(y, 100) !== 0) {
+ return 366;
+ }
+ if (modulo(y, 400) !== 0) {
+ return 365;
+ }
+ return 366;
+};
diff --git a/node_modules/es-abstract/2021/DefinePropertyOrThrow.js b/node_modules/es-abstract/2021/DefinePropertyOrThrow.js
new file mode 100644
index 0000000..26f2714
--- /dev/null
+++ b/node_modules/es-abstract/2021/DefinePropertyOrThrow.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
+
+module.exports = function DefinePropertyOrThrow(O, P, desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ var Desc = isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, desc) ? desc : ToPropertyDescriptor(desc);
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
+ }
+
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+};
diff --git a/node_modules/es-abstract/2021/DeletePropertyOrThrow.js b/node_modules/es-abstract/2021/DeletePropertyOrThrow.js
new file mode 100644
index 0000000..30d5e57
--- /dev/null
+++ b/node_modules/es-abstract/2021/DeletePropertyOrThrow.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-deletepropertyorthrow
+
+module.exports = function DeletePropertyOrThrow(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ var success = delete O[P];
+ if (!success) {
+ throw new $TypeError('Attempt to delete property failed.');
+ }
+ return success;
+};
diff --git a/node_modules/es-abstract/2021/EnumerableOwnPropertyNames.js b/node_modules/es-abstract/2021/EnumerableOwnPropertyNames.js
new file mode 100644
index 0000000..44171b9
--- /dev/null
+++ b/node_modules/es-abstract/2021/EnumerableOwnPropertyNames.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var objectKeys = require('object-keys');
+
+var callBound = require('call-bind/callBound');
+
+var callBind = require('call-bind');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+var $pushApply = callBind.apply(GetIntrinsic('%Array.prototype.push%'));
+
+var forEach = require('../helpers/forEach');
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/8.0/#sec-enumerableownproperties
+
+module.exports = function EnumerableOwnProperties(O, kind) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ var keys = objectKeys(O);
+ if (kind === 'key') {
+ return keys;
+ }
+ if (kind === 'value' || kind === 'key+value') {
+ var results = [];
+ forEach(keys, function (key) {
+ if ($isEnumerable(O, key)) {
+ $pushApply(results, [
+ kind === 'value' ? O[key] : [key, O[key]]
+ ]);
+ }
+ });
+ return results;
+ }
+ throw new $TypeError('Assertion failed: "kind" is not "key", "value", or "key+value": ' + kind);
+};
diff --git a/node_modules/es-abstract/2021/FlattenIntoArray.js b/node_modules/es-abstract/2021/FlattenIntoArray.js
new file mode 100644
index 0000000..6429ee7
--- /dev/null
+++ b/node_modules/es-abstract/2021/FlattenIntoArray.js
@@ -0,0 +1,58 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var Call = require('./Call');
+var CreateDataPropertyOrThrow = require('./CreateDataPropertyOrThrow');
+var Get = require('./Get');
+var HasProperty = require('./HasProperty');
+var IsArray = require('./IsArray');
+var LengthOfArrayLike = require('./LengthOfArrayLike');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/11.0/#sec-flattenintoarray
+
+// eslint-disable-next-line max-params
+module.exports = function FlattenIntoArray(target, source, sourceLen, start, depth) {
+ var mapperFunction;
+ if (arguments.length > 5) {
+ mapperFunction = arguments[5];
+ }
+
+ var targetIndex = start;
+ var sourceIndex = 0;
+ while (sourceIndex < sourceLen) {
+ var P = ToString(sourceIndex);
+ var exists = HasProperty(source, P);
+ if (exists === true) {
+ var element = Get(source, P);
+ if (typeof mapperFunction !== 'undefined') {
+ if (arguments.length <= 6) {
+ throw new $TypeError('Assertion failed: thisArg is required when mapperFunction is provided');
+ }
+ element = Call(mapperFunction, arguments[6], [element, sourceIndex, source]);
+ }
+ var shouldFlatten = false;
+ if (depth > 0) {
+ shouldFlatten = IsArray(element);
+ }
+ if (shouldFlatten) {
+ var elementLen = LengthOfArrayLike(element);
+ targetIndex = FlattenIntoArray(target, element, elementLen, targetIndex, depth - 1);
+ } else {
+ if (targetIndex >= MAX_SAFE_INTEGER) {
+ throw new $TypeError('index too large');
+ }
+ CreateDataPropertyOrThrow(target, ToString(targetIndex), element);
+ targetIndex += 1;
+ }
+ }
+ sourceIndex += 1;
+ }
+
+ return targetIndex;
+};
diff --git a/node_modules/es-abstract/2021/FromPropertyDescriptor.js b/node_modules/es-abstract/2021/FromPropertyDescriptor.js
new file mode 100644
index 0000000..9a69a26
--- /dev/null
+++ b/node_modules/es-abstract/2021/FromPropertyDescriptor.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
+
+module.exports = function FromPropertyDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return Desc;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ var obj = {};
+ if ('[[Value]]' in Desc) {
+ obj.value = Desc['[[Value]]'];
+ }
+ if ('[[Writable]]' in Desc) {
+ obj.writable = Desc['[[Writable]]'];
+ }
+ if ('[[Get]]' in Desc) {
+ obj.get = Desc['[[Get]]'];
+ }
+ if ('[[Set]]' in Desc) {
+ obj.set = Desc['[[Set]]'];
+ }
+ if ('[[Enumerable]]' in Desc) {
+ obj.enumerable = Desc['[[Enumerable]]'];
+ }
+ if ('[[Configurable]]' in Desc) {
+ obj.configurable = Desc['[[Configurable]]'];
+ }
+ return obj;
+};
diff --git a/node_modules/es-abstract/2021/Get.js b/node_modules/es-abstract/2021/Get.js
new file mode 100644
index 0000000..681055a
--- /dev/null
+++ b/node_modules/es-abstract/2021/Get.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var inspect = require('object-inspect');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+/**
+ * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
+ * 1. Assert: Type(O) is Object.
+ * 2. Assert: IsPropertyKey(P) is true.
+ * 3. Return O.[[Get]](P, O).
+ */
+
+module.exports = function Get(O, P) {
+ // 7.3.1.1
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ // 7.3.1.2
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
+ }
+ // 7.3.1.3
+ return O[P];
+};
diff --git a/node_modules/es-abstract/2021/GetIterator.js b/node_modules/es-abstract/2021/GetIterator.js
new file mode 100644
index 0000000..0e74c17
--- /dev/null
+++ b/node_modules/es-abstract/2021/GetIterator.js
@@ -0,0 +1,65 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $asyncIterator = GetIntrinsic('%Symbol.asyncIterator%', true);
+
+var inspect = require('object-inspect');
+var hasSymbols = require('has-symbols')();
+
+var getIteratorMethod = require('../helpers/getIteratorMethod');
+var AdvanceStringIndex = require('./AdvanceStringIndex');
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsArray = require('./IsArray');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/9.0/#sec-getiterator
+module.exports = function GetIterator(obj, hint, method) {
+ var actualHint = hint;
+ if (arguments.length < 2) {
+ actualHint = 'sync';
+ }
+ if (actualHint !== 'sync' && actualHint !== 'async') {
+ throw new $TypeError("Assertion failed: `hint` must be one of 'sync' or 'async', got " + inspect(hint));
+ }
+
+ var actualMethod = method;
+ if (arguments.length < 3) {
+ if (actualHint === 'async') {
+ if (hasSymbols && $asyncIterator) {
+ actualMethod = GetMethod(obj, $asyncIterator);
+ }
+ if (actualMethod === undefined) {
+ throw new $TypeError("async from sync iterators aren't currently supported");
+ }
+ } else {
+ actualMethod = getIteratorMethod(
+ {
+ AdvanceStringIndex: AdvanceStringIndex,
+ GetMethod: GetMethod,
+ IsArray: IsArray,
+ Type: Type
+ },
+ obj
+ );
+ }
+ }
+ var iterator = Call(actualMethod, obj);
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('iterator must return an object');
+ }
+
+ return iterator;
+
+ // TODO: This should return an IteratorRecord
+ /*
+ var nextMethod = GetV(iterator, 'next');
+ return {
+ '[[Iterator]]': iterator,
+ '[[NextMethod]]': nextMethod,
+ '[[Done]]': false
+ };
+ */
+};
diff --git a/node_modules/es-abstract/2021/GetMethod.js b/node_modules/es-abstract/2021/GetMethod.js
new file mode 100644
index 0000000..775d3fb
--- /dev/null
+++ b/node_modules/es-abstract/2021/GetMethod.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var GetV = require('./GetV');
+var IsCallable = require('./IsCallable');
+var IsPropertyKey = require('./IsPropertyKey');
+
+/**
+ * 7.3.9 - https://ecma-international.org/ecma-262/6.0/#sec-getmethod
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let func be GetV(O, P).
+ * 3. ReturnIfAbrupt(func).
+ * 4. If func is either undefined or null, return undefined.
+ * 5. If IsCallable(func) is false, throw a TypeError exception.
+ * 6. Return func.
+ */
+
+module.exports = function GetMethod(O, P) {
+ // 7.3.9.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.9.2
+ var func = GetV(O, P);
+
+ // 7.3.9.4
+ if (func == null) {
+ return void 0;
+ }
+
+ // 7.3.9.5
+ if (!IsCallable(func)) {
+ throw new $TypeError(P + 'is not a function');
+ }
+
+ // 7.3.9.6
+ return func;
+};
diff --git a/node_modules/es-abstract/2021/GetOwnPropertyKeys.js b/node_modules/es-abstract/2021/GetOwnPropertyKeys.js
new file mode 100644
index 0000000..b8f4167
--- /dev/null
+++ b/node_modules/es-abstract/2021/GetOwnPropertyKeys.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var hasSymbols = require('has-symbols')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $gOPS = hasSymbols && GetIntrinsic('%Object.getOwnPropertySymbols%');
+var keys = require('object-keys');
+
+var esType = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getownpropertykeys
+
+module.exports = function GetOwnPropertyKeys(O, Type) {
+ if (esType(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (Type === 'Symbol') {
+ return $gOPS ? $gOPS(O) : [];
+ }
+ if (Type === 'String') {
+ if (!$gOPN) {
+ return keys(O);
+ }
+ return $gOPN(O);
+ }
+ throw new $TypeError('Assertion failed: `Type` must be `"String"` or `"Symbol"`');
+};
diff --git a/node_modules/es-abstract/2021/GetPromiseResolve.js b/node_modules/es-abstract/2021/GetPromiseResolve.js
new file mode 100644
index 0000000..6efc102
--- /dev/null
+++ b/node_modules/es-abstract/2021/GetPromiseResolve.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var IsConstructor = require('./IsConstructor');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-getpromiseresolve
+
+module.exports = function GetPromiseResolve(promiseConstructor) {
+ if (!IsConstructor(promiseConstructor)) {
+ throw new $TypeError('Assertion failed: `promiseConstructor` must be a constructor');
+ }
+ var promiseResolve = Get(promiseConstructor, 'resolve');
+ if (IsCallable(promiseResolve) === false) {
+ throw new $TypeError('`resolve` method is not callable');
+ }
+ return promiseResolve;
+};
diff --git a/node_modules/es-abstract/2021/GetPrototypeFromConstructor.js b/node_modules/es-abstract/2021/GetPrototypeFromConstructor.js
new file mode 100644
index 0000000..5f369ca
--- /dev/null
+++ b/node_modules/es-abstract/2021/GetPrototypeFromConstructor.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Function = GetIntrinsic('%Function%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-getprototypefromconstructor
+
+module.exports = function GetPrototypeFromConstructor(constructor, intrinsicDefaultProto) {
+ var intrinsic = GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+ if (!IsConstructor(constructor)) {
+ throw new $TypeError('Assertion failed: `constructor` must be a constructor');
+ }
+ var proto = Get(constructor, 'prototype');
+ if (Type(proto) !== 'Object') {
+ if (!(constructor instanceof $Function)) {
+ // ignore other realms, for now
+ throw new $TypeError('cross-realm constructors not currently supported');
+ }
+ proto = intrinsic;
+ }
+ return proto;
+};
diff --git a/node_modules/es-abstract/2021/GetSubstitution.js b/node_modules/es-abstract/2021/GetSubstitution.js
new file mode 100644
index 0000000..079687e
--- /dev/null
+++ b/node_modules/es-abstract/2021/GetSubstitution.js
@@ -0,0 +1,128 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+var regexTester = require('../helpers/regexTester');
+var every = require('../helpers/every');
+
+var $charAt = callBound('String.prototype.charAt');
+var $strSlice = callBound('String.prototype.slice');
+var $indexOf = callBound('String.prototype.indexOf');
+var $parseInt = parseInt;
+
+var isDigit = regexTester(/^[0-9]$/);
+
+var inspect = require('object-inspect');
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var IsIntegralNumber = require('./IsIntegralNumber');
+var ToObject = require('./ToObject');
+var ToString = require('./ToString');
+var Type = require('./Type');
+
+var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
+
+var isStringOrHole = function (capture, index, arr) {
+ return Type(capture) === 'String' || (canDistinguishSparseFromUndefined ? !(index in arr) : Type(capture) === 'Undefined');
+};
+
+// http://www.ecma-international.org/ecma-262/12.0/#sec-getsubstitution
+
+// eslint-disable-next-line max-statements, max-params, max-lines-per-function
+module.exports = function GetSubstitution(matched, str, position, captures, namedCaptures, replacement) {
+ if (Type(matched) !== 'String') {
+ throw new $TypeError('Assertion failed: `matched` must be a String');
+ }
+ var matchLength = matched.length;
+
+ if (Type(str) !== 'String') {
+ throw new $TypeError('Assertion failed: `str` must be a String');
+ }
+ var stringLength = str.length;
+
+ if (!IsIntegralNumber(position) || position < 0 || position > stringLength) {
+ throw new $TypeError('Assertion failed: `position` must be a nonnegative integer, and less than or equal to the length of `string`, got ' + inspect(position));
+ }
+
+ if (!IsArray(captures) || !every(captures, isStringOrHole)) {
+ throw new $TypeError('Assertion failed: `captures` must be a possibly-empty List of Strings, got ' + inspect(captures));
+ }
+
+ if (Type(replacement) !== 'String') {
+ throw new $TypeError('Assertion failed: `replacement` must be a String');
+ }
+
+ var tailPos = position + matchLength;
+ var m = captures.length;
+ if (Type(namedCaptures) !== 'Undefined') {
+ namedCaptures = ToObject(namedCaptures); // eslint-disable-line no-param-reassign
+ }
+
+ var result = '';
+ for (var i = 0; i < replacement.length; i += 1) {
+ // if this is a $, and it's not the end of the replacement
+ var current = $charAt(replacement, i);
+ var isLast = (i + 1) >= replacement.length;
+ var nextIsLast = (i + 2) >= replacement.length;
+ if (current === '$' && !isLast) {
+ var next = $charAt(replacement, i + 1);
+ if (next === '$') {
+ result += '$';
+ i += 1;
+ } else if (next === '&') {
+ result += matched;
+ i += 1;
+ } else if (next === '`') {
+ result += position === 0 ? '' : $strSlice(str, 0, position - 1);
+ i += 1;
+ } else if (next === "'") {
+ result += tailPos >= stringLength ? '' : $strSlice(str, tailPos);
+ i += 1;
+ } else {
+ var nextNext = nextIsLast ? null : $charAt(replacement, i + 2);
+ if (isDigit(next) && next !== '0' && (nextIsLast || !isDigit(nextNext))) {
+ // $1 through $9, and not followed by a digit
+ var n = $parseInt(next, 10);
+ // if (n > m, impl-defined)
+ result += n <= m && Type(captures[n - 1]) === 'Undefined' ? '' : captures[n - 1];
+ i += 1;
+ } else if (isDigit(next) && (nextIsLast || isDigit(nextNext))) {
+ // $00 through $99
+ var nn = next + nextNext;
+ var nnI = $parseInt(nn, 10) - 1;
+ // if nn === '00' or nn > m, impl-defined
+ result += nn <= m && Type(captures[nnI]) === 'Undefined' ? '' : captures[nnI];
+ i += 2;
+ } else if (next === '<') {
+ // eslint-disable-next-line max-depth
+ if (Type(namedCaptures) === 'Undefined') {
+ result += '$<';
+ i += 2;
+ } else {
+ var endIndex = $indexOf(replacement, '>', i);
+ // eslint-disable-next-line max-depth
+ if (endIndex > -1) {
+ var groupName = $strSlice(replacement, i + '$<'.length, endIndex);
+ var capture = Get(namedCaptures, groupName);
+ // eslint-disable-next-line max-depth
+ if (Type(capture) !== 'Undefined') {
+ result += ToString(capture);
+ }
+ i += ('<' + groupName + '>').length;
+ }
+ }
+ } else {
+ result += '$';
+ }
+ }
+ } else {
+ // the final $, or else not a $
+ result += $charAt(replacement, i);
+ }
+ }
+ return result;
+};
diff --git a/node_modules/es-abstract/2021/GetV.js b/node_modules/es-abstract/2021/GetV.js
new file mode 100644
index 0000000..2d8cc82
--- /dev/null
+++ b/node_modules/es-abstract/2021/GetV.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var ToObject = require('./ToObject');
+
+/**
+ * 7.3.2 GetV (V, P)
+ * 1. Assert: IsPropertyKey(P) is true.
+ * 2. Let O be ToObject(V).
+ * 3. ReturnIfAbrupt(O).
+ * 4. Return O.[[Get]](P, V).
+ */
+
+module.exports = function GetV(V, P) {
+ // 7.3.2.1
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+
+ // 7.3.2.2-3
+ var O = ToObject(V);
+
+ // 7.3.2.4
+ return O[P];
+};
diff --git a/node_modules/es-abstract/2021/HasOwnProperty.js b/node_modules/es-abstract/2021/HasOwnProperty.js
new file mode 100644
index 0000000..04d2849
--- /dev/null
+++ b/node_modules/es-abstract/2021/HasOwnProperty.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var has = require('has');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasownproperty
+
+module.exports = function HasOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return has(O, P);
+};
diff --git a/node_modules/es-abstract/2021/HasProperty.js b/node_modules/es-abstract/2021/HasProperty.js
new file mode 100644
index 0000000..b341654
--- /dev/null
+++ b/node_modules/es-abstract/2021/HasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
+
+module.exports = function HasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/es-abstract/2021/HourFromTime.js b/node_modules/es-abstract/2021/HourFromTime.js
new file mode 100644
index 0000000..f963bfb
--- /dev/null
+++ b/node_modules/es-abstract/2021/HourFromTime.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerHour = timeConstants.msPerHour;
+var HoursPerDay = timeConstants.HoursPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function HourFromTime(t) {
+ return modulo(floor(t / msPerHour), HoursPerDay);
+};
diff --git a/node_modules/es-abstract/2021/InLeapYear.js b/node_modules/es-abstract/2021/InLeapYear.js
new file mode 100644
index 0000000..bfe0c45
--- /dev/null
+++ b/node_modules/es-abstract/2021/InLeapYear.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $EvalError = GetIntrinsic('%EvalError%');
+
+var DaysInYear = require('./DaysInYear');
+var YearFromTime = require('./YearFromTime');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function InLeapYear(t) {
+ var days = DaysInYear(YearFromTime(t));
+ if (days === 365) {
+ return 0;
+ }
+ if (days === 366) {
+ return 1;
+ }
+ throw new $EvalError('Assertion failed: there are not 365 or 366 days in a year, got: ' + days);
+};
diff --git a/node_modules/es-abstract/2021/InstanceofOperator.js b/node_modules/es-abstract/2021/InstanceofOperator.js
new file mode 100644
index 0000000..a3c4d23
--- /dev/null
+++ b/node_modules/es-abstract/2021/InstanceofOperator.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $hasInstance = GetIntrinsic('Symbol.hasInstance', true);
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var OrdinaryHasInstance = require('./OrdinaryHasInstance');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-instanceofoperator
+
+module.exports = function InstanceofOperator(O, C) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var instOfHandler = $hasInstance ? GetMethod(C, $hasInstance) : void 0;
+ if (typeof instOfHandler !== 'undefined') {
+ return ToBoolean(Call(instOfHandler, C, [O]));
+ }
+ if (!IsCallable(C)) {
+ throw new $TypeError('`C` is not Callable');
+ }
+ return OrdinaryHasInstance(C, O);
+};
diff --git a/node_modules/es-abstract/2021/Invoke.js b/node_modules/es-abstract/2021/Invoke.js
new file mode 100644
index 0000000..d4214ee
--- /dev/null
+++ b/node_modules/es-abstract/2021/Invoke.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var IsArray = require('./IsArray');
+var GetV = require('./GetV');
+var IsPropertyKey = require('./IsPropertyKey');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-invoke
+
+module.exports = function Invoke(O, P) {
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ var argumentsList = arguments.length > 2 ? arguments[2] : [];
+ if (!IsArray(argumentsList)) {
+ throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
+ }
+ var func = GetV(O, P);
+ return Call(func, O, argumentsList);
+};
diff --git a/node_modules/es-abstract/2021/IsAccessorDescriptor.js b/node_modules/es-abstract/2021/IsAccessorDescriptor.js
new file mode 100644
index 0000000..78563e7
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsAccessorDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
+
+module.exports = function IsAccessorDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/es-abstract/2021/IsArray.js b/node_modules/es-abstract/2021/IsArray.js
new file mode 100644
index 0000000..f933cec
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsArray.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Array = GetIntrinsic('%Array%');
+
+// eslint-disable-next-line global-require
+var toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isarray
+
+module.exports = $Array.isArray || function IsArray(argument) {
+ return toStr(argument) === '[object Array]';
+};
diff --git a/node_modules/es-abstract/2021/IsBigIntElementType.js b/node_modules/es-abstract/2021/IsBigIntElementType.js
new file mode 100644
index 0000000..e3f58a9
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsBigIntElementType.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://262.ecma-international.org/11.0/#sec-isbigintelementtype
+
+module.exports = function IsBigIntElementType(type) {
+ return type === 'BigUint64' || type === 'BigInt64';
+};
diff --git a/node_modules/es-abstract/2021/IsCallable.js b/node_modules/es-abstract/2021/IsCallable.js
new file mode 100644
index 0000000..3a69b19
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsCallable.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://262.ecma-international.org/5.1/#sec-9.11
+
+module.exports = require('is-callable');
diff --git a/node_modules/es-abstract/2021/IsCompatiblePropertyDescriptor.js b/node_modules/es-abstract/2021/IsCompatiblePropertyDescriptor.js
new file mode 100644
index 0000000..8bdaf3e
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsCompatiblePropertyDescriptor.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://262.ecma-international.org/6.0/#sec-iscompatiblepropertydescriptor
+
+module.exports = function IsCompatiblePropertyDescriptor(Extensible, Desc, Current) {
+ return ValidateAndApplyPropertyDescriptor(undefined, undefined, Extensible, Desc, Current);
+};
diff --git a/node_modules/es-abstract/2021/IsConcatSpreadable.js b/node_modules/es-abstract/2021/IsConcatSpreadable.js
new file mode 100644
index 0000000..141b334
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsConcatSpreadable.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $isConcatSpreadable = GetIntrinsic('%Symbol.isConcatSpreadable%', true);
+
+var Get = require('./Get');
+var IsArray = require('./IsArray');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isconcatspreadable
+
+module.exports = function IsConcatSpreadable(O) {
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ if ($isConcatSpreadable) {
+ var spreadable = Get(O, $isConcatSpreadable);
+ if (typeof spreadable !== 'undefined') {
+ return ToBoolean(spreadable);
+ }
+ }
+ return IsArray(O);
+};
diff --git a/node_modules/es-abstract/2021/IsConstructor.js b/node_modules/es-abstract/2021/IsConstructor.js
new file mode 100644
index 0000000..fe626e1
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsConstructor.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('../GetIntrinsic.js');
+
+var $construct = GetIntrinsic('%Reflect.construct%', true);
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+try {
+ DefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });
+} catch (e) {
+ // Accessor properties aren't supported
+ DefinePropertyOrThrow = null;
+}
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor
+
+if (DefinePropertyOrThrow && $construct) {
+ var isConstructorMarker = {};
+ var badArrayLike = {};
+ DefinePropertyOrThrow(badArrayLike, 'length', {
+ '[[Get]]': function () {
+ throw isConstructorMarker;
+ },
+ '[[Enumerable]]': true
+ });
+
+ module.exports = function IsConstructor(argument) {
+ try {
+ // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:
+ $construct(argument, badArrayLike);
+ } catch (err) {
+ return err === isConstructorMarker;
+ }
+ };
+} else {
+ module.exports = function IsConstructor(argument) {
+ // unfortunately there's no way to truly check this without try/catch `new argument` in old environments
+ return typeof argument === 'function' && !!argument.prototype;
+ };
+}
diff --git a/node_modules/es-abstract/2021/IsDataDescriptor.js b/node_modules/es-abstract/2021/IsDataDescriptor.js
new file mode 100644
index 0000000..00d14a6
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsDataDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var has = require('has');
+
+var assertRecord = require('../helpers/assertRecord');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
+
+module.exports = function IsDataDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
+ return false;
+ }
+
+ return true;
+};
diff --git a/node_modules/es-abstract/2021/IsExtensible.js b/node_modules/es-abstract/2021/IsExtensible.js
new file mode 100644
index 0000000..9df5b80b
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsExtensible.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $preventExtensions = $Object.preventExtensions;
+var $isExtensible = $Object.isExtensible;
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o
+
+module.exports = $preventExtensions
+ ? function IsExtensible(obj) {
+ return !isPrimitive(obj) && $isExtensible(obj);
+ }
+ : function IsExtensible(obj) {
+ return !isPrimitive(obj);
+ };
diff --git a/node_modules/es-abstract/2021/IsGenericDescriptor.js b/node_modules/es-abstract/2021/IsGenericDescriptor.js
new file mode 100644
index 0000000..95b1d35
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsGenericDescriptor.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var assertRecord = require('../helpers/assertRecord');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isgenericdescriptor
+
+module.exports = function IsGenericDescriptor(Desc) {
+ if (typeof Desc === 'undefined') {
+ return false;
+ }
+
+ assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+
+ if (!IsAccessorDescriptor(Desc) && !IsDataDescriptor(Desc)) {
+ return true;
+ }
+
+ return false;
+};
diff --git a/node_modules/es-abstract/2021/IsIntegralNumber.js b/node_modules/es-abstract/2021/IsIntegralNumber.js
new file mode 100644
index 0000000..0a02bfe
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsIntegralNumber.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var abs = require('./abs');
+var floor = require('./floor');
+var Type = require('./Type');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+
+// https://tc39.es/ecma262/#sec-isintegralnumber
+
+module.exports = function IsIntegralNumber(argument) {
+ if (Type(argument) !== 'Number' || $isNaN(argument) || !$isFinite(argument)) {
+ return false;
+ }
+ var absValue = abs(argument);
+ return floor(absValue) === absValue;
+};
diff --git a/node_modules/es-abstract/2021/IsNoTearConfiguration.js b/node_modules/es-abstract/2021/IsNoTearConfiguration.js
new file mode 100644
index 0000000..f0d2808
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsNoTearConfiguration.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var IsUnclampedIntegerElementType = require('./IsUnclampedIntegerElementType');
+var IsBigIntElementType = require('./IsBigIntElementType');
+
+// https://262.ecma-international.org/11.0/#sec-isnotearconfiguration
+
+module.exports = function IsNoTearConfiguration(type, order) {
+ if (IsUnclampedIntegerElementType(type)) {
+ return true;
+ }
+ if (IsBigIntElementType(type) && order !== 'Init' && order !== 'Unordered') {
+ return true;
+ }
+ return false;
+};
diff --git a/node_modules/es-abstract/2021/IsPromise.js b/node_modules/es-abstract/2021/IsPromise.js
new file mode 100644
index 0000000..a551ae0
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsPromise.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var callBound = require('call-bind/callBound');
+
+var $PromiseThen = callBound('Promise.prototype.then', true);
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-ispromise
+
+module.exports = function IsPromise(x) {
+ if (Type(x) !== 'Object') {
+ return false;
+ }
+ if (!$PromiseThen) { // Promises are not supported
+ return false;
+ }
+ try {
+ $PromiseThen(x); // throws if not a promise
+ } catch (e) {
+ return false;
+ }
+ return true;
+};
diff --git a/node_modules/es-abstract/2021/IsPropertyKey.js b/node_modules/es-abstract/2021/IsPropertyKey.js
new file mode 100644
index 0000000..f43ab58
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsPropertyKey.js
@@ -0,0 +1,7 @@
+'use strict';
+
+// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey
+
+module.exports = function IsPropertyKey(argument) {
+ return typeof argument === 'string' || typeof argument === 'symbol';
+};
diff --git a/node_modules/es-abstract/2021/IsRegExp.js b/node_modules/es-abstract/2021/IsRegExp.js
new file mode 100644
index 0000000..e105481
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsRegExp.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $match = GetIntrinsic('%Symbol.match%', true);
+
+var hasRegExpMatcher = require('is-regex');
+
+var ToBoolean = require('./ToBoolean');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-isregexp
+
+module.exports = function IsRegExp(argument) {
+ if (!argument || typeof argument !== 'object') {
+ return false;
+ }
+ if ($match) {
+ var isRegExp = argument[$match];
+ if (typeof isRegExp !== 'undefined') {
+ return ToBoolean(isRegExp);
+ }
+ }
+ return hasRegExpMatcher(argument);
+};
diff --git a/node_modules/es-abstract/2021/IsSharedArrayBuffer.js b/node_modules/es-abstract/2021/IsSharedArrayBuffer.js
new file mode 100644
index 0000000..8e96e33
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsSharedArrayBuffer.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+// https://262.ecma-international.org/8.0/#sec-issharedarraybuffer
+
+module.exports = function IsSharedArrayBuffer(obj) {
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+
+ return isSharedArrayBuffer(obj);
+};
diff --git a/node_modules/es-abstract/2021/IsStringPrefix.js b/node_modules/es-abstract/2021/IsStringPrefix.js
new file mode 100644
index 0000000..4958544
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsStringPrefix.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPrefixOf = require('../helpers/isPrefixOf');
+
+// var callBound = require('call-bind/callBound');
+
+// var $charAt = callBound('String.prototype.charAt');
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/9.0/#sec-isstringprefix
+
+module.exports = function IsStringPrefix(p, q) {
+ if (Type(p) !== 'String') {
+ throw new $TypeError('Assertion failed: "p" must be a String');
+ }
+
+ if (Type(q) !== 'String') {
+ throw new $TypeError('Assertion failed: "q" must be a String');
+ }
+
+ return isPrefixOf(p, q);
+ /*
+ if (p === q || p === '') {
+ return true;
+ }
+
+ var pLength = p.length;
+ var qLength = q.length;
+ if (pLength >= qLength) {
+ return false;
+ }
+
+ // assert: pLength < qLength
+
+ for (var i = 0; i < pLength; i += 1) {
+ if ($charAt(p, i) !== $charAt(q, i)) {
+ return false;
+ }
+ }
+ return true;
+ */
+};
diff --git a/node_modules/es-abstract/2021/IsUnclampedIntegerElementType.js b/node_modules/es-abstract/2021/IsUnclampedIntegerElementType.js
new file mode 100644
index 0000000..15237b1
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsUnclampedIntegerElementType.js
@@ -0,0 +1,12 @@
+'use strict';
+
+// https://262.ecma-international.org/11.0/#sec-isunclampedintegerelementtype
+
+module.exports = function IsUnclampedIntegerElementType(type) {
+ return type === 'Int8'
+ || type === 'Uint8'
+ || type === 'Int16'
+ || type === 'Uint16'
+ || type === 'Int32'
+ || type === 'Uint32';
+};
diff --git a/node_modules/es-abstract/2021/IsUnsignedElementType.js b/node_modules/es-abstract/2021/IsUnsignedElementType.js
new file mode 100644
index 0000000..5eb1e7c
--- /dev/null
+++ b/node_modules/es-abstract/2021/IsUnsignedElementType.js
@@ -0,0 +1,11 @@
+'use strict';
+
+// https://262.ecma-international.org/11.0/#sec-isunsignedelementtype
+
+module.exports = function IsUnsignedElementType(type) {
+ return type === 'Uint8'
+ || type === 'Uint8C'
+ || type === 'Uint16'
+ || type === 'Uint32'
+ || type === 'BigUint64';
+};
diff --git a/node_modules/es-abstract/2021/IterableToList.js b/node_modules/es-abstract/2021/IterableToList.js
new file mode 100644
index 0000000..320ab47
--- /dev/null
+++ b/node_modules/es-abstract/2021/IterableToList.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var callBound = require('call-bind/callBound');
+var $arrayPush = callBound('Array.prototype.push');
+
+var GetIterator = require('./GetIterator');
+var IteratorStep = require('./IteratorStep');
+var IteratorValue = require('./IteratorValue');
+
+// https://262.ecma-international.org/12.0/#sec-iterabletolist
+
+module.exports = function IterableToList(items) {
+ var iterator;
+ if (arguments.length > 1) {
+ iterator = GetIterator(items, 'sync', arguments[1]);
+ } else {
+ iterator = GetIterator(items, 'sync');
+ }
+ var values = [];
+ var next = true;
+ while (next) {
+ next = IteratorStep(iterator);
+ if (next) {
+ var nextValue = IteratorValue(next);
+ $arrayPush(values, nextValue);
+ }
+ }
+ return values;
+};
diff --git a/node_modules/es-abstract/2021/IteratorClose.js b/node_modules/es-abstract/2021/IteratorClose.js
new file mode 100644
index 0000000..dd1118d
--- /dev/null
+++ b/node_modules/es-abstract/2021/IteratorClose.js
@@ -0,0 +1,50 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var GetMethod = require('./GetMethod');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorclose
+
+module.exports = function IteratorClose(iterator, completion) {
+ if (Type(iterator) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterator) is not Object');
+ }
+ if (!IsCallable(completion)) {
+ throw new $TypeError('Assertion failed: completion is not a thunk for a Completion Record');
+ }
+ var completionThunk = completion;
+
+ var iteratorReturn = GetMethod(iterator, 'return');
+
+ if (typeof iteratorReturn === 'undefined') {
+ return completionThunk();
+ }
+
+ var completionRecord;
+ try {
+ var innerResult = Call(iteratorReturn, iterator, []);
+ } catch (e) {
+ // if we hit here, then "e" is the innerResult completion that needs re-throwing
+
+ // if the completion is of type "throw", this will throw.
+ completionThunk();
+ completionThunk = null; // ensure it's not called twice.
+
+ // if not, then return the innerResult completion
+ throw e;
+ }
+ completionRecord = completionThunk(); // if innerResult worked, then throw if the completion does
+ completionThunk = null; // ensure it's not called twice.
+
+ if (Type(innerResult) !== 'Object') {
+ throw new $TypeError('iterator .return must return an object');
+ }
+
+ return completionRecord;
+};
diff --git a/node_modules/es-abstract/2021/IteratorComplete.js b/node_modules/es-abstract/2021/IteratorComplete.js
new file mode 100644
index 0000000..ed4efa3
--- /dev/null
+++ b/node_modules/es-abstract/2021/IteratorComplete.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var ToBoolean = require('./ToBoolean');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorcomplete
+
+module.exports = function IteratorComplete(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return ToBoolean(Get(iterResult, 'done'));
+};
diff --git a/node_modules/es-abstract/2021/IteratorNext.js b/node_modules/es-abstract/2021/IteratorNext.js
new file mode 100644
index 0000000..cf80655
--- /dev/null
+++ b/node_modules/es-abstract/2021/IteratorNext.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Invoke = require('./Invoke');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratornext
+
+module.exports = function IteratorNext(iterator, value) {
+ var result = Invoke(iterator, 'next', arguments.length < 2 ? [] : [value]);
+ if (Type(result) !== 'Object') {
+ throw new $TypeError('iterator next must return an object');
+ }
+ return result;
+};
diff --git a/node_modules/es-abstract/2021/IteratorStep.js b/node_modules/es-abstract/2021/IteratorStep.js
new file mode 100644
index 0000000..41b9d1b
--- /dev/null
+++ b/node_modules/es-abstract/2021/IteratorStep.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var IteratorComplete = require('./IteratorComplete');
+var IteratorNext = require('./IteratorNext');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorstep
+
+module.exports = function IteratorStep(iterator) {
+ var result = IteratorNext(iterator);
+ var done = IteratorComplete(result);
+ return done === true ? false : result;
+};
+
diff --git a/node_modules/es-abstract/2021/IteratorValue.js b/node_modules/es-abstract/2021/IteratorValue.js
new file mode 100644
index 0000000..d15d8ae
--- /dev/null
+++ b/node_modules/es-abstract/2021/IteratorValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-iteratorvalue
+
+module.exports = function IteratorValue(iterResult) {
+ if (Type(iterResult) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(iterResult) is not Object');
+ }
+ return Get(iterResult, 'value');
+};
+
diff --git a/node_modules/es-abstract/2021/LengthOfArrayLike.js b/node_modules/es-abstract/2021/LengthOfArrayLike.js
new file mode 100644
index 0000000..132c4d5
--- /dev/null
+++ b/node_modules/es-abstract/2021/LengthOfArrayLike.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var ToLength = require('./ToLength');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/11.0/#sec-lengthofarraylike
+
+module.exports = function LengthOfArrayLike(obj) {
+ if (Type(obj) !== 'Object') {
+ throw new $TypeError('Assertion failed: `obj` must be an Object');
+ }
+ return ToLength(Get(obj, 'length'));
+};
+
+// TODO: use this all over
diff --git a/node_modules/es-abstract/2021/MakeDate.js b/node_modules/es-abstract/2021/MakeDate.js
new file mode 100644
index 0000000..efeb645
--- /dev/null
+++ b/node_modules/es-abstract/2021/MakeDate.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.13
+
+module.exports = function MakeDate(day, time) {
+ if (!$isFinite(day) || !$isFinite(time)) {
+ return NaN;
+ }
+ return (day * msPerDay) + time;
+};
diff --git a/node_modules/es-abstract/2021/MakeDay.js b/node_modules/es-abstract/2021/MakeDay.js
new file mode 100644
index 0000000..db78bbc
--- /dev/null
+++ b/node_modules/es-abstract/2021/MakeDay.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $DateUTC = GetIntrinsic('%Date.UTC%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var DateFromTime = require('./DateFromTime');
+var Day = require('./Day');
+var floor = require('./floor');
+var modulo = require('./modulo');
+var MonthFromTime = require('./MonthFromTime');
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+var YearFromTime = require('./YearFromTime');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.12
+
+module.exports = function MakeDay(year, month, date) {
+ if (!$isFinite(year) || !$isFinite(month) || !$isFinite(date)) {
+ return NaN;
+ }
+ var y = ToIntegerOrInfinity(year);
+ var m = ToIntegerOrInfinity(month);
+ var dt = ToIntegerOrInfinity(date);
+ var ym = y + floor(m / 12);
+ if (!$isFinite(ym)) {
+ return NaN;
+ }
+ var mn = modulo(m, 12);
+ var t = $DateUTC(ym, mn, 1);
+ if (YearFromTime(t) !== ym || MonthFromTime(t) !== mn || DateFromTime(t) !== 1) {
+ return NaN;
+ }
+ return Day(t) + dt - 1;
+};
diff --git a/node_modules/es-abstract/2021/MakeTime.js b/node_modules/es-abstract/2021/MakeTime.js
new file mode 100644
index 0000000..330d3bd
--- /dev/null
+++ b/node_modules/es-abstract/2021/MakeTime.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var $isFinite = require('../helpers/isFinite');
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var msPerMinute = timeConstants.msPerMinute;
+var msPerHour = timeConstants.msPerHour;
+
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+
+// https://ecma-international.org/ecma-262/5.1/#sec-15.9.1.11
+
+module.exports = function MakeTime(hour, min, sec, ms) {
+ if (!$isFinite(hour) || !$isFinite(min) || !$isFinite(sec) || !$isFinite(ms)) {
+ return NaN;
+ }
+ var h = ToIntegerOrInfinity(hour);
+ var m = ToIntegerOrInfinity(min);
+ var s = ToIntegerOrInfinity(sec);
+ var milli = ToIntegerOrInfinity(ms);
+ var t = (h * msPerHour) + (m * msPerMinute) + (s * msPerSecond) + milli;
+ return t;
+};
diff --git a/node_modules/es-abstract/2021/MinFromTime.js b/node_modules/es-abstract/2021/MinFromTime.js
new file mode 100644
index 0000000..a0c631d
--- /dev/null
+++ b/node_modules/es-abstract/2021/MinFromTime.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerMinute = timeConstants.msPerMinute;
+var MinutesPerHour = timeConstants.MinutesPerHour;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function MinFromTime(t) {
+ return modulo(floor(t / msPerMinute), MinutesPerHour);
+};
diff --git a/node_modules/es-abstract/2021/MonthFromTime.js b/node_modules/es-abstract/2021/MonthFromTime.js
new file mode 100644
index 0000000..a482a7d
--- /dev/null
+++ b/node_modules/es-abstract/2021/MonthFromTime.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var DayWithinYear = require('./DayWithinYear');
+var InLeapYear = require('./InLeapYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.4
+
+module.exports = function MonthFromTime(t) {
+ var day = DayWithinYear(t);
+ if (0 <= day && day < 31) {
+ return 0;
+ }
+ var leap = InLeapYear(t);
+ if (31 <= day && day < (59 + leap)) {
+ return 1;
+ }
+ if ((59 + leap) <= day && day < (90 + leap)) {
+ return 2;
+ }
+ if ((90 + leap) <= day && day < (120 + leap)) {
+ return 3;
+ }
+ if ((120 + leap) <= day && day < (151 + leap)) {
+ return 4;
+ }
+ if ((151 + leap) <= day && day < (181 + leap)) {
+ return 5;
+ }
+ if ((181 + leap) <= day && day < (212 + leap)) {
+ return 6;
+ }
+ if ((212 + leap) <= day && day < (243 + leap)) {
+ return 7;
+ }
+ if ((243 + leap) <= day && day < (273 + leap)) {
+ return 8;
+ }
+ if ((273 + leap) <= day && day < (304 + leap)) {
+ return 9;
+ }
+ if ((304 + leap) <= day && day < (334 + leap)) {
+ return 10;
+ }
+ if ((334 + leap) <= day && day < (365 + leap)) {
+ return 11;
+ }
+};
diff --git a/node_modules/es-abstract/2021/Number/add.js b/node_modules/es-abstract/2021/Number/add.js
new file mode 100644
index 0000000..8d6271f
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/add.js
@@ -0,0 +1,36 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isFinite = require('../../helpers/isFinite');
+var isNaN = require('../../helpers/isNaN');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-add
+
+module.exports = function NumberAdd(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+
+ if (isNaN(x) || isNaN(y) || (x === Infinity && y === -Infinity) || (x === -Infinity && y === Infinity)) {
+ return NaN;
+ }
+
+ if (!isFinite(x)) {
+ return x;
+ }
+ if (!isFinite(y)) {
+ return y;
+ }
+
+ if (x === y && x === 0) { // both zeroes
+ return Infinity / x === -Infinity && Infinity / y === -Infinity ? -0 : +0;
+ }
+
+ // shortcut for the actual spec mechanics
+ return x + y;
+};
diff --git a/node_modules/es-abstract/2021/Number/bitwiseAND.js b/node_modules/es-abstract/2021/Number/bitwiseAND.js
new file mode 100644
index 0000000..a715980
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/bitwiseAND.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var NumberBitwiseOp = require('../NumberBitwiseOp');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseAND
+
+module.exports = function NumberBitwiseAND(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ return NumberBitwiseOp('&', x, y);
+};
diff --git a/node_modules/es-abstract/2021/Number/bitwiseNOT.js b/node_modules/es-abstract/2021/Number/bitwiseNOT.js
new file mode 100644
index 0000000..ae8032a
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/bitwiseNOT.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var ToInt32 = require('../ToInt32');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseNOT
+
+module.exports = function NumberBitwiseNOT(x) {
+ if (Type(x) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` argument must be a Number');
+ }
+ var oldValue = ToInt32(x);
+ // Return the result of applying the bitwise operator op to lnum and rnum. The result is a signed 32-bit integer.
+ return ~oldValue;
+};
diff --git a/node_modules/es-abstract/2021/Number/bitwiseOR.js b/node_modules/es-abstract/2021/Number/bitwiseOR.js
new file mode 100644
index 0000000..c5e67b9
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/bitwiseOR.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var NumberBitwiseOp = require('../NumberBitwiseOp');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseOR
+
+module.exports = function NumberBitwiseOR(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ return NumberBitwiseOp('|', x, y);
+};
diff --git a/node_modules/es-abstract/2021/Number/bitwiseXOR.js b/node_modules/es-abstract/2021/Number/bitwiseXOR.js
new file mode 100644
index 0000000..a4030e9
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/bitwiseXOR.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var NumberBitwiseOp = require('../NumberBitwiseOp');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-bitwiseXOR
+
+module.exports = function NumberBitwiseXOR(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ return NumberBitwiseOp('^', x, y);
+};
diff --git a/node_modules/es-abstract/2021/Number/divide.js b/node_modules/es-abstract/2021/Number/divide.js
new file mode 100644
index 0000000..6524462
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/divide.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isFinite = require('../../helpers/isFinite');
+var isNaN = require('../../helpers/isNaN');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-divide
+
+module.exports = function NumberDivide(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ if (isNaN(x) || isNaN(y) || (!isFinite(x) && !isFinite(y))) {
+ return NaN;
+ }
+ // shortcut for the actual spec mechanics
+ return x / y;
+};
diff --git a/node_modules/es-abstract/2021/Number/equal.js b/node_modules/es-abstract/2021/Number/equal.js
new file mode 100644
index 0000000..db68afa
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/equal.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isNaN = require('../../helpers/isNaN');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-equal
+
+module.exports = function NumberEqual(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ if (isNaN(x) || isNaN(y)) {
+ return false;
+ }
+ // shortcut for the actual spec mechanics
+ return x === y;
+};
diff --git a/node_modules/es-abstract/2021/Number/exponentiate.js b/node_modules/es-abstract/2021/Number/exponentiate.js
new file mode 100644
index 0000000..bafa7b1
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/exponentiate.js
@@ -0,0 +1,77 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+// var isNegativeZero = require('is-negative-zero');
+
+var $pow = GetIntrinsic('%Math.pow%');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+/*
+var abs = require('../../helpers/abs');
+var isFinite = require('../../helpers/isFinite');
+var isNaN = require('../../helpers/isNaN');
+
+var IsInteger = require('../IsInteger');
+*/
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-exponentiate
+
+/* eslint max-lines-per-function: 0, max-statements: 0 */
+
+module.exports = function NumberExponentiate(base, exponent) {
+ if (Type(base) !== 'Number' || Type(exponent) !== 'Number') {
+ throw new $TypeError('Assertion failed: `base` and `exponent` arguments must be Numbers');
+ }
+ return $pow(base, exponent);
+ /*
+ if (isNaN(exponent)) {
+ return NaN;
+ }
+ if (exponent === 0) {
+ return 1;
+ }
+ if (isNaN(base)) {
+ return NaN;
+ }
+ var aB = abs(base);
+ if (aB > 1 && exponent === Infinity) {
+ return Infinity;
+ }
+ if (aB > 1 && exponent === -Infinity) {
+ return 0;
+ }
+ if (aB === 1 && (exponent === Infinity || exponent === -Infinity)) {
+ return NaN;
+ }
+ if (aB < 1 && exponent === Infinity) {
+ return +0;
+ }
+ if (aB < 1 && exponent === -Infinity) {
+ return Infinity;
+ }
+ if (base === Infinity) {
+ return exponent > 0 ? Infinity : 0;
+ }
+ if (base === -Infinity) {
+ var isOdd = true;
+ if (exponent > 0) {
+ return isOdd ? -Infinity : Infinity;
+ }
+ return isOdd ? -0 : 0;
+ }
+ if (exponent > 0) {
+ return isNegativeZero(base) ? Infinity : 0;
+ }
+ if (isNegativeZero(base)) {
+ if (exponent > 0) {
+ return isOdd ? -0 : 0;
+ }
+ return isOdd ? -Infinity : Infinity;
+ }
+ if (base < 0 && isFinite(base) && isFinite(exponent) && !IsInteger(exponent)) {
+ return NaN;
+ }
+ */
+};
diff --git a/node_modules/es-abstract/2021/Number/index.js b/node_modules/es-abstract/2021/Number/index.js
new file mode 100644
index 0000000..63ec52d
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/index.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var add = require('./add');
+var bitwiseAND = require('./bitwiseAND');
+var bitwiseNOT = require('./bitwiseNOT');
+var bitwiseOR = require('./bitwiseOR');
+var bitwiseXOR = require('./bitwiseXOR');
+var divide = require('./divide');
+var equal = require('./equal');
+var exponentiate = require('./exponentiate');
+var leftShift = require('./leftShift');
+var lessThan = require('./lessThan');
+var multiply = require('./multiply');
+var remainder = require('./remainder');
+var sameValue = require('./sameValue');
+var sameValueZero = require('./sameValueZero');
+var signedRightShift = require('./signedRightShift');
+var subtract = require('./subtract');
+var toString = require('./toString');
+var unaryMinus = require('./unaryMinus');
+var unsignedRightShift = require('./unsignedRightShift');
+
+module.exports = {
+ add: add,
+ bitwiseAND: bitwiseAND,
+ bitwiseNOT: bitwiseNOT,
+ bitwiseOR: bitwiseOR,
+ bitwiseXOR: bitwiseXOR,
+ divide: divide,
+ equal: equal,
+ exponentiate: exponentiate,
+ leftShift: leftShift,
+ lessThan: lessThan,
+ multiply: multiply,
+ remainder: remainder,
+ sameValue: sameValue,
+ sameValueZero: sameValueZero,
+ signedRightShift: signedRightShift,
+ subtract: subtract,
+ toString: toString,
+ unaryMinus: unaryMinus,
+ unsignedRightShift: unsignedRightShift
+};
diff --git a/node_modules/es-abstract/2021/Number/leftShift.js b/node_modules/es-abstract/2021/Number/leftShift.js
new file mode 100644
index 0000000..023b339
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/leftShift.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var ToInt32 = require('../ToInt32');
+var ToUint32 = require('../ToUint32');
+var modulo = require('../modulo');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift
+
+module.exports = function NumberLeftShift(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+
+ var lnum = ToInt32(x);
+ var rnum = ToUint32(y);
+
+ var shiftCount = modulo(rnum, 32);
+
+ return lnum << shiftCount;
+};
diff --git a/node_modules/es-abstract/2021/Number/lessThan.js b/node_modules/es-abstract/2021/Number/lessThan.js
new file mode 100644
index 0000000..5fcac24
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/lessThan.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isNaN = require('../../helpers/isNaN');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-lessThan
+
+module.exports = function NumberLessThan(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+
+ // If x is NaN, return undefined.
+ // If y is NaN, return undefined.
+ if (isNaN(x) || isNaN(y)) {
+ return void undefined;
+ }
+
+ // shortcut for the actual spec mechanics
+ return x < y;
+};
diff --git a/node_modules/es-abstract/2021/Number/multiply.js b/node_modules/es-abstract/2021/Number/multiply.js
new file mode 100644
index 0000000..2a6c478
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/multiply.js
@@ -0,0 +1,33 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isNaN = require('../../helpers/isNaN');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-multiply
+
+module.exports = function NumberMultiply(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+
+ if (isNaN(x) || isNaN(y) || (x === 0 && !isFinite(y)) || (!isFinite(x) && y === 0)) {
+ return NaN;
+ }
+ if (!isFinite(x) && !isFinite(y)) {
+ return x === y ? Infinity : -Infinity;
+ }
+ if (!isFinite(x) && y !== 0) {
+ return x > 0 ? Infinity : -Infinity;
+ }
+ if (!isFinite(y) && x !== 0) {
+ return y > 0 ? Infinity : -Infinity;
+ }
+
+ // shortcut for the actual spec mechanics
+ return x * y;
+};
diff --git a/node_modules/es-abstract/2021/Number/remainder.js b/node_modules/es-abstract/2021/Number/remainder.js
new file mode 100644
index 0000000..c9a7c2d
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/remainder.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isNaN = require('../../helpers/isNaN');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-remainder
+
+module.exports = function NumberRemainder(n, d) {
+ if (Type(n) !== 'Number' || Type(d) !== 'Number') {
+ throw new $TypeError('Assertion failed: `n` and `d` arguments must be Numbers');
+ }
+
+ // If either operand is NaN, the result is NaN.
+ // If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN.
+ if (isNaN(n) || isNaN(d) || !isFinite(n) || d === 0) {
+ return NaN;
+ }
+
+ // If the dividend is finite and the divisor is an infinity, the result equals the dividend.
+ // If the dividend is a zero and the divisor is nonzero and finite, the result is the same as the dividend.
+ if (!isFinite(d) || n === 0) {
+ return n;
+ }
+
+ // In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved…
+ return n % d;
+};
diff --git a/node_modules/es-abstract/2021/Number/sameValue.js b/node_modules/es-abstract/2021/Number/sameValue.js
new file mode 100644
index 0000000..19efc37
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/sameValue.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var isNegativeZero = require('is-negative-zero');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+var NumberSameValueZero = require('./sameValueZero');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValue
+
+module.exports = function NumberSameValue(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ if (x === 0 && y === 0) {
+ return !(isNegativeZero(x) ^ isNegativeZero(y));
+ }
+ return NumberSameValueZero(x, y);
+};
diff --git a/node_modules/es-abstract/2021/Number/sameValueZero.js b/node_modules/es-abstract/2021/Number/sameValueZero.js
new file mode 100644
index 0000000..5688198
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/sameValueZero.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isNaN = require('../../helpers/isNaN');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-sameValueZero
+
+module.exports = function NumberSameValueZero(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+
+ var xNaN = isNaN(x);
+ var yNaN = isNaN(y);
+ if (xNaN || yNaN) {
+ return xNaN === yNaN;
+ }
+ return x === y;
+};
diff --git a/node_modules/es-abstract/2021/Number/signedRightShift.js b/node_modules/es-abstract/2021/Number/signedRightShift.js
new file mode 100644
index 0000000..025f39a
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/signedRightShift.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var ToInt32 = require('../ToInt32');
+var ToUint32 = require('../ToUint32');
+var modulo = require('../modulo');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift
+
+module.exports = function NumberSignedRightShift(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+
+ var lnum = ToInt32(x);
+ var rnum = ToUint32(y);
+
+ var shiftCount = modulo(rnum, 32);
+
+ return lnum >> shiftCount;
+};
diff --git a/node_modules/es-abstract/2021/Number/subtract.js b/node_modules/es-abstract/2021/Number/subtract.js
new file mode 100644
index 0000000..29a29e6
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/subtract.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+var NumberAdd = require('./add');
+var NumberUnaryMinus = require('./unaryMinus');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract
+
+module.exports = function NumberSubtract(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ return NumberAdd(x, NumberUnaryMinus(y));
+};
diff --git a/node_modules/es-abstract/2021/Number/toString.js b/node_modules/es-abstract/2021/Number/toString.js
new file mode 100644
index 0000000..4f13316
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/toString.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-tostring
+
+module.exports = function NumberToString(x) {
+ if (Type(x) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` must be a Number');
+ }
+
+ return $String(x);
+};
diff --git a/node_modules/es-abstract/2021/Number/unaryMinus.js b/node_modules/es-abstract/2021/Number/unaryMinus.js
new file mode 100644
index 0000000..794582ad
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/unaryMinus.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isNaN = require('../../helpers/isNaN');
+
+var Type = require('../Type');
+
+// https://262.ecma-international.org/11.0/#sec-numeric-types-number-unaryMinus
+
+module.exports = function NumberUnaryMinus(x) {
+ if (Type(x) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` argument must be a Number');
+ }
+ if (isNaN(x)) {
+ return NaN;
+ }
+ return -x;
+};
diff --git a/node_modules/es-abstract/2021/Number/unsignedRightShift.js b/node_modules/es-abstract/2021/Number/unsignedRightShift.js
new file mode 100644
index 0000000..2eb967a
--- /dev/null
+++ b/node_modules/es-abstract/2021/Number/unsignedRightShift.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var ToInt32 = require('../ToInt32');
+var ToUint32 = require('../ToUint32');
+var modulo = require('../modulo');
+var Type = require('../Type');
+
+// https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift
+
+module.exports = function NumberUnsignedRightShift(x, y) {
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+
+ var lnum = ToInt32(x);
+ var rnum = ToUint32(y);
+
+ var shiftCount = modulo(rnum, 32);
+
+ return lnum >>> shiftCount;
+};
diff --git a/node_modules/es-abstract/2021/NumberBitwiseOp.js b/node_modules/es-abstract/2021/NumberBitwiseOp.js
new file mode 100644
index 0000000..11425ff
--- /dev/null
+++ b/node_modules/es-abstract/2021/NumberBitwiseOp.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var ToInt32 = require('./ToInt32');
+var ToUint32 = require('./ToUint32');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/11.0/#sec-numberbitwiseop
+
+module.exports = function NumberBitwiseOp(op, x, y) {
+ if (op !== '&' && op !== '|' && op !== '^') {
+ throw new $TypeError('Assertion failed: `op` must be `&`, `|`, or `^`');
+ }
+ if (Type(x) !== 'Number' || Type(y) !== 'Number') {
+ throw new $TypeError('Assertion failed: `x` and `y` arguments must be Numbers');
+ }
+ var lnum = ToInt32(x);
+ var rnum = ToUint32(y);
+ if (op === '&') {
+ return lnum & rnum;
+ }
+ if (op === '|') {
+ return lnum | rnum;
+ }
+ return lnum ^ rnum;
+};
diff --git a/node_modules/es-abstract/2021/NumberToBigInt.js b/node_modules/es-abstract/2021/NumberToBigInt.js
new file mode 100644
index 0000000..018afdd
--- /dev/null
+++ b/node_modules/es-abstract/2021/NumberToBigInt.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $RangeError = GetIntrinsic('%RangeError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsIntegralNumber = require('./IsIntegralNumber');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/11.0/#sec-numbertobigint
+
+module.exports = function NumberToBigInt(number) {
+ if (Type(number) !== 'Number') {
+ throw new $TypeError('Assertion failed: `number` must be a String');
+ }
+ if (!IsIntegralNumber(number)) {
+ throw new $RangeError('The number ' + number + ' cannot be converted to a BigInt because it is not an integer');
+ }
+ return $BigInt(number);
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryCreateFromConstructor.js b/node_modules/es-abstract/2021/OrdinaryCreateFromConstructor.js
new file mode 100644
index 0000000..8f3bb82
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryCreateFromConstructor.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var GetPrototypeFromConstructor = require('./GetPrototypeFromConstructor');
+var IsArray = require('./IsArray');
+var OrdinaryObjectCreate = require('./OrdinaryObjectCreate');
+
+// https://262.ecma-international.org/6.0/#sec-ordinarycreatefromconstructor
+
+module.exports = function OrdinaryCreateFromConstructor(constructor, intrinsicDefaultProto) {
+ GetIntrinsic(intrinsicDefaultProto); // throws if not a valid intrinsic
+ var proto = GetPrototypeFromConstructor(constructor, intrinsicDefaultProto);
+ var slots = arguments.length < 3 ? [] : arguments[2];
+ if (!IsArray(slots)) {
+ throw new $TypeError('Assertion failed: if provided, `internalSlotsList` must be a List');
+ }
+ return OrdinaryObjectCreate(proto, slots);
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryDefineOwnProperty.js b/node_modules/es-abstract/2021/OrdinaryDefineOwnProperty.js
new file mode 100644
index 0000000..5d33aa6
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryDefineOwnProperty.js
@@ -0,0 +1,61 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var IsPropertyKey = require('./IsPropertyKey');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+var ValidateAndApplyPropertyDescriptor = require('./ValidateAndApplyPropertyDescriptor');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-ordinarydefineownproperty
+
+module.exports = function OrdinaryDefineOwnProperty(O, P, Desc) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (!$gOPD) {
+ // ES3/IE 8 fallback
+ if (IsAccessorDescriptor(Desc)) {
+ throw new $SyntaxError('This environment does not support accessor property descriptors.');
+ }
+ var creatingNormalDataProperty = !(P in O)
+ && Desc['[[Writable]]']
+ && Desc['[[Enumerable]]']
+ && Desc['[[Configurable]]']
+ && '[[Value]]' in Desc;
+ var settingExistingDataProperty = (P in O)
+ && (!('[[Configurable]]' in Desc) || Desc['[[Configurable]]'])
+ && (!('[[Enumerable]]' in Desc) || Desc['[[Enumerable]]'])
+ && (!('[[Writable]]' in Desc) || Desc['[[Writable]]'])
+ && '[[Value]]' in Desc;
+ if (creatingNormalDataProperty || settingExistingDataProperty) {
+ O[P] = Desc['[[Value]]']; // eslint-disable-line no-param-reassign
+ return SameValue(O[P], Desc['[[Value]]']);
+ }
+ throw new $SyntaxError('This environment does not support defining non-writable, non-enumerable, or non-configurable properties');
+ }
+ var desc = $gOPD(O, P);
+ var current = desc && ToPropertyDescriptor(desc);
+ var extensible = IsExtensible(O);
+ return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current);
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryGetOwnProperty.js b/node_modules/es-abstract/2021/OrdinaryGetOwnProperty.js
new file mode 100644
index 0000000..3d11e9f
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryGetOwnProperty.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+
+var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+
+var has = require('has');
+
+var IsArray = require('./IsArray');
+var IsPropertyKey = require('./IsPropertyKey');
+var IsRegExp = require('./IsRegExp');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
+
+module.exports = function OrdinaryGetOwnProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ if (!has(O, P)) {
+ return void 0;
+ }
+ if (!$gOPD) {
+ // ES3 / IE 8 fallback
+ var arrayLength = IsArray(O) && P === 'length';
+ var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
+ return {
+ '[[Configurable]]': !(arrayLength || regexLastIndex),
+ '[[Enumerable]]': $isEnumerable(O, P),
+ '[[Value]]': O[P],
+ '[[Writable]]': true
+ };
+ }
+ return ToPropertyDescriptor($gOPD(O, P));
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryGetPrototypeOf.js b/node_modules/es-abstract/2021/OrdinaryGetPrototypeOf.js
new file mode 100644
index 0000000..ba17b98
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryGetPrototypeOf.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $getProto = require('../helpers/getProto');
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/7.0/#sec-ordinarygetprototypeof
+
+module.exports = function OrdinaryGetPrototypeOf(O) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be an Object');
+ }
+ if (!$getProto) {
+ throw new $TypeError('This environment does not support fetching prototypes.');
+ }
+ return $getProto(O);
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryHasInstance.js b/node_modules/es-abstract/2021/OrdinaryHasInstance.js
new file mode 100644
index 0000000..85a240c
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryHasInstance.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasinstance
+
+module.exports = function OrdinaryHasInstance(C, O) {
+ if (IsCallable(C) === false) {
+ return false;
+ }
+ if (Type(O) !== 'Object') {
+ return false;
+ }
+ var P = Get(C, 'prototype');
+ if (Type(P) !== 'Object') {
+ throw new $TypeError('OrdinaryHasInstance called on an object with an invalid prototype property.');
+ }
+ return O instanceof C;
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryHasProperty.js b/node_modules/es-abstract/2021/OrdinaryHasProperty.js
new file mode 100644
index 0000000..dd09ca3
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryHasProperty.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-ordinaryhasproperty
+
+module.exports = function OrdinaryHasProperty(O, P) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: P must be a Property Key');
+ }
+ return P in O;
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryObjectCreate.js b/node_modules/es-abstract/2021/OrdinaryObjectCreate.js
new file mode 100644
index 0000000..34810cd
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryObjectCreate.js
@@ -0,0 +1,46 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $ObjectCreate = GetIntrinsic('%Object.create%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var IsArray = require('./IsArray');
+var Type = require('./Type');
+
+var hasProto = !({ __proto__: null } instanceof Object);
+
+// https://262.ecma-international.org/6.0/#sec-objectcreate
+
+module.exports = function OrdinaryObjectCreate(proto) {
+ if (proto !== null && Type(proto) !== 'Object') {
+ throw new $TypeError('Assertion failed: `proto` must be null or an object');
+ }
+ var additionalInternalSlotsList = arguments.length < 2 ? [] : arguments[1];
+ if (!IsArray(additionalInternalSlotsList)) {
+ throw new $TypeError('Assertion failed: `additionalInternalSlotsList` must be an Array');
+ }
+ // var internalSlotsList = ['[[Prototype]]', '[[Extensible]]'];
+ if (additionalInternalSlotsList.length > 0) {
+ throw new $SyntaxError('es-abstract does not yet support internal slots');
+ // internalSlotsList.push(...additionalInternalSlotsList);
+ }
+ // var O = MakeBasicObject(internalSlotsList);
+ // setProto(O, proto);
+ // return O;
+
+ if ($ObjectCreate) {
+ return $ObjectCreate(proto);
+ }
+ if (hasProto) {
+ return { __proto__: proto };
+ }
+
+ if (proto === null) {
+ throw new $SyntaxError('native Object.create support is required to create null objects');
+ }
+ var T = function T() {};
+ T.prototype = proto;
+ return new T();
+};
diff --git a/node_modules/es-abstract/2021/OrdinarySetPrototypeOf.js b/node_modules/es-abstract/2021/OrdinarySetPrototypeOf.js
new file mode 100644
index 0000000..d0ff7a7
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinarySetPrototypeOf.js
@@ -0,0 +1,53 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $setProto = require('../helpers/setProto');
+
+var OrdinaryGetPrototypeOf = require('./OrdinaryGetPrototypeOf');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/7.0/#sec-ordinarysetprototypeof
+
+module.exports = function OrdinarySetPrototypeOf(O, V) {
+ if (Type(V) !== 'Object' && Type(V) !== 'Null') {
+ throw new $TypeError('Assertion failed: V must be Object or Null');
+ }
+ /*
+ var extensible = IsExtensible(O);
+ var current = OrdinaryGetPrototypeOf(O);
+ if (SameValue(V, current)) {
+ return true;
+ }
+ if (!extensible) {
+ return false;
+ }
+ */
+ try {
+ $setProto(O, V);
+ } catch (e) {
+ return false;
+ }
+ return OrdinaryGetPrototypeOf(O) === V;
+ /*
+ var p = V;
+ var done = false;
+ while (!done) {
+ if (p === null) {
+ done = true;
+ } else if (SameValue(p, O)) {
+ return false;
+ } else {
+ if (wat) {
+ done = true;
+ } else {
+ p = p.[[Prototype]];
+ }
+ }
+ }
+ O.[[Prototype]] = V;
+ return true;
+ */
+};
diff --git a/node_modules/es-abstract/2021/OrdinaryToPrimitive.js b/node_modules/es-abstract/2021/OrdinaryToPrimitive.js
new file mode 100644
index 0000000..e1dbe14
--- /dev/null
+++ b/node_modules/es-abstract/2021/OrdinaryToPrimitive.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+var inspect = require('object-inspect');
+
+// https://262.ecma-international.org/8.0/#sec-ordinarytoprimitive
+
+module.exports = function OrdinaryToPrimitive(O, hint) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (/* Type(hint) !== 'String' || */ hint !== 'string' && hint !== 'number') {
+ throw new $TypeError('Assertion failed: `hint` must be "string" or "number"');
+ }
+
+ var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
+
+ for (var i = 0; i < methodNames.length; i += 1) {
+ var name = methodNames[i];
+ var method = Get(O, name);
+ if (IsCallable(method)) {
+ var result = Call(method, O);
+ if (Type(result) !== 'Object') {
+ return result;
+ }
+ }
+ }
+
+ throw new $TypeError('No primitive value for ' + inspect(O));
+};
diff --git a/node_modules/es-abstract/2021/PromiseResolve.js b/node_modules/es-abstract/2021/PromiseResolve.js
new file mode 100644
index 0000000..6474b79
--- /dev/null
+++ b/node_modules/es-abstract/2021/PromiseResolve.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBind = require('call-bind');
+
+var $resolve = GetIntrinsic('%Promise.resolve%', true);
+var $PromiseResolve = $resolve && callBind($resolve);
+
+// https://262.ecma-international.org/9.0/#sec-promise-resolve
+
+module.exports = function PromiseResolve(C, x) {
+ if (!$PromiseResolve) {
+ throw new SyntaxError('This environment does not support Promises.');
+ }
+ return $PromiseResolve(C, x);
+};
+
diff --git a/node_modules/es-abstract/2021/QuoteJSONString.js b/node_modules/es-abstract/2021/QuoteJSONString.js
new file mode 100644
index 0000000..0deebec
--- /dev/null
+++ b/node_modules/es-abstract/2021/QuoteJSONString.js
@@ -0,0 +1,54 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+var forEach = require('../helpers/forEach');
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+
+var StringToCodePoints = require('./StringToCodePoints');
+var Type = require('./Type');
+var UnicodeEscape = require('./UnicodeEscape');
+var UTF16EncodeCodePoint = require('./UTF16EncodeCodePoint');
+
+var has = require('has');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-quotejsonstring
+
+var escapes = {
+ '\u0008': '\\b',
+ '\u0009': '\\t',
+ '\u000A': '\\n',
+ '\u000C': '\\f',
+ '\u000D': '\\r',
+ '\u0022': '\\"',
+ '\u005c': '\\\\'
+};
+
+module.exports = function QuoteJSONString(value) {
+ if (Type(value) !== 'String') {
+ throw new $TypeError('Assertion failed: `value` must be a String');
+ }
+ var product = '"';
+ if (value) {
+ forEach(StringToCodePoints(value), function (C) {
+ if (has(escapes, C)) {
+ product += escapes[C];
+ } else {
+ var cCharCode = $charCodeAt(C, 0);
+ if (cCharCode < 0x20 || isLeadingSurrogate(C) || isTrailingSurrogate(C)) {
+ product += UnicodeEscape(C);
+ } else {
+ product += UTF16EncodeCodePoint(cCharCode);
+ }
+ }
+ });
+ }
+ product += '"';
+ return product;
+};
diff --git a/node_modules/es-abstract/2021/RegExpCreate.js b/node_modules/es-abstract/2021/RegExpCreate.js
new file mode 100644
index 0000000..68e3160
--- /dev/null
+++ b/node_modules/es-abstract/2021/RegExpCreate.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $RegExp = GetIntrinsic('%RegExp%');
+
+// var RegExpAlloc = require('./RegExpAlloc');
+// var RegExpInitialize = require('./RegExpInitialize');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/6.0/#sec-regexpcreate
+
+module.exports = function RegExpCreate(P, F) {
+ // var obj = RegExpAlloc($RegExp);
+ // return RegExpInitialize(obj, P, F);
+
+ // covers spec mechanics; bypass regex brand checking
+ var pattern = typeof P === 'undefined' ? '' : ToString(P);
+ var flags = typeof F === 'undefined' ? '' : ToString(F);
+ return new $RegExp(pattern, flags);
+};
diff --git a/node_modules/es-abstract/2021/RegExpExec.js b/node_modules/es-abstract/2021/RegExpExec.js
new file mode 100644
index 0000000..29fee17
--- /dev/null
+++ b/node_modules/es-abstract/2021/RegExpExec.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var regexExec = require('call-bind/callBound')('RegExp.prototype.exec');
+
+var Call = require('./Call');
+var Get = require('./Get');
+var IsCallable = require('./IsCallable');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-regexpexec
+
+module.exports = function RegExpExec(R, S) {
+ if (Type(R) !== 'Object') {
+ throw new $TypeError('Assertion failed: `R` must be an Object');
+ }
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ var exec = Get(R, 'exec');
+ if (IsCallable(exec)) {
+ var result = Call(exec, R, [S]);
+ if (result === null || Type(result) === 'Object') {
+ return result;
+ }
+ throw new $TypeError('"exec" method must return `null` or an Object');
+ }
+ return regexExec(R, S);
+};
diff --git a/node_modules/es-abstract/2021/RequireObjectCoercible.js b/node_modules/es-abstract/2021/RequireObjectCoercible.js
new file mode 100644
index 0000000..9008359
--- /dev/null
+++ b/node_modules/es-abstract/2021/RequireObjectCoercible.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../5/CheckObjectCoercible');
diff --git a/node_modules/es-abstract/2021/SameValue.js b/node_modules/es-abstract/2021/SameValue.js
new file mode 100644
index 0000000..b73939b
--- /dev/null
+++ b/node_modules/es-abstract/2021/SameValue.js
@@ -0,0 +1,13 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// http://262.ecma-international.org/5.1/#sec-9.12
+
+module.exports = function SameValue(x, y) {
+ if (x === y) { // 0 === -0, but they are not identical.
+ if (x === 0) { return 1 / x === 1 / y; }
+ return true;
+ }
+ return $isNaN(x) && $isNaN(y);
+};
diff --git a/node_modules/es-abstract/2021/SameValueNonNumeric.js b/node_modules/es-abstract/2021/SameValueNonNumeric.js
new file mode 100644
index 0000000..f7ef12c
--- /dev/null
+++ b/node_modules/es-abstract/2021/SameValueNonNumeric.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/11.0/#sec-samevaluenonnumeric
+
+module.exports = function SameValueNonNumeric(x, y) {
+ var xType = Type(x);
+ if (xType === 'Number' || xType === 'Bigint') {
+ throw new $TypeError('Assertion failed: SameValueNonNumeric does not accept Number or BigInt values');
+ }
+ if (xType !== Type(y)) {
+ throw new $TypeError('SameValueNonNumeric requires two non-numeric values of the same type.');
+ }
+ return SameValue(x, y);
+};
diff --git a/node_modules/es-abstract/2021/SameValueZero.js b/node_modules/es-abstract/2021/SameValueZero.js
new file mode 100644
index 0000000..bf1a148
--- /dev/null
+++ b/node_modules/es-abstract/2021/SameValueZero.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var $isNaN = require('../helpers/isNaN');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-samevaluezero
+
+module.exports = function SameValueZero(x, y) {
+ return (x === y) || ($isNaN(x) && $isNaN(y));
+};
diff --git a/node_modules/es-abstract/2021/SecFromTime.js b/node_modules/es-abstract/2021/SecFromTime.js
new file mode 100644
index 0000000..fc2e445
--- /dev/null
+++ b/node_modules/es-abstract/2021/SecFromTime.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var timeConstants = require('../helpers/timeConstants');
+var msPerSecond = timeConstants.msPerSecond;
+var SecondsPerMinute = timeConstants.SecondsPerMinute;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function SecFromTime(t) {
+ return modulo(floor(t / msPerSecond), SecondsPerMinute);
+};
diff --git a/node_modules/es-abstract/2021/Set.js b/node_modules/es-abstract/2021/Set.js
new file mode 100644
index 0000000..0971498
--- /dev/null
+++ b/node_modules/es-abstract/2021/Set.js
@@ -0,0 +1,47 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated
+var noThrowOnStrictViolation = (function () {
+ try {
+ delete [].length;
+ return true;
+ } catch (e) {
+ return false;
+ }
+}());
+
+// https://ecma-international.org/ecma-262/6.0/#sec-set-o-p-v-throw
+
+module.exports = function Set(O, P, V, Throw) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: `O` must be an Object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: `P` must be a Property Key');
+ }
+ if (Type(Throw) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: `Throw` must be a Boolean');
+ }
+ if (Throw) {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ if (noThrowOnStrictViolation && !SameValue(O[P], V)) {
+ throw new $TypeError('Attempted to assign to readonly property.');
+ }
+ return true;
+ }
+ try {
+ O[P] = V; // eslint-disable-line no-param-reassign
+ return noThrowOnStrictViolation ? SameValue(O[P], V) : true;
+ } catch (e) {
+ return false;
+ }
+
+};
diff --git a/node_modules/es-abstract/2021/SetFunctionLength.js b/node_modules/es-abstract/2021/SetFunctionLength.js
new file mode 100644
index 0000000..8c06b24
--- /dev/null
+++ b/node_modules/es-abstract/2021/SetFunctionLength.js
@@ -0,0 +1,31 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var HasOwnProperty = require('./HasOwnProperty');
+var IsExtensible = require('./IsExtensible');
+var IsIntegralNumber = require('./IsIntegralNumber');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-setfunctionlength
+
+module.exports = function SetFunctionLength(F, length) {
+ if (typeof F !== 'function' || !IsExtensible(F) || HasOwnProperty(F, 'length')) {
+ throw new $TypeError('Assertion failed: `F` must be an extensible function and lack an own `length` property');
+ }
+ if (Type(length) !== 'Number') {
+ throw new $TypeError('Assertion failed: `length` must be a Number');
+ }
+ if (length !== Infinity && (!IsIntegralNumber(length) || length < 0)) {
+ throw new $TypeError('Assertion failed: `length` must be ∞, or an integer >= 0');
+ }
+ return DefinePropertyOrThrow(F, 'length', {
+ '[[Configurable]]': true,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': false
+ });
+};
diff --git a/node_modules/es-abstract/2021/SetFunctionName.js b/node_modules/es-abstract/2021/SetFunctionName.js
new file mode 100644
index 0000000..03ec222
--- /dev/null
+++ b/node_modules/es-abstract/2021/SetFunctionName.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var has = require('has');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var getSymbolDescription = require('get-symbol-description');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsExtensible = require('./IsExtensible');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-setfunctionname
+
+module.exports = function SetFunctionName(F, name) {
+ if (typeof F !== 'function') {
+ throw new $TypeError('Assertion failed: `F` must be a function');
+ }
+ if (!IsExtensible(F) || has(F, 'name')) {
+ throw new $TypeError('Assertion failed: `F` must be extensible, and must not have a `name` own property');
+ }
+ var nameType = Type(name);
+ if (nameType !== 'Symbol' && nameType !== 'String') {
+ throw new $TypeError('Assertion failed: `name` must be a Symbol or a String');
+ }
+ if (nameType === 'Symbol') {
+ var description = getSymbolDescription(name);
+ // eslint-disable-next-line no-param-reassign
+ name = typeof description === 'undefined' ? '' : '[' + description + ']';
+ }
+ if (arguments.length > 2) {
+ var prefix = arguments[2];
+ // eslint-disable-next-line no-param-reassign
+ name = prefix + ' ' + name;
+ }
+ return DefinePropertyOrThrow(F, 'name', {
+ '[[Value]]': name,
+ '[[Writable]]': false,
+ '[[Enumerable]]': false,
+ '[[Configurable]]': true
+ });
+};
diff --git a/node_modules/es-abstract/2021/SetIntegrityLevel.js b/node_modules/es-abstract/2021/SetIntegrityLevel.js
new file mode 100644
index 0000000..1ac7d61
--- /dev/null
+++ b/node_modules/es-abstract/2021/SetIntegrityLevel.js
@@ -0,0 +1,57 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+var $preventExtensions = GetIntrinsic('%Object.preventExtensions%');
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+
+var forEach = require('../helpers/forEach');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-setintegritylevel
+
+module.exports = function SetIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ if (!$preventExtensions) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.preventExtensions` support');
+ }
+ var status = $preventExtensions(O);
+ if (!status) {
+ return false;
+ }
+ if (!$gOPN) {
+ throw new $SyntaxError('SetIntegrityLevel requires native `Object.getOwnPropertyNames` support');
+ }
+ var theKeys = $gOPN(O);
+ if (level === 'sealed') {
+ forEach(theKeys, function (k) {
+ DefinePropertyOrThrow(O, k, { configurable: false });
+ });
+ } else if (level === 'frozen') {
+ forEach(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ var desc;
+ if (IsAccessorDescriptor(ToPropertyDescriptor(currentDesc))) {
+ desc = { configurable: false };
+ } else {
+ desc = { configurable: false, writable: false };
+ }
+ DefinePropertyOrThrow(O, k, desc);
+ }
+ });
+ }
+ return true;
+};
diff --git a/node_modules/es-abstract/2021/SpeciesConstructor.js b/node_modules/es-abstract/2021/SpeciesConstructor.js
new file mode 100644
index 0000000..491eb9b
--- /dev/null
+++ b/node_modules/es-abstract/2021/SpeciesConstructor.js
@@ -0,0 +1,32 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $species = GetIntrinsic('%Symbol.species%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsConstructor = require('./IsConstructor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-speciesconstructor
+
+module.exports = function SpeciesConstructor(O, defaultConstructor) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ var C = O.constructor;
+ if (typeof C === 'undefined') {
+ return defaultConstructor;
+ }
+ if (Type(C) !== 'Object') {
+ throw new $TypeError('O.constructor is not an Object');
+ }
+ var S = $species ? C[$species] : void 0;
+ if (S == null) {
+ return defaultConstructor;
+ }
+ if (IsConstructor(S)) {
+ return S;
+ }
+ throw new $TypeError('no constructor found');
+};
diff --git a/node_modules/es-abstract/2021/SplitMatch.js b/node_modules/es-abstract/2021/SplitMatch.js
new file mode 100644
index 0000000..a1bc6c4
--- /dev/null
+++ b/node_modules/es-abstract/2021/SplitMatch.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsIntegralNumber = require('./IsIntegralNumber');
+var Type = require('./Type');
+
+var $charAt = callBound('String.prototype.charAt');
+
+// https://262.ecma-international.org/6.0/#sec-splitmatch
+
+module.exports = function SplitMatch(S, q, R) {
+ if (Type(S) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+ if (!IsIntegralNumber(q)) {
+ throw new $TypeError('Assertion failed: `q` must be an integer');
+ }
+ if (Type(R) !== 'String') {
+ throw new $TypeError('Assertion failed: `R` must be a String');
+ }
+ var r = R.length;
+ var s = S.length;
+ if (q + r > s) {
+ return false;
+ }
+
+ for (var i = 0; i < r; i += 1) {
+ if ($charAt(S, q + i) !== $charAt(R, i)) {
+ return false;
+ }
+ }
+
+ return q + r;
+};
diff --git a/node_modules/es-abstract/2021/StrictEqualityComparison.js b/node_modules/es-abstract/2021/StrictEqualityComparison.js
new file mode 100644
index 0000000..f3435ba
--- /dev/null
+++ b/node_modules/es-abstract/2021/StrictEqualityComparison.js
@@ -0,0 +1,17 @@
+'use strict';
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/5.1/#sec-11.9.6
+
+module.exports = function StrictEqualityComparison(x, y) {
+ var xType = Type(x);
+ var yType = Type(y);
+ if (xType !== yType) {
+ return false;
+ }
+ if (xType === 'Undefined' || xType === 'Null') {
+ return true;
+ }
+ return x === y; // shortcut for steps 4-7
+};
diff --git a/node_modules/es-abstract/2021/StringCreate.js b/node_modules/es-abstract/2021/StringCreate.js
new file mode 100644
index 0000000..da0c0ea
--- /dev/null
+++ b/node_modules/es-abstract/2021/StringCreate.js
@@ -0,0 +1,40 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+var $StringPrototype = GetIntrinsic('%String.prototype%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefinePropertyOrThrow = require('./DefinePropertyOrThrow');
+var Type = require('./Type');
+
+var setProto = require('../helpers/setProto');
+
+// https://262.ecma-international.org/6.0/#sec-stringcreate
+
+module.exports = function StringCreate(value, prototype) {
+ if (Type(value) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a String');
+ }
+
+ var S = $Object(value);
+ if (S !== $StringPrototype) {
+ if (setProto) {
+ setProto(S, prototype);
+ } else {
+ throw new $SyntaxError('StringCreate: a `proto` argument that is not `String.prototype` is not supported in an environment that does not support setting the [[Prototype]]');
+ }
+ }
+
+ var length = value.length;
+ DefinePropertyOrThrow(S, 'length', {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': false,
+ '[[Value]]': length,
+ '[[Writable]]': false
+ });
+
+ return S;
+};
diff --git a/node_modules/es-abstract/2021/StringGetOwnProperty.js b/node_modules/es-abstract/2021/StringGetOwnProperty.js
new file mode 100644
index 0000000..ecffb0b
--- /dev/null
+++ b/node_modules/es-abstract/2021/StringGetOwnProperty.js
@@ -0,0 +1,48 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+var $charAt = callBound('String.prototype.charAt');
+var $stringToString = callBound('String.prototype.toString');
+
+var CanonicalNumericIndexString = require('./CanonicalNumericIndexString');
+var IsIntegralNumber = require('./IsIntegralNumber');
+var IsPropertyKey = require('./IsPropertyKey');
+var Type = require('./Type');
+
+var isNegativeZero = require('is-negative-zero');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-stringgetownproperty
+
+module.exports = function StringGetOwnProperty(S, P) {
+ var str;
+ if (Type(S) === 'Object') {
+ try {
+ str = $stringToString(S);
+ } catch (e) { /**/ }
+ }
+ if (Type(str) !== 'String') {
+ throw new $TypeError('Assertion failed: `S` must be a boxed string object');
+ }
+ if (!IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
+ }
+ if (Type(P) !== 'String') {
+ return void undefined;
+ }
+ var index = CanonicalNumericIndexString(P);
+ var len = str.length;
+ if (typeof index === 'undefined' || !IsIntegralNumber(index) || isNegativeZero(index) || index < 0 || len <= index) {
+ return void undefined;
+ }
+ var resultStr = $charAt(S, index);
+ return {
+ '[[Configurable]]': false,
+ '[[Enumerable]]': true,
+ '[[Value]]': resultStr,
+ '[[Writable]]': false
+ };
+};
diff --git a/node_modules/es-abstract/2021/StringIndexOf.js b/node_modules/es-abstract/2021/StringIndexOf.js
new file mode 100644
index 0000000..371d5aa
--- /dev/null
+++ b/node_modules/es-abstract/2021/StringIndexOf.js
@@ -0,0 +1,39 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsIntegralNumber = require('./IsIntegralNumber');
+var Type = require('./Type');
+
+var $slice = callBound('String.prototype.slice');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-stringindexof
+
+module.exports = function StringIndexOf(string, searchValue, fromIndex) {
+ if (Type(string) !== 'String') {
+ throw new $TypeError('Assertion failed: `string` must be a String');
+ }
+ if (Type(searchValue) !== 'String') {
+ throw new $TypeError('Assertion failed: `searchValue` must be a String');
+ }
+ if (!IsIntegralNumber(fromIndex) || fromIndex < 0) {
+ throw new $TypeError('Assertion failed: `fromIndex` must be a non-negative integer');
+ }
+
+ var len = string.length;
+ if (searchValue === '' && fromIndex <= len) {
+ return fromIndex;
+ }
+
+ var searchLen = searchValue.length;
+ for (var i = fromIndex; i <= (len - searchLen); i += 1) {
+ var candidate = $slice(string, i, i + searchLen);
+ if (candidate === searchValue) {
+ return i;
+ }
+ }
+ return -1;
+};
diff --git a/node_modules/es-abstract/2021/StringPad.js b/node_modules/es-abstract/2021/StringPad.js
new file mode 100644
index 0000000..cdf6900
--- /dev/null
+++ b/node_modules/es-abstract/2021/StringPad.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+
+var ToLength = require('./ToLength');
+var ToString = require('./ToString');
+
+var $strSlice = callBound('String.prototype.slice');
+
+// https://262.ecma-international.org/11.0/#sec-stringpad
+
+module.exports = function StringPad(O, maxLength, fillString, placement) {
+ if (placement !== 'start' && placement !== 'end') {
+ throw new $TypeError('Assertion failed: `placement` must be "start" or "end"');
+ }
+ var S = ToString(O);
+ var intMaxLength = ToLength(maxLength);
+ var stringLength = S.length;
+ if (intMaxLength <= stringLength) {
+ return S;
+ }
+ var filler = typeof fillString === 'undefined' ? ' ' : ToString(fillString);
+ if (filler === '') {
+ return S;
+ }
+ var fillLen = intMaxLength - stringLength;
+
+ // the String value consisting of repeated concatenations of filler truncated to length fillLen.
+ var truncatedStringFiller = '';
+ while (truncatedStringFiller.length < fillLen) {
+ truncatedStringFiller += filler;
+ }
+ truncatedStringFiller = $strSlice(truncatedStringFiller, 0, fillLen);
+
+ if (placement === 'start') {
+ return truncatedStringFiller + S;
+ }
+ return S + truncatedStringFiller;
+};
diff --git a/node_modules/es-abstract/2021/StringToBigInt.js b/node_modules/es-abstract/2021/StringToBigInt.js
new file mode 100644
index 0000000..0bc3cec
--- /dev/null
+++ b/node_modules/es-abstract/2021/StringToBigInt.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $TypeError = GetIntrinsic('%TypeError%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+// https://262.ecma-international.org/11.0/#sec-stringtobigint
+
+module.exports = function StringToBigInt(argument) {
+ if (typeof argument !== 'string') {
+ throw new $TypeError('`argument` must be a string');
+ }
+ if (!$BigInt) {
+ throw new $SyntaxError('BigInts are not supported in this environment');
+ }
+ try {
+ return $BigInt(argument);
+ } catch (e) {
+ return NaN;
+ }
+};
diff --git a/node_modules/es-abstract/2021/StringToCodePoints.js b/node_modules/es-abstract/2021/StringToCodePoints.js
new file mode 100644
index 0000000..336bd06
--- /dev/null
+++ b/node_modules/es-abstract/2021/StringToCodePoints.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+
+var $push = callBound('Array.prototype.push');
+
+var CodePointAt = require('./CodePointAt');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-stringtocodepoints
+
+module.exports = function StringToCodePoints(string) {
+ if (Type(string) !== 'String') {
+ throw new $TypeError('Assertion failed: `string` must be a String');
+ }
+ var codePoints = [];
+ var size = string.length;
+ var position = 0;
+ while (position < size) {
+ var cp = CodePointAt(string, position);
+ $push(codePoints, cp['[[CodePoint]]']);
+ position += cp['[[CodeUnitCount]]'];
+ }
+ return codePoints;
+};
diff --git a/node_modules/es-abstract/2021/SymbolDescriptiveString.js b/node_modules/es-abstract/2021/SymbolDescriptiveString.js
new file mode 100644
index 0000000..1efd131
--- /dev/null
+++ b/node_modules/es-abstract/2021/SymbolDescriptiveString.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+
+var $SymbolToString = callBound('Symbol.prototype.toString', true);
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-symboldescriptivestring
+
+module.exports = function SymbolDescriptiveString(sym) {
+ if (Type(sym) !== 'Symbol') {
+ throw new $TypeError('Assertion failed: `sym` must be a Symbol');
+ }
+ return $SymbolToString(sym);
+};
diff --git a/node_modules/es-abstract/2021/TestIntegrityLevel.js b/node_modules/es-abstract/2021/TestIntegrityLevel.js
new file mode 100644
index 0000000..cf1649c
--- /dev/null
+++ b/node_modules/es-abstract/2021/TestIntegrityLevel.js
@@ -0,0 +1,42 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $gOPD = require('../helpers/getOwnPropertyDescriptor');
+var $gOPN = GetIntrinsic('%Object.getOwnPropertyNames%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var every = require('../helpers/every');
+
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsExtensible = require('./IsExtensible');
+var ToPropertyDescriptor = require('./ToPropertyDescriptor');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-testintegritylevel
+
+module.exports = function TestIntegrityLevel(O, level) {
+ if (Type(O) !== 'Object') {
+ throw new $TypeError('Assertion failed: Type(O) is not Object');
+ }
+ if (level !== 'sealed' && level !== 'frozen') {
+ throw new $TypeError('Assertion failed: `level` must be `"sealed"` or `"frozen"`');
+ }
+ var status = IsExtensible(O);
+ if (status) {
+ return false;
+ }
+ var theKeys = $gOPN(O);
+ return theKeys.length === 0 || every(theKeys, function (k) {
+ var currentDesc = $gOPD(O, k);
+ if (typeof currentDesc !== 'undefined') {
+ if (currentDesc.configurable) {
+ return false;
+ }
+ if (level === 'frozen' && IsDataDescriptor(ToPropertyDescriptor(currentDesc)) && currentDesc.writable) {
+ return false;
+ }
+ }
+ return true;
+ });
+};
diff --git a/node_modules/es-abstract/2021/TimeClip.js b/node_modules/es-abstract/2021/TimeClip.js
new file mode 100644
index 0000000..e416cab
--- /dev/null
+++ b/node_modules/es-abstract/2021/TimeClip.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+var $Number = GetIntrinsic('%Number%');
+
+var $isFinite = require('../helpers/isFinite');
+
+var abs = require('./abs');
+var ToNumber = require('./ToNumber');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.14
+
+module.exports = function TimeClip(time) {
+ if (!$isFinite(time) || abs(time) > 8.64e15) {
+ return NaN;
+ }
+ return $Number(new $Date(ToNumber(time)));
+};
+
diff --git a/node_modules/es-abstract/2021/TimeFromYear.js b/node_modules/es-abstract/2021/TimeFromYear.js
new file mode 100644
index 0000000..f3518a4
--- /dev/null
+++ b/node_modules/es-abstract/2021/TimeFromYear.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+var DayFromYear = require('./DayFromYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function TimeFromYear(y) {
+ return msPerDay * DayFromYear(y);
+};
diff --git a/node_modules/es-abstract/2021/TimeString.js b/node_modules/es-abstract/2021/TimeString.js
new file mode 100644
index 0000000..051c472
--- /dev/null
+++ b/node_modules/es-abstract/2021/TimeString.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var $isNaN = require('../helpers/isNaN');
+var padTimeComponent = require('../helpers/padTimeComponent');
+
+var HourFromTime = require('./HourFromTime');
+var MinFromTime = require('./MinFromTime');
+var SecFromTime = require('./SecFromTime');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/9.0/#sec-timestring
+
+module.exports = function TimeString(tv) {
+ if (Type(tv) !== 'Number' || $isNaN(tv)) {
+ throw new $TypeError('Assertion failed: `tv` must be a non-NaN Number');
+ }
+ var hour = HourFromTime(tv);
+ var minute = MinFromTime(tv);
+ var second = SecFromTime(tv);
+ return padTimeComponent(hour) + ':' + padTimeComponent(minute) + ':' + padTimeComponent(second) + '\x20GMT';
+};
diff --git a/node_modules/es-abstract/2021/TimeWithinDay.js b/node_modules/es-abstract/2021/TimeWithinDay.js
new file mode 100644
index 0000000..2bba833
--- /dev/null
+++ b/node_modules/es-abstract/2021/TimeWithinDay.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerDay = require('../helpers/timeConstants').msPerDay;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.2
+
+module.exports = function TimeWithinDay(t) {
+ return modulo(t, msPerDay);
+};
+
diff --git a/node_modules/es-abstract/2021/ToBigInt.js b/node_modules/es-abstract/2021/ToBigInt.js
new file mode 100644
index 0000000..aa24d7b
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToBigInt.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $asIntN = GetIntrinsic('%BigInt.asIntN%', true);
+var $Number = GetIntrinsic('%Number%');
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://262.ecma-international.org/11.0/#sec-tobigint
+
+module.exports = function ToBigInt(argument) {
+ if (!$BigInt) {
+ throw new $SyntaxError('BigInts are not supported in this environment');
+ }
+
+ var prim = ToPrimitive(argument, $Number);
+
+ if (typeof prim === 'number') {
+ return $asIntN(0, prim);
+ }
+ return $BigInt(prim);
+};
diff --git a/node_modules/es-abstract/2021/ToBigInt64.js b/node_modules/es-abstract/2021/ToBigInt64.js
new file mode 100644
index 0000000..65c1c55
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToBigInt64.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $pow = GetIntrinsic('%Math.pow%');
+
+var ToBigInt = require('./ToBigInt');
+var BigIntRemainder = require('./BigInt/remainder');
+
+var modBigInt = require('../helpers/modBigInt');
+
+// BigInt(2**63), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyThree = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 31)));
+
+// BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32)));
+
+// https://262.ecma-international.org/11.0/#sec-tobigint64
+
+module.exports = function ToBigInt64(argument) {
+ var n = ToBigInt(argument);
+ var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour);
+ return int64bit >= twoSixtyThree ? int64bit - twoSixtyFour : int64bit;
+};
diff --git a/node_modules/es-abstract/2021/ToBigUint64.js b/node_modules/es-abstract/2021/ToBigUint64.js
new file mode 100644
index 0000000..ff68236
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToBigUint64.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $BigInt = GetIntrinsic('%BigInt%', true);
+var $pow = GetIntrinsic('%Math.pow%');
+
+var ToBigInt = require('./ToBigInt');
+var BigIntRemainder = require('./BigInt/remainder');
+
+var modBigInt = require('../helpers/modBigInt');
+
+// BigInt(2**64), but node v10.4-v10.8 have a bug where you can't `BigInt(x)` anything larger than MAX_SAFE_INTEGER
+var twoSixtyFour = $BigInt && (BigInt($pow(2, 32)) * BigInt($pow(2, 32)));
+
+// https://262.ecma-international.org/11.0/#sec-tobiguint64
+
+module.exports = function ToBigUint64(argument) {
+ var n = ToBigInt(argument);
+ var int64bit = modBigInt(BigIntRemainder, n, twoSixtyFour);
+ return int64bit;
+};
diff --git a/node_modules/es-abstract/2021/ToBoolean.js b/node_modules/es-abstract/2021/ToBoolean.js
new file mode 100644
index 0000000..466404b
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToBoolean.js
@@ -0,0 +1,5 @@
+'use strict';
+
+// http://262.ecma-international.org/5.1/#sec-9.2
+
+module.exports = function ToBoolean(value) { return !!value; };
diff --git a/node_modules/es-abstract/2021/ToDateString.js b/node_modules/es-abstract/2021/ToDateString.js
new file mode 100644
index 0000000..e636a9b
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToDateString.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Date = GetIntrinsic('%Date%');
+
+var $isNaN = require('../helpers/isNaN');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-todatestring
+
+module.exports = function ToDateString(tv) {
+ if (Type(tv) !== 'Number') {
+ throw new $TypeError('Assertion failed: `tv` must be a Number');
+ }
+ if ($isNaN(tv)) {
+ return 'Invalid Date';
+ }
+ return $Date(tv);
+};
diff --git a/node_modules/es-abstract/2021/ToIndex.js b/node_modules/es-abstract/2021/ToIndex.js
new file mode 100644
index 0000000..cc747e2
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToIndex.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $RangeError = GetIntrinsic('%RangeError%');
+
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+var ToLength = require('./ToLength');
+var SameValue = require('./SameValue');
+
+// https://www.ecma-international.org/ecma-262/8.0/#sec-toindex
+
+module.exports = function ToIndex(value) {
+ if (typeof value === 'undefined') {
+ return 0;
+ }
+ var integerIndex = ToIntegerOrInfinity(value);
+ if (integerIndex < 0) {
+ throw new $RangeError('index must be >= 0');
+ }
+ var index = ToLength(integerIndex);
+ if (!SameValue(integerIndex, index)) {
+ throw new $RangeError('index must be >= 0 and < 2 ** 53 - 1');
+ }
+ return index;
+};
diff --git a/node_modules/es-abstract/2021/ToInt16.js b/node_modules/es-abstract/2021/ToInt16.js
new file mode 100644
index 0000000..cb8e793
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToInt16.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint16 = require('./ToUint16');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-toint16
+
+module.exports = function ToInt16(argument) {
+ var int16bit = ToUint16(argument);
+ return int16bit >= 0x8000 ? int16bit - 0x10000 : int16bit;
+};
diff --git a/node_modules/es-abstract/2021/ToInt32.js b/node_modules/es-abstract/2021/ToInt32.js
new file mode 100644
index 0000000..b879ccc
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToInt32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://262.ecma-international.org/5.1/#sec-9.5
+
+module.exports = function ToInt32(x) {
+ return ToNumber(x) >> 0;
+};
diff --git a/node_modules/es-abstract/2021/ToInt8.js b/node_modules/es-abstract/2021/ToInt8.js
new file mode 100644
index 0000000..bc452d8
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToInt8.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var ToUint8 = require('./ToUint8');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-toint8
+
+module.exports = function ToInt8(argument) {
+ var int8bit = ToUint8(argument);
+ return int8bit >= 0x80 ? int8bit - 0x100 : int8bit;
+};
diff --git a/node_modules/es-abstract/2021/ToIntegerOrInfinity.js b/node_modules/es-abstract/2021/ToIntegerOrInfinity.js
new file mode 100644
index 0000000..967713c
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToIntegerOrInfinity.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var ES5ToInteger = require('../5/ToInteger');
+
+var ToNumber = require('./ToNumber');
+
+// https://www.ecma-international.org/ecma-262/11.0/#sec-tointeger
+
+module.exports = function ToInteger(value) {
+ var number = ToNumber(value);
+ if (number !== 0) {
+ number = ES5ToInteger(number);
+ }
+ return number === 0 ? 0 : number;
+};
diff --git a/node_modules/es-abstract/2021/ToLength.js b/node_modules/es-abstract/2021/ToLength.js
new file mode 100644
index 0000000..0468c3e
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToLength.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');
+
+var ToIntegerOrInfinity = require('./ToIntegerOrInfinity');
+
+module.exports = function ToLength(argument) {
+ var len = ToIntegerOrInfinity(argument);
+ if (len <= 0) { return 0; } // includes converting -0 to +0
+ if (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }
+ return len;
+};
diff --git a/node_modules/es-abstract/2021/ToNumber.js b/node_modules/es-abstract/2021/ToNumber.js
new file mode 100644
index 0000000..3b00377
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToNumber.js
@@ -0,0 +1,62 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $Number = GetIntrinsic('%Number%');
+var $RegExp = GetIntrinsic('%RegExp%');
+var $parseInteger = GetIntrinsic('%parseInt%');
+
+var callBound = require('call-bind/callBound');
+var regexTester = require('../helpers/regexTester');
+var isPrimitive = require('../helpers/isPrimitive');
+
+var $strSlice = callBound('String.prototype.slice');
+var isBinary = regexTester(/^0b[01]+$/i);
+var isOctal = regexTester(/^0o[0-7]+$/i);
+var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
+var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
+var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
+var hasNonWS = regexTester(nonWSregex);
+
+// whitespace from: https://es5.github.io/#x15.5.4.20
+// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
+var ws = [
+ '\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'
+].join('');
+var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
+var $replace = callBound('String.prototype.replace');
+var $trim = function (value) {
+ return $replace(value, trimRegex, '');
+};
+
+var ToPrimitive = require('./ToPrimitive');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-tonumber
+
+module.exports = function ToNumber(argument) {
+ var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+ if (typeof value === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a number');
+ }
+ if (typeof value === 'bigint') {
+ throw new $TypeError('Conversion from \'BigInt\' to \'number\' is not allowed.');
+ }
+ if (typeof value === 'string') {
+ if (isBinary(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 2));
+ } else if (isOctal(value)) {
+ return ToNumber($parseInteger($strSlice(value, 2), 8));
+ } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
+ return NaN;
+ }
+ var trimmed = $trim(value);
+ if (trimmed !== value) {
+ return ToNumber(trimmed);
+ }
+
+ }
+ return $Number(value);
+};
diff --git a/node_modules/es-abstract/2021/ToNumeric.js b/node_modules/es-abstract/2021/ToNumeric.js
new file mode 100644
index 0000000..c187760
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToNumeric.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Number = GetIntrinsic('%Number%');
+
+var isPrimitive = require('../helpers/isPrimitive');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToNumber = require('./ToNumber');
+var Type = require('./Type');
+
+// https://262.ecma-international.org/6.0/#sec-tonumber
+
+module.exports = function ToNumeric(argument) {
+ var primValue = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+ if (Type(primValue) === 'BigInt') {
+ return primValue;
+ }
+ return ToNumber(primValue);
+};
diff --git a/node_modules/es-abstract/2021/ToObject.js b/node_modules/es-abstract/2021/ToObject.js
new file mode 100644
index 0000000..cb26bac
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToObject.js
@@ -0,0 +1,14 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Object = GetIntrinsic('%Object%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-toobject
+
+module.exports = function ToObject(value) {
+ RequireObjectCoercible(value);
+ return $Object(value);
+};
diff --git a/node_modules/es-abstract/2021/ToPrimitive.js b/node_modules/es-abstract/2021/ToPrimitive.js
new file mode 100644
index 0000000..0fbe9b8
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToPrimitive.js
@@ -0,0 +1,12 @@
+'use strict';
+
+var toPrimitive = require('es-to-primitive/es2015');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive
+
+module.exports = function ToPrimitive(input) {
+ if (arguments.length > 1) {
+ return toPrimitive(input, arguments[1]);
+ }
+ return toPrimitive(input);
+};
diff --git a/node_modules/es-abstract/2021/ToPropertyDescriptor.js b/node_modules/es-abstract/2021/ToPropertyDescriptor.js
new file mode 100644
index 0000000..53db874
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToPropertyDescriptor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+var has = require('has');
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var Type = require('./Type');
+var ToBoolean = require('./ToBoolean');
+var IsCallable = require('./IsCallable');
+
+// https://262.ecma-international.org/5.1/#sec-8.10.5
+
+module.exports = function ToPropertyDescriptor(Obj) {
+ if (Type(Obj) !== 'Object') {
+ throw new $TypeError('ToPropertyDescriptor requires an object');
+ }
+
+ var desc = {};
+ if (has(Obj, 'enumerable')) {
+ desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
+ }
+ if (has(Obj, 'configurable')) {
+ desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
+ }
+ if (has(Obj, 'value')) {
+ desc['[[Value]]'] = Obj.value;
+ }
+ if (has(Obj, 'writable')) {
+ desc['[[Writable]]'] = ToBoolean(Obj.writable);
+ }
+ if (has(Obj, 'get')) {
+ var getter = Obj.get;
+ if (typeof getter !== 'undefined' && !IsCallable(getter)) {
+ throw new $TypeError('getter must be a function');
+ }
+ desc['[[Get]]'] = getter;
+ }
+ if (has(Obj, 'set')) {
+ var setter = Obj.set;
+ if (typeof setter !== 'undefined' && !IsCallable(setter)) {
+ throw new $TypeError('setter must be a function');
+ }
+ desc['[[Set]]'] = setter;
+ }
+
+ if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
+ throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+ }
+ return desc;
+};
diff --git a/node_modules/es-abstract/2021/ToPropertyKey.js b/node_modules/es-abstract/2021/ToPropertyKey.js
new file mode 100644
index 0000000..fc1bf7d
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToPropertyKey.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+
+var ToPrimitive = require('./ToPrimitive');
+var ToString = require('./ToString');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-topropertykey
+
+module.exports = function ToPropertyKey(argument) {
+ var key = ToPrimitive(argument, $String);
+ return typeof key === 'symbol' ? key : ToString(key);
+};
diff --git a/node_modules/es-abstract/2021/ToString.js b/node_modules/es-abstract/2021/ToString.js
new file mode 100644
index 0000000..4d494e1
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToString.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $String = GetIntrinsic('%String%');
+var $TypeError = GetIntrinsic('%TypeError%');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-tostring
+
+module.exports = function ToString(argument) {
+ if (typeof argument === 'symbol') {
+ throw new $TypeError('Cannot convert a Symbol value to a string');
+ }
+ return $String(argument);
+};
diff --git a/node_modules/es-abstract/2021/ToUint16.js b/node_modules/es-abstract/2021/ToUint16.js
new file mode 100644
index 0000000..633ca84
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToUint16.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var abs = require('./abs');
+var floor = require('./floor');
+var modulo = require('./modulo');
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+
+// http://262.ecma-international.org/5.1/#sec-9.7
+
+module.exports = function ToUint16(value) {
+ var number = ToNumber(value);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * floor(abs(number));
+ return modulo(posInt, 0x10000);
+};
diff --git a/node_modules/es-abstract/2021/ToUint32.js b/node_modules/es-abstract/2021/ToUint32.js
new file mode 100644
index 0000000..2a8e9dd
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToUint32.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+// http://262.ecma-international.org/5.1/#sec-9.6
+
+module.exports = function ToUint32(x) {
+ return ToNumber(x) >>> 0;
+};
diff --git a/node_modules/es-abstract/2021/ToUint8.js b/node_modules/es-abstract/2021/ToUint8.js
new file mode 100644
index 0000000..2dfd97c
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToUint8.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+
+var $isNaN = require('../helpers/isNaN');
+var $isFinite = require('../helpers/isFinite');
+var $sign = require('../helpers/sign');
+
+var abs = require('./abs');
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-touint8
+
+module.exports = function ToUint8(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }
+ var posInt = $sign(number) * floor(abs(number));
+ return modulo(posInt, 0x100);
+};
diff --git a/node_modules/es-abstract/2021/ToUint8Clamp.js b/node_modules/es-abstract/2021/ToUint8Clamp.js
new file mode 100644
index 0000000..b0b8ce8
--- /dev/null
+++ b/node_modules/es-abstract/2021/ToUint8Clamp.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var ToNumber = require('./ToNumber');
+var floor = require('./floor');
+
+var $isNaN = require('../helpers/isNaN');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-touint8clamp
+
+module.exports = function ToUint8Clamp(argument) {
+ var number = ToNumber(argument);
+ if ($isNaN(number) || number <= 0) { return 0; }
+ if (number >= 0xFF) { return 0xFF; }
+ var f = floor(argument);
+ if (f + 0.5 < number) { return f + 1; }
+ if (number < f + 0.5) { return f; }
+ if (f % 2 !== 0) { return f + 1; }
+ return f;
+};
diff --git a/node_modules/es-abstract/2021/TrimString.js b/node_modules/es-abstract/2021/TrimString.js
new file mode 100644
index 0000000..113dcf8
--- /dev/null
+++ b/node_modules/es-abstract/2021/TrimString.js
@@ -0,0 +1,29 @@
+'use strict';
+
+var trimStart = require('string.prototype.trimstart');
+var trimEnd = require('string.prototype.trimend');
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var RequireObjectCoercible = require('./RequireObjectCoercible');
+var ToString = require('./ToString');
+
+// https://262.ecma-international.org/10.0/#sec-trimstring
+
+module.exports = function TrimString(string, where) {
+ var str = RequireObjectCoercible(string);
+ var S = ToString(str);
+ var T;
+ if (where === 'start') {
+ T = trimStart(S);
+ } else if (where === 'end') {
+ T = trimEnd(S);
+ } else if (where === 'start+end') {
+ T = trimStart(trimEnd(S));
+ } else {
+ throw new $TypeError('Assertion failed: invalid `where` value; must be "start", "end", or "start+end"');
+ }
+ return T;
+};
diff --git a/node_modules/es-abstract/2021/Type.js b/node_modules/es-abstract/2021/Type.js
new file mode 100644
index 0000000..555ca74
--- /dev/null
+++ b/node_modules/es-abstract/2021/Type.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var ES5Type = require('../5/Type');
+
+// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values
+
+module.exports = function Type(x) {
+ if (typeof x === 'symbol') {
+ return 'Symbol';
+ }
+ if (typeof x === 'bigint') {
+ return 'BigInt';
+ }
+ return ES5Type(x);
+};
diff --git a/node_modules/es-abstract/2021/UTF16EncodeCodePoint.js b/node_modules/es-abstract/2021/UTF16EncodeCodePoint.js
new file mode 100644
index 0000000..0c7fb11
--- /dev/null
+++ b/node_modules/es-abstract/2021/UTF16EncodeCodePoint.js
@@ -0,0 +1,25 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+
+var floor = require('./floor');
+var modulo = require('./modulo');
+
+var isCodePoint = require('../helpers/isCodePoint');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-utf16encoding
+
+module.exports = function UTF16EncodeCodePoint(cp) {
+ if (!isCodePoint(cp)) {
+ throw new $TypeError('Assertion failed: `cp` must be >= 0 and <= 0x10FFFF');
+ }
+ if (cp <= 65535) {
+ return $fromCharCode(cp);
+ }
+ var cu1 = $fromCharCode(floor((cp - 65536) / 1024) + 0xD800);
+ var cu2 = $fromCharCode(modulo(cp - 65536, 1024) + 0xDC00);
+ return cu1 + cu2;
+};
diff --git a/node_modules/es-abstract/2021/UTF16SurrogatePairToCodePoint.js b/node_modules/es-abstract/2021/UTF16SurrogatePairToCodePoint.js
new file mode 100644
index 0000000..7a50f31
--- /dev/null
+++ b/node_modules/es-abstract/2021/UTF16SurrogatePairToCodePoint.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $fromCharCode = GetIntrinsic('%String.fromCharCode%');
+
+var isLeadingSurrogate = require('../helpers/isLeadingSurrogate');
+var isTrailingSurrogate = require('../helpers/isTrailingSurrogate');
+
+// https://tc39.es/ecma262/2020/#sec-utf16decodesurrogatepair
+
+module.exports = function UTF16DecodeSurrogatePair(lead, trail) {
+ if (!isLeadingSurrogate(lead) || !isTrailingSurrogate(trail)) {
+ throw new $TypeError('Assertion failed: `lead` must be a leading surrogate char code, and `trail` must be a trailing surrogate char code');
+ }
+ // var cp = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
+ return $fromCharCode(lead) + $fromCharCode(trail);
+};
diff --git a/node_modules/es-abstract/2021/UnicodeEscape.js b/node_modules/es-abstract/2021/UnicodeEscape.js
new file mode 100644
index 0000000..b708c90
--- /dev/null
+++ b/node_modules/es-abstract/2021/UnicodeEscape.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var callBound = require('call-bind/callBound');
+
+var $charCodeAt = callBound('String.prototype.charCodeAt');
+var $numberToString = callBound('Number.prototype.toString');
+var $toLowerCase = callBound('String.prototype.toLowerCase');
+
+var StringPad = require('./StringPad');
+
+// https://262.ecma-international.org/11.0/#sec-unicodeescape
+
+module.exports = function UnicodeEscape(C) {
+ if (typeof C !== 'string' || C.length !== 1) {
+ throw new $TypeError('Assertion failed: `C` must be a single code unit');
+ }
+ var n = $charCodeAt(C, 0);
+ if (n > 0xFFFF) {
+ throw new $TypeError('`Assertion failed: numeric value of `C` must be <= 0xFFFF');
+ }
+
+ return '\\u' + StringPad($toLowerCase($numberToString(n, 16)), 4, '0', 'start');
+};
diff --git a/node_modules/es-abstract/2021/ValidateAndApplyPropertyDescriptor.js b/node_modules/es-abstract/2021/ValidateAndApplyPropertyDescriptor.js
new file mode 100644
index 0000000..a7fd218
--- /dev/null
+++ b/node_modules/es-abstract/2021/ValidateAndApplyPropertyDescriptor.js
@@ -0,0 +1,170 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var DefineOwnProperty = require('../helpers/DefineOwnProperty');
+var isPropertyDescriptor = require('../helpers/isPropertyDescriptor');
+var isSamePropertyDescriptor = require('../helpers/isSamePropertyDescriptor');
+
+var FromPropertyDescriptor = require('./FromPropertyDescriptor');
+var IsAccessorDescriptor = require('./IsAccessorDescriptor');
+var IsDataDescriptor = require('./IsDataDescriptor');
+var IsGenericDescriptor = require('./IsGenericDescriptor');
+var IsPropertyKey = require('./IsPropertyKey');
+var SameValue = require('./SameValue');
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-validateandapplypropertydescriptor
+// https://ecma-international.org/ecma-262/8.0/#sec-validateandapplypropertydescriptor
+
+// eslint-disable-next-line max-lines-per-function, max-statements, max-params
+module.exports = function ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current) {
+ // this uses the ES2017+ logic, since it fixes a number of bugs in the ES2015 logic.
+ var oType = Type(O);
+ if (oType !== 'Undefined' && oType !== 'Object') {
+ throw new $TypeError('Assertion failed: O must be undefined or an Object');
+ }
+ if (Type(extensible) !== 'Boolean') {
+ throw new $TypeError('Assertion failed: extensible must be a Boolean');
+ }
+ if (!isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, Desc)) {
+ throw new $TypeError('Assertion failed: Desc must be a Property Descriptor');
+ }
+ if (Type(current) !== 'Undefined' && !isPropertyDescriptor({
+ Type: Type,
+ IsDataDescriptor: IsDataDescriptor,
+ IsAccessorDescriptor: IsAccessorDescriptor
+ }, current)) {
+ throw new $TypeError('Assertion failed: current must be a Property Descriptor, or undefined');
+ }
+ if (oType !== 'Undefined' && !IsPropertyKey(P)) {
+ throw new $TypeError('Assertion failed: if O is not undefined, P must be a Property Key');
+ }
+ if (Type(current) === 'Undefined') {
+ if (!extensible) {
+ return false;
+ }
+ if (IsGenericDescriptor(Desc) || IsDataDescriptor(Desc)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': Desc['[[Configurable]]'],
+ '[[Enumerable]]': Desc['[[Enumerable]]'],
+ '[[Value]]': Desc['[[Value]]'],
+ '[[Writable]]': Desc['[[Writable]]']
+ }
+ );
+ }
+ } else {
+ if (!IsAccessorDescriptor(Desc)) {
+ throw new $TypeError('Assertion failed: Desc is not an accessor descriptor');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ }
+ return true;
+ }
+ if (IsGenericDescriptor(Desc) && !('[[Configurable]]' in Desc) && !('[[Enumerable]]' in Desc)) {
+ return true;
+ }
+ if (isSamePropertyDescriptor({ SameValue: SameValue }, Desc, current)) {
+ return true; // removed by ES2017, but should still be correct
+ }
+ // "if every field in Desc is absent, return true" can't really match the assertion that it's a Property Descriptor
+ if (!current['[[Configurable]]']) {
+ if (Desc['[[Configurable]]']) {
+ return false;
+ }
+ if ('[[Enumerable]]' in Desc && !Desc['[[Enumerable]]'] === !!current['[[Enumerable]]']) {
+ return false;
+ }
+ }
+ if (IsGenericDescriptor(Desc)) {
+ // no further validation is required.
+ } else if (IsDataDescriptor(current) !== IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ return false;
+ }
+ if (IsDataDescriptor(current)) {
+ if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Get]]': undefined
+ }
+ );
+ }
+ } else if (oType !== 'Undefined') {
+ DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ {
+ '[[Configurable]]': current['[[Configurable]]'],
+ '[[Enumerable]]': current['[[Enumerable]]'],
+ '[[Value]]': undefined
+ }
+ );
+ }
+ } else if (IsDataDescriptor(current) && IsDataDescriptor(Desc)) {
+ if (!current['[[Configurable]]'] && !current['[[Writable]]']) {
+ if ('[[Writable]]' in Desc && Desc['[[Writable]]']) {
+ return false;
+ }
+ if ('[[Value]]' in Desc && !SameValue(Desc['[[Value]]'], current['[[Value]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else if (IsAccessorDescriptor(current) && IsAccessorDescriptor(Desc)) {
+ if (!current['[[Configurable]]']) {
+ if ('[[Set]]' in Desc && !SameValue(Desc['[[Set]]'], current['[[Set]]'])) {
+ return false;
+ }
+ if ('[[Get]]' in Desc && !SameValue(Desc['[[Get]]'], current['[[Get]]'])) {
+ return false;
+ }
+ return true;
+ }
+ } else {
+ throw new $TypeError('Assertion failed: current and Desc are not both data, both accessors, or one accessor and one data.');
+ }
+ if (oType !== 'Undefined') {
+ return DefineOwnProperty(
+ IsDataDescriptor,
+ SameValue,
+ FromPropertyDescriptor,
+ O,
+ P,
+ Desc
+ );
+ }
+ return true;
+};
diff --git a/node_modules/es-abstract/2021/WeakRefDeref.js b/node_modules/es-abstract/2021/WeakRefDeref.js
new file mode 100644
index 0000000..66d2d17
--- /dev/null
+++ b/node_modules/es-abstract/2021/WeakRefDeref.js
@@ -0,0 +1,24 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $deref = callBound('WeakRef.prototype.deref', true);
+
+var isWeakRef = require('is-weakref');
+
+var AddToKeptObjects = require('./AddToKeptObjects');
+
+// https://ecma-international.org/ecma-262/12.0/#sec-weakrefderef
+
+module.exports = function WeakRefDeref(weakRef) {
+ if (!isWeakRef(weakRef)) {
+ throw new $TypeError('Assertion failed: `weakRef` must be a WeakRef');
+ }
+ var target = $deref(weakRef);
+ if (target) {
+ AddToKeptObjects(target);
+ }
+ return target;
+};
diff --git a/node_modules/es-abstract/2021/WeekDay.js b/node_modules/es-abstract/2021/WeekDay.js
new file mode 100644
index 0000000..17cf94c
--- /dev/null
+++ b/node_modules/es-abstract/2021/WeekDay.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var Day = require('./Day');
+var modulo = require('./modulo');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.6
+
+module.exports = function WeekDay(t) {
+ return modulo(Day(t) + 4, 7);
+};
diff --git a/node_modules/es-abstract/2021/YearFromTime.js b/node_modules/es-abstract/2021/YearFromTime.js
new file mode 100644
index 0000000..be06ecb
--- /dev/null
+++ b/node_modules/es-abstract/2021/YearFromTime.js
@@ -0,0 +1,16 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $Date = GetIntrinsic('%Date%');
+
+var callBound = require('call-bind/callBound');
+
+var $getUTCFullYear = callBound('Date.prototype.getUTCFullYear');
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.3
+
+module.exports = function YearFromTime(t) {
+ // largest y such that this.TimeFromYear(y) <= t
+ return $getUTCFullYear(new $Date(t));
+};
diff --git a/node_modules/es-abstract/2021/abs.js b/node_modules/es-abstract/2021/abs.js
new file mode 100644
index 0000000..8bc4543
--- /dev/null
+++ b/node_modules/es-abstract/2021/abs.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $abs = GetIntrinsic('%Math.abs%');
+
+// http://262.ecma-international.org/5.1/#sec-5.2
+
+module.exports = function abs(x) {
+ return $abs(x);
+};
diff --git a/node_modules/es-abstract/2021/clamp.js b/node_modules/es-abstract/2021/clamp.js
new file mode 100644
index 0000000..8da1394
--- /dev/null
+++ b/node_modules/es-abstract/2021/clamp.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var max = GetIntrinsic('%Math.max%');
+var min = GetIntrinsic('%Math.min%');
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/12.0/#clamping
+
+module.exports = function clamp(x, lower, upper) {
+ if (Type(x) !== 'Number' || Type(lower) !== 'Number' || Type(upper) !== 'Number' || !(lower <= upper)) {
+ throw new $TypeError('Assertion failed: all three arguments must be MVs, and `lower` must be `<= upper`');
+ }
+ return min(max(lower, x), upper);
+};
diff --git a/node_modules/es-abstract/2021/floor.js b/node_modules/es-abstract/2021/floor.js
new file mode 100644
index 0000000..8439df0
--- /dev/null
+++ b/node_modules/es-abstract/2021/floor.js
@@ -0,0 +1,11 @@
+'use strict';
+
+// var modulo = require('./modulo');
+var $floor = Math.floor;
+
+// http://262.ecma-international.org/5.1/#sec-5.2
+
+module.exports = function floor(x) {
+ // return x - modulo(x, 1);
+ return $floor(x);
+};
diff --git a/node_modules/es-abstract/2021/modulo.js b/node_modules/es-abstract/2021/modulo.js
new file mode 100644
index 0000000..b94bb52
--- /dev/null
+++ b/node_modules/es-abstract/2021/modulo.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var mod = require('../helpers/mod');
+
+// https://262.ecma-international.org/5.1/#sec-5.2
+
+module.exports = function modulo(x, y) {
+ return mod(x, y);
+};
diff --git a/node_modules/es-abstract/2021/msFromTime.js b/node_modules/es-abstract/2021/msFromTime.js
new file mode 100644
index 0000000..a6bae76
--- /dev/null
+++ b/node_modules/es-abstract/2021/msFromTime.js
@@ -0,0 +1,11 @@
+'use strict';
+
+var modulo = require('./modulo');
+
+var msPerSecond = require('../helpers/timeConstants').msPerSecond;
+
+// https://262.ecma-international.org/5.1/#sec-15.9.1.10
+
+module.exports = function msFromTime(t) {
+ return modulo(t, msPerSecond);
+};
diff --git a/node_modules/es-abstract/2021/substring.js b/node_modules/es-abstract/2021/substring.js
new file mode 100644
index 0000000..a2c724a
--- /dev/null
+++ b/node_modules/es-abstract/2021/substring.js
@@ -0,0 +1,20 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var IsIntegralNumber = require('./IsIntegralNumber');
+var Type = require('./Type');
+
+var callBound = require('call-bind/callBound');
+
+var $slice = callBound('String.prototype.slice');
+
+// https://262.ecma-international.org/12.0/#substring
+module.exports = function substring(S, inclusiveStart, exclusiveEnd) {
+ if (Type(S) !== 'String' || !IsIntegralNumber(inclusiveStart) || (arguments.length > 2 && !IsIntegralNumber(exclusiveEnd))) {
+ throw new $TypeError('`S` must be a String, and `inclusiveStart` and `exclusiveEnd` must be integers');
+ }
+ return $slice(S, inclusiveStart, arguments.length > 2 ? exclusiveEnd : S.length);
+};
diff --git a/node_modules/es-abstract/2021/thisBigIntValue.js b/node_modules/es-abstract/2021/thisBigIntValue.js
new file mode 100644
index 0000000..1fd1298
--- /dev/null
+++ b/node_modules/es-abstract/2021/thisBigIntValue.js
@@ -0,0 +1,22 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $bigIntValueOf = callBound('BigInt.prototype.valueOf', true);
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/11.0/#sec-thisbigintvalue
+
+module.exports = function thisBigIntValue(value) {
+ var type = Type(value);
+ if (type === 'BigInt') {
+ return value;
+ }
+ if (!$bigIntValueOf) {
+ throw new $TypeError('BigInt is not supported');
+ }
+ return $bigIntValueOf(value);
+};
diff --git a/node_modules/es-abstract/2021/thisBooleanValue.js b/node_modules/es-abstract/2021/thisBooleanValue.js
new file mode 100644
index 0000000..27075b9
--- /dev/null
+++ b/node_modules/es-abstract/2021/thisBooleanValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $BooleanValueOf = require('call-bind/callBound')('Boolean.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-boolean-prototype-object
+
+module.exports = function thisBooleanValue(value) {
+ if (Type(value) === 'Boolean') {
+ return value;
+ }
+
+ return $BooleanValueOf(value);
+};
diff --git a/node_modules/es-abstract/2021/thisNumberValue.js b/node_modules/es-abstract/2021/thisNumberValue.js
new file mode 100644
index 0000000..92968dc
--- /dev/null
+++ b/node_modules/es-abstract/2021/thisNumberValue.js
@@ -0,0 +1,18 @@
+'use strict';
+
+var callBound = require('call-bind/callBound');
+
+var Type = require('./Type');
+
+var $NumberValueOf = callBound('Number.prototype.valueOf');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-number-prototype-object
+
+module.exports = function thisNumberValue(value) {
+ if (Type(value) === 'Number') {
+ return value;
+ }
+
+ return $NumberValueOf(value);
+};
+
diff --git a/node_modules/es-abstract/2021/thisStringValue.js b/node_modules/es-abstract/2021/thisStringValue.js
new file mode 100644
index 0000000..8e4274d
--- /dev/null
+++ b/node_modules/es-abstract/2021/thisStringValue.js
@@ -0,0 +1,15 @@
+'use strict';
+
+var $StringValueOf = require('call-bind/callBound')('String.prototype.valueOf');
+
+var Type = require('./Type');
+
+// https://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-string-prototype-object
+
+module.exports = function thisStringValue(value) {
+ if (Type(value) === 'String') {
+ return value;
+ }
+
+ return $StringValueOf(value);
+};
diff --git a/node_modules/es-abstract/2021/thisSymbolValue.js b/node_modules/es-abstract/2021/thisSymbolValue.js
new file mode 100644
index 0000000..91a5525
--- /dev/null
+++ b/node_modules/es-abstract/2021/thisSymbolValue.js
@@ -0,0 +1,19 @@
+'use strict';
+
+var callBound = require('call-bind/callBound');
+
+var $SymbolValueOf = callBound('Symbol.prototype.valueOf', true);
+
+var Type = require('./Type');
+
+// https://262.ecma-international.org/9.0/#sec-thissymbolvalue
+
+module.exports = function thisSymbolValue(value) {
+ if (!$SymbolValueOf) {
+ throw new SyntaxError('Symbols are not supported; thisSymbolValue requires that `value` be a Symbol or a Symbol object');
+ }
+ if (Type(value) === 'Symbol') {
+ return value;
+ }
+ return $SymbolValueOf(value);
+};
diff --git a/node_modules/es-abstract/2021/thisTimeValue.js b/node_modules/es-abstract/2021/thisTimeValue.js
new file mode 100644
index 0000000..a9a47ac
--- /dev/null
+++ b/node_modules/es-abstract/2021/thisTimeValue.js
@@ -0,0 +1,3 @@
+'use strict';
+
+module.exports = require('../2018/thisTimeValue');
diff --git a/node_modules/es-abstract/5/FromPropertyDescriptor.js b/node_modules/es-abstract/5/FromPropertyDescriptor.js
index 506f65c..ebf5c89 100644
--- a/node_modules/es-abstract/5/FromPropertyDescriptor.js
+++ b/node_modules/es-abstract/5/FromPropertyDescriptor.js
@@ -33,7 +33,7 @@
enumerable: !!Desc['[[Enumerable]]'],
configurable: !!Desc['[[Configurable]]']
};
- } else {
- throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
}
+ throw new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');
+
};
diff --git a/node_modules/es-abstract/CHANGELOG.md b/node_modules/es-abstract/CHANGELOG.md
index c409f84..c0bf8ef 100644
--- a/node_modules/es-abstract/CHANGELOG.md
+++ b/node_modules/es-abstract/CHANGELOG.md
@@ -1,3 +1,51 @@
+1.19.1 / 2021-10-02
+=================
+ * [Fix] `ES2020+`: `CreateRegExpStringIterator`: should not have enumerable methods
+ * [Dev Deps] update `array.prototype.filter`, `array.prototype.indexof`
+
+1.19.0 / 2021-09-30
+=================
+ * [New] `ES2021+`: `IterableToList`: make `method` parameter optional (#61)
+ * [New] add ES2021
+ * [New] `ES2020+`: add `StringToBigInt`, `ToBigInt`, `ToBigInt64`, `ToBigUint64`
+ * [New] `ES2017`+: add `IsSharedArrayBuffer`, `OrdinaryToPrimitive`
+ * [New] `ES2015+`: add `CharacterRange`, `IsCompatiblePropertyDescriptor`
+ * [New] `ES2020+`: add `CreateRegExpStringIterator`
+ * [Fix] `ES2020+`: `ToBigInt64`/`ToBigUint64`: avoid node v10.4-v10.8 bug with limited BigInt range
+ * [Fix] `ES2020+`: `AbstractRelationalComparison`, `AbstractEqualityComparison`: support BigInt
+ * [Fix] `ES2020+`: `ToBigInt64`/`ToBigUint64`: Improve the definitions of twoSixtyThree and twoSixtyFour (#140)
+ * [meta] do not publish .gitattributes
+ * [Tests] Correct the behavior of `safeBigInt`
+ * [Tests] Exclude dotfiles from the testing sweep (#141)
+
+1.18.7 / 2021-09-28
+=================
+ * [Fix] `getOwnPropertyDescriptor` helper: avoid crashing in IE < 9
+ * [Fix] `ArraySetLength`: `node` `v0.6` has a bug where array lengths can be Set but not Defined
+ * [eslint] remove unused directive
+ * [Tests] fix spelling
+
+1.18.6 / 2021-09-07
+=================
+ * [Fix] `ES2020+`: `NumberToBigInt`: throw a SyntaxError when BigInts are not supported
+ * [Refactor] extract getSymbolDescription logic to `get-symbol-description`
+ * [Refactor] `ES2018+`: `AbstractRelationalComparison`: use `IsStringPrefix`
+ * [Deps] update `is-callable`, `is-regex`, `is-string`
+ * [Dev Deps] update `@ljharb/eslint-config`, `tape`
+ * [Tests] `GetSubstitution`: add cases
+
+1.18.5 / 2021-08-01
+=================
+ * [meta] remove "exports" (#133)
+ * [Dev Deps] update `eslint`
+
+1.18.4 / 2021-07-29
+=================
+ * [meta] partial revert of b54cfe8525faff482450e843a49d43be3a086225
+ * [Deps] update `internal-slot`, `object-inspect`
+ * [Dev Deps] update `eslint`, `tape`
+ * [Tests] `ArraySetLength`: increase coverage
+
1.18.3 / 2021-05-27
=================
* [Fix] `ES2020+`: `ToNumber`: ensure it throws on a BigInt (#130)
diff --git a/node_modules/es-abstract/README.md b/node_modules/es-abstract/README.md
index 2d76a5d..08f7b1c 100644
--- a/node_modules/es-abstract/README.md
+++ b/node_modules/es-abstract/README.md
@@ -11,7 +11,7 @@
Every operation is available by edition/year and by name - for example, `es-abstract/2020/Call` gives you the `Call` operation from ES2020, `es-abstract/5/Type` gives you the `Type` operation from ES5.
-All abstract operations are also available under an `es5`/`es2015`/`es2016`/`es2017`/`es2018`/`es2019`/`es2020` entry point, and as a property on the `main` export, but using deep imports is highly encouraged for bundle size and performance reasons. Non-deep entry points will be removed in the next semver-major release.
+All abstract operations are also available under an `es5`/`es2015`/`es2016`/`es2017`/`es2018`/`es2019`/`es2020`/`es2021` entry point, and as a property on the `main` export, but using deep imports is highly encouraged for bundle size and performance reasons. Non-deep entry points will be removed in the next semver-major release.
## Example
diff --git a/node_modules/es-abstract/es2015.js b/node_modules/es-abstract/es2015.js
index 79be967..29a438e 100644
--- a/node_modules/es-abstract/es2015.js
+++ b/node_modules/es-abstract/es2015.js
@@ -13,6 +13,7 @@
ArraySpeciesCreate: require('./2015/ArraySpeciesCreate'),
Call: require('./2015/Call'),
CanonicalNumericIndexString: require('./2015/CanonicalNumericIndexString'),
+ CharacterRange: require('./2015/CharacterRange'),
CompletePropertyDescriptor: require('./2015/CompletePropertyDescriptor'),
CreateDataProperty: require('./2015/CreateDataProperty'),
CreateDataPropertyOrThrow: require('./2015/CreateDataPropertyOrThrow'),
@@ -46,6 +47,7 @@
IsAccessorDescriptor: require('./2015/IsAccessorDescriptor'),
IsArray: require('./2015/IsArray'),
IsCallable: require('./2015/IsCallable'),
+ IsCompatiblePropertyDescriptor: require('./2015/IsCompatiblePropertyDescriptor'),
IsConcatSpreadable: require('./2015/IsConcatSpreadable'),
IsConstructor: require('./2015/IsConstructor'),
IsDataDescriptor: require('./2015/IsDataDescriptor'),
diff --git a/node_modules/es-abstract/es2016.js b/node_modules/es-abstract/es2016.js
index 6fbdb0c..fc20625 100644
--- a/node_modules/es-abstract/es2016.js
+++ b/node_modules/es-abstract/es2016.js
@@ -13,6 +13,7 @@
ArraySpeciesCreate: require('./2016/ArraySpeciesCreate'),
Call: require('./2016/Call'),
CanonicalNumericIndexString: require('./2016/CanonicalNumericIndexString'),
+ CharacterRange: require('./2016/CharacterRange'),
CompletePropertyDescriptor: require('./2016/CompletePropertyDescriptor'),
CreateDataProperty: require('./2016/CreateDataProperty'),
CreateDataPropertyOrThrow: require('./2016/CreateDataPropertyOrThrow'),
@@ -46,6 +47,7 @@
IsAccessorDescriptor: require('./2016/IsAccessorDescriptor'),
IsArray: require('./2016/IsArray'),
IsCallable: require('./2016/IsCallable'),
+ IsCompatiblePropertyDescriptor: require('./2016/IsCompatiblePropertyDescriptor'),
IsConcatSpreadable: require('./2016/IsConcatSpreadable'),
IsConstructor: require('./2016/IsConstructor'),
IsDataDescriptor: require('./2016/IsDataDescriptor'),
diff --git a/node_modules/es-abstract/es2017.js b/node_modules/es-abstract/es2017.js
index 3cf0c00..3583c7a 100644
--- a/node_modules/es-abstract/es2017.js
+++ b/node_modules/es-abstract/es2017.js
@@ -13,6 +13,7 @@
ArraySpeciesCreate: require('./2017/ArraySpeciesCreate'),
Call: require('./2017/Call'),
CanonicalNumericIndexString: require('./2017/CanonicalNumericIndexString'),
+ CharacterRange: require('./2017/CharacterRange'),
CompletePropertyDescriptor: require('./2017/CompletePropertyDescriptor'),
CreateDataProperty: require('./2017/CreateDataProperty'),
CreateDataPropertyOrThrow: require('./2017/CreateDataPropertyOrThrow'),
@@ -46,6 +47,7 @@
IsAccessorDescriptor: require('./2017/IsAccessorDescriptor'),
IsArray: require('./2017/IsArray'),
IsCallable: require('./2017/IsCallable'),
+ IsCompatiblePropertyDescriptor: require('./2017/IsCompatiblePropertyDescriptor'),
IsConcatSpreadable: require('./2017/IsConcatSpreadable'),
IsConstructor: require('./2017/IsConstructor'),
IsDataDescriptor: require('./2017/IsDataDescriptor'),
@@ -56,6 +58,7 @@
IsPropertyDescriptor: require('./2017/IsPropertyDescriptor'),
IsPropertyKey: require('./2017/IsPropertyKey'),
IsRegExp: require('./2017/IsRegExp'),
+ IsSharedArrayBuffer: require('./2017/IsSharedArrayBuffer'),
IterableToList: require('./2017/IterableToList'),
IteratorClose: require('./2017/IteratorClose'),
IteratorComplete: require('./2017/IteratorComplete'),
@@ -77,6 +80,7 @@
OrdinaryHasInstance: require('./2017/OrdinaryHasInstance'),
OrdinaryHasProperty: require('./2017/OrdinaryHasProperty'),
OrdinarySetPrototypeOf: require('./2017/OrdinarySetPrototypeOf'),
+ OrdinaryToPrimitive: require('./2017/OrdinaryToPrimitive'),
QuoteJSONString: require('./2017/QuoteJSONString'),
RegExpCreate: require('./2017/RegExpCreate'),
RegExpExec: require('./2017/RegExpExec'),
diff --git a/node_modules/es-abstract/es2018.js b/node_modules/es-abstract/es2018.js
index 2beb989..294e3d4 100644
--- a/node_modules/es-abstract/es2018.js
+++ b/node_modules/es-abstract/es2018.js
@@ -13,6 +13,7 @@
ArraySpeciesCreate: require('./2018/ArraySpeciesCreate'),
Call: require('./2018/Call'),
CanonicalNumericIndexString: require('./2018/CanonicalNumericIndexString'),
+ CharacterRange: require('./2018/CharacterRange'),
CompletePropertyDescriptor: require('./2018/CompletePropertyDescriptor'),
CopyDataProperties: require('./2018/CopyDataProperties'),
CreateDataProperty: require('./2018/CreateDataProperty'),
@@ -48,6 +49,7 @@
IsAccessorDescriptor: require('./2018/IsAccessorDescriptor'),
IsArray: require('./2018/IsArray'),
IsCallable: require('./2018/IsCallable'),
+ IsCompatiblePropertyDescriptor: require('./2018/IsCompatiblePropertyDescriptor'),
IsConcatSpreadable: require('./2018/IsConcatSpreadable'),
IsConstructor: require('./2018/IsConstructor'),
IsDataDescriptor: require('./2018/IsDataDescriptor'),
@@ -57,6 +59,7 @@
IsPromise: require('./2018/IsPromise'),
IsPropertyKey: require('./2018/IsPropertyKey'),
IsRegExp: require('./2018/IsRegExp'),
+ IsSharedArrayBuffer: require('./2018/IsSharedArrayBuffer'),
IsStringPrefix: require('./2018/IsStringPrefix'),
IterableToList: require('./2018/IterableToList'),
IteratorClose: require('./2018/IteratorClose'),
@@ -80,6 +83,7 @@
OrdinaryHasInstance: require('./2018/OrdinaryHasInstance'),
OrdinaryHasProperty: require('./2018/OrdinaryHasProperty'),
OrdinarySetPrototypeOf: require('./2018/OrdinarySetPrototypeOf'),
+ OrdinaryToPrimitive: require('./2018/OrdinaryToPrimitive'),
PromiseResolve: require('./2018/PromiseResolve'),
QuoteJSONString: require('./2018/QuoteJSONString'),
RegExpCreate: require('./2018/RegExpCreate'),
diff --git a/node_modules/es-abstract/es2019.js b/node_modules/es-abstract/es2019.js
index a49e115..016cb72 100644
--- a/node_modules/es-abstract/es2019.js
+++ b/node_modules/es-abstract/es2019.js
@@ -14,6 +14,7 @@
ArraySpeciesCreate: require('./2019/ArraySpeciesCreate'),
Call: require('./2019/Call'),
CanonicalNumericIndexString: require('./2019/CanonicalNumericIndexString'),
+ CharacterRange: require('./2019/CharacterRange'),
CompletePropertyDescriptor: require('./2019/CompletePropertyDescriptor'),
CopyDataProperties: require('./2019/CopyDataProperties'),
CreateDataProperty: require('./2019/CreateDataProperty'),
@@ -50,6 +51,7 @@
IsAccessorDescriptor: require('./2019/IsAccessorDescriptor'),
IsArray: require('./2019/IsArray'),
IsCallable: require('./2019/IsCallable'),
+ IsCompatiblePropertyDescriptor: require('./2019/IsCompatiblePropertyDescriptor'),
IsConcatSpreadable: require('./2019/IsConcatSpreadable'),
IsConstructor: require('./2019/IsConstructor'),
IsDataDescriptor: require('./2019/IsDataDescriptor'),
@@ -59,6 +61,7 @@
IsPromise: require('./2019/IsPromise'),
IsPropertyKey: require('./2019/IsPropertyKey'),
IsRegExp: require('./2019/IsRegExp'),
+ IsSharedArrayBuffer: require('./2019/IsSharedArrayBuffer'),
IsStringPrefix: require('./2019/IsStringPrefix'),
IterableToList: require('./2019/IterableToList'),
IteratorClose: require('./2019/IteratorClose'),
@@ -82,6 +85,7 @@
OrdinaryHasInstance: require('./2019/OrdinaryHasInstance'),
OrdinaryHasProperty: require('./2019/OrdinaryHasProperty'),
OrdinarySetPrototypeOf: require('./2019/OrdinarySetPrototypeOf'),
+ OrdinaryToPrimitive: require('./2019/OrdinaryToPrimitive'),
PromiseResolve: require('./2019/PromiseResolve'),
QuoteJSONString: require('./2019/QuoteJSONString'),
RegExpCreate: require('./2019/RegExpCreate'),
diff --git a/node_modules/es-abstract/es2020.js b/node_modules/es-abstract/es2020.js
index e6d1c79..eb4b187 100644
--- a/node_modules/es-abstract/es2020.js
+++ b/node_modules/es-abstract/es2020.js
@@ -19,6 +19,7 @@
BinaryXor: require('./2020/BinaryXor'),
Call: require('./2020/Call'),
CanonicalNumericIndexString: require('./2020/CanonicalNumericIndexString'),
+ CharacterRange: require('./2020/CharacterRange'),
CodePointAt: require('./2020/CodePointAt'),
CompletePropertyDescriptor: require('./2020/CompletePropertyDescriptor'),
CopyDataProperties: require('./2020/CopyDataProperties'),
@@ -28,6 +29,7 @@
CreateIterResultObject: require('./2020/CreateIterResultObject'),
CreateListFromArrayLike: require('./2020/CreateListFromArrayLike'),
CreateMethodProperty: require('./2020/CreateMethodProperty'),
+ CreateRegExpStringIterator: require('./2020/CreateRegExpStringIterator'),
DateFromTime: require('./2020/DateFromTime'),
DateString: require('./2020/DateString'),
Day: require('./2020/Day'),
@@ -57,6 +59,7 @@
IsArray: require('./2020/IsArray'),
IsBigIntElementType: require('./2020/IsBigIntElementType'),
IsCallable: require('./2020/IsCallable'),
+ IsCompatiblePropertyDescriptor: require('./2020/IsCompatiblePropertyDescriptor'),
IsConcatSpreadable: require('./2020/IsConcatSpreadable'),
IsConstructor: require('./2020/IsConstructor'),
IsDataDescriptor: require('./2020/IsDataDescriptor'),
@@ -68,6 +71,7 @@
IsPromise: require('./2020/IsPromise'),
IsPropertyKey: require('./2020/IsPropertyKey'),
IsRegExp: require('./2020/IsRegExp'),
+ IsSharedArrayBuffer: require('./2020/IsSharedArrayBuffer'),
IsStringPrefix: require('./2020/IsStringPrefix'),
IsUnclampedIntegerElementType: require('./2020/IsUnclampedIntegerElementType'),
IsUnsignedElementType: require('./2020/IsUnsignedElementType'),
@@ -96,6 +100,7 @@
OrdinaryHasProperty: require('./2020/OrdinaryHasProperty'),
OrdinaryObjectCreate: require('./2020/OrdinaryObjectCreate'),
OrdinarySetPrototypeOf: require('./2020/OrdinarySetPrototypeOf'),
+ OrdinaryToPrimitive: require('./2020/OrdinaryToPrimitive'),
PromiseResolve: require('./2020/PromiseResolve'),
QuoteJSONString: require('./2020/QuoteJSONString'),
RegExpCreate: require('./2020/RegExpCreate'),
@@ -114,6 +119,7 @@
StringCreate: require('./2020/StringCreate'),
StringGetOwnProperty: require('./2020/StringGetOwnProperty'),
StringPad: require('./2020/StringPad'),
+ StringToBigInt: require('./2020/StringToBigInt'),
SymbolDescriptiveString: require('./2020/SymbolDescriptiveString'),
TestIntegrityLevel: require('./2020/TestIntegrityLevel'),
thisBigIntValue: require('./2020/thisBigIntValue'),
@@ -126,6 +132,9 @@
TimeFromYear: require('./2020/TimeFromYear'),
TimeString: require('./2020/TimeString'),
TimeWithinDay: require('./2020/TimeWithinDay'),
+ ToBigInt: require('./2020/ToBigInt'),
+ ToBigInt64: require('./2020/ToBigInt64'),
+ ToBigUint64: require('./2020/ToBigUint64'),
ToBoolean: require('./2020/ToBoolean'),
ToDateString: require('./2020/ToDateString'),
ToIndex: require('./2020/ToIndex'),
diff --git a/node_modules/es-abstract/es2021.js b/node_modules/es-abstract/es2021.js
new file mode 100644
index 0000000..f1a2ae8
--- /dev/null
+++ b/node_modules/es-abstract/es2021.js
@@ -0,0 +1,178 @@
+'use strict';
+
+/* eslint global-require: 0 */
+// https://www.ecma-international.org/ecma-262/12.0/#sec-abstract-operations
+var ES2021 = {
+ 'Abstract Equality Comparison': require('./2021/AbstractEqualityComparison'),
+ 'Abstract Relational Comparison': require('./2021/AbstractRelationalComparison'),
+ 'Strict Equality Comparison': require('./2021/StrictEqualityComparison'),
+ abs: require('./2021/abs'),
+ AddEntriesFromIterable: require('./2021/AddEntriesFromIterable'),
+ AddToKeptObjects: require('./2021/AddToKeptObjects'),
+ AdvanceStringIndex: require('./2021/AdvanceStringIndex'),
+ ApplyStringOrNumericBinaryOperator: require('./2021/ApplyStringOrNumericBinaryOperator'),
+ ArrayCreate: require('./2021/ArrayCreate'),
+ ArraySetLength: require('./2021/ArraySetLength'),
+ ArraySpeciesCreate: require('./2021/ArraySpeciesCreate'),
+ BigInt: require('./2021/BigInt'),
+ BigIntBitwiseOp: require('./2021/BigIntBitwiseOp'),
+ BinaryAnd: require('./2021/BinaryAnd'),
+ BinaryOr: require('./2021/BinaryOr'),
+ BinaryXor: require('./2021/BinaryXor'),
+ ByteListBitwiseOp: require('./2021/ByteListBitwiseOp'),
+ ByteListEqual: require('./2021/ByteListEqual'),
+ Call: require('./2021/Call'),
+ CanonicalNumericIndexString: require('./2021/CanonicalNumericIndexString'),
+ CharacterRange: require('./2021/CharacterRange'),
+ clamp: require('./2021/clamp'),
+ substring: require('./2021/substring'),
+ ClearKeptObjects: require('./2021/ClearKeptObjects'),
+ CodePointAt: require('./2021/CodePointAt'),
+ CodePointsToString: require('./2021/CodePointsToString'),
+ CompletePropertyDescriptor: require('./2021/CompletePropertyDescriptor'),
+ CopyDataProperties: require('./2021/CopyDataProperties'),
+ CreateDataProperty: require('./2021/CreateDataProperty'),
+ CreateDataPropertyOrThrow: require('./2021/CreateDataPropertyOrThrow'),
+ CreateHTML: require('./2021/CreateHTML'),
+ CreateIterResultObject: require('./2021/CreateIterResultObject'),
+ CreateListFromArrayLike: require('./2021/CreateListFromArrayLike'),
+ CreateMethodProperty: require('./2021/CreateMethodProperty'),
+ CreateRegExpStringIterator: require('./2021/CreateRegExpStringIterator'),
+ DateFromTime: require('./2021/DateFromTime'),
+ DateString: require('./2021/DateString'),
+ Day: require('./2021/Day'),
+ DayFromYear: require('./2021/DayFromYear'),
+ DaysInYear: require('./2021/DaysInYear'),
+ DayWithinYear: require('./2021/DayWithinYear'),
+ DefinePropertyOrThrow: require('./2021/DefinePropertyOrThrow'),
+ DeletePropertyOrThrow: require('./2021/DeletePropertyOrThrow'),
+ EnumerableOwnPropertyNames: require('./2021/EnumerableOwnPropertyNames'),
+ FlattenIntoArray: require('./2021/FlattenIntoArray'),
+ floor: require('./2021/floor'),
+ FromPropertyDescriptor: require('./2021/FromPropertyDescriptor'),
+ Get: require('./2021/Get'),
+ GetIterator: require('./2021/GetIterator'),
+ GetMethod: require('./2021/GetMethod'),
+ GetOwnPropertyKeys: require('./2021/GetOwnPropertyKeys'),
+ GetPromiseResolve: require('./2021/GetPromiseResolve'),
+ GetPrototypeFromConstructor: require('./2021/GetPrototypeFromConstructor'),
+ GetSubstitution: require('./2021/GetSubstitution'),
+ GetV: require('./2021/GetV'),
+ HasOwnProperty: require('./2021/HasOwnProperty'),
+ HasProperty: require('./2021/HasProperty'),
+ HourFromTime: require('./2021/HourFromTime'),
+ InLeapYear: require('./2021/InLeapYear'),
+ InstanceofOperator: require('./2021/InstanceofOperator'),
+ Invoke: require('./2021/Invoke'),
+ IsAccessorDescriptor: require('./2021/IsAccessorDescriptor'),
+ IsArray: require('./2021/IsArray'),
+ IsBigIntElementType: require('./2021/IsBigIntElementType'),
+ IsCallable: require('./2021/IsCallable'),
+ IsCompatiblePropertyDescriptor: require('./2021/IsCompatiblePropertyDescriptor'),
+ IsConcatSpreadable: require('./2021/IsConcatSpreadable'),
+ IsConstructor: require('./2021/IsConstructor'),
+ IsDataDescriptor: require('./2021/IsDataDescriptor'),
+ IsExtensible: require('./2021/IsExtensible'),
+ IsGenericDescriptor: require('./2021/IsGenericDescriptor'),
+ IsIntegralNumber: require('./2021/IsIntegralNumber'),
+ IsNoTearConfiguration: require('./2021/IsNoTearConfiguration'),
+ IsPromise: require('./2021/IsPromise'),
+ IsPropertyKey: require('./2021/IsPropertyKey'),
+ IsRegExp: require('./2021/IsRegExp'),
+ IsSharedArrayBuffer: require('./2021/IsSharedArrayBuffer'),
+ IsStringPrefix: require('./2021/IsStringPrefix'),
+ IsUnclampedIntegerElementType: require('./2021/IsUnclampedIntegerElementType'),
+ IsUnsignedElementType: require('./2021/IsUnsignedElementType'),
+ IterableToList: require('./2021/IterableToList'),
+ IteratorClose: require('./2021/IteratorClose'),
+ IteratorComplete: require('./2021/IteratorComplete'),
+ IteratorNext: require('./2021/IteratorNext'),
+ IteratorStep: require('./2021/IteratorStep'),
+ IteratorValue: require('./2021/IteratorValue'),
+ LengthOfArrayLike: require('./2021/LengthOfArrayLike'),
+ MakeDate: require('./2021/MakeDate'),
+ MakeDay: require('./2021/MakeDay'),
+ MakeTime: require('./2021/MakeTime'),
+ MinFromTime: require('./2021/MinFromTime'),
+ modulo: require('./2021/modulo'),
+ MonthFromTime: require('./2021/MonthFromTime'),
+ msFromTime: require('./2021/msFromTime'),
+ Number: require('./2021/Number'),
+ NumberBitwiseOp: require('./2021/NumberBitwiseOp'),
+ NumberToBigInt: require('./2021/NumberToBigInt'),
+ OrdinaryCreateFromConstructor: require('./2021/OrdinaryCreateFromConstructor'),
+ OrdinaryDefineOwnProperty: require('./2021/OrdinaryDefineOwnProperty'),
+ OrdinaryGetOwnProperty: require('./2021/OrdinaryGetOwnProperty'),
+ OrdinaryGetPrototypeOf: require('./2021/OrdinaryGetPrototypeOf'),
+ OrdinaryHasInstance: require('./2021/OrdinaryHasInstance'),
+ OrdinaryHasProperty: require('./2021/OrdinaryHasProperty'),
+ OrdinaryObjectCreate: require('./2021/OrdinaryObjectCreate'),
+ OrdinarySetPrototypeOf: require('./2021/OrdinarySetPrototypeOf'),
+ OrdinaryToPrimitive: require('./2021/OrdinaryToPrimitive'),
+ PromiseResolve: require('./2021/PromiseResolve'),
+ QuoteJSONString: require('./2021/QuoteJSONString'),
+ RegExpCreate: require('./2021/RegExpCreate'),
+ RegExpExec: require('./2021/RegExpExec'),
+ RequireObjectCoercible: require('./2021/RequireObjectCoercible'),
+ SameValue: require('./2021/SameValue'),
+ SameValueNonNumeric: require('./2021/SameValueNonNumeric'),
+ SameValueZero: require('./2021/SameValueZero'),
+ SecFromTime: require('./2021/SecFromTime'),
+ Set: require('./2021/Set'),
+ SetFunctionLength: require('./2021/SetFunctionLength'),
+ SetFunctionName: require('./2021/SetFunctionName'),
+ SetIntegrityLevel: require('./2021/SetIntegrityLevel'),
+ SpeciesConstructor: require('./2021/SpeciesConstructor'),
+ SplitMatch: require('./2021/SplitMatch'),
+ StringCreate: require('./2021/StringCreate'),
+ StringGetOwnProperty: require('./2021/StringGetOwnProperty'),
+ StringIndexOf: require('./2021/StringIndexOf'),
+ StringPad: require('./2021/StringPad'),
+ StringToBigInt: require('./2021/StringToBigInt'),
+ StringToCodePoints: require('./2021/StringToCodePoints'),
+ SymbolDescriptiveString: require('./2021/SymbolDescriptiveString'),
+ TestIntegrityLevel: require('./2021/TestIntegrityLevel'),
+ thisBigIntValue: require('./2021/thisBigIntValue'),
+ thisBooleanValue: require('./2021/thisBooleanValue'),
+ thisNumberValue: require('./2021/thisNumberValue'),
+ thisStringValue: require('./2021/thisStringValue'),
+ thisSymbolValue: require('./2021/thisSymbolValue'),
+ thisTimeValue: require('./2021/thisTimeValue'),
+ TimeClip: require('./2021/TimeClip'),
+ TimeFromYear: require('./2021/TimeFromYear'),
+ TimeString: require('./2021/TimeString'),
+ TimeWithinDay: require('./2021/TimeWithinDay'),
+ ToBigInt: require('./2021/ToBigInt'),
+ ToBigInt64: require('./2021/ToBigInt64'),
+ ToBigUint64: require('./2021/ToBigUint64'),
+ ToBoolean: require('./2021/ToBoolean'),
+ ToDateString: require('./2021/ToDateString'),
+ ToIndex: require('./2021/ToIndex'),
+ ToInt16: require('./2021/ToInt16'),
+ ToInt32: require('./2021/ToInt32'),
+ ToInt8: require('./2021/ToInt8'),
+ ToIntegerOrInfinity: require('./2021/ToIntegerOrInfinity'),
+ ToLength: require('./2021/ToLength'),
+ ToNumber: require('./2021/ToNumber'),
+ ToNumeric: require('./2021/ToNumeric'),
+ ToObject: require('./2021/ToObject'),
+ ToPrimitive: require('./2021/ToPrimitive'),
+ ToPropertyDescriptor: require('./2021/ToPropertyDescriptor'),
+ ToPropertyKey: require('./2021/ToPropertyKey'),
+ ToString: require('./2021/ToString'),
+ ToUint16: require('./2021/ToUint16'),
+ ToUint32: require('./2021/ToUint32'),
+ ToUint8: require('./2021/ToUint8'),
+ ToUint8Clamp: require('./2021/ToUint8Clamp'),
+ TrimString: require('./2021/TrimString'),
+ Type: require('./2021/Type'),
+ UnicodeEscape: require('./2021/UnicodeEscape'),
+ UTF16EncodeCodePoint: require('./2021/UTF16EncodeCodePoint'),
+ UTF16SurrogatePairToCodePoint: require('./2021/UTF16SurrogatePairToCodePoint'),
+ ValidateAndApplyPropertyDescriptor: require('./2021/ValidateAndApplyPropertyDescriptor'),
+ WeakRefDeref: require('./2021/WeakRefDeref'),
+ WeekDay: require('./2021/WeekDay'),
+ YearFromTime: require('./2021/YearFromTime')
+};
+
+module.exports = ES2021;
diff --git a/node_modules/es-abstract/helpers/DefineOwnProperty.js b/node_modules/es-abstract/helpers/DefineOwnProperty.js
index 1a378a4..fb870f7 100644
--- a/node_modules/es-abstract/helpers/DefineOwnProperty.js
+++ b/node_modules/es-abstract/helpers/DefineOwnProperty.js
@@ -13,6 +13,12 @@
}
}
+// node v0.6 has a bug where array lengths can be Set but not Defined
+var hasArrayLengthDefineBug = Object.defineProperty && Object.defineProperty([], 'length', { value: 1 }).length === 0;
+
+// eslint-disable-next-line global-require
+var isArray = hasArrayLengthDefineBug && require('../2020/IsArray'); // this does not depend on any other AOs.
+
var callBound = require('call-bind/callBound');
var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
@@ -40,6 +46,18 @@
O[P] = V; // will use [[Define]]
return SameValue(O[P], V);
}
+ if (
+ hasArrayLengthDefineBug
+ && P === 'length'
+ && '[[Value]]' in desc
+ && isArray(O)
+ && O.length !== desc['[[Value]]']
+ ) {
+ // eslint-disable-next-line no-param-reassign
+ O.length = desc['[[Value]]'];
+ return O.length === desc['[[Value]]'];
+ }
+
$defineProperty(O, P, FromPropertyDescriptor(desc));
return true;
};
diff --git a/node_modules/es-abstract/helpers/getInferredName.js b/node_modules/es-abstract/helpers/getInferredName.js
index 2dab6e7..5fd24ff 100644
--- a/node_modules/es-abstract/helpers/getInferredName.js
+++ b/node_modules/es-abstract/helpers/getInferredName.js
@@ -1,10 +1,4 @@
'use strict';
-var getInferredName;
-try {
- // eslint-disable-next-line no-new-func
- getInferredName = Function('s', 'return { [s]() {} }[s].name;');
-} catch (e) {}
-
-var inferred = function () {};
-module.exports = getInferredName && inferred.name === 'inferred' ? getInferredName : null;
+// TODO: remove, semver-major
+module.exports = require('get-symbol-description/getInferredName');
diff --git a/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js b/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js
index 79cf048..352fbc6 100644
--- a/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js
+++ b/node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js
@@ -2,7 +2,7 @@
var GetIntrinsic = require('get-intrinsic');
-var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');
+var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
if ($gOPD) {
try {
$gOPD([], 'length');
diff --git a/node_modules/es-abstract/helpers/getSymbolDescription.js b/node_modules/es-abstract/helpers/getSymbolDescription.js
index e31cad2..699705f 100644
--- a/node_modules/es-abstract/helpers/getSymbolDescription.js
+++ b/node_modules/es-abstract/helpers/getSymbolDescription.js
@@ -1,41 +1,4 @@
'use strict';
-var GetIntrinsic = require('get-intrinsic');
-
-var callBound = require('call-bind/callBound');
-
-var $SyntaxError = GetIntrinsic('%SyntaxError%');
-var getGlobalSymbolDescription = GetIntrinsic('%Symbol.keyFor%', true);
-var thisSymbolValue = callBound('%Symbol.prototype.valueOf%', true);
-var symToStr = callBound('Symbol.prototype.toString', true);
-
-var getInferredName = require('./getInferredName');
-
-/* eslint-disable consistent-return */
-module.exports = callBound('%Symbol.prototype.description%', true) || function getSymbolDescription(symbol) {
- if (!thisSymbolValue) {
- throw new $SyntaxError('Symbols are not supported in this environment');
- }
-
- // will throw if not a symbol primitive or wrapper object
- var sym = thisSymbolValue(symbol);
-
- if (getInferredName) {
- var name = getInferredName(sym);
- if (name === '') { return; }
- return name.slice(1, -1); // name.slice('['.length, -']'.length);
- }
-
- var desc;
- if (getGlobalSymbolDescription) {
- desc = getGlobalSymbolDescription(sym);
- if (typeof desc === 'string') {
- return desc;
- }
- }
-
- desc = symToStr(sym).slice(7, -1); // str.slice('Symbol('.length, -')'.length);
- if (desc) {
- return desc;
- }
-};
+// TODO: remove, semver-major
+module.exports = require('get-symbol-description');
diff --git a/node_modules/es-abstract/helpers/modBigInt.js b/node_modules/es-abstract/helpers/modBigInt.js
new file mode 100644
index 0000000..22be2a1
--- /dev/null
+++ b/node_modules/es-abstract/helpers/modBigInt.js
@@ -0,0 +1,6 @@
+'use strict';
+
+module.exports = function bigIntMod(BigIntRemainder, bigint, modulo) {
+ var remain = BigIntRemainder(bigint, modulo);
+ return remain >= 0 ? remain : remain + modulo;
+};
diff --git a/node_modules/es-abstract/index.js b/node_modules/es-abstract/index.js
index 5cd5292..a95c9e6 100644
--- a/node_modules/es-abstract/index.js
+++ b/node_modules/es-abstract/index.js
@@ -9,6 +9,7 @@
var ES2018 = require('./es2018');
var ES2019 = require('./es2019');
var ES2020 = require('./es2020');
+var ES2021 = require('./es2021');
var ES = {
ES5: ES5,
@@ -19,7 +20,8 @@
ES2017: ES2017,
ES2018: ES2018,
ES2019: ES2019,
- ES2020: ES2020
+ ES2020: ES2020,
+ ES2021: ES2021
};
assign(ES, ES5);
delete ES.CheckObjectCoercible; // renamed in ES6 to RequireObjectCoercible
diff --git a/node_modules/es-abstract/operations/2021.js b/node_modules/es-abstract/operations/2021.js
new file mode 100644
index 0000000..5b8fd71
--- /dev/null
+++ b/node_modules/es-abstract/operations/2021.js
@@ -0,0 +1,439 @@
+'use strict';
+
+module.exports = {
+ abs: 'https://262.ecma-international.org/12.0/#eqn-abs',
+ 'Abstract Equality Comparison': 'https://262.ecma-international.org/12.0/#sec-abstract-equality-comparison',
+ 'Abstract Relational Comparison': 'https://262.ecma-international.org/12.0/#sec-abstract-relational-comparison',
+ AddEntriesFromIterable: 'https://262.ecma-international.org/12.0/#sec-add-entries-from-iterable',
+ AddRestrictedFunctionProperties: 'https://262.ecma-international.org/12.0/#sec-addrestrictedfunctionproperties',
+ AddToKeptObjects: 'https://262.ecma-international.org/12.0/#sec-addtokeptobjects',
+ AddWaiter: 'https://262.ecma-international.org/12.0/#sec-addwaiter',
+ AdvanceStringIndex: 'https://262.ecma-international.org/12.0/#sec-advancestringindex',
+ 'agent-order': 'https://262.ecma-international.org/12.0/#sec-agent-order',
+ AgentCanSuspend: 'https://262.ecma-international.org/12.0/#sec-agentcansuspend',
+ AgentSignifier: 'https://262.ecma-international.org/12.0/#sec-agentsignifier',
+ AllocateArrayBuffer: 'https://262.ecma-international.org/12.0/#sec-allocatearraybuffer',
+ AllocateSharedArrayBuffer: 'https://262.ecma-international.org/12.0/#sec-allocatesharedarraybuffer',
+ AllocateTypedArray: 'https://262.ecma-international.org/12.0/#sec-allocatetypedarray',
+ AllocateTypedArrayBuffer: 'https://262.ecma-international.org/12.0/#sec-allocatetypedarraybuffer',
+ ApplyStringOrNumericBinaryOperator: 'https://262.ecma-international.org/12.0/#sec-applystringornumericbinaryoperator',
+ ArrayCreate: 'https://262.ecma-international.org/12.0/#sec-arraycreate',
+ ArraySetLength: 'https://262.ecma-international.org/12.0/#sec-arraysetlength',
+ ArraySpeciesCreate: 'https://262.ecma-international.org/12.0/#sec-arrayspeciescreate',
+ AsyncFromSyncIteratorContinuation: 'https://262.ecma-international.org/12.0/#sec-asyncfromsynciteratorcontinuation',
+ AsyncFunctionStart: 'https://262.ecma-international.org/12.0/#sec-async-functions-abstract-operations-async-function-start',
+ AsyncGeneratorEnqueue: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorenqueue',
+ AsyncGeneratorReject: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorreject',
+ AsyncGeneratorResolve: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorresolve',
+ AsyncGeneratorResumeNext: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorresumenext',
+ AsyncGeneratorStart: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorstart',
+ AsyncGeneratorValidate: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratorvalidate',
+ AsyncGeneratorYield: 'https://262.ecma-international.org/12.0/#sec-asyncgeneratoryield',
+ AsyncIteratorClose: 'https://262.ecma-international.org/12.0/#sec-asynciteratorclose',
+ AtomicReadModifyWrite: 'https://262.ecma-international.org/12.0/#sec-atomicreadmodifywrite',
+ Await: 'https://262.ecma-international.org/12.0/#await',
+ BackreferenceMatcher: 'https://262.ecma-international.org/12.0/#sec-backreference-matcher',
+ 'BigInt::add': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-add',
+ 'BigInt::bitwiseAND': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseAND',
+ 'BigInt::bitwiseNOT': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseNOT',
+ 'BigInt::bitwiseOR': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseOR',
+ 'BigInt::bitwiseXOR': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-bitwiseXOR',
+ 'BigInt::divide': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-divide',
+ 'BigInt::equal': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-equal',
+ 'BigInt::exponentiate': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-exponentiate',
+ 'BigInt::leftShift': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-leftShift',
+ 'BigInt::lessThan': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-lessThan',
+ 'BigInt::multiply': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-multiply',
+ 'BigInt::remainder': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-remainder',
+ 'BigInt::sameValue': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-sameValue',
+ 'BigInt::sameValueZero': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-sameValueZero',
+ 'BigInt::signedRightShift': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-signedRightShift',
+ 'BigInt::subtract': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-subtract',
+ 'BigInt::toString': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-tostring',
+ 'BigInt::unaryMinus': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-unaryMinus',
+ 'BigInt::unsignedRightShift': 'https://262.ecma-international.org/12.0/#sec-numeric-types-bigint-unsignedRightShift',
+ BigIntBitwiseOp: 'https://262.ecma-international.org/12.0/#sec-bigintbitwiseop',
+ BinaryAnd: 'https://262.ecma-international.org/12.0/#sec-binaryand',
+ BinaryOr: 'https://262.ecma-international.org/12.0/#sec-binaryor',
+ BinaryXor: 'https://262.ecma-international.org/12.0/#sec-binaryxor',
+ BlockDeclarationInstantiation: 'https://262.ecma-international.org/12.0/#sec-blockdeclarationinstantiation',
+ BoundFunctionCreate: 'https://262.ecma-international.org/12.0/#sec-boundfunctioncreate',
+ ByteListBitwiseOp: 'https://262.ecma-international.org/12.0/#sec-bytelistbitwiseop',
+ ByteListEqual: 'https://262.ecma-international.org/12.0/#sec-bytelistequal',
+ Call: 'https://262.ecma-international.org/12.0/#sec-call',
+ Canonicalize: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-canonicalize-ch',
+ CanonicalNumericIndexString: 'https://262.ecma-international.org/12.0/#sec-canonicalnumericindexstring',
+ CaseClauseIsSelected: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-caseclauseisselected',
+ CharacterRange: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-characterrange-abstract-operation',
+ CharacterRangeOrUnion: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-characterrangeorunion-abstract-operation',
+ CharacterSetMatcher: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-charactersetmatcher-abstract-operation',
+ clamp: 'https://262.ecma-international.org/12.0/#clamping',
+ CleanupFinalizationRegistry: 'https://262.ecma-international.org/12.0/#sec-cleanup-finalization-registry',
+ ClearKeptObjects: 'https://262.ecma-international.org/12.0/#sec-clear-kept-objects',
+ CloneArrayBuffer: 'https://262.ecma-international.org/12.0/#sec-clonearraybuffer',
+ CodePointAt: 'https://262.ecma-international.org/12.0/#sec-codepointat',
+ CodePointsToString: 'https://262.ecma-international.org/12.0/#sec-codepointstostring',
+ CompletePropertyDescriptor: 'https://262.ecma-international.org/12.0/#sec-completepropertydescriptor',
+ Completion: 'https://262.ecma-international.org/12.0/#sec-completion-record-specification-type',
+ ComposeWriteEventBytes: 'https://262.ecma-international.org/12.0/#sec-composewriteeventbytes',
+ Construct: 'https://262.ecma-international.org/12.0/#sec-construct',
+ CopyDataBlockBytes: 'https://262.ecma-international.org/12.0/#sec-copydatablockbytes',
+ CopyDataProperties: 'https://262.ecma-international.org/12.0/#sec-copydataproperties',
+ CreateArrayFromList: 'https://262.ecma-international.org/12.0/#sec-createarrayfromlist',
+ CreateArrayIterator: 'https://262.ecma-international.org/12.0/#sec-createarrayiterator',
+ CreateAsyncFromSyncIterator: 'https://262.ecma-international.org/12.0/#sec-createasyncfromsynciterator',
+ CreateAsyncIteratorFromClosure: 'https://262.ecma-international.org/12.0/#sec-createasynciteratorfromclosure',
+ CreateBuiltinFunction: 'https://262.ecma-international.org/12.0/#sec-createbuiltinfunction',
+ CreateByteDataBlock: 'https://262.ecma-international.org/12.0/#sec-createbytedatablock',
+ CreateDataProperty: 'https://262.ecma-international.org/12.0/#sec-createdataproperty',
+ CreateDataPropertyOrThrow: 'https://262.ecma-international.org/12.0/#sec-createdatapropertyorthrow',
+ CreateDynamicFunction: 'https://262.ecma-international.org/12.0/#sec-createdynamicfunction',
+ CreateForInIterator: 'https://262.ecma-international.org/12.0/#sec-createforiniterator',
+ CreateHTML: 'https://262.ecma-international.org/12.0/#sec-createhtml',
+ CreateIntrinsics: 'https://262.ecma-international.org/12.0/#sec-createintrinsics',
+ CreateIteratorFromClosure: 'https://262.ecma-international.org/12.0/#sec-createiteratorfromclosure',
+ CreateIterResultObject: 'https://262.ecma-international.org/12.0/#sec-createiterresultobject',
+ CreateListFromArrayLike: 'https://262.ecma-international.org/12.0/#sec-createlistfromarraylike',
+ CreateListIteratorRecord: 'https://262.ecma-international.org/12.0/#sec-createlistiteratorRecord',
+ CreateMapIterator: 'https://262.ecma-international.org/12.0/#sec-createmapiterator',
+ CreateMappedArgumentsObject: 'https://262.ecma-international.org/12.0/#sec-createmappedargumentsobject',
+ CreateMethodProperty: 'https://262.ecma-international.org/12.0/#sec-createmethodproperty',
+ CreatePerIterationEnvironment: 'https://262.ecma-international.org/12.0/#sec-createperiterationenvironment',
+ CreateRealm: 'https://262.ecma-international.org/12.0/#sec-createrealm',
+ CreateRegExpStringIterator: 'https://262.ecma-international.org/12.0/#sec-createregexpstringiterator',
+ CreateResolvingFunctions: 'https://262.ecma-international.org/12.0/#sec-createresolvingfunctions',
+ CreateSetIterator: 'https://262.ecma-international.org/12.0/#sec-createsetiterator',
+ CreateSharedByteDataBlock: 'https://262.ecma-international.org/12.0/#sec-createsharedbytedatablock',
+ CreateUnmappedArgumentsObject: 'https://262.ecma-international.org/12.0/#sec-createunmappedargumentsobject',
+ DateFromTime: 'https://262.ecma-international.org/12.0/#sec-date-number',
+ DateString: 'https://262.ecma-international.org/12.0/#sec-datestring',
+ Day: 'https://262.ecma-international.org/12.0/#eqn-Day',
+ DayFromYear: 'https://262.ecma-international.org/12.0/#eqn-DaysFromYear',
+ DaysInYear: 'https://262.ecma-international.org/12.0/#eqn-DaysInYear',
+ DayWithinYear: 'https://262.ecma-international.org/12.0/#eqn-DayWithinYear',
+ Decode: 'https://262.ecma-international.org/12.0/#sec-decode',
+ DefinePropertyOrThrow: 'https://262.ecma-international.org/12.0/#sec-definepropertyorthrow',
+ DeletePropertyOrThrow: 'https://262.ecma-international.org/12.0/#sec-deletepropertyorthrow',
+ DetachArrayBuffer: 'https://262.ecma-international.org/12.0/#sec-detacharraybuffer',
+ Encode: 'https://262.ecma-international.org/12.0/#sec-encode',
+ EnterCriticalSection: 'https://262.ecma-international.org/12.0/#sec-entercriticalsection',
+ EnumerableOwnPropertyNames: 'https://262.ecma-international.org/12.0/#sec-enumerableownpropertynames',
+ EnumerateObjectProperties: 'https://262.ecma-international.org/12.0/#sec-enumerate-object-properties',
+ EscapeRegExpPattern: 'https://262.ecma-international.org/12.0/#sec-escaperegexppattern',
+ EvalDeclarationInstantiation: 'https://262.ecma-international.org/12.0/#sec-evaldeclarationinstantiation',
+ EvaluateCall: 'https://262.ecma-international.org/12.0/#sec-evaluatecall',
+ EvaluateNew: 'https://262.ecma-international.org/12.0/#sec-evaluatenew',
+ EvaluatePropertyAccessWithExpressionKey: 'https://262.ecma-international.org/12.0/#sec-evaluate-property-access-with-expression-key',
+ EvaluatePropertyAccessWithIdentifierKey: 'https://262.ecma-international.org/12.0/#sec-evaluate-property-access-with-identifier-key',
+ EvaluateStringOrNumericBinaryExpression: 'https://262.ecma-international.org/12.0/#sec-evaluatestringornumericbinaryexpression',
+ EventSet: 'https://262.ecma-international.org/12.0/#sec-event-set',
+ ExecuteModule: 'https://262.ecma-international.org/12.0/#sec-source-text-module-record-execute-module',
+ FinishDynamicImport: 'https://262.ecma-international.org/12.0/#sec-finishdynamicimport',
+ FlattenIntoArray: 'https://262.ecma-international.org/12.0/#sec-flattenintoarray',
+ floor: 'https://262.ecma-international.org/12.0/#eqn-floor',
+ ForBodyEvaluation: 'https://262.ecma-international.org/12.0/#sec-forbodyevaluation',
+ 'ForIn/OfBodyEvaluation': 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-forin-div-ofbodyevaluation-lhs-stmt-iterator-lhskind-labelset',
+ 'ForIn/OfHeadEvaluation': 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-forinofheadevaluation',
+ FromPropertyDescriptor: 'https://262.ecma-international.org/12.0/#sec-frompropertydescriptor',
+ FulfillPromise: 'https://262.ecma-international.org/12.0/#sec-fulfillpromise',
+ FunctionDeclarationInstantiation: 'https://262.ecma-international.org/12.0/#sec-functiondeclarationinstantiation',
+ GeneratorResume: 'https://262.ecma-international.org/12.0/#sec-generatorresume',
+ GeneratorResumeAbrupt: 'https://262.ecma-international.org/12.0/#sec-generatorresumeabrupt',
+ GeneratorStart: 'https://262.ecma-international.org/12.0/#sec-generatorstart',
+ GeneratorValidate: 'https://262.ecma-international.org/12.0/#sec-generatorvalidate',
+ GeneratorYield: 'https://262.ecma-international.org/12.0/#sec-generatoryield',
+ Get: 'https://262.ecma-international.org/12.0/#sec-get-o-p',
+ GetActiveScriptOrModule: 'https://262.ecma-international.org/12.0/#sec-getactivescriptormodule',
+ GetFunctionRealm: 'https://262.ecma-international.org/12.0/#sec-getfunctionrealm',
+ GetGeneratorKind: 'https://262.ecma-international.org/12.0/#sec-getgeneratorkind',
+ GetGlobalObject: 'https://262.ecma-international.org/12.0/#sec-getglobalobject',
+ GetIdentifierReference: 'https://262.ecma-international.org/12.0/#sec-getidentifierreference',
+ GetIterator: 'https://262.ecma-international.org/12.0/#sec-getiterator',
+ GetMethod: 'https://262.ecma-international.org/12.0/#sec-getmethod',
+ GetModifySetValueInBuffer: 'https://262.ecma-international.org/12.0/#sec-getmodifysetvalueinbuffer',
+ GetModuleNamespace: 'https://262.ecma-international.org/12.0/#sec-getmodulenamespace',
+ GetNewTarget: 'https://262.ecma-international.org/12.0/#sec-getnewtarget',
+ GetOwnPropertyKeys: 'https://262.ecma-international.org/12.0/#sec-getownpropertykeys',
+ GetPromiseResolve: 'https://262.ecma-international.org/12.0/#sec-getpromiseresolve',
+ GetPrototypeFromConstructor: 'https://262.ecma-international.org/12.0/#sec-getprototypefromconstructor',
+ GetSubstitution: 'https://262.ecma-international.org/12.0/#sec-getsubstitution',
+ GetSuperConstructor: 'https://262.ecma-international.org/12.0/#sec-getsuperconstructor',
+ GetTemplateObject: 'https://262.ecma-international.org/12.0/#sec-gettemplateobject',
+ GetThisEnvironment: 'https://262.ecma-international.org/12.0/#sec-getthisenvironment',
+ GetThisValue: 'https://262.ecma-international.org/12.0/#sec-getthisvalue',
+ GetV: 'https://262.ecma-international.org/12.0/#sec-getv',
+ GetValue: 'https://262.ecma-international.org/12.0/#sec-getvalue',
+ GetValueFromBuffer: 'https://262.ecma-international.org/12.0/#sec-getvaluefrombuffer',
+ GetViewValue: 'https://262.ecma-international.org/12.0/#sec-getviewvalue',
+ GetWaiterList: 'https://262.ecma-international.org/12.0/#sec-getwaiterlist',
+ GlobalDeclarationInstantiation: 'https://262.ecma-international.org/12.0/#sec-globaldeclarationinstantiation',
+ 'happens-before': 'https://262.ecma-international.org/12.0/#sec-happens-before',
+ HasOwnProperty: 'https://262.ecma-international.org/12.0/#sec-hasownproperty',
+ HasProperty: 'https://262.ecma-international.org/12.0/#sec-hasproperty',
+ 'host-synchronizes-with': 'https://262.ecma-international.org/12.0/#sec-host-synchronizes-with',
+ HostCallJobCallback: 'https://262.ecma-international.org/12.0/#sec-hostcalljobcallback',
+ HostEnqueueFinalizationRegistryCleanupJob: 'https://262.ecma-international.org/12.0/#sec-host-cleanup-finalization-registry',
+ HostEnqueuePromiseJob: 'https://262.ecma-international.org/12.0/#sec-hostenqueuepromisejob',
+ HostEnsureCanCompileStrings: 'https://262.ecma-international.org/12.0/#sec-hostensurecancompilestrings',
+ HostEventSet: 'https://262.ecma-international.org/12.0/#sec-hosteventset',
+ HostFinalizeImportMeta: 'https://262.ecma-international.org/12.0/#sec-hostfinalizeimportmeta',
+ HostGetImportMetaProperties: 'https://262.ecma-international.org/12.0/#sec-hostgetimportmetaproperties',
+ HostHasSourceTextAvailable: 'https://262.ecma-international.org/12.0/#sec-hosthassourcetextavailable',
+ HostImportModuleDynamically: 'https://262.ecma-international.org/12.0/#sec-hostimportmoduledynamically',
+ HostMakeJobCallback: 'https://262.ecma-international.org/12.0/#sec-hostmakejobcallback',
+ HostPromiseRejectionTracker: 'https://262.ecma-international.org/12.0/#sec-host-promise-rejection-tracker',
+ HostResolveImportedModule: 'https://262.ecma-international.org/12.0/#sec-hostresolveimportedmodule',
+ HourFromTime: 'https://262.ecma-international.org/12.0/#eqn-HourFromTime',
+ IfAbruptRejectPromise: 'https://262.ecma-international.org/12.0/#sec-ifabruptrejectpromise',
+ ImportedLocalNames: 'https://262.ecma-international.org/12.0/#sec-importedlocalnames',
+ InitializeBoundName: 'https://262.ecma-international.org/12.0/#sec-initializeboundname',
+ InitializeEnvironment: 'https://262.ecma-international.org/12.0/#sec-source-text-module-record-initialize-environment',
+ InitializeHostDefinedRealm: 'https://262.ecma-international.org/12.0/#sec-initializehostdefinedrealm',
+ InitializeReferencedBinding: 'https://262.ecma-international.org/12.0/#sec-initializereferencedbinding',
+ InitializeTypedArrayFromArrayBuffer: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromarraybuffer',
+ InitializeTypedArrayFromArrayLike: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromarraylike',
+ InitializeTypedArrayFromList: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromlist',
+ InitializeTypedArrayFromTypedArray: 'https://262.ecma-international.org/12.0/#sec-initializetypedarrayfromtypedarray',
+ InLeapYear: 'https://262.ecma-international.org/12.0/#eqn-InLeapYear',
+ InnerModuleEvaluation: 'https://262.ecma-international.org/12.0/#sec-innermoduleevaluation',
+ InnerModuleLinking: 'https://262.ecma-international.org/12.0/#sec-InnerModuleLinking',
+ InstanceofOperator: 'https://262.ecma-international.org/12.0/#sec-instanceofoperator',
+ IntegerIndexedElementGet: 'https://262.ecma-international.org/12.0/#sec-integerindexedelementget',
+ IntegerIndexedElementSet: 'https://262.ecma-international.org/12.0/#sec-integerindexedelementset',
+ IntegerIndexedObjectCreate: 'https://262.ecma-international.org/12.0/#sec-integerindexedobjectcreate',
+ InternalizeJSONProperty: 'https://262.ecma-international.org/12.0/#sec-internalizejsonproperty',
+ Invoke: 'https://262.ecma-international.org/12.0/#sec-invoke',
+ IsAccessorDescriptor: 'https://262.ecma-international.org/12.0/#sec-isaccessordescriptor',
+ IsAnonymousFunctionDefinition: 'https://262.ecma-international.org/12.0/#sec-isanonymousfunctiondefinition',
+ IsArray: 'https://262.ecma-international.org/12.0/#sec-isarray',
+ IsBigIntElementType: 'https://262.ecma-international.org/12.0/#sec-isbigintelementtype',
+ IsCallable: 'https://262.ecma-international.org/12.0/#sec-iscallable',
+ IsCompatiblePropertyDescriptor: 'https://262.ecma-international.org/12.0/#sec-iscompatiblepropertydescriptor',
+ IsConcatSpreadable: 'https://262.ecma-international.org/12.0/#sec-isconcatspreadable',
+ IsConstructor: 'https://262.ecma-international.org/12.0/#sec-isconstructor',
+ IsDataDescriptor: 'https://262.ecma-international.org/12.0/#sec-isdatadescriptor',
+ IsDetachedBuffer: 'https://262.ecma-international.org/12.0/#sec-isdetachedbuffer',
+ IsExtensible: 'https://262.ecma-international.org/12.0/#sec-isextensible-o',
+ IsGenericDescriptor: 'https://262.ecma-international.org/12.0/#sec-isgenericdescriptor',
+ IsInTailPosition: 'https://262.ecma-international.org/12.0/#sec-isintailposition',
+ IsIntegralNumber: 'https://262.ecma-international.org/12.0/#sec-isintegralnumber',
+ IsLabelledFunction: 'https://262.ecma-international.org/12.0/#sec-islabelledfunction',
+ IsNoTearConfiguration: 'https://262.ecma-international.org/12.0/#sec-isnotearconfiguration',
+ IsPromise: 'https://262.ecma-international.org/12.0/#sec-ispromise',
+ IsPropertyKey: 'https://262.ecma-international.org/12.0/#sec-ispropertykey',
+ IsPropertyReference: 'https://262.ecma-international.org/12.0/#sec-ispropertyreference',
+ IsRegExp: 'https://262.ecma-international.org/12.0/#sec-isregexp',
+ IsSharedArrayBuffer: 'https://262.ecma-international.org/12.0/#sec-issharedarraybuffer',
+ IsStringPrefix: 'https://262.ecma-international.org/12.0/#sec-isstringprefix',
+ IsSuperReference: 'https://262.ecma-international.org/12.0/#sec-issuperreference',
+ IsUnclampedIntegerElementType: 'https://262.ecma-international.org/12.0/#sec-isunclampedintegerelementtype',
+ IsUnresolvableReference: 'https://262.ecma-international.org/12.0/#sec-isunresolvablereference',
+ IsUnsignedElementType: 'https://262.ecma-international.org/12.0/#sec-isunsignedelementtype',
+ IsValidIntegerIndex: 'https://262.ecma-international.org/12.0/#sec-isvalidintegerindex',
+ IsValidRegularExpressionLiteral: 'https://262.ecma-international.org/12.0/#sec-isvalidregularexpressionliteral',
+ IsWordChar: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-iswordchar-abstract-operation',
+ IterableToList: 'https://262.ecma-international.org/12.0/#sec-iterabletolist',
+ IteratorClose: 'https://262.ecma-international.org/12.0/#sec-iteratorclose',
+ IteratorComplete: 'https://262.ecma-international.org/12.0/#sec-iteratorcomplete',
+ IteratorNext: 'https://262.ecma-international.org/12.0/#sec-iteratornext',
+ IteratorStep: 'https://262.ecma-international.org/12.0/#sec-iteratorstep',
+ IteratorValue: 'https://262.ecma-international.org/12.0/#sec-iteratorvalue',
+ LeaveCriticalSection: 'https://262.ecma-international.org/12.0/#sec-leavecriticalsection',
+ LengthOfArrayLike: 'https://262.ecma-international.org/12.0/#sec-lengthofarraylike',
+ LocalTime: 'https://262.ecma-international.org/12.0/#sec-localtime',
+ LocalTZA: 'https://262.ecma-international.org/12.0/#sec-local-time-zone-adjustment',
+ LoopContinues: 'https://262.ecma-international.org/12.0/#sec-loopcontinues',
+ MakeArgGetter: 'https://262.ecma-international.org/12.0/#sec-makearggetter',
+ MakeArgSetter: 'https://262.ecma-international.org/12.0/#sec-makeargsetter',
+ MakeBasicObject: 'https://262.ecma-international.org/12.0/#sec-makebasicobject',
+ MakeClassConstructor: 'https://262.ecma-international.org/12.0/#sec-makeclassconstructor',
+ MakeConstructor: 'https://262.ecma-international.org/12.0/#sec-makeconstructor',
+ MakeDate: 'https://262.ecma-international.org/12.0/#sec-makedate',
+ MakeDay: 'https://262.ecma-international.org/12.0/#sec-makeday',
+ MakeMethod: 'https://262.ecma-international.org/12.0/#sec-makemethod',
+ MakeSuperPropertyReference: 'https://262.ecma-international.org/12.0/#sec-makesuperpropertyreference',
+ MakeTime: 'https://262.ecma-international.org/12.0/#sec-maketime',
+ max: 'https://262.ecma-international.org/12.0/#eqn-max',
+ 'memory-order': 'https://262.ecma-international.org/12.0/#sec-memory-order',
+ min: 'https://262.ecma-international.org/12.0/#eqn-min',
+ MinFromTime: 'https://262.ecma-international.org/12.0/#eqn-MinFromTime',
+ ModuleNamespaceCreate: 'https://262.ecma-international.org/12.0/#sec-modulenamespacecreate',
+ modulo: 'https://262.ecma-international.org/12.0/#eqn-modulo',
+ MonthFromTime: 'https://262.ecma-international.org/12.0/#eqn-MonthFromTime',
+ msFromTime: 'https://262.ecma-international.org/12.0/#eqn-msFromTime',
+ NewDeclarativeEnvironment: 'https://262.ecma-international.org/12.0/#sec-newdeclarativeenvironment',
+ NewFunctionEnvironment: 'https://262.ecma-international.org/12.0/#sec-newfunctionenvironment',
+ NewGlobalEnvironment: 'https://262.ecma-international.org/12.0/#sec-newglobalenvironment',
+ NewModuleEnvironment: 'https://262.ecma-international.org/12.0/#sec-newmoduleenvironment',
+ NewObjectEnvironment: 'https://262.ecma-international.org/12.0/#sec-newobjectenvironment',
+ NewPromiseCapability: 'https://262.ecma-international.org/12.0/#sec-newpromisecapability',
+ NewPromiseReactionJob: 'https://262.ecma-international.org/12.0/#sec-newpromisereactionjob',
+ NewPromiseResolveThenableJob: 'https://262.ecma-international.org/12.0/#sec-newpromiseresolvethenablejob',
+ NormalCompletion: 'https://262.ecma-international.org/12.0/#sec-normalcompletion',
+ NotifyWaiter: 'https://262.ecma-international.org/12.0/#sec-notifywaiter',
+ 'Number::add': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-add',
+ 'Number::bitwiseAND': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseAND',
+ 'Number::bitwiseNOT': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseNOT',
+ 'Number::bitwiseOR': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseOR',
+ 'Number::bitwiseXOR': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-bitwiseXOR',
+ 'Number::divide': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-divide',
+ 'Number::equal': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-equal',
+ 'Number::exponentiate': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-exponentiate',
+ 'Number::leftShift': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-leftShift',
+ 'Number::lessThan': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-lessThan',
+ 'Number::multiply': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-multiply',
+ 'Number::remainder': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-remainder',
+ 'Number::sameValue': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-sameValue',
+ 'Number::sameValueZero': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-sameValueZero',
+ 'Number::signedRightShift': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-signedRightShift',
+ 'Number::subtract': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-subtract',
+ 'Number::toString': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-tostring',
+ 'Number::unaryMinus': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-unaryMinus',
+ 'Number::unsignedRightShift': 'https://262.ecma-international.org/12.0/#sec-numeric-types-number-unsignedRightShift',
+ NumberBitwiseOp: 'https://262.ecma-international.org/12.0/#sec-numberbitwiseop',
+ NumberToBigInt: 'https://262.ecma-international.org/12.0/#sec-numbertobigint',
+ NumericToRawBytes: 'https://262.ecma-international.org/12.0/#sec-numerictorawbytes',
+ ObjectDefineProperties: 'https://262.ecma-international.org/12.0/#sec-objectdefineproperties',
+ OrdinaryCallBindThis: 'https://262.ecma-international.org/12.0/#sec-ordinarycallbindthis',
+ OrdinaryCallEvaluateBody: 'https://262.ecma-international.org/12.0/#sec-ordinarycallevaluatebody',
+ OrdinaryCreateFromConstructor: 'https://262.ecma-international.org/12.0/#sec-ordinarycreatefromconstructor',
+ OrdinaryDefineOwnProperty: 'https://262.ecma-international.org/12.0/#sec-ordinarydefineownproperty',
+ OrdinaryDelete: 'https://262.ecma-international.org/12.0/#sec-ordinarydelete',
+ OrdinaryFunctionCreate: 'https://262.ecma-international.org/12.0/#sec-ordinaryfunctioncreate',
+ OrdinaryGet: 'https://262.ecma-international.org/12.0/#sec-ordinaryget',
+ OrdinaryGetOwnProperty: 'https://262.ecma-international.org/12.0/#sec-ordinarygetownproperty',
+ OrdinaryGetPrototypeOf: 'https://262.ecma-international.org/12.0/#sec-ordinarygetprototypeof',
+ OrdinaryHasInstance: 'https://262.ecma-international.org/12.0/#sec-ordinaryhasinstance',
+ OrdinaryHasProperty: 'https://262.ecma-international.org/12.0/#sec-ordinaryhasproperty',
+ OrdinaryIsExtensible: 'https://262.ecma-international.org/12.0/#sec-ordinaryisextensible',
+ OrdinaryObjectCreate: 'https://262.ecma-international.org/12.0/#sec-ordinaryobjectcreate',
+ OrdinaryOwnPropertyKeys: 'https://262.ecma-international.org/12.0/#sec-ordinaryownpropertykeys',
+ OrdinaryPreventExtensions: 'https://262.ecma-international.org/12.0/#sec-ordinarypreventextensions',
+ OrdinarySet: 'https://262.ecma-international.org/12.0/#sec-ordinaryset',
+ OrdinarySetPrototypeOf: 'https://262.ecma-international.org/12.0/#sec-ordinarysetprototypeof',
+ OrdinarySetWithOwnDescriptor: 'https://262.ecma-international.org/12.0/#sec-ordinarysetwithowndescriptor',
+ OrdinaryToPrimitive: 'https://262.ecma-international.org/12.0/#sec-ordinarytoprimitive',
+ ParseModule: 'https://262.ecma-international.org/12.0/#sec-parsemodule',
+ ParsePattern: 'https://262.ecma-international.org/12.0/#sec-parsepattern',
+ ParseScript: 'https://262.ecma-international.org/12.0/#sec-parse-script',
+ ParseText: 'https://262.ecma-international.org/12.0/#sec-parsetext',
+ PerformEval: 'https://262.ecma-international.org/12.0/#sec-performeval',
+ PerformPromiseAll: 'https://262.ecma-international.org/12.0/#sec-performpromiseall',
+ PerformPromiseAllSettled: 'https://262.ecma-international.org/12.0/#sec-performpromiseallsettled',
+ PerformPromiseAny: 'https://262.ecma-international.org/12.0/#sec-performpromiseany',
+ PerformPromiseRace: 'https://262.ecma-international.org/12.0/#sec-performpromiserace',
+ PerformPromiseThen: 'https://262.ecma-international.org/12.0/#sec-performpromisethen',
+ PrepareForOrdinaryCall: 'https://262.ecma-international.org/12.0/#sec-prepareforordinarycall',
+ PrepareForTailCall: 'https://262.ecma-international.org/12.0/#sec-preparefortailcall',
+ PromiseResolve: 'https://262.ecma-international.org/12.0/#sec-promise-resolve',
+ ProxyCreate: 'https://262.ecma-international.org/12.0/#sec-proxycreate',
+ PutValue: 'https://262.ecma-international.org/12.0/#sec-putvalue',
+ QuoteJSONString: 'https://262.ecma-international.org/12.0/#sec-quotejsonstring',
+ RawBytesToNumeric: 'https://262.ecma-international.org/12.0/#sec-rawbytestonumeric',
+ 'reads-bytes-from': 'https://262.ecma-international.org/12.0/#sec-reads-bytes-from',
+ 'reads-from': 'https://262.ecma-international.org/12.0/#sec-reads-from',
+ RegExpAlloc: 'https://262.ecma-international.org/12.0/#sec-regexpalloc',
+ RegExpBuiltinExec: 'https://262.ecma-international.org/12.0/#sec-regexpbuiltinexec',
+ RegExpCreate: 'https://262.ecma-international.org/12.0/#sec-regexpcreate',
+ RegExpExec: 'https://262.ecma-international.org/12.0/#sec-regexpexec',
+ RegExpInitialize: 'https://262.ecma-international.org/12.0/#sec-regexpinitialize',
+ RejectPromise: 'https://262.ecma-international.org/12.0/#sec-rejectpromise',
+ RemoveWaiter: 'https://262.ecma-international.org/12.0/#sec-removewaiter',
+ RemoveWaiters: 'https://262.ecma-international.org/12.0/#sec-removewaiters',
+ RepeatMatcher: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-repeatmatcher-abstract-operation',
+ RequireInternalSlot: 'https://262.ecma-international.org/12.0/#sec-requireinternalslot',
+ RequireObjectCoercible: 'https://262.ecma-international.org/12.0/#sec-requireobjectcoercible',
+ ResolveBinding: 'https://262.ecma-international.org/12.0/#sec-resolvebinding',
+ ResolveThisBinding: 'https://262.ecma-international.org/12.0/#sec-resolvethisbinding',
+ ReturnIfAbrupt: 'https://262.ecma-international.org/12.0/#sec-returnifabrupt',
+ SameValue: 'https://262.ecma-international.org/12.0/#sec-samevalue',
+ SameValueNonNumeric: 'https://262.ecma-international.org/12.0/#sec-samevaluenonnumeric',
+ SameValueZero: 'https://262.ecma-international.org/12.0/#sec-samevaluezero',
+ ScriptEvaluation: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-scriptevaluation',
+ SecFromTime: 'https://262.ecma-international.org/12.0/#eqn-SecFromTime',
+ SerializeJSONArray: 'https://262.ecma-international.org/12.0/#sec-serializejsonarray',
+ SerializeJSONObject: 'https://262.ecma-international.org/12.0/#sec-serializejsonobject',
+ SerializeJSONProperty: 'https://262.ecma-international.org/12.0/#sec-serializejsonproperty',
+ Set: 'https://262.ecma-international.org/12.0/#sec-set-o-p-v-throw',
+ SetDefaultGlobalBindings: 'https://262.ecma-international.org/12.0/#sec-setdefaultglobalbindings',
+ SetFunctionLength: 'https://262.ecma-international.org/12.0/#sec-setfunctionlength',
+ SetFunctionName: 'https://262.ecma-international.org/12.0/#sec-setfunctionname',
+ SetImmutablePrototype: 'https://262.ecma-international.org/12.0/#sec-set-immutable-prototype',
+ SetIntegrityLevel: 'https://262.ecma-international.org/12.0/#sec-setintegritylevel',
+ SetRealmGlobalObject: 'https://262.ecma-international.org/12.0/#sec-setrealmglobalobject',
+ SetTypedArrayFromArrayLike: 'https://262.ecma-international.org/12.0/#sec-settypedarrayfromarraylike',
+ SetTypedArrayFromTypedArray: 'https://262.ecma-international.org/12.0/#sec-settypedarrayfromtypedarray',
+ SetValueInBuffer: 'https://262.ecma-international.org/12.0/#sec-setvalueinbuffer',
+ SetViewValue: 'https://262.ecma-international.org/12.0/#sec-setviewvalue',
+ SharedDataBlockEventSet: 'https://262.ecma-international.org/12.0/#sec-sharedatablockeventset',
+ SortCompare: 'https://262.ecma-international.org/12.0/#sec-sortcompare',
+ SpeciesConstructor: 'https://262.ecma-international.org/12.0/#sec-speciesconstructor',
+ SplitMatch: 'https://262.ecma-international.org/12.0/#sec-splitmatch',
+ 'Strict Equality Comparison': 'https://262.ecma-international.org/12.0/#sec-strict-equality-comparison',
+ StringCreate: 'https://262.ecma-international.org/12.0/#sec-stringcreate',
+ StringGetOwnProperty: 'https://262.ecma-international.org/12.0/#sec-stringgetownproperty',
+ StringIndexOf: 'https://262.ecma-international.org/12.0/#sec-stringindexof',
+ StringPad: 'https://262.ecma-international.org/12.0/#sec-stringpad',
+ StringToBigInt: 'https://262.ecma-international.org/12.0/#sec-stringtobigint',
+ StringToCodePoints: 'https://262.ecma-international.org/12.0/#sec-stringtocodepoints',
+ substring: 'https://262.ecma-international.org/12.0/#substring',
+ SuspendAgent: 'https://262.ecma-international.org/12.0/#sec-suspendagent',
+ SymbolDescriptiveString: 'https://262.ecma-international.org/12.0/#sec-symboldescriptivestring',
+ 'synchronizes-with': 'https://262.ecma-international.org/12.0/#sec-synchronizes-with',
+ TestIntegrityLevel: 'https://262.ecma-international.org/12.0/#sec-testintegritylevel',
+ thisBigIntValue: 'https://262.ecma-international.org/12.0/#thisbigintvalue',
+ thisBooleanValue: 'https://262.ecma-international.org/12.0/#thisbooleanvalue',
+ thisNumberValue: 'https://262.ecma-international.org/12.0/#thisnumbervalue',
+ thisStringValue: 'https://262.ecma-international.org/12.0/#thisstringvalue',
+ thisSymbolValue: 'https://262.ecma-international.org/12.0/#thissymbolvalue',
+ thisTimeValue: 'https://262.ecma-international.org/12.0/#thistimevalue',
+ ThrowCompletion: 'https://262.ecma-international.org/12.0/#sec-throwcompletion',
+ TimeClip: 'https://262.ecma-international.org/12.0/#sec-timeclip',
+ TimeFromYear: 'https://262.ecma-international.org/12.0/#eqn-TimeFromYear',
+ TimeString: 'https://262.ecma-international.org/12.0/#sec-timestring',
+ TimeWithinDay: 'https://262.ecma-international.org/12.0/#eqn-TimeWithinDay',
+ TimeZoneString: 'https://262.ecma-international.org/12.0/#sec-timezoneestring',
+ ToBigInt: 'https://262.ecma-international.org/12.0/#sec-tobigint',
+ ToBigInt64: 'https://262.ecma-international.org/12.0/#sec-tobigint64',
+ ToBigUint64: 'https://262.ecma-international.org/12.0/#sec-tobiguint64',
+ ToBoolean: 'https://262.ecma-international.org/12.0/#sec-toboolean',
+ ToDateString: 'https://262.ecma-international.org/12.0/#sec-todatestring',
+ ToIndex: 'https://262.ecma-international.org/12.0/#sec-toindex',
+ ToInt16: 'https://262.ecma-international.org/12.0/#sec-toint16',
+ ToInt32: 'https://262.ecma-international.org/12.0/#sec-toint32',
+ ToInt8: 'https://262.ecma-international.org/12.0/#sec-toint8',
+ ToIntegerOrInfinity: 'https://262.ecma-international.org/12.0/#sec-tointegerorinfinity',
+ ToLength: 'https://262.ecma-international.org/12.0/#sec-tolength',
+ ToNumber: 'https://262.ecma-international.org/12.0/#sec-tonumber',
+ ToNumeric: 'https://262.ecma-international.org/12.0/#sec-tonumeric',
+ ToObject: 'https://262.ecma-international.org/12.0/#sec-toobject',
+ ToPrimitive: 'https://262.ecma-international.org/12.0/#sec-toprimitive',
+ ToPropertyDescriptor: 'https://262.ecma-international.org/12.0/#sec-topropertydescriptor',
+ ToPropertyKey: 'https://262.ecma-international.org/12.0/#sec-topropertykey',
+ ToString: 'https://262.ecma-international.org/12.0/#sec-tostring',
+ ToUint16: 'https://262.ecma-international.org/12.0/#sec-touint16',
+ ToUint32: 'https://262.ecma-international.org/12.0/#sec-touint32',
+ ToUint8: 'https://262.ecma-international.org/12.0/#sec-touint8',
+ ToUint8Clamp: 'https://262.ecma-international.org/12.0/#sec-touint8clamp',
+ TriggerPromiseReactions: 'https://262.ecma-international.org/12.0/#sec-triggerpromisereactions',
+ TrimString: 'https://262.ecma-international.org/12.0/#sec-trimstring',
+ Type: 'https://262.ecma-international.org/12.0/#sec-ecmascript-data-types-and-values',
+ TypedArrayCreate: 'https://262.ecma-international.org/12.0/#typedarray-create',
+ TypedArraySpeciesCreate: 'https://262.ecma-international.org/12.0/#typedarray-species-create',
+ UnicodeEscape: 'https://262.ecma-international.org/12.0/#sec-unicodeescape',
+ UnicodeMatchProperty: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-unicodematchproperty-p',
+ UnicodeMatchPropertyValue: 'https://262.ecma-international.org/12.0/#sec-runtime-semantics-unicodematchpropertyvalue-p-v',
+ UpdateEmpty: 'https://262.ecma-international.org/12.0/#sec-updateempty',
+ UTC: 'https://262.ecma-international.org/12.0/#sec-utc-t',
+ UTF16EncodeCodePoint: 'https://262.ecma-international.org/12.0/#sec-utf16encodecodepoint',
+ UTF16SurrogatePairToCodePoint: 'https://262.ecma-international.org/12.0/#sec-utf16decodesurrogatepair',
+ ValidateAndApplyPropertyDescriptor: 'https://262.ecma-international.org/12.0/#sec-validateandapplypropertydescriptor',
+ ValidateAtomicAccess: 'https://262.ecma-international.org/12.0/#sec-validateatomicaccess',
+ ValidateIntegerTypedArray: 'https://262.ecma-international.org/12.0/#sec-validateintegertypedarray',
+ ValidateTypedArray: 'https://262.ecma-international.org/12.0/#sec-validatetypedarray',
+ ValueOfReadEvent: 'https://262.ecma-international.org/12.0/#sec-valueofreadevent',
+ WeakRefDeref: 'https://262.ecma-international.org/12.0/#sec-weakrefderef',
+ WeekDay: 'https://262.ecma-international.org/12.0/#sec-week-day',
+ YearFromTime: 'https://262.ecma-international.org/12.0/#eqn-YearFromTime',
+ Yield: 'https://262.ecma-international.org/12.0/#sec-yield'
+};
diff --git a/node_modules/es-abstract/package.json b/node_modules/es-abstract/package.json
index 142f8db..9dc25e0 100644
--- a/node_modules/es-abstract/package.json
+++ b/node_modules/es-abstract/package.json
@@ -1,6 +1,6 @@
{
"name": "es-abstract",
- "version": "1.18.3",
+ "version": "1.19.1",
"author": {
"name": "Jordan Harband",
"email": "[email protected]",
@@ -20,19 +20,6 @@
"license": "MIT",
"main": "index.js",
"type": "commonjs",
- "exports": {
- ".": "./index.js",
- "./package.json": "./package.json",
- "./2020/*": "./2020/*.js",
- "./2019/*": "./2019/*.js",
- "./2018/*": "./2018/*.js",
- "./2017/*": "./2017/*.js",
- "./2016/*": "./2016/*.js",
- "./2015/*": "./2015/*.js",
- "./helpers/*": "./helpers/*.js",
- "./5/*": "./5/*.js",
- "./": "./"
- },
"sideEffects": false,
"scripts": {
"prespackle": "git ls-files | xargs git check-attr spackled | grep -v 'unspecified$' | cut -d: -f1 | xargs rm || true",
@@ -68,13 +55,17 @@
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
"is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.3",
- "is-string": "^1.0.6",
- "object-inspect": "^1.10.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
"string.prototype.trimend": "^1.0.4",
@@ -82,14 +73,15 @@
"unbox-primitive": "^1.0.1"
},
"devDependencies": {
- "@ljharb/eslint-config": "^17.6.0",
- "array.prototype.indexof": "^1.0.2",
+ "@ljharb/eslint-config": "^18.0.0",
+ "array.prototype.filter": "^1.0.1",
+ "array.prototype.indexof": "^1.0.3",
"aud": "^1.1.5",
"cheerio": "=1.0.0-rc.3",
"diff": "^5.0.0",
"eclint": "^2.8.1",
"es-value-fixtures": "^1.2.1",
- "eslint": "^7.27.0",
+ "eslint": "^7.32.0",
"foreach": "^2.0.5",
"functions-have-names": "^1.2.2",
"has-bigints": "^1.0.1",
@@ -103,7 +95,7 @@
"object.fromentries": "^2.0.4",
"safe-publish-latest": "^1.1.4",
"ses": "^0.10.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.1"
},
"testling": {
"files": "test/index.js",
diff --git a/node_modules/es-abstract/test/GetIntrinsic.js b/node_modules/es-abstract/test/GetIntrinsic.js
deleted file mode 100644
index 2f21e76..0000000
--- a/node_modules/es-abstract/test/GetIntrinsic.js
+++ /dev/null
@@ -1,207 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('get-intrinsic');
-
-var test = require('tape');
-var forEach = require('foreach');
-var debug = require('object-inspect');
-var generatorFns = require('make-generator-function')();
-var asyncFns = require('make-async-function').list();
-var asyncGenFns = require('make-async-generator-function')();
-
-var callBound = require('call-bind/callBound');
-var v = require('es-value-fixtures');
-var $gOPD = require('../helpers/getOwnPropertyDescriptor');
-var defineProperty = require('./helpers/defineProperty');
-
-var $isProto = callBound('%Object.prototype.isPrototypeOf%');
-
-test('export', function (t) {
- t.equal(typeof GetIntrinsic, 'function', 'it is a function');
- t.equal(GetIntrinsic.length, 2, 'function has length of 2');
-
- t.end();
-});
-
-test('throws', function (t) {
- t['throws'](
- function () { GetIntrinsic('not an intrinsic'); },
- SyntaxError,
- 'nonexistent intrinsic throws a syntax error'
- );
-
- t['throws'](
- function () { GetIntrinsic(''); },
- TypeError,
- 'empty string intrinsic throws a type error'
- );
-
- t['throws'](
- function () { GetIntrinsic('.'); },
- SyntaxError,
- '"just a dot" intrinsic throws a syntax error'
- );
-
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { GetIntrinsic(nonString); },
- TypeError,
- debug(nonString) + ' is not a String'
- );
- });
-
- forEach(v.nonBooleans, function (nonBoolean) {
- t['throws'](
- function () { GetIntrinsic('%', nonBoolean); },
- TypeError,
- debug(nonBoolean) + ' is not a Boolean'
- );
- });
-
- forEach([
- 'toString',
- 'propertyIsEnumerable',
- 'hasOwnProperty'
- ], function (objectProtoMember) {
- t['throws'](
- function () { GetIntrinsic(objectProtoMember); },
- SyntaxError,
- debug(objectProtoMember) + ' is not an intrinsic'
- );
- });
-
- t.end();
-});
-
-test('base intrinsics', function (t) {
- t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object');
- t.equal(GetIntrinsic('Object'), Object, 'Object yields Object');
- t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array');
- t.equal(GetIntrinsic('Array'), Array, 'Array yields Array');
-
- t.end();
-});
-
-test('dotted paths', function (t) {
- t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString');
- t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString');
- t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push');
- t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push');
-
- test('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {
- var original = GetIntrinsic('%ObjProto_toString%');
-
- forEach([
- '%Object.prototype.toString%',
- 'Object.prototype.toString',
- '%ObjectPrototype.toString%',
- 'ObjectPrototype.toString',
- '%ObjProto_toString%',
- 'ObjProto_toString'
- ], function (name) {
- defineProperty(Object.prototype, 'toString', {
- value: function toString() {
- return original.apply(this, arguments);
- }
- });
- st.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString');
- });
-
- defineProperty(Object.prototype, 'toString', { value: original });
- st.end();
- });
-
- test('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) {
- var original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%');
-
- forEach([
- '%Object.prototype.propertyIsEnumerable%',
- 'Object.prototype.propertyIsEnumerable',
- '%ObjectPrototype.propertyIsEnumerable%',
- 'ObjectPrototype.propertyIsEnumerable'
- ], function (name) {
- // eslint-disable-next-line no-extend-native
- Object.prototype.propertyIsEnumerable = function propertyIsEnumerable() {
- return original.apply(this, arguments);
- };
- st.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable');
- });
-
- // eslint-disable-next-line no-extend-native
- Object.prototype.propertyIsEnumerable = original;
- st.end();
- });
-
- test('dotted path reports correct error', function (st) {
- st['throws'](function () {
- GetIntrinsic('%NonExistentIntrinsic.prototype.property%');
- }, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%');
-
- st['throws'](function () {
- GetIntrinsic('%NonExistentIntrinsicPrototype.property%');
- }, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%');
-
- st.end();
- });
-
- t.end();
-});
-
-test('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) {
- var actual = $gOPD(Map.prototype, 'size');
- t.ok(actual, 'Map.prototype.size has a descriptor');
- t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function');
- t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it');
- t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it');
-
- t.end();
-});
-
-test('generator functions', { skip: !generatorFns.length }, function (t) {
- var $GeneratorFunction = GetIntrinsic('%GeneratorFunction%');
- var $GeneratorFunctionPrototype = GetIntrinsic('%Generator%');
- var $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%');
-
- forEach(generatorFns, function (genFn) {
- var fnName = genFn.name;
- fnName = fnName ? "'" + fnName + "'" : 'genFn';
-
- t.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%');
- t.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName);
- t.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype');
- });
-
- t.end();
-});
-
-test('async functions', { skip: !asyncFns.length }, function (t) {
- var $AsyncFunction = GetIntrinsic('%AsyncFunction%');
- var $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%');
-
- forEach(asyncFns, function (asyncFn) {
- var fnName = asyncFn.name;
- fnName = fnName ? "'" + fnName + "'" : 'asyncFn';
-
- t.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%');
- t.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName);
- });
-
- t.end();
-});
-
-test('async generator functions', { skip: !asyncGenFns.length }, function (t) {
- var $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%');
- var $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%');
- var $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%');
-
- forEach(asyncGenFns, function (asyncGenFn) {
- var fnName = asyncGenFn.name;
- fnName = fnName ? "'" + fnName + "'" : 'asyncGenFn';
-
- t.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%');
- t.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName);
- t.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype');
- });
-
- t.end();
-});
diff --git a/node_modules/es-abstract/test/diffOps.js b/node_modules/es-abstract/test/diffOps.js
deleted file mode 100644
index 06641b1..0000000
--- a/node_modules/es-abstract/test/diffOps.js
+++ /dev/null
@@ -1,58 +0,0 @@
-'use strict';
-
-var keys = require('object-keys');
-var forEach = require('foreach');
-var indexOf = require('array.prototype.indexof');
-var has = require('has');
-
-module.exports = function diffOperations(actual, expected, expectedMissing) {
- var actualKeys = keys(actual);
- var expectedKeys = keys(expected);
-
- var extra = [];
- var missing = [];
- var extraMissing = [];
-
- forEach(actualKeys, function (op) {
- if (!(op in expected)) {
- if (actual[op] && typeof actual[op] === 'object') {
- forEach(keys(actual[op]), function (nestedOp) {
- var fullNestedOp = op + '::' + nestedOp;
- if (!(fullNestedOp in expected)) {
- extra.push(fullNestedOp);
- } else if (indexOf(expectedMissing, fullNestedOp) !== -1) {
- extra.push(fullNestedOp);
- }
- });
- } else {
- extra.push(op);
- }
- } else if (indexOf(expectedMissing, op) !== -1) {
- extra.push(op);
- }
- });
- var checkMissing = function checkMissing(op, actualValue) {
- if (typeof actualValue !== 'function' && indexOf(expectedMissing, op) === -1) {
- missing.push(op);
- }
- };
- forEach(expectedKeys, function (op) {
- if (op.indexOf('::') > -1) {
- var parts = op.split('::');
- var value = actual[parts[0]];
- if (value && typeof value === 'object' && typeof value[parts[1]] === 'function') {
- checkMissing(op, value[parts[1]]);
- }
- } else {
- checkMissing(op, actual[op]);
- }
- });
-
- forEach(expectedMissing, function (expectedOp) {
- if (!has(expected, expectedOp)) {
- extraMissing.push(expectedOp);
- }
- });
-
- return { missing: missing, extra: extra, extraMissing: extraMissing };
-};
diff --git a/node_modules/es-abstract/test/es2015.js b/node_modules/es-abstract/test/es2015.js
deleted file mode 100644
index 33a8ead..0000000
--- a/node_modules/es-abstract/test/es2015.js
+++ /dev/null
@@ -1,144 +0,0 @@
-'use strict';
-
-var ES = require('../').ES2015;
-var boundES = require('./helpers/createBoundESNamespace')(ES);
-
-var ops = require('../operations/2015');
-
-var expectedMissing = [
- 'AddRestrictedFunctionProperties',
- 'AllocateArrayBuffer',
- 'AllocateTypedArray',
- 'BoundFunctionCreate',
- 'Canonicalize',
- 'CharacterRange',
- 'CharacterSetMatcher',
- 'CloneArrayBuffer',
- 'Completion',
- 'Construct',
- 'CopyDataBlockBytes',
- 'CreateArrayFromList',
- 'CreateArrayIterator',
- 'CreateBuiltinFunction',
- 'CreateByteDataBlock',
- 'CreateDynamicFunction',
- 'CreateIntrinsics',
- 'CreateListIterator',
- 'CreateMapIterator',
- 'CreateMappedArgumentsObject',
- 'CreatePerIterationEnvironment',
- 'CreateRealm',
- 'CreateSetIterator',
- 'CreateUnmappedArgumentsObject',
- 'DaylightSavingTA',
- 'Decode',
- 'DetachArrayBuffer',
- 'Encode',
- 'EnqueueJob',
- 'EscapeRegExpPattern',
- 'EvalDeclarationInstantiation',
- 'EvaluateCall',
- 'EvaluateDirectCall',
- 'EvaluateNew',
- 'ForBodyEvaluation',
- 'ForIn/OfBodyEvaluation',
- 'ForIn/OfHeadEvaluation',
- 'FulfillPromise',
- 'FunctionAllocate',
- 'FunctionCreate',
- 'FunctionInitialize',
- 'GeneratorFunctionCreate',
- 'GeneratorResume',
- 'GeneratorResumeAbrupt',
- 'GeneratorStart',
- 'GeneratorValidate',
- 'GeneratorYield',
- 'GetBase',
- 'GetFunctionRealm',
- 'GetGlobalObject',
- 'GetIdentifierReference',
- 'GetModuleNamespace',
- 'GetNewTarget',
- 'GetReferencedName',
- 'GetSuperConstructor',
- 'GetTemplateObject',
- 'GetThisEnvironment',
- 'GetThisValue',
- 'GetValue',
- 'GetValueFromBuffer',
- 'GetViewValue',
- 'HasPrimitiveBase',
- 'HostResolveImportedModule',
- 'ImportedLocalNames',
- 'InitializeHostDefinedRealm',
- 'InitializeReferencedBinding',
- 'IntegerIndexedElementGet',
- 'IntegerIndexedElementSet',
- 'IntegerIndexedObjectCreate',
- 'InternalizeJSONProperty',
- 'IsAnonymousFunctionDefinition',
- 'IsCompatiblePropertyDescriptor',
- 'IsDetachedBuffer',
- 'IsInTailPosition',
- 'IsLabelledFunction',
- 'IsPropertyReference',
- 'IsStrictReference',
- 'IsSuperReference',
- 'IsUnresolvableReference',
- 'IsWordChar',
- 'LocalTime',
- 'LoopContinues',
- 'MakeArgGetter',
- 'MakeArgSetter',
- 'MakeClassConstructor',
- 'MakeConstructor',
- 'MakeMethod',
- 'MakeSuperPropertyReference',
- 'max',
- 'min',
- 'ModuleNamespaceCreate',
- 'msPerDay', // constant
- 'NewDeclarativeEnvironment',
- 'NewFunctionEnvironment',
- 'NewGlobalEnvironment',
- 'NewModuleEnvironment',
- 'NewObjectEnvironment',
- 'NewPromiseCapability',
- 'NormalCompletion',
- 'ObjectDefineProperties',
- 'OrdinaryCallBindThis',
- 'OrdinaryCallEvaluateBody',
- 'ParseModule',
- 'PerformEval',
- 'PerformPromiseAll',
- 'PerformPromiseRace',
- 'PerformPromiseThen',
- 'PrepareForOrdinaryCall',
- 'PrepareForTailCall',
- 'ProxyCreate',
- 'PutValue', // takes a Reference
- 'RegExpAlloc', // creates a regex with uninitialized internal lots
- 'RegExpBuiltinExec',
- 'RegExpInitialize', // initializes allocated regex's internal slots
- 'RejectPromise',
- 'RepeatMatcher',
- 'ResolveBinding',
- 'ResolveThisBinding',
- 'SerializeJSONArray',
- 'SerializeJSONObject',
- 'SerializeJSONProperty',
- 'SetDefaultGlobalBindings',
- 'SetRealmGlobalObject',
- 'SetValueInBuffer',
- 'SetViewValue',
- 'sign',
- 'SortCompare', // mystery access to `comparefn` arg
- 'TriggerPromiseReactions',
- 'TypedArrayFrom',
- 'UpdateEmpty', // completion records
- 'UTC' // depends on LocalTZA, DaylightSavingTA
-];
-
-require('./tests').es2015(boundES, ops, expectedMissing);
-
-require('./helpers/runManifestTest')(require('tape'), ES, 2015);
diff --git a/node_modules/es-abstract/test/es2016.js b/node_modules/es-abstract/test/es2016.js
deleted file mode 100644
index c813ac5..0000000
--- a/node_modules/es-abstract/test/es2016.js
+++ /dev/null
@@ -1,165 +0,0 @@
-'use strict';
-
-var ES = require('../').ES2016;
-var boundES = require('./helpers/createBoundESNamespace')(ES);
-
-var ops = require('../operations/2016');
-
-var expectedMissing = [
- 'AddRestrictedFunctionProperties',
- 'AllocateArrayBuffer',
- 'AllocateTypedArray',
- 'AllocateTypedArrayBuffer',
- 'BlockDeclarationInstantiation',
- 'BoundFunctionCreate',
- 'Canonicalize',
- 'CharacterRange',
- 'CharacterRangeOrUnion',
- 'CharacterSetMatcher',
- 'CloneArrayBuffer',
- 'Completion',
- 'Construct',
- 'CopyDataBlockBytes',
- 'CreateArrayFromList',
- 'CreateArrayIterator',
- 'CreateBuiltinFunction',
- 'CreateByteDataBlock',
- 'CreateDynamicFunction',
- 'CreateIntrinsics',
- 'CreateListIterator',
- 'CreateMapIterator',
- 'CreateMappedArgumentsObject',
- 'CreatePerIterationEnvironment',
- 'CreateRealm',
- 'CreateResolvingFunctions',
- 'CreateSetIterator',
- 'CreateStringIterator',
- 'CreateUnmappedArgumentsObject',
- 'DaylightSavingTA',
- 'Decode',
- 'DetachArrayBuffer',
- 'Encode',
- 'EnqueueJob',
- 'EnumerateObjectProperties',
- 'EscapeRegExpPattern',
- 'EvalDeclarationInstantiation',
- 'EvaluateCall',
- 'EvaluateDirectCall',
- 'EvaluateNew',
- 'ForBodyEvaluation',
- 'ForIn/OfBodyEvaluation',
- 'ForIn/OfHeadEvaluation',
- 'FulfillPromise',
- 'FunctionAllocate',
- 'FunctionCreate',
- 'FunctionDeclarationInstantiation',
- 'FunctionInitialize',
- 'GeneratorFunctionCreate',
- 'GeneratorResume',
- 'GeneratorResumeAbrupt',
- 'GeneratorStart',
- 'GeneratorValidate',
- 'GeneratorYield',
- 'GetActiveScriptOrModule',
- 'GetFunctionRealm',
- 'GetGlobalObject',
- 'GetIdentifierReference',
- 'GetModuleNamespace',
- 'GetNewTarget',
- 'GetSuperConstructor',
- 'GetTemplateObject',
- 'GetThisEnvironment',
- 'GetThisValue',
- 'GetValue',
- 'GetValueFromBuffer',
- 'GetViewValue',
- 'GlobalDeclarationInstantiation',
- 'HostPromiseRejectionTracker',
- 'HostReportErrors',
- 'HostResolveImportedModule',
- 'IfAbruptRejectPromise',
- 'ImportedLocalNames',
- 'InitializeBoundName',
- 'InitializeHostDefinedRealm',
- 'InitializeReferencedBinding',
- 'IntegerIndexedElementGet',
- 'IntegerIndexedElementSet',
- 'IntegerIndexedObjectCreate',
- 'InternalizeJSONProperty',
- 'IsAnonymousFunctionDefinition',
- 'IsCompatiblePropertyDescriptor',
- 'IsDetachedBuffer',
- 'IsInTailPosition',
- 'IsLabelledFunction',
- 'IsWordChar',
- 'LocalTime',
- 'LoopContinues',
- 'MakeArgGetter',
- 'MakeArgSetter',
- 'MakeClassConstructor',
- 'MakeConstructor',
- 'MakeMethod',
- 'MakeSuperPropertyReference',
- 'max',
- 'min',
- 'ModuleNamespaceCreate',
- 'NewDeclarativeEnvironment',
- 'NewFunctionEnvironment',
- 'NewGlobalEnvironment',
- 'NewModuleEnvironment',
- 'NewObjectEnvironment',
- 'NewPromiseCapability',
- 'NextJob',
- 'NormalCompletion',
- 'ObjectDefineProperties',
- 'OrdinaryCallBindThis',
- 'OrdinaryCallEvaluateBody',
- 'OrdinaryDelete',
- 'OrdinaryGet',
- 'OrdinaryIsExtensible',
- 'OrdinaryOwnPropertyKeys',
- 'OrdinaryPreventExtensions',
- 'OrdinarySet',
- 'ParseModule',
- 'ParseScript',
- 'PerformEval',
- 'PerformPromiseAll',
- 'PerformPromiseRace',
- 'PerformPromiseThen',
- 'PrepareForOrdinaryCall',
- 'PrepareForTailCall',
- 'PromiseReactionJob',
- 'PromiseResolveThenableJob',
- 'ProxyCreate',
- 'PutValue', // takes a Reference
- 'RegExpAlloc', // creates a regex with uninitialized internal lots
- 'RegExpBuiltinExec',
- 'RegExpInitialize', // initializes allocated regex's internal slots
- 'RejectPromise',
- 'RepeatMatcher',
- 'ResolveBinding',
- 'ResolveThisBinding',
- 'ReturnIfAbrupt',
- 'ScriptEvaluation',
- 'ScriptEvaluationJob',
- 'SerializeJSONArray',
- 'SerializeJSONObject',
- 'SerializeJSONProperty',
- 'SetDefaultGlobalBindings',
- 'SetRealmGlobalObject',
- 'SetValueInBuffer',
- 'SetViewValue',
- 'SortCompare', // mystery access to `comparefn` arg
- 'TopLevelModuleEvaluationJob',
- 'ToString Applied to the Number Type',
- 'TriggerPromiseReactions',
- 'TypedArrayCreate',
- 'TypedArraySpeciesCreate',
- 'UpdateEmpty', // completion records
- 'UTC', // depends on LocalTZA, DaylightSavingTA
- 'ValidateTypedArray'
-];
-
-require('./tests').es2016(boundES, ops, expectedMissing);
-
-require('./helpers/runManifestTest')(require('tape'), ES, 2016);
diff --git a/node_modules/es-abstract/test/es2017.js b/node_modules/es-abstract/test/es2017.js
deleted file mode 100644
index ab6ca6f..0000000
--- a/node_modules/es-abstract/test/es2017.js
+++ /dev/null
@@ -1,211 +0,0 @@
-'use strict';
-
-var ES = require('../').ES2017;
-var boundES = require('./helpers/createBoundESNamespace')(ES);
-
-var ops = require('../operations/2017');
-
-var expectedMissing = [
- 'AddWaiter',
- 'agent-order',
- 'AgentCanSuspend',
- 'AgentSignifier',
- 'AllocateArrayBuffer',
- 'AllocateSharedArrayBuffer',
- 'AllocateTypedArray',
- 'AllocateTypedArrayBuffer',
- 'AsyncFunctionAwait',
- 'AsyncFunctionCreate',
- 'AsyncFunctionStart',
- 'AtomicLoad',
- 'AtomicReadModifyWrite',
- 'BlockDeclarationInstantiation',
- 'BoundFunctionCreate',
- 'Canonicalize',
- 'CharacterRange',
- 'CharacterRangeOrUnion',
- 'CharacterSetMatcher',
- 'CloneArrayBuffer',
- 'Completion',
- 'ComposeWriteEventBytes',
- 'Construct',
- 'CopyDataBlockBytes',
- 'CreateArrayFromList',
- 'CreateArrayIterator',
- 'CreateBuiltinFunction',
- 'CreateByteDataBlock',
- 'CreateDynamicFunction',
- 'CreateIntrinsics',
- 'CreateListIterator',
- 'CreateMapIterator',
- 'CreateMappedArgumentsObject',
- 'CreatePerIterationEnvironment',
- 'CreateRealm',
- 'CreateResolvingFunctions',
- 'CreateSetIterator',
- 'CreateSharedByteDataBlock',
- 'CreateStringIterator',
- 'CreateUnmappedArgumentsObject',
- 'DaylightSavingTA',
- 'Decode',
- 'DetachArrayBuffer',
- 'Encode',
- 'EnqueueJob',
- 'EnterCriticalSection',
- 'EnumerateObjectProperties',
- 'EscapeRegExpPattern',
- 'EvalDeclarationInstantiation',
- 'EvaluateCall',
- 'EvaluateDirectCall',
- 'EvaluateNew',
- 'EventSet',
- 'ForBodyEvaluation',
- 'ForIn/OfBodyEvaluation',
- 'ForIn/OfHeadEvaluation',
- 'FulfillPromise',
- 'FunctionAllocate',
- 'FunctionCreate',
- 'FunctionDeclarationInstantiation',
- 'FunctionInitialize',
- 'GeneratorFunctionCreate',
- 'GeneratorResume',
- 'GeneratorResumeAbrupt',
- 'GeneratorStart',
- 'GeneratorValidate',
- 'GeneratorYield',
- 'GetActiveScriptOrModule',
- 'GetBase',
- 'GetFunctionRealm',
- 'GetGlobalObject',
- 'GetIdentifierReference',
- 'GetModifySetValueInBuffer',
- 'GetModuleNamespace',
- 'GetNewTarget',
- 'GetReferencedName',
- 'GetSuperConstructor',
- 'GetTemplateObject',
- 'GetThisEnvironment',
- 'GetThisValue',
- 'GetValue',
- 'GetValueFromBuffer',
- 'GetViewValue',
- 'GetWaiterList',
- 'GlobalDeclarationInstantiation',
- 'happens-before',
- 'HasPrimitiveBase',
- 'host-synchronizes-with',
- 'HostEnsureCanCompileStrings',
- 'HostEventSet',
- 'HostPromiseRejectionTracker',
- 'HostReportErrors',
- 'HostResolveImportedModule',
- 'IfAbruptRejectPromise',
- 'ImportedLocalNames',
- 'InitializeBoundName',
- 'InitializeHostDefinedRealm',
- 'InitializeReferencedBinding',
- 'IntegerIndexedElementGet',
- 'IntegerIndexedElementSet',
- 'IntegerIndexedObjectCreate',
- 'InternalizeJSONProperty',
- 'IsAnonymousFunctionDefinition',
- 'IsCompatiblePropertyDescriptor',
- 'IsDetachedBuffer',
- 'IsInTailPosition',
- 'IsLabelledFunction',
- 'IsPropertyReference',
- 'IsSharedArrayBuffer',
- 'IsStrictReference',
- 'IsSuperReference',
- 'IsUnresolvableReference',
- 'IsWordChar',
- 'LeaveCriticalSection',
- 'LocalTime',
- 'LoopContinues',
- 'MakeArgGetter',
- 'MakeArgSetter',
- 'MakeClassConstructor',
- 'MakeConstructor',
- 'MakeMethod',
- 'MakeSuperPropertyReference',
- 'max',
- 'memory-order',
- 'min',
- 'ModuleNamespaceCreate',
- 'NewDeclarativeEnvironment',
- 'NewFunctionEnvironment',
- 'NewGlobalEnvironment',
- 'NewModuleEnvironment',
- 'NewObjectEnvironment',
- 'NewPromiseCapability',
- 'NormalCompletion',
- 'NumberToRawBytes',
- 'ObjectDefineProperties',
- 'OrdinaryCallBindThis',
- 'OrdinaryCallEvaluateBody',
- 'OrdinaryDelete',
- 'OrdinaryGet',
- 'OrdinaryIsExtensible',
- 'OrdinaryOwnPropertyKeys',
- 'OrdinaryPreventExtensions',
- 'OrdinarySet',
- 'OrdinaryToPrimitive',
- 'ParseModule',
- 'ParseScript',
- 'PerformEval',
- 'PerformPromiseAll',
- 'PerformPromiseRace',
- 'PerformPromiseThen',
- 'PrepareForOrdinaryCall',
- 'PrepareForTailCall',
- 'PromiseReactionJob',
- 'PromiseResolveThenableJob',
- 'ProxyCreate',
- 'PutValue', // takes a Reference
- 'RawBytesToNumber',
- 'reads-bytes-from',
- 'reads-from',
- 'RegExpAlloc', // creates a regex with uninitialized internal lots
- 'RegExpBuiltinExec',
- 'RegExpInitialize', // initializes allocated regex's internal slots
- 'RejectPromise',
- 'RemoveWaiter',
- 'RemoveWaiters',
- 'RepeatMatcher',
- 'ResolveBinding',
- 'ResolveThisBinding',
- 'ReturnIfAbrupt',
- 'RunJobs',
- 'ScriptEvaluation',
- 'ScriptEvaluationJob',
- 'SerializeJSONArray',
- 'SerializeJSONObject',
- 'SerializeJSONProperty',
- 'SetDefaultGlobalBindings',
- 'SetImmutablePrototype',
- 'SetRealmGlobalObject',
- 'SetValueInBuffer',
- 'SetViewValue',
- 'SharedDataBlockEventSet',
- 'SortCompare', // mystery access to `comparefn` arg
- 'Suspend',
- 'TopLevelModuleEvaluationJob',
- 'ToString Applied to the Number Type',
- 'TriggerPromiseReactions',
- 'TypedArrayCreate',
- 'TypedArraySpeciesCreate',
- 'UpdateEmpty', // completion records
- 'UTC', // depends on LocalTZA, DaylightSavingTA
- 'ValidateAtomicAccess',
- 'ValidateSharedIntegerTypedArray',
- 'ValidateTypedArray',
- 'ValueOfReadEvent',
- 'WakeWaiter',
- 'WordCharacters', // depends on Canonicalize
- 'AddRestrictedFunctionProperties',
- 'synchronizes-with'
-];
-
-require('./tests').es2017(boundES, ops, expectedMissing);
-
-require('./helpers/runManifestTest')(require('tape'), ES, 2017);
diff --git a/node_modules/es-abstract/test/es2018.js b/node_modules/es-abstract/test/es2018.js
deleted file mode 100644
index 112e958..0000000
--- a/node_modules/es-abstract/test/es2018.js
+++ /dev/null
@@ -1,229 +0,0 @@
-'use strict';
-
-var ES = require('../').ES2018;
-var boundES = require('./helpers/createBoundESNamespace')(ES);
-
-var ops = require('../operations/2018');
-
-var expectedMissing = [
- 'AddRestrictedFunctionProperties',
- 'AddWaiter',
- 'agent-order',
- 'AgentCanSuspend',
- 'AgentSignifier',
- 'AllocateArrayBuffer',
- 'AllocateSharedArrayBuffer',
- 'AllocateTypedArray',
- 'AllocateTypedArrayBuffer',
- 'AsyncFunctionCreate',
- 'AsyncFunctionStart',
- 'AsyncGeneratorEnqueue',
- 'AsyncGeneratorFunctionCreate',
- 'AsyncGeneratorReject',
- 'AsyncGeneratorResolve',
- 'AsyncGeneratorResumeNext',
- 'AsyncGeneratorStart',
- 'AsyncGeneratorYield',
- 'AsyncIteratorClose',
- 'AtomicLoad',
- 'AtomicReadModifyWrite',
- 'Await',
- 'BackreferenceMatcher',
- 'BlockDeclarationInstantiation',
- 'BoundFunctionCreate',
- 'Canonicalize',
- 'CaseClauseIsSelected',
- 'CharacterRange',
- 'CharacterRangeOrUnion',
- 'CharacterSetMatcher',
- 'CloneArrayBuffer',
- 'Completion',
- 'ComposeWriteEventBytes',
- 'Construct',
- 'CopyDataBlockBytes',
- 'CreateArrayFromList',
- 'CreateArrayIterator',
- 'CreateAsyncFromSyncIterator',
- 'CreateBuiltinFunction',
- 'CreateByteDataBlock',
- 'CreateDynamicFunction',
- 'CreateIntrinsics',
- 'CreateListIteratorRecord',
- 'CreateMapIterator',
- 'CreateMappedArgumentsObject',
- 'CreatePerIterationEnvironment',
- 'CreateRealm',
- 'CreateResolvingFunctions',
- 'CreateSetIterator',
- 'CreateSharedByteDataBlock',
- 'CreateStringIterator',
- 'CreateUnmappedArgumentsObject',
- 'Decode',
- 'DetachArrayBuffer',
- 'Encode',
- 'EnqueueJob',
- 'EnterCriticalSection',
- 'EnumerateObjectProperties',
- 'EscapeRegExpPattern',
- 'EvalDeclarationInstantiation',
- 'EvaluateCall',
- 'EvaluateNew',
- 'EventSet',
- 'ForBodyEvaluation',
- 'ForIn/OfBodyEvaluation',
- 'ForIn/OfHeadEvaluation',
- 'FulfillPromise',
- 'FunctionAllocate',
- 'FunctionCreate',
- 'FunctionDeclarationInstantiation',
- 'FunctionInitialize',
- 'GeneratorFunctionCreate',
- 'GeneratorResume',
- 'GeneratorResumeAbrupt',
- 'GeneratorStart',
- 'GeneratorValidate',
- 'GeneratorYield',
- 'GetActiveScriptOrModule',
- 'GetBase',
- 'GetFunctionRealm',
- 'GetGeneratorKind',
- 'GetGlobalObject',
- 'GetIdentifierReference',
- 'GetModifySetValueInBuffer',
- 'GetModuleNamespace',
- 'GetNewTarget',
- 'GetReferencedName',
- 'GetSuperConstructor',
- 'GetTemplateObject',
- 'GetThisEnvironment',
- 'GetThisValue',
- 'GetValue',
- 'GetValueFromBuffer',
- 'GetViewValue',
- 'GetWaiterList',
- 'GlobalDeclarationInstantiation',
- 'happens-before',
- 'HasPrimitiveBase',
- 'host-synchronizes-with',
- 'HostEnsureCanCompileStrings',
- 'HostEventSet',
- 'HostPromiseRejectionTracker',
- 'HostReportErrors',
- 'HostResolveImportedModule',
- 'IfAbruptRejectPromise',
- 'ImportedLocalNames',
- 'InitializeBoundName',
- 'InitializeHostDefinedRealm',
- 'InitializeReferencedBinding',
- 'InnerModuleEvaluation',
- 'InnerModuleInstantiation',
- 'IntegerIndexedElementGet',
- 'IntegerIndexedElementSet',
- 'IntegerIndexedObjectCreate',
- 'InternalizeJSONProperty',
- 'IsAnonymousFunctionDefinition',
- 'IsCompatiblePropertyDescriptor',
- 'IsDetachedBuffer',
- 'IsInTailPosition',
- 'IsLabelledFunction',
- 'IsPropertyReference',
- 'IsSharedArrayBuffer',
- 'IsStrictReference',
- 'IsSuperReference',
- 'IsUnresolvableReference',
- 'IsWordChar',
- 'LeaveCriticalSection',
- 'LocalTime',
- 'LoopContinues',
- 'MakeArgGetter',
- 'MakeArgSetter',
- 'MakeClassConstructor',
- 'MakeConstructor',
- 'MakeMethod',
- 'MakeSuperPropertyReference',
- 'max',
- 'memory-order',
- 'min',
- 'ModuleDeclarationEnvironmentSetup',
- 'ModuleExecution',
- 'ModuleNamespaceCreate',
- 'NewDeclarativeEnvironment',
- 'NewFunctionEnvironment',
- 'NewGlobalEnvironment',
- 'NewModuleEnvironment',
- 'NewObjectEnvironment',
- 'NewPromiseCapability',
- 'NormalCompletion',
- 'NumberToRawBytes',
- 'ObjectDefineProperties',
- 'OrdinaryCallBindThis',
- 'OrdinaryCallEvaluateBody',
- 'OrdinaryDelete',
- 'OrdinaryGet',
- 'OrdinaryIsExtensible',
- 'OrdinaryOwnPropertyKeys',
- 'OrdinaryPreventExtensions',
- 'OrdinarySet',
- 'OrdinarySetWithOwnDescriptor',
- 'OrdinaryToPrimitive',
- 'ParseModule',
- 'ParseScript',
- 'PerformEval',
- 'PerformPromiseAll',
- 'PerformPromiseRace',
- 'PerformPromiseThen',
- 'PrepareForOrdinaryCall',
- 'PrepareForTailCall',
- 'PromiseReactionJob',
- 'PromiseResolveThenableJob',
- 'ProxyCreate',
- 'PutValue', // takes a Reference
- 'RawBytesToNumber',
- 'reads-bytes-from',
- 'reads-from',
- 'RegExpAlloc', // creates a regex with uninitialized internal lots
- 'RegExpBuiltinExec',
- 'RegExpInitialize', // initializes allocated regex's internal slots
- 'RejectPromise',
- 'RemoveWaiter',
- 'RemoveWaiters',
- 'RepeatMatcher',
- 'ResolveBinding',
- 'ResolveThisBinding',
- 'ReturnIfAbrupt',
- 'RunJobs',
- 'ScriptEvaluation',
- 'ScriptEvaluationJob',
- 'SerializeJSONArray',
- 'SerializeJSONObject',
- 'SerializeJSONProperty',
- 'SetDefaultGlobalBindings',
- 'SetImmutablePrototype',
- 'SetRealmGlobalObject',
- 'SetValueInBuffer',
- 'SetViewValue',
- 'SharedDataBlockEventSet',
- 'SortCompare', // mystery access to `comparefn` arg
- 'Suspend',
- 'synchronizes-with',
- 'ThrowCompletion',
- 'TimeZoneString',
- 'TopLevelModuleEvaluationJob',
- 'TriggerPromiseReactions',
- 'TypedArrayCreate',
- 'TypedArraySpeciesCreate',
- 'UnicodeMatchProperty',
- 'UnicodeMatchPropertyValue',
- 'UpdateEmpty', // completion records
- 'UTC', // depends on LocalTZA
- 'ValidateAtomicAccess',
- 'ValidateSharedIntegerTypedArray',
- 'ValidateTypedArray',
- 'ValueOfReadEvent',
- 'WakeWaiter',
- 'WordCharacters' // depends on Canonicalize
-];
-
-require('./tests').es2018(boundES, ops, expectedMissing);
-
-require('./helpers/runManifestTest')(require('tape'), ES, 2018);
diff --git a/node_modules/es-abstract/test/es2019.js b/node_modules/es-abstract/test/es2019.js
deleted file mode 100644
index a7cc84a..0000000
--- a/node_modules/es-abstract/test/es2019.js
+++ /dev/null
@@ -1,231 +0,0 @@
-'use strict';
-
-var ES = require('../').ES2019;
-var boundES = require('./helpers/createBoundESNamespace')(ES);
-
-var ops = require('../operations/2019');
-
-var expectedMissing = [
- 'AddRestrictedFunctionProperties',
- 'AddWaiter',
- 'agent-order',
- 'AgentCanSuspend',
- 'AgentSignifier',
- 'AllocateArrayBuffer',
- 'AllocateSharedArrayBuffer',
- 'AllocateTypedArray',
- 'AllocateTypedArrayBuffer',
- 'AsyncFromSyncIteratorContinuation',
- 'AsyncFunctionCreate',
- 'AsyncFunctionStart',
- 'AsyncGeneratorEnqueue',
- 'AsyncGeneratorFunctionCreate',
- 'AsyncGeneratorReject',
- 'AsyncGeneratorResolve',
- 'AsyncGeneratorResumeNext',
- 'AsyncGeneratorStart',
- 'AsyncGeneratorYield',
- 'AsyncIteratorClose',
- 'AtomicLoad',
- 'AtomicReadModifyWrite',
- 'Await',
- 'BackreferenceMatcher',
- 'BlockDeclarationInstantiation',
- 'BoundFunctionCreate',
- 'Canonicalize',
- 'CaseClauseIsSelected',
- 'CharacterRange',
- 'CharacterRangeOrUnion',
- 'CharacterSetMatcher',
- 'CloneArrayBuffer',
- 'Completion',
- 'ComposeWriteEventBytes',
- 'Construct',
- 'CopyDataBlockBytes',
- 'CreateArrayFromList',
- 'CreateArrayIterator',
- 'CreateAsyncFromSyncIterator',
- 'CreateBuiltinFunction',
- 'CreateByteDataBlock',
- 'CreateDynamicFunction',
- 'CreateIntrinsics',
- 'CreateListIteratorRecord',
- 'CreateMapIterator',
- 'CreateMappedArgumentsObject',
- 'CreatePerIterationEnvironment',
- 'CreateRealm',
- 'CreateResolvingFunctions',
- 'CreateSetIterator',
- 'CreateSharedByteDataBlock',
- 'CreateStringIterator',
- 'CreateUnmappedArgumentsObject',
- 'Decode',
- 'DetachArrayBuffer',
- 'Encode',
- 'EnqueueJob',
- 'EnterCriticalSection',
- 'EnumerateObjectProperties',
- 'EscapeRegExpPattern',
- 'EvalDeclarationInstantiation',
- 'EvaluateCall',
- 'EvaluateNew',
- 'EventSet',
- 'ExecuteModule',
- 'ForBodyEvaluation',
- 'ForIn/OfBodyEvaluation',
- 'ForIn/OfHeadEvaluation',
- 'FulfillPromise',
- 'FunctionAllocate',
- 'FunctionCreate',
- 'FunctionDeclarationInstantiation',
- 'FunctionInitialize',
- 'GeneratorFunctionCreate',
- 'GeneratorResume',
- 'GeneratorResumeAbrupt',
- 'GeneratorStart',
- 'GeneratorValidate',
- 'GeneratorYield',
- 'GetActiveScriptOrModule',
- 'GetBase',
- 'GetFunctionRealm',
- 'GetGeneratorKind',
- 'GetGlobalObject',
- 'GetIdentifierReference',
- 'GetModifySetValueInBuffer',
- 'GetModuleNamespace',
- 'GetNewTarget',
- 'GetReferencedName',
- 'GetSuperConstructor',
- 'GetTemplateObject',
- 'GetThisEnvironment',
- 'GetThisValue',
- 'GetValue',
- 'GetValueFromBuffer',
- 'GetViewValue',
- 'GetWaiterList',
- 'GlobalDeclarationInstantiation',
- 'happens-before',
- 'HasPrimitiveBase',
- 'host-synchronizes-with',
- 'HostEnsureCanCompileStrings',
- 'HostEventSet',
- 'HostPromiseRejectionTracker',
- 'HostReportErrors',
- 'HostResolveImportedModule',
- 'IfAbruptRejectPromise',
- 'ImportedLocalNames',
- 'InitializeBoundName',
- 'InitializeEnvironment',
- 'InitializeHostDefinedRealm',
- 'InitializeReferencedBinding',
- 'InnerModuleEvaluation',
- 'InnerModuleInstantiation',
- 'IntegerIndexedElementGet',
- 'IntegerIndexedElementSet',
- 'IntegerIndexedObjectCreate',
- 'InternalizeJSONProperty',
- 'IsAnonymousFunctionDefinition',
- 'IsCompatiblePropertyDescriptor',
- 'IsDetachedBuffer',
- 'IsInTailPosition',
- 'IsLabelledFunction',
- 'IsPropertyReference',
- 'IsSharedArrayBuffer',
- 'IsStrictReference',
- 'IsSuperReference',
- 'IsUnresolvableReference',
- 'IsWordChar',
- 'LeaveCriticalSection',
- 'LocalTime',
- 'LoopContinues',
- 'MakeArgGetter',
- 'MakeArgSetter',
- 'MakeClassConstructor',
- 'MakeConstructor',
- 'MakeMethod',
- 'MakeSuperPropertyReference',
- 'max',
- 'memory-order',
- 'min',
- 'ModuleNamespaceCreate',
- 'NewDeclarativeEnvironment',
- 'NewFunctionEnvironment',
- 'NewGlobalEnvironment',
- 'NewModuleEnvironment',
- 'NewObjectEnvironment',
- 'NewPromiseCapability',
- 'NormalCompletion',
- 'NotifyWaiter',
- 'NumberToRawBytes',
- 'ObjectDefineProperties',
- 'OrdinaryCallBindThis',
- 'OrdinaryCallEvaluateBody',
- 'OrdinaryDelete',
- 'OrdinaryGet',
- 'OrdinaryIsExtensible',
- 'OrdinaryOwnPropertyKeys',
- 'OrdinaryPreventExtensions',
- 'OrdinarySet',
- 'OrdinarySetWithOwnDescriptor',
- 'OrdinaryToPrimitive',
- 'ParseModule',
- 'ParseScript',
- 'PerformEval',
- 'PerformPromiseAll',
- 'PerformPromiseRace',
- 'PerformPromiseThen',
- 'PrepareForOrdinaryCall',
- 'PrepareForTailCall',
- 'PromiseReactionJob',
- 'PromiseResolveThenableJob',
- 'ProxyCreate',
- 'PutValue', // takes a Reference
- 'RawBytesToNumber',
- 'reads-bytes-from',
- 'reads-from',
- 'RegExpAlloc', // creates a regex with uninitialized internal lots
- 'RegExpBuiltinExec',
- 'RegExpInitialize', // initializes allocated regex's internal slots
- 'RejectPromise',
- 'RemoveWaiter',
- 'RemoveWaiters',
- 'RepeatMatcher',
- 'ResolveBinding',
- 'ResolveThisBinding',
- 'ReturnIfAbrupt',
- 'RunJobs',
- 'ScriptEvaluation',
- 'ScriptEvaluationJob',
- 'SerializeJSONArray',
- 'SerializeJSONObject',
- 'SerializeJSONProperty',
- 'SetDefaultGlobalBindings',
- 'SetImmutablePrototype',
- 'SetRealmGlobalObject',
- 'SetValueInBuffer',
- 'SetViewValue',
- 'SharedDataBlockEventSet',
- 'SortCompare', // mystery access to `comparefn` arg
- 'Suspend',
- 'SynchronizeEventSet',
- 'synchronizes-with',
- 'ThrowCompletion',
- 'TimeZoneString',
- 'TopLevelModuleEvaluationJob',
- 'TriggerPromiseReactions',
- 'TypedArrayCreate',
- 'TypedArraySpeciesCreate',
- 'UnicodeMatchProperty',
- 'UnicodeMatchPropertyValue',
- 'UpdateEmpty', // completion records
- 'UTC', // depends on LocalTZA
- 'ValidateAtomicAccess',
- 'ValidateSharedIntegerTypedArray',
- 'ValidateTypedArray',
- 'ValueOfReadEvent',
- 'WordCharacters' // depends on Canonicalize
-];
-
-require('./tests').es2019(boundES, ops, expectedMissing);
-
-require('./helpers/runManifestTest')(require('tape'), ES, 2019);
diff --git a/node_modules/es-abstract/test/es2020.js b/node_modules/es-abstract/test/es2020.js
deleted file mode 100644
index 83f0b3a..0000000
--- a/node_modules/es-abstract/test/es2020.js
+++ /dev/null
@@ -1,240 +0,0 @@
-'use strict';
-
-var ES = require('../').ES2020;
-var boundES = require('./helpers/createBoundESNamespace')(ES);
-
-var ops = require('../operations/2020');
-
-var expectedMissing = [
- 'AddRestrictedFunctionProperties',
- 'AddWaiter',
- 'agent-order',
- 'AgentCanSuspend',
- 'AgentSignifier',
- 'AllocateArrayBuffer',
- 'AllocateSharedArrayBuffer',
- 'AllocateTypedArray',
- 'AllocateTypedArrayBuffer',
- 'AsyncFromSyncIteratorContinuation',
- 'AsyncFunctionStart',
- 'AsyncGeneratorEnqueue',
- 'AsyncGeneratorReject',
- 'AsyncGeneratorResolve',
- 'AsyncGeneratorResumeNext',
- 'AsyncGeneratorStart',
- 'AsyncGeneratorYield',
- 'AsyncIteratorClose',
- 'AtomicLoad',
- 'AtomicReadModifyWrite',
- 'Await',
- 'BackreferenceMatcher',
- 'BlockDeclarationInstantiation',
- 'BoundFunctionCreate',
- 'Canonicalize',
- 'CaseClauseIsSelected',
- 'CharacterRange',
- 'CharacterRangeOrUnion',
- 'CharacterSetMatcher',
- 'CloneArrayBuffer',
- 'Completion',
- 'ComposeWriteEventBytes',
- 'Construct',
- 'CopyDataBlockBytes',
- 'CreateArrayFromList',
- 'CreateArrayIterator',
- 'CreateAsyncFromSyncIterator',
- 'CreateBuiltinFunction',
- 'CreateByteDataBlock',
- 'CreateDynamicFunction',
- 'CreateForInIterator',
- 'CreateIntrinsics',
- 'CreateListIteratorRecord',
- 'CreateMapIterator',
- 'CreateMappedArgumentsObject',
- 'CreatePerIterationEnvironment',
- 'CreateRealm',
- 'CreateRegExpStringIterator',
- 'CreateResolvingFunctions',
- 'CreateSetIterator',
- 'CreateSharedByteDataBlock',
- 'CreateStringIterator',
- 'CreateUnmappedArgumentsObject',
- 'Decode',
- 'DetachArrayBuffer',
- 'Encode',
- 'EnterCriticalSection',
- 'EnumerateObjectProperties',
- 'EscapeRegExpPattern',
- 'EvalDeclarationInstantiation',
- 'EvaluateCall',
- 'EvaluateNew',
- 'EvaluatePropertyAccessWithExpressionKey',
- 'EvaluatePropertyAccessWithIdentifierKey',
- 'EventSet',
- 'ExecuteModule',
- 'FinishDynamicImport',
- 'ForBodyEvaluation',
- 'ForIn/OfBodyEvaluation',
- 'ForIn/OfHeadEvaluation',
- 'FulfillPromise',
- 'FunctionDeclarationInstantiation',
- 'GeneratorResume',
- 'GeneratorResumeAbrupt',
- 'GeneratorStart',
- 'GeneratorValidate',
- 'GeneratorYield',
- 'GetActiveScriptOrModule',
- 'GetBase',
- 'GetFunctionRealm',
- 'GetGeneratorKind',
- 'GetGlobalObject',
- 'GetIdentifierReference',
- 'GetModifySetValueInBuffer',
- 'GetModuleNamespace',
- 'GetNewTarget',
- 'GetReferencedName',
- 'GetSuperConstructor',
- 'GetTemplateObject',
- 'GetThisEnvironment',
- 'GetThisValue',
- 'GetValue',
- 'GetValueFromBuffer',
- 'GetViewValue',
- 'GetWaiterList',
- 'GlobalDeclarationInstantiation',
- 'happens-before',
- 'HasPrimitiveBase',
- 'host-synchronizes-with',
- 'HostEnqueuePromiseJob',
- 'HostEnsureCanCompileStrings',
- 'HostEventSet',
- 'HostFinalizeImportMeta',
- 'HostGetImportMetaProperties',
- 'HostImportModuleDynamically',
- 'HostPromiseRejectionTracker',
- 'HostResolveImportedModule',
- 'IfAbruptRejectPromise',
- 'ImportedLocalNames',
- 'InitializeBoundName',
- 'InitializeEnvironment',
- 'InitializeHostDefinedRealm',
- 'InitializeReferencedBinding',
- 'InnerModuleEvaluation',
- 'InnerModuleLinking',
- 'IntegerIndexedElementGet',
- 'IntegerIndexedElementSet',
- 'IntegerIndexedObjectCreate',
- 'InternalizeJSONProperty',
- 'IsAnonymousFunctionDefinition',
- 'IsCompatiblePropertyDescriptor',
- 'IsDetachedBuffer',
- 'IsInTailPosition',
- 'IsLabelledFunction',
- 'IsPropertyReference',
- 'IsSharedArrayBuffer',
- 'IsStrictReference',
- 'IsSuperReference',
- 'IsUnresolvableReference',
- 'IsValidIntegerIndex',
- 'IsValidRegularExpressionLiteral',
- 'IsWordChar',
- 'LeaveCriticalSection',
- 'LocalTime',
- 'LocalTZA',
- 'LoopContinues',
- 'MakeArgGetter',
- 'MakeArgSetter',
- 'MakeBasicObject',
- 'MakeClassConstructor',
- 'MakeConstructor',
- 'MakeMethod',
- 'MakeSuperPropertyReference',
- 'max',
- 'memory-order',
- 'min',
- 'ModuleNamespaceCreate',
- 'NewDeclarativeEnvironment',
- 'NewFunctionEnvironment',
- 'NewGlobalEnvironment',
- 'NewModuleEnvironment',
- 'NewObjectEnvironment',
- 'NewPromiseCapability',
- 'NewPromiseReactionJob',
- 'NewPromiseResolveThenableJob',
- 'NormalCompletion',
- 'NotifyWaiter',
- 'NumericToRawBytes',
- 'ObjectDefineProperties',
- 'OrdinaryCallBindThis',
- 'OrdinaryCallEvaluateBody',
- 'OrdinaryDelete',
- 'OrdinaryFunctionCreate',
- 'OrdinaryGet',
- 'OrdinaryIsExtensible',
- 'OrdinaryOwnPropertyKeys',
- 'OrdinaryPreventExtensions',
- 'OrdinarySet',
- 'OrdinarySetWithOwnDescriptor',
- 'OrdinaryToPrimitive',
- 'ParseModule',
- 'ParseScript',
- 'PerformEval',
- 'PerformPromiseAll',
- 'PerformPromiseAllSettled',
- 'PerformPromiseRace',
- 'PerformPromiseThen',
- 'PrepareForOrdinaryCall',
- 'PrepareForTailCall',
- 'ProxyCreate',
- 'PutValue', // takes a Reference
- 'RawBytesToNumeric',
- 'reads-bytes-from',
- 'reads-from',
- 'RegExpAlloc', // creates a regex with uninitialized internal lots
- 'RegExpBuiltinExec',
- 'RegExpInitialize', // initializes allocated regex's internal slots
- 'RejectPromise',
- 'RemoveWaiter',
- 'RemoveWaiters',
- 'RepeatMatcher',
- 'RequireInternalSlot',
- 'ResolveBinding',
- 'ResolveThisBinding',
- 'ReturnIfAbrupt',
- 'ScriptEvaluation',
- 'SerializeJSONArray',
- 'SerializeJSONObject',
- 'SerializeJSONProperty',
- 'SetDefaultGlobalBindings',
- 'SetImmutablePrototype',
- 'SetRealmGlobalObject',
- 'SetValueInBuffer',
- 'SetViewValue',
- 'SharedDataBlockEventSet',
- 'SortCompare', // mystery access to `comparefn` arg
- 'StringToBigInt',
- 'Suspend',
- 'synchronizes-with',
- 'ThrowCompletion',
- 'TimeZoneString',
- 'ToBigInt',
- 'ToBigInt64',
- 'ToBigUint64',
- 'TriggerPromiseReactions',
- 'TypedArrayCreate',
- 'TypedArraySpeciesCreate',
- 'UnicodeMatchProperty',
- 'UnicodeMatchPropertyValue',
- 'UpdateEmpty', // completion records
- 'UTC', // depends on LocalTZA
- 'UTF16Encode',
- 'ValidateAtomicAccess',
- 'ValidateSharedIntegerTypedArray',
- 'ValidateTypedArray',
- 'ValueOfReadEvent',
- 'WordCharacters' // depends on Canonicalize
-];
-
-require('./tests').es2020(boundES, ops, expectedMissing);
-
-require('./helpers/runManifestTest')(require('tape'), ES, 2020);
diff --git a/node_modules/es-abstract/test/es5.js b/node_modules/es-abstract/test/es5.js
deleted file mode 100644
index c4033f6..0000000
--- a/node_modules/es-abstract/test/es5.js
+++ /dev/null
@@ -1,14 +0,0 @@
-'use strict';
-
-var ES = require('../').ES5;
-var boundES = require('./helpers/createBoundESNamespace')(ES);
-
-var ops = require('../operations/es5');
-
-var expectedMissing = [
- 'SplitMatch'
-];
-
-require('./tests').es5(boundES, ops, expectedMissing);
-
-require('./helpers/runManifestTest')(require('tape'), ES, 5);
diff --git a/node_modules/es-abstract/test/es6.js b/node_modules/es-abstract/test/es6.js
deleted file mode 100644
index e7c9d98..0000000
--- a/node_modules/es-abstract/test/es6.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-
-var test = require('tape');
-
-var ES = require('../');
-var ES6 = ES.ES6;
-var ES2015 = ES.ES2015;
-var ES6entry = require('../es6');
-
-test('legacy es6 export', function (t) {
- t.equal(ES6, ES2015, 'main ES6 === main ES2015');
- t.end();
-});
-
-test('legacy es6 entry point', function (t) {
- t.equal(ES6, ES6entry, 'main ES6 === ES6 entry point');
- t.end();
-});
diff --git a/node_modules/es-abstract/test/es7.js b/node_modules/es-abstract/test/es7.js
deleted file mode 100644
index ee57e15..0000000
--- a/node_modules/es-abstract/test/es7.js
+++ /dev/null
@@ -1,18 +0,0 @@
-'use strict';
-
-var test = require('tape');
-
-var ES = require('../');
-var ES7 = ES.ES7;
-var ES2016 = ES.ES2016;
-var ES7entry = require('../es7');
-
-test('legacy es7 export', function (t) {
- t.equal(ES7, ES2016, 'main ES7 === main ES2016');
- t.end();
-});
-
-test('legacy es7 entry point', function (t) {
- t.equal(ES7, ES7entry, 'main ES7 === ES7 entry point');
- t.end();
-});
diff --git a/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js b/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js
deleted file mode 100644
index 9c2b4fc..0000000
--- a/node_modules/es-abstract/test/helpers/OwnPropertyKeys.js
+++ /dev/null
@@ -1,42 +0,0 @@
-'use strict';
-
-var test = require('tape');
-var hasSymbols = require('has-symbols')();
-
-var OwnPropertyKeys = require('../../helpers/OwnPropertyKeys');
-var defineProperty = require('./defineProperty');
-
-test('OwnPropertyKeys', function (t) {
- t.deepEqual(OwnPropertyKeys({ a: 1, b: 2 }).sort(), ['a', 'b'].sort(), 'returns own string keys');
-
- t.test('Symbols', { skip: !hasSymbols }, function (st) {
- var o = { a: 1 };
- var sym = Symbol();
- o[sym] = 2;
-
- st.deepEqual(OwnPropertyKeys(o), ['a', sym], 'returns own string and symbol keys');
-
- st.end();
- });
-
- t.test('non-enumerables', { skip: !defineProperty.oDP }, function (st) {
- var o = { a: 1, b: 42, c: NaN };
- defineProperty(o, 'b', { enumerable: false, value: 42 });
- defineProperty(o, 'c', { enumerable: false, get: function () { return NaN; } });
-
- if (hasSymbols) {
- defineProperty(o, 'd', { enumerable: false, value: true });
- defineProperty(o, 'e', { enumerable: false, get: function () { return true; } });
- }
-
- st.deepEqual(
- OwnPropertyKeys(o).sort(),
- (hasSymbols ? ['a', 'b', 'c', 'd', 'e'] : ['a', 'b', 'c']).sort(),
- 'returns non-enumerable own keys, including accessors and symbols if available'
- );
-
- st.end();
- });
-
- t.end();
-});
diff --git a/node_modules/es-abstract/test/helpers/assertRecord.js b/node_modules/es-abstract/test/helpers/assertRecord.js
deleted file mode 100644
index 0231101..0000000
--- a/node_modules/es-abstract/test/helpers/assertRecord.js
+++ /dev/null
@@ -1,60 +0,0 @@
-'use strict';
-
-var forEach = require('foreach');
-var debug = require('object-inspect');
-
-var assertRecord = require('../../helpers/assertRecord');
-var v = require('es-value-fixtures');
-
-module.exports = function assertRecordTests(ES, test) {
- test('Property Descriptor', function (t) {
- var record = 'Property Descriptor';
-
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { assertRecord(ES.Type, record, 'arg', primitive); },
- TypeError,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- t['throws'](
- function () { assertRecord(ES.Type, record, 'arg', { invalid: true }); },
- TypeError,
- 'invalid keys not allowed on a Property Descriptor'
- );
-
- t.doesNotThrow(
- function () { assertRecord(ES.Type, record, 'arg', {}); },
- 'empty object is an incomplete Property Descriptor'
- );
-
- t.doesNotThrow(
- function () { assertRecord(ES.Type, record, 'arg', v.accessorDescriptor()); },
- 'accessor descriptor is a Property Descriptor'
- );
-
- t.doesNotThrow(
- function () { assertRecord(ES.Type, record, 'arg', v.mutatorDescriptor()); },
- 'mutator descriptor is a Property Descriptor'
- );
-
- t.doesNotThrow(
- function () { assertRecord(ES.Type, record, 'arg', v.dataDescriptor()); },
- 'data descriptor is a Property Descriptor'
- );
-
- t.doesNotThrow(
- function () { assertRecord(ES.Type, record, 'arg', v.genericDescriptor()); },
- 'generic descriptor is a Property Descriptor'
- );
-
- t['throws'](
- function () { assertRecord(ES.Type, record, 'arg', v.bothDescriptor()); },
- TypeError,
- 'a Property Descriptor can not be both a Data and an Accessor Descriptor'
- );
-
- t.end();
- });
-};
diff --git a/node_modules/es-abstract/test/helpers/createBoundESNamespace.js b/node_modules/es-abstract/test/helpers/createBoundESNamespace.js
deleted file mode 100644
index 0150404..0000000
--- a/node_modules/es-abstract/test/helpers/createBoundESNamespace.js
+++ /dev/null
@@ -1,23 +0,0 @@
-'use strict';
-
-var bind = require('function-bind');
-
-var OwnPropertyKeys = require('../../helpers/OwnPropertyKeys');
-
-module.exports = function createBoundESNamespace(ES) {
- var keys = OwnPropertyKeys(ES);
- var result = {};
-
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- var prop = ES[key];
- if (typeof prop === 'function') {
- prop = bind.call(prop, undefined);
- } else if (prop && typeof prop === 'object') {
- prop = createBoundESNamespace(prop);
- }
- result[key] = prop;
- }
-
- return result;
-};
diff --git a/node_modules/es-abstract/test/helpers/defineProperty.js b/node_modules/es-abstract/test/helpers/defineProperty.js
deleted file mode 100644
index 03102a8..0000000
--- a/node_modules/es-abstract/test/helpers/defineProperty.js
+++ /dev/null
@@ -1,27 +0,0 @@
-'use strict';
-
-var GetIntrinsic = require('../../GetIntrinsic');
-
-var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
-
-if ($defineProperty) {
- try {
- $defineProperty({}, 'a', { value: 1 });
- } catch (e) {
- // IE 8 has a broken defineProperty
- $defineProperty = null;
- }
-}
-
-module.exports = function defineProperty(O, P, Desc) {
- if ($defineProperty) {
- return $defineProperty(O, P, Desc);
- }
- if ((Desc.enumerable && Desc.configurable && Desc.writable) || !(P in O)) {
- O[P] = Desc.value; // eslint-disable-line no-param-reassign
- return O;
- }
-
- throw new SyntaxError('helper does not yet support this configuration');
-};
-module.exports.oDP = $defineProperty;
diff --git a/node_modules/es-abstract/test/helpers/index.js b/node_modules/es-abstract/test/helpers/index.js
deleted file mode 100644
index 4260bc2..0000000
--- a/node_modules/es-abstract/test/helpers/index.js
+++ /dev/null
@@ -1,6 +0,0 @@
-'use strict';
-
-require('./getSymbolDescription');
-require('./isByteValue');
-require('./isCodePoint');
-require('./OwnPropertyKeys');
diff --git a/node_modules/es-abstract/test/helpers/isByteValue.js b/node_modules/es-abstract/test/helpers/isByteValue.js
deleted file mode 100644
index f894910..0000000
--- a/node_modules/es-abstract/test/helpers/isByteValue.js
+++ /dev/null
@@ -1,28 +0,0 @@
-'use strict';
-
-var test = require('tape');
-var forEach = require('foreach');
-var debug = require('object-inspect');
-
-var isByteValue = require('../../helpers/isByteValue');
-var v = require('es-value-fixtures');
-
-test('isByteValue', function (t) {
- forEach([].concat(
- v.notNonNegativeIntegers,
- -1,
- -42,
- -Infinity,
- Infinity,
- v.nonIntegerNumbers
- ), function (nonByteValue) {
- t.equal(isByteValue(nonByteValue), false, debug(nonByteValue) + ' is not a byte value');
- });
-
- for (var i = 0; i <= 255; i += 1) {
- t.equal(isByteValue(i), true, i + ' is a byte value');
- }
- t.equal(isByteValue(256), false, '256 is not a byte value');
-
- t.end();
-});
diff --git a/node_modules/es-abstract/test/helpers/isCodePoint.js b/node_modules/es-abstract/test/helpers/isCodePoint.js
deleted file mode 100644
index 9106615..0000000
--- a/node_modules/es-abstract/test/helpers/isCodePoint.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-var test = require('tape');
-var forEach = require('foreach');
-var debug = require('object-inspect');
-
-var isCodePoint = require('../../helpers/isCodePoint');
-var v = require('es-value-fixtures');
-
-test('isCodePoint', function (t) {
- forEach(v.notNonNegativeIntegers.concat(0x10FFFF + 1), function (nonCodePoints) {
- t.equal(isCodePoint(nonCodePoints), false, debug(nonCodePoints) + ' is not a Code Point');
- });
-
- forEach([-0, 0, 1, 7, 42, 0x10FFFF], function (codePoint) {
- t.equal(isCodePoint(codePoint), true, debug(codePoint) + ' is a Code Point');
- });
-
- t.end();
-});
diff --git a/node_modules/es-abstract/test/helpers/runManifestTest.js b/node_modules/es-abstract/test/helpers/runManifestTest.js
deleted file mode 100644
index 2fdb4f2..0000000
--- a/node_modules/es-abstract/test/helpers/runManifestTest.js
+++ /dev/null
@@ -1,27 +0,0 @@
-'use strict';
-
-var path = require('path');
-var fs = require('fs');
-
-var forEach = require('foreach');
-var keys = require('object-keys');
-
-module.exports = function runManifestTest(test, ES, edition) {
- test('ES' + edition + ' manifest', { skip: !fs.readdirSync }, function (t) {
- var files = fs.readdirSync(path.join(__dirname, '../../' + edition), 'utf-8');
- var map = {
- AbstractEqualityComparison: 'Abstract Equality Comparison',
- AbstractRelationalComparison: 'Abstract Relational Comparison',
- StrictEqualityComparison: 'Strict Equality Comparison'
- };
- forEach(files, function (file) {
- var name = path.basename(file, path.extname(file));
- var actual = ES[map[name] || name];
- var expected = require(path.join(__dirname, '../../' + edition + '/', file)); // eslint-disable-line global-require
- t.equal(actual, expected, 'ES["' + name + '"] === ' + file);
- });
- var actualCount = keys(ES).length;
- t.equal(actualCount, files.length, 'expected ' + files.length + ' files, got ' + actualCount);
- t.end();
- });
-};
diff --git a/node_modules/es-abstract/test/index.js b/node_modules/es-abstract/test/index.js
deleted file mode 100644
index 5ebe3db..0000000
--- a/node_modules/es-abstract/test/index.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-var ES = require('../');
-var test = require('tape');
-var keys = require('object-keys');
-var forEach = require('foreach');
-
-var ESkeys = keys(ES).sort();
-var ES6keys = keys(ES.ES6).sort();
-
-test('exposed properties', function (t) {
- t.deepEqual(ESkeys, ES6keys.concat(['ES2020', 'ES2019', 'ES2018', 'ES2017', 'ES7', 'ES2016', 'ES6', 'ES2015', 'ES5']).sort(), 'main ES object keys match ES6 keys');
- t.end();
-});
-
-test('methods match', function (t) {
- forEach(ES6keys, function (key) {
- t.equal(ES.ES6[key], ES[key], 'method ' + key + ' on main ES object is ES6 method');
- });
- t.end();
-});
-
-require('./GetIntrinsic');
-
-require('./helpers');
-
-require('./es5');
-require('./es6');
-require('./es2015');
-require('./es7');
-require('./es2016');
-require('./es2017');
-require('./es2018');
-require('./es2019');
-require('./es2020');
diff --git a/node_modules/es-abstract/test/ses-compat.js b/node_modules/es-abstract/test/ses-compat.js
deleted file mode 100644
index c3e60f4..0000000
--- a/node_modules/es-abstract/test/ses-compat.js
+++ /dev/null
@@ -1,8 +0,0 @@
-'use strict';
-
-/* globals lockdown */
-require('ses');
-
-lockdown({ errorTaming: 'unsafe' });
-
-require('.');
diff --git a/node_modules/es-abstract/test/tests.js b/node_modules/es-abstract/test/tests.js
deleted file mode 100644
index e3ec400..0000000
--- a/node_modules/es-abstract/test/tests.js
+++ /dev/null
@@ -1,6962 +0,0 @@
-'use strict';
-
-var tape = require('tape');
-
-var forEach = require('foreach');
-var debug = require('object-inspect');
-var assign = require('object.assign');
-var keys = require('object-keys');
-var has = require('has');
-var arrowFns = require('make-arrow-function').list();
-var hasStrictMode = require('has-strict-mode')();
-var functionsHaveNames = require('functions-have-names')();
-var functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames();
-var hasBigInts = require('has-bigints')();
-
-var $getProto = require('../helpers/getProto');
-var $setProto = require('../helpers/setProto');
-var defineProperty = require('./helpers/defineProperty');
-var getInferredName = require('../helpers/getInferredName');
-var getOwnPropertyDescriptor = require('../helpers/getOwnPropertyDescriptor');
-var assertRecordTests = require('./helpers/assertRecord');
-var v = require('es-value-fixtures');
-var diffOps = require('./diffOps');
-
-var $BigInt = hasBigInts ? BigInt : null;
-
-var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1;
-
-var canDistinguishSparseFromUndefined = 0 in [undefined]; // IE 6 - 8 have a bug where this returns false
-
-// IE 9 does not throw in strict mode when writability/configurability/extensibility is violated
-var noThrowOnStrictViolation = (function () {
- try {
- delete [].length;
- return true;
- } catch (e) {
- }
- return false;
-}());
-
-var makeTest = function makeTest(skips) {
- return function test(opName, maybeOpts, maybeCb) {
- var origOpts = arguments.length > 2 ? maybeOpts : {};
- var opts = assign(
- {},
- origOpts,
- { skip: (skips && skips[opName]) || origOpts.skip }
- );
- var cb = arguments.length > 2 ? maybeCb : maybeOpts;
- return tape(opName, opts, cb);
- };
-};
-
-var leadingPoo = '\uD83D';
-var trailingPoo = '\uDCA9';
-var wholePoo = leadingPoo + trailingPoo;
-
-var getArraySubclassWithSpeciesConstructor = function getArraySubclass(speciesConstructor) {
- var Bar = function Bar() {
- var inst = [];
- Object.setPrototypeOf(inst, Bar.prototype);
- defineProperty(inst, 'constructor', { value: Bar });
- return inst;
- };
- Bar.prototype = Object.create(Array.prototype);
- Object.setPrototypeOf(Bar, Array);
- defineProperty(Bar, Symbol.species, { value: speciesConstructor });
-
- return Bar;
-};
-
-var testIterator = function (t, iterator, expected) {
- var resultCount = 0;
- var result;
- while (result = iterator.next(), !result.done) { // eslint-disable-line no-sequences
- t.deepEqual(result, { done: false, value: expected[resultCount] }, 'result ' + resultCount);
- resultCount += 1;
- }
- t.equal(resultCount, expected.length, 'expected ' + expected.length + ', got ' + resultCount);
-};
-
-var hasSpecies = v.hasSymbols && Symbol.species;
-
-var hasLastIndex = 'lastIndex' in (/a/).exec('a'); // IE 8
-var hasGroups = 'groups' in (/a/).exec('a'); // modern engines
-var kludgeMatch = function kludgeMatch(R, matchObject) {
- if (hasGroups) {
- assign(matchObject, { groups: matchObject.groups });
- }
- if (hasLastIndex) {
- assign(matchObject, { lastIndex: R.lastIndex });
- }
- return matchObject;
-};
-
-var testEnumerableOwnNames = function (t, enumerableOwnNames) {
- forEach(v.primitives, function (nonObject) {
- t['throws'](
- function () { enumerableOwnNames(nonObject); },
- debug(nonObject) + ' is not an Object'
- );
- });
-
- var Child = function Child() {
- this.own = {};
- };
- Child.prototype = {
- inherited: {}
- };
-
- var obj = new Child();
-
- t.equal('own' in obj, true, 'has "own"');
- t.equal(has(obj, 'own'), true, 'has own "own"');
- t.equal(Object.prototype.propertyIsEnumerable.call(obj, 'own'), true, 'has enumerable "own"');
-
- t.equal('inherited' in obj, true, 'has "inherited"');
- t.equal(has(obj, 'inherited'), false, 'has non-own "inherited"');
- t.equal(has(Child.prototype, 'inherited'), true, 'Child.prototype has own "inherited"');
- t.equal(Child.prototype.inherited, obj.inherited, 'Child.prototype.inherited === obj.inherited');
- t.equal(Object.prototype.propertyIsEnumerable.call(Child.prototype, 'inherited'), true, 'has enumerable "inherited"');
-
- t.equal('toString' in obj, true, 'has "toString"');
- t.equal(has(obj, 'toString'), false, 'has non-own "toString"');
- t.equal(has(Object.prototype, 'toString'), true, 'Object.prototype has own "toString"');
- t.equal(Object.prototype.toString, obj.toString, 'Object.prototype.toString === obj.toString');
- // eslint-disable-next-line no-useless-call
- t.equal(Object.prototype.propertyIsEnumerable.call(Object.prototype, 'toString'), false, 'has non-enumerable "toString"');
-
- return obj;
-};
-
-var testToNumber = function (t, ES, ToNumber) {
- t.equal(NaN, ToNumber(undefined), 'undefined coerces to NaN');
- t.equal(ToNumber(null), 0, 'null coerces to +0');
- t.equal(ToNumber(false), 0, 'false coerces to +0');
- t.equal(1, ToNumber(true), 'true coerces to 1');
-
- t.test('numbers', function (st) {
- st.equal(NaN, ToNumber(NaN), 'NaN returns itself');
- forEach(v.zeroes.concat(v.infinities, 42), function (num) {
- st.equal(num, ToNumber(num), num + ' returns itself');
- });
- forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) {
- st.equal(+numString, ToNumber(numString), '"' + numString + '" coerces to ' + Number(numString));
- });
- st.end();
- });
-
- t.test('objects', function (st) {
- forEach(v.objects, function (object) {
- st.equal(ToNumber(object), ToNumber(ES.ToPrimitive(object)), 'object ' + object + ' coerces to same as ToPrimitive of object does');
- });
- st['throws'](function () { return ToNumber(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- st.end();
- });
-
- // TODO: check if this applies to ES5
- t.test('binary literals', function (st) {
- st.equal(ToNumber('0b10'), 2, '0b10 is 2');
- st.equal(ToNumber({ toString: function () { return '0b11'; } }), 3, 'Object that toStrings to 0b11 is 3');
-
- st.equal(ToNumber('0b12'), NaN, '0b12 is NaN');
- st.equal(ToNumber({ toString: function () { return '0b112'; } }), NaN, 'Object that toStrings to 0b112 is NaN');
- st.end();
- });
-
- // TODO: check if this applies to ES5
- t.test('octal literals', function (st) {
- st.equal(ToNumber('0o10'), 8, '0o10 is 8');
- st.equal(ToNumber({ toString: function () { return '0o11'; } }), 9, 'Object that toStrings to 0o11 is 9');
-
- st.equal(ToNumber('0o18'), NaN, '0o18 is NaN');
- st.equal(ToNumber({ toString: function () { return '0o118'; } }), NaN, 'Object that toStrings to 0o118 is NaN');
- st.end();
- });
-
- // TODO: check if this applies to ES5
- t.test('signed hex numbers', function (st) {
- st.equal(ToNumber('-0xF'), NaN, '-0xF is NaN');
- st.equal(ToNumber(' -0xF '), NaN, 'space-padded -0xF is NaN');
- st.equal(ToNumber('+0xF'), NaN, '+0xF is NaN');
- st.equal(ToNumber(' +0xF '), NaN, 'space-padded +0xF is NaN');
-
- st.end();
- });
-
- // TODO: check if this applies to ES5
- t.test('trimming of whitespace and non-whitespace characters', function (st) {
- var whitespace = ' \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';
- st.equal(0, ToNumber(whitespace + 0 + whitespace), 'whitespace is trimmed');
-
- // Zero-width space (zws), next line character (nel), and non-character (bom) are not whitespace.
- var nonWhitespaces = {
- '\\u0085': '\u0085',
- '\\u200b': '\u200b',
- '\\ufffe': '\ufffe'
- };
-
- forEach(nonWhitespaces, function (desc, nonWS) {
- st.equal(ToNumber(nonWS + 0 + nonWS), NaN, 'non-whitespace ' + desc + ' not trimmed');
- });
-
- st.end();
- });
-
- // TODO: skip for ES5
- forEach(v.symbols, function (symbol) {
- t['throws'](
- function () { ToNumber(symbol); },
- TypeError,
- 'Symbols can’t be converted to a Number: ' + debug(symbol)
- );
-
- var boxed = Object(symbol);
- t['throws'](
- function () { ToNumber(boxed); },
- TypeError,
- 'boxed Symbols can’t be converted to a Number: ' + debug(boxed)
- );
- });
-
- // TODO: check if this applies to ES5
- t.test('dates', function (st) {
- var invalid = new Date(NaN);
- st.equal(ToNumber(invalid), NaN, 'invalid Date coerces to NaN');
- var now = +new Date();
- st.equal(ToNumber(new Date(now)), now, 'Date coerces to timestamp');
- st.end();
- });
-};
-
-var es5 = function ES5(ES, ops, expectedMissing, skips) {
- var test = makeTest(skips);
-
- test('has expected operations', function (t) {
- var diff = diffOps(ES, ops, expectedMissing);
-
- t.deepEqual(diff.extra, [], 'no extra ops');
-
- t.deepEqual(diff.missing, [], 'no unexpected missing ops');
-
- t.deepEqual(diff.extraMissing, [], 'no unexpected "expected missing" ops');
-
- t.end();
- });
-
- test('ToPrimitive', function (t) {
- t.test('primitives', function (st) {
- var testPrimitive = function (primitive) {
- st.equal(ES.ToPrimitive(primitive), primitive, debug(primitive) + ' is returned correctly');
- };
- forEach(v.primitives, testPrimitive);
- st.end();
- });
-
- t.test('objects', function (st) {
- st.equal(ES.ToPrimitive(v.coercibleObject), 3, 'coercibleObject with no hint coerces to valueOf');
- st.equal(ES.ToPrimitive({}), '[object Object]', '{} with no hint coerces to Object#toString');
- st.equal(ES.ToPrimitive(v.coercibleObject, Number), 3, 'coercibleObject with hint Number coerces to valueOf');
- st.equal(ES.ToPrimitive({}, Number), '[object Object]', '{} with hint Number coerces to NaN');
- st.equal(ES.ToPrimitive(v.coercibleObject, String), 42, 'coercibleObject with hint String coerces to nonstringified toString');
- st.equal(ES.ToPrimitive({}, String), '[object Object]', '{} with hint String coerces to Object#toString');
- st.equal(ES.ToPrimitive(v.coercibleFnObject), v.coercibleFnObject.toString(), 'coercibleFnObject coerces to toString');
- st.equal(ES.ToPrimitive(v.toStringOnlyObject), 7, 'toStringOnlyObject returns non-stringified toString');
- st.equal(ES.ToPrimitive(v.valueOfOnlyObject), 4, 'valueOfOnlyObject returns valueOf');
- st['throws'](function () { return ES.ToPrimitive(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError');
- st['throws'](function () { return ES.ToPrimitive(v.uncoercibleFnObject); }, TypeError, 'uncoercibleFnObject throws a TypeError');
- st.end();
- });
-
- t.test('dates', function (st) {
- var invalid = new Date(NaN);
- st.equal(ES.ToPrimitive(invalid), Date.prototype.toString.call(invalid), 'invalid Date coerces to Date#toString');
- var now = new Date();
- st.equal(ES.ToPrimitive(now), Date.prototype.toString.call(now), 'Date coerces to Date#toString');
- st.end();
- });
-
- t.end();
- });
-
- test('ToBoolean', function (t) {
- t.equal(false, ES.ToBoolean(undefined), 'undefined coerces to false');
- t.equal(false, ES.ToBoolean(null), 'null coerces to false');
- t.equal(false, ES.ToBoolean(false), 'false returns false');
- t.equal(true, ES.ToBoolean(true), 'true returns true');
-
- t.test('numbers', function (st) {
- forEach(v.zeroes.concat(NaN), function (falsyNumber) {
- st.equal(false, ES.ToBoolean(falsyNumber), 'falsy number ' + falsyNumber + ' coerces to false');
- });
- forEach(v.infinities.concat([42, 1]), function (truthyNumber) {
- st.equal(true, ES.ToBoolean(truthyNumber), 'truthy number ' + truthyNumber + ' coerces to true');
- });
-
- st.end();
- });
-
- t.equal(false, ES.ToBoolean(''), 'empty string coerces to false');
- t.equal(true, ES.ToBoolean('foo'), 'nonempty string coerces to true');
-
- t.test('objects', function (st) {
- forEach(v.objects, function (obj) {
- st.equal(true, ES.ToBoolean(obj), 'object coerces to true');
- });
- st.equal(true, ES.ToBoolean(v.uncoercibleObject), 'uncoercibleObject coerces to true');
-
- st.end();
- });
-
- t.end();
- });
-
- test('ToNumber', function (t) {
- t.equal(NaN, ES.ToNumber(undefined), 'undefined coerces to NaN');
- t.equal(ES.ToNumber(null), 0, 'null coerces to +0');
- t.equal(ES.ToNumber(false), 0, 'false coerces to +0');
- t.equal(1, ES.ToNumber(true), 'true coerces to 1');
-
- t.test('numbers', function (st) {
- st.equal(NaN, ES.ToNumber(NaN), 'NaN returns itself');
- forEach(v.zeroes.concat(v.infinities, 42), function (num) {
- st.equal(num, ES.ToNumber(num), num + ' returns itself');
- });
- forEach(['foo', '0', '4a', '2.0', 'Infinity', '-Infinity'], function (numString) {
- st.equal(+numString, ES.ToNumber(numString), '"' + numString + '" coerces to ' + Number(numString));
- });
- st.end();
- });
-
- t.test('objects', function (st) {
- forEach(v.objects, function (object) {
- st.equal(ES.ToNumber(object), ES.ToNumber(ES.ToPrimitive(object)), 'object ' + object + ' coerces to same as ToPrimitive of object does');
- });
- st['throws'](function () { return ES.ToNumber(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- st.end();
- });
-
- t.test('binary literals', function (st) {
- st.equal(ES.ToNumber('0b10'), NaN, '0b10 is NaN');
- st.equal(ES.ToNumber({ toString: function () { return '0b11'; } }), NaN, 'Object that toStrings to 0b11 is NaN');
-
- st.equal(ES.ToNumber('0b12'), NaN, '0b12 is NaN');
- st.equal(ES.ToNumber({ toString: function () { return '0b112'; } }), NaN, 'Object that toStrings to 0b112 is NaN');
- st.end();
- });
-
- t.test('octal literals', function (st) {
- st.equal(ES.ToNumber('0o10'), NaN, '0o10 is NaN');
- st.equal(ES.ToNumber({ toString: function () { return '0o11'; } }), NaN, 'Object that toStrings to 0o11 is NaN');
-
- st.equal(ES.ToNumber('0o18'), NaN, '0o18 is NaN');
- st.equal(ES.ToNumber({ toString: function () { return '0o118'; } }), NaN, 'Object that toStrings to 0o118 is NaN');
- st.end();
- });
-
- t.test('signed hex numbers', function (st) {
- st.equal(ES.ToNumber('-0xF'), NaN, '-0xF is NaN');
- st.equal(ES.ToNumber(' -0xF '), NaN, 'space-padded -0xF is NaN');
- st.equal(ES.ToNumber('+0xF'), NaN, '+0xF is NaN');
- st.equal(ES.ToNumber(' +0xF '), NaN, 'space-padded +0xF is NaN');
-
- st.end();
- });
-
- // TODO: check if this applies to ES5
- t.test('trimming of whitespace and non-whitespace characters', function (st) {
- var whitespace = ' \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\u0085';
- st.equal(ES.ToNumber(whitespace + 0 + whitespace), 0, 'whitespace is trimmed');
-
- // Zero-width space (zws), next line character (nel), and non-character (bom) are not whitespace.
- var nonWhitespaces = {
- '\\u200b': '\u200b',
- '\\ufffe': '\ufffe'
- };
-
- forEach(nonWhitespaces, function (desc, nonWS) {
- st.equal(ES.ToNumber(nonWS + 0 + nonWS), NaN, 'non-whitespace ' + desc + ' not trimmed');
- });
-
- st.end();
- });
-
- t.test('dates', function (st) {
- var invalid = new Date(NaN);
- st.equal(ES.ToNumber(invalid), NaN, 'invalid Date coerces to NaN');
- var now = +new Date();
- st.equal(ES.ToNumber(new Date(now)), now, 'Date coerces to timestamp');
- st.end();
- });
-
- t.end();
- });
-
- test('ToInteger', function (t) {
- forEach([NaN], function (num) {
- t.equal(0, ES.ToInteger(num), debug(num) + ' returns +0');
- });
- forEach(v.zeroes.concat(v.infinities, 42), function (num) {
- t.equal(num, ES.ToInteger(num), debug(num) + ' returns itself');
- t.equal(-num, ES.ToInteger(-num), '-' + debug(num) + ' returns itself');
- });
- t.equal(3, ES.ToInteger(Math.PI), 'pi returns 3');
- t['throws'](function () { return ES.ToInteger(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.end();
- });
-
- test('ToInt32', function (t) {
- t.equal(ES.ToInt32(NaN), 0, 'NaN coerces to +0');
- forEach(v.zeroes.concat(v.infinities), function (num) {
- t.equal(ES.ToInt32(num), 0, num + ' returns +0');
- t.equal(ES.ToInt32(-num), 0, '-' + num + ' returns +0');
- });
- t['throws'](function () { return ES.ToInt32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.equal(ES.ToInt32(0x100000000), 0, '2^32 returns +0');
- t.equal(ES.ToInt32(0x100000000 - 1), -1, '2^32 - 1 returns -1');
- t.equal(ES.ToInt32(0x80000000), -0x80000000, '2^31 returns -2^31');
- t.equal(ES.ToInt32(0x80000000 - 1), 0x80000000 - 1, '2^31 - 1 returns 2^31 - 1');
- forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) {
- t.equal(ES.ToInt32(num), ES.ToInt32(ES.ToUint32(num)), 'ToInt32(x) === ToInt32(ToUint32(x)) for 0x' + num.toString(16));
- t.equal(ES.ToInt32(-num), ES.ToInt32(ES.ToUint32(-num)), 'ToInt32(x) === ToInt32(ToUint32(x)) for -0x' + num.toString(16));
- });
- t.end();
- });
-
- test('ToUint32', function (t) {
- t.equal(0, ES.ToUint32(NaN), 'NaN coerces to +0');
- forEach([0, Infinity], function (num) {
- t.equal(0, ES.ToUint32(num), num + ' returns +0');
- t.equal(0, ES.ToUint32(-num), '-' + num + ' returns +0');
- });
- t['throws'](function () { return ES.ToUint32(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.equal(ES.ToUint32(0x100000000), 0, '2^32 returns +0');
- t.equal(ES.ToUint32(0x100000000 - 1), 0x100000000 - 1, '2^32 - 1 returns 2^32 - 1');
- t.equal(ES.ToUint32(0x80000000), 0x80000000, '2^31 returns 2^31');
- t.equal(ES.ToUint32(0x80000000 - 1), 0x80000000 - 1, '2^31 - 1 returns 2^31 - 1');
- forEach([0, Infinity, NaN, 0x100000000, 0x80000000, 0x10000, 0x42], function (num) {
- t.equal(ES.ToUint32(num), ES.ToUint32(ES.ToInt32(num)), 'ToUint32(x) === ToUint32(ToInt32(x)) for 0x' + num.toString(16));
- t.equal(ES.ToUint32(-num), ES.ToUint32(ES.ToInt32(-num)), 'ToUint32(x) === ToUint32(ToInt32(x)) for -0x' + num.toString(16));
- });
- t.end();
- });
-
- test('ToUint16', function (t) {
- t.equal(0, ES.ToUint16(NaN), 'NaN coerces to +0');
- forEach([0, Infinity], function (num) {
- t.equal(0, ES.ToUint16(num), num + ' returns +0');
- t.equal(0, ES.ToUint16(-num), '-' + num + ' returns +0');
- });
- t['throws'](function () { return ES.ToUint16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.equal(ES.ToUint16(0x100000000), 0, '2^32 returns +0');
- t.equal(ES.ToUint16(0x100000000 - 1), 0x10000 - 1, '2^32 - 1 returns 2^16 - 1');
- t.equal(ES.ToUint16(0x80000000), 0, '2^31 returns +0');
- t.equal(ES.ToUint16(0x80000000 - 1), 0x10000 - 1, '2^31 - 1 returns 2^16 - 1');
- t.equal(ES.ToUint16(0x10000), 0, '2^16 returns +0');
- t.equal(ES.ToUint16(0x10000 - 1), 0x10000 - 1, '2^16 - 1 returns 2^16 - 1');
- t.end();
- });
-
- test('ToString', function (t) {
- forEach(v.objects.concat(v.nonSymbolPrimitives), function (item) {
- t.equal(ES.ToString(item), String(item), 'ES.ToString(' + debug(item) + ') ToStrings to String(' + debug(item) + ')');
- });
-
- t['throws'](function () { return ES.ToString(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
-
- t.end();
- });
-
- test('ToObject', function (t) {
- t['throws'](function () { return ES.ToObject(undefined); }, TypeError, 'undefined throws');
- t['throws'](function () { return ES.ToObject(null); }, TypeError, 'null throws');
- forEach(v.numbers, function (number) {
- var obj = ES.ToObject(number);
- t.equal(typeof obj, 'object', 'number ' + number + ' coerces to object');
- t.equal(true, obj instanceof Number, 'object of ' + number + ' is Number object');
- t.equal(obj.valueOf(), number, 'object of ' + number + ' coerces to ' + number);
- });
- t.end();
- });
-
- test('CheckObjectCoercible', function (t) {
- t['throws'](function () { return ES.CheckObjectCoercible(undefined); }, TypeError, 'undefined throws');
- t['throws'](function () { return ES.CheckObjectCoercible(null); }, TypeError, 'null throws');
- var checkCoercible = function (value) {
- t.doesNotThrow(function () { return ES.CheckObjectCoercible(value); }, debug(value) + ' does not throw');
- };
- forEach(v.objects.concat(v.nonNullPrimitives), checkCoercible);
- t.end();
- });
-
- test('IsCallable', function (t) {
- t.equal(true, ES.IsCallable(function () {}), 'function is callable');
- var nonCallables = [/a/g, {}, Object.prototype, NaN].concat(v.nonFunctions);
- forEach(nonCallables, function (nonCallable) {
- t.equal(false, ES.IsCallable(nonCallable), debug(nonCallable) + ' is not callable');
- });
- t.end();
- });
-
- test('SameValue', function (t) {
- t.equal(true, ES.SameValue(NaN, NaN), 'NaN is SameValue as NaN');
- t.equal(false, ES.SameValue(0, -0), '+0 is not SameValue as -0');
- forEach(v.objects.concat(v.primitives), function (val) {
- t.equal(val === val, ES.SameValue(val, val), debug(val) + ' is SameValue to itself');
- });
- t.end();
- });
-
- test('Type', function (t) {
- t.equal(ES.Type(), 'Undefined', 'Type() is Undefined');
- t.equal(ES.Type(undefined), 'Undefined', 'Type(undefined) is Undefined');
- t.equal(ES.Type(null), 'Null', 'Type(null) is Null');
- t.equal(ES.Type(true), 'Boolean', 'Type(true) is Boolean');
- t.equal(ES.Type(false), 'Boolean', 'Type(false) is Boolean');
- t.equal(ES.Type(0), 'Number', 'Type(0) is Number');
- t.equal(ES.Type(NaN), 'Number', 'Type(NaN) is Number');
- t.equal(ES.Type('abc'), 'String', 'Type("abc") is String');
- t.equal(ES.Type(function () {}), 'Object', 'Type(function () {}) is Object');
- t.equal(ES.Type({}), 'Object', 'Type({}) is Object');
-
- t.end();
- });
-
- assertRecordTests(ES, test);
-
- test('IsAccessorDescriptor', function (t) {
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { ES.IsAccessorDescriptor(primitive); },
- TypeError,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- t.equal(ES.IsAccessorDescriptor(), false, 'no value is not an Accessor Descriptor');
- t.equal(ES.IsAccessorDescriptor(undefined), false, 'undefined value is not an Accessor Descriptor');
-
- t.equal(ES.IsAccessorDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is an Accessor Descriptor');
- t.equal(ES.IsAccessorDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is an Accessor Descriptor');
- t.equal(ES.IsAccessorDescriptor(v.dataDescriptor()), false, 'data descriptor is not an Accessor Descriptor');
- t.equal(ES.IsAccessorDescriptor(v.genericDescriptor()), false, 'generic descriptor is not an Accessor Descriptor');
-
- t.end();
- });
-
- test('IsDataDescriptor', function (t) {
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { ES.IsDataDescriptor(primitive); },
- TypeError,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- t.equal(ES.IsDataDescriptor(), false, 'no value is not a Data Descriptor');
- t.equal(ES.IsDataDescriptor(undefined), false, 'undefined value is not a Data Descriptor');
-
- t.equal(ES.IsDataDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a Data Descriptor');
- t.equal(ES.IsDataDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a Data Descriptor');
- t.equal(ES.IsDataDescriptor(v.dataDescriptor()), true, 'data descriptor is a Data Descriptor');
- t.equal(ES.IsDataDescriptor(v.genericDescriptor()), false, 'generic descriptor is not a Data Descriptor');
-
- t.end();
- });
-
- test('IsGenericDescriptor', function (t) {
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { ES.IsGenericDescriptor(primitive); },
- TypeError,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- t.equal(ES.IsGenericDescriptor(), false, 'no value is not a Data Descriptor');
- t.equal(ES.IsGenericDescriptor(undefined), false, 'undefined value is not a Data Descriptor');
-
- t.equal(ES.IsGenericDescriptor(v.accessorDescriptor()), false, 'accessor descriptor is not a generic Descriptor');
- t.equal(ES.IsGenericDescriptor(v.mutatorDescriptor()), false, 'mutator descriptor is not a generic Descriptor');
- t.equal(ES.IsGenericDescriptor(v.dataDescriptor()), false, 'data descriptor is not a generic Descriptor');
-
- t.equal(ES.IsGenericDescriptor(v.genericDescriptor()), true, 'generic descriptor is a generic Descriptor');
-
- t.end();
- });
-
- test('FromPropertyDescriptor', function (t) {
- t.equal(ES.FromPropertyDescriptor(), undefined, 'no value begets undefined');
- t.equal(ES.FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined');
-
- forEach(v.nonNullPrimitives.concat(null), function (primitive) {
- t['throws'](
- function () { ES.FromPropertyDescriptor(primitive); },
- TypeError,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- var accessor = v.accessorDescriptor();
- t.deepEqual(ES.FromPropertyDescriptor(accessor), {
- get: accessor['[[Get]]'],
- set: accessor['[[Set]]'],
- enumerable: !!accessor['[[Enumerable]]'],
- configurable: !!accessor['[[Configurable]]']
- });
-
- var mutator = v.mutatorDescriptor();
- t.deepEqual(ES.FromPropertyDescriptor(mutator), {
- get: mutator['[[Get]]'],
- set: mutator['[[Set]]'],
- enumerable: !!mutator['[[Enumerable]]'],
- configurable: !!mutator['[[Configurable]]']
- });
- var data = v.dataDescriptor();
- t.deepEqual(ES.FromPropertyDescriptor(data), {
- value: data['[[Value]]'],
- writable: data['[[Writable]]'],
- enumerable: !!data['[[Enumerable]]'],
- configurable: !!data['[[Configurable]]']
- });
-
- t['throws'](
- function () { ES.FromPropertyDescriptor(v.genericDescriptor()); },
- TypeError,
- 'a complete Property Descriptor is required'
- );
-
- t.end();
- });
-
- test('ToPropertyDescriptor', function (t) {
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { ES.ToPropertyDescriptor(primitive); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
-
- var accessor = v.accessorDescriptor();
- t.deepEqual(ES.ToPropertyDescriptor({
- get: accessor['[[Get]]'],
- enumerable: !!accessor['[[Enumerable]]'],
- configurable: !!accessor['[[Configurable]]']
- }), accessor);
-
- var mutator = v.mutatorDescriptor();
- t.deepEqual(ES.ToPropertyDescriptor({
- set: mutator['[[Set]]'],
- enumerable: !!mutator['[[Enumerable]]'],
- configurable: !!mutator['[[Configurable]]']
- }), mutator);
-
- var data = v.descriptors.nonConfigurable(v.dataDescriptor());
- t.deepEqual(ES.ToPropertyDescriptor({
- value: data['[[Value]]'],
- writable: data['[[Writable]]'],
- configurable: !!data['[[Configurable]]']
- }), data);
-
- var both = v.bothDescriptor();
- t['throws'](
- function () {
- ES.ToPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] });
- },
- TypeError,
- 'data and accessor descriptors are mutually exclusive'
- );
-
- t['throws'](
- function () { ES.ToPropertyDescriptor({ get: 'not callable' }); },
- TypeError,
- '"get" must be undefined or callable'
- );
-
- t['throws'](
- function () { ES.ToPropertyDescriptor({ set: 'not callable' }); },
- TypeError,
- '"set" must be undefined or callable'
- );
-
- forEach(v.nonFunctions, function (nonFunction) {
- if (typeof nonFunction !== 'undefined') {
- t['throws'](
- function () { ES.ToPropertyDescriptor({ get: nonFunction }); },
- TypeError,
- '`.get` has ' + debug(nonFunction) + ', which is not a Function'
- );
- t['throws'](
- function () { ES.ToPropertyDescriptor({ set: nonFunction }); },
- TypeError,
- '`.set` has ' + debug(nonFunction) + ', which is not a Function'
- );
- }
- });
-
- forEach(['get', 'set'], function (accessorName) {
- forEach(['value', 'writable'], function (dataName) {
- var o = {};
- o[accessorName] = undefined;
- o[dataName] = undefined;
-
- t['throws'](
- function () { ES.ToPropertyDescriptor(o); },
- TypeError,
- accessorName + ' + ' + dataName + ' is invalid'
- );
- });
- });
-
- t.end();
- });
-
- test('Abstract Equality Comparison', function (t) {
- t.test('same types use ===', function (st) {
- forEach(v.primitives.concat(v.objects), function (value) {
- st.equal(ES['Abstract Equality Comparison'](value, value), value === value, debug(value) + ' is abstractly equal to itself');
- });
- st.end();
- });
-
- t.test('different types coerce', function (st) {
- var pairs = [
- [null, undefined],
- [3, '3'],
- [true, '3'],
- [true, 3],
- [false, 0],
- [false, '0'],
- [3, [3]],
- ['3', [3]],
- [true, [1]],
- [false, [0]],
- [String(v.coercibleObject), v.coercibleObject],
- [Number(String(v.coercibleObject)), v.coercibleObject],
- [Number(v.coercibleObject), v.coercibleObject],
- [String(Number(v.coercibleObject)), v.coercibleObject]
- ];
- forEach(pairs, function (pair) {
- var a = pair[0];
- var b = pair[1];
- // eslint-disable-next-line eqeqeq
- st.equal(ES['Abstract Equality Comparison'](a, b), a == b, debug(a) + ' == ' + debug(b));
- // eslint-disable-next-line eqeqeq
- st.equal(ES['Abstract Equality Comparison'](b, a), b == a, debug(b) + ' == ' + debug(a));
- });
- st.end();
- });
-
- t.end();
- });
-
- test('Strict Equality Comparison', function (t) {
- t.test('same types use ===', function (st) {
- forEach(v.primitives.concat(v.objects), function (value) {
- st.equal(ES['Strict Equality Comparison'](value, value), value === value, debug(value) + ' is strictly equal to itself');
- });
- st.end();
- });
-
- t.test('different types are not ===', function (st) {
- var pairs = [
- [null, undefined],
- [3, '3'],
- [true, '3'],
- [true, 3],
- [false, 0],
- [false, '0'],
- [3, [3]],
- ['3', [3]],
- [true, [1]],
- [false, [0]],
- [String(v.coercibleObject), v.coercibleObject],
- [Number(String(v.coercibleObject)), v.coercibleObject],
- [Number(v.coercibleObject), v.coercibleObject],
- [String(Number(v.coercibleObject)), v.coercibleObject]
- ];
- forEach(pairs, function (pair) {
- var a = pair[0];
- var b = pair[1];
- st.equal(ES['Strict Equality Comparison'](a, b), a === b, debug(a) + ' === ' + debug(b));
- st.equal(ES['Strict Equality Comparison'](b, a), b === a, debug(b) + ' === ' + debug(a));
- });
- st.end();
- });
-
- t.end();
- });
-
- test('Abstract Relational Comparison', function (t) {
- t.test('at least one operand is NaN', function (st) {
- st.equal(ES['Abstract Relational Comparison'](NaN, {}, true), undefined, 'LeftFirst: first is NaN, returns undefined');
- st.equal(ES['Abstract Relational Comparison']({}, NaN, true), undefined, 'LeftFirst: second is NaN, returns undefined');
- st.equal(ES['Abstract Relational Comparison'](NaN, {}, false), undefined, '!LeftFirst: first is NaN, returns undefined');
- st.equal(ES['Abstract Relational Comparison']({}, NaN, false), undefined, '!LeftFirst: second is NaN, returns undefined');
- st.end();
- });
-
- forEach(v.nonBooleans, function (nonBoolean) {
- t['throws'](
- function () { ES['Abstract Relational Comparison'](3, 4, nonBoolean); },
- TypeError,
- debug(nonBoolean) + ' is not a Boolean'
- );
- });
-
- forEach(v.zeroes, function (zero) {
- t.equal(ES['Abstract Relational Comparison'](zero, 1, true), true, 'LeftFirst: ' + debug(zero) + ' is less than 1');
- t.equal(ES['Abstract Relational Comparison'](zero, 1, false), true, '!LeftFirst: ' + debug(zero) + ' is less than 1');
- t.equal(ES['Abstract Relational Comparison'](1, zero, true), false, 'LeftFirst: 1 is not less than ' + debug(zero));
- t.equal(ES['Abstract Relational Comparison'](1, zero, false), false, '!LeftFirst: 1 is not less than ' + debug(zero));
-
- t.equal(ES['Abstract Relational Comparison'](zero, zero, true), false, 'LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero));
- t.equal(ES['Abstract Relational Comparison'](zero, zero, false), false, '!LeftFirst: ' + debug(zero) + ' is not less than ' + debug(zero));
- });
-
- t.equal(ES['Abstract Relational Comparison'](Infinity, -Infinity, true), false, 'LeftFirst: ∞ is not less than -∞');
- t.equal(ES['Abstract Relational Comparison'](Infinity, -Infinity, false), false, '!LeftFirst: ∞ is not less than -∞');
- t.equal(ES['Abstract Relational Comparison'](-Infinity, Infinity, true), true, 'LeftFirst: -∞ is less than ∞');
- t.equal(ES['Abstract Relational Comparison'](-Infinity, Infinity, false), true, '!LeftFirst: -∞ is less than ∞');
- t.equal(ES['Abstract Relational Comparison'](-Infinity, 0, true), true, 'LeftFirst: -∞ is less than +0');
- t.equal(ES['Abstract Relational Comparison'](-Infinity, 0, false), true, '!LeftFirst: -∞ is less than +0');
- t.equal(ES['Abstract Relational Comparison'](0, -Infinity, true), false, 'LeftFirst: +0 is not less than -∞');
- t.equal(ES['Abstract Relational Comparison'](0, -Infinity, false), false, '!LeftFirst: +0 is not less than -∞');
-
- t.equal(ES['Abstract Relational Comparison'](3, 4, true), true, 'LeftFirst: 3 is less than 4');
- t.equal(ES['Abstract Relational Comparison'](4, 3, true), false, 'LeftFirst: 3 is not less than 4');
- t.equal(ES['Abstract Relational Comparison'](3, 4, false), true, '!LeftFirst: 3 is less than 4');
- t.equal(ES['Abstract Relational Comparison'](4, 3, false), false, '!LeftFirst: 3 is not less than 4');
-
- t.equal(ES['Abstract Relational Comparison']('3', '4', true), true, 'LeftFirst: "3" is less than "4"');
- t.equal(ES['Abstract Relational Comparison']('4', '3', true), false, 'LeftFirst: "3" is not less than "4"');
- t.equal(ES['Abstract Relational Comparison']('3', '4', false), true, '!LeftFirst: "3" is less than "4"');
- t.equal(ES['Abstract Relational Comparison']('4', '3', false), false, '!LeftFirst: "3" is not less than "4"');
-
- t.equal(ES['Abstract Relational Comparison']('a', 'abc', true), true, 'LeftFirst: "a" is less than "abc"');
- t.equal(ES['Abstract Relational Comparison']('abc', 'a', true), false, 'LeftFirst: "abc" is not less than "a"');
- t.equal(ES['Abstract Relational Comparison']('a', 'abc', false), true, '!LeftFirst: "a" is less than "abc"');
- t.equal(ES['Abstract Relational Comparison']('abc', 'a', false), false, '!LeftFirst: "abc" is not less than "a"');
-
- t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, true), true, 'LeftFirst: coercible object is less than 42');
- t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, true), false, 'LeftFirst: 42 is not less than coercible object');
- t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, 42, false), true, '!LeftFirst: coercible object is less than 42');
- t.equal(ES['Abstract Relational Comparison'](42, v.coercibleObject, false), false, '!LeftFirst: 42 is not less than coercible object');
-
- t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', true), false, 'LeftFirst: coercible object is not less than "3"');
- t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, true), false, 'LeftFirst: "3" is not less than coercible object');
- t.equal(ES['Abstract Relational Comparison'](v.coercibleObject, '3', false), false, '!LeftFirst: coercible object is not less than "3"');
- t.equal(ES['Abstract Relational Comparison']('3', v.coercibleObject, false), false, '!LeftFirst: "3" is not less than coercible object');
-
- t.end();
- });
-
- test('SecFromTime', function (t) {
- var now = new Date();
- t.equal(ES.SecFromTime(now.getTime()), now.getUTCSeconds(), 'second from Date timestamp matches getUTCSeconds');
- t.end();
- });
-
- test('MinFromTime', function (t) {
- var now = new Date();
- t.equal(ES.MinFromTime(now.getTime()), now.getUTCMinutes(), 'minute from Date timestamp matches getUTCMinutes');
- t.end();
- });
-
- test('HourFromTime', function (t) {
- var now = new Date();
- t.equal(ES.HourFromTime(now.getTime()), now.getUTCHours(), 'hour from Date timestamp matches getUTCHours');
- t.end();
- });
-
- test('msFromTime', function (t) {
- var now = new Date();
- t.equal(ES.msFromTime(now.getTime()), now.getUTCMilliseconds(), 'ms from Date timestamp matches getUTCMilliseconds');
- t.end();
- });
-
- var msPerSecond = 1e3;
- var msPerMinute = 60 * msPerSecond;
- var msPerHour = 60 * msPerMinute;
- var msPerDay = 24 * msPerHour;
-
- test('Day', function (t) {
- var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5);
- var add = 2.5;
- var later = new Date(time + (add * msPerDay));
-
- t.equal(ES.Day(later.getTime()), ES.Day(time) + Math.floor(add), 'adding 2.5 days worth of ms, gives a Day delta of 2');
- t.end();
- });
-
- test('DayFromYear', function (t) {
- t.equal(ES.DayFromYear(2021) - ES.DayFromYear(2020), 366, '2021 is a leap year, has 366 days');
- t.equal(ES.DayFromYear(2020) - ES.DayFromYear(2019), 365, '2020 is not a leap year, has 365 days');
- t.equal(ES.DayFromYear(2019) - ES.DayFromYear(2018), 365, '2019 is not a leap year, has 365 days');
- t.equal(ES.DayFromYear(2018) - ES.DayFromYear(2017), 365, '2018 is not a leap year, has 365 days');
- t.equal(ES.DayFromYear(2017) - ES.DayFromYear(2016), 366, '2017 is a leap year, has 366 days');
-
- t.end();
- });
-
- test('TimeWithinDay', function (t) {
- var time = Date.UTC(2019, 8, 10, 2, 3, 4, 5);
- var add = 2.5;
- var later = new Date(time + (add * msPerDay));
-
- t.equal(ES.TimeWithinDay(later.getTime()), ES.TimeWithinDay(time) + (0.5 * msPerDay), 'adding 2.5 days worth of ms, gives a TimeWithinDay delta of +0.5');
- t.end();
- });
-
- test('TimeFromYear', function (t) {
- for (var i = 1900; i < 2100; i += 1) {
- t.equal(ES.TimeFromYear(i), Date.UTC(i, 0, 1), 'TimeFromYear matches a Date object’s year: ' + i);
- }
- t.end();
- });
-
- test('YearFromTime', function (t) {
- for (var i = 1900; i < 2100; i += 1) {
- t.equal(ES.YearFromTime(Date.UTC(i, 0, 1)), i, 'YearFromTime matches a Date object’s year on 1/1: ' + i);
- t.equal(ES.YearFromTime(Date.UTC(i, 10, 1)), i, 'YearFromTime matches a Date object’s year on 10/1: ' + i);
- }
- t.end();
- });
-
- test('WeekDay', function (t) {
- var now = new Date();
- var today = now.getUTCDay();
- for (var i = 0; i < 7; i += 1) {
- var weekDay = ES.WeekDay(now.getTime() + (i * msPerDay));
- t.equal(weekDay, (today + i) % 7, i + ' days after today (' + today + '), WeekDay is ' + weekDay);
- }
- t.end();
- });
-
- test('DaysInYear', function (t) {
- t.equal(ES.DaysInYear(2021), 365, '2021 is not a leap year');
- t.equal(ES.DaysInYear(2020), 366, '2020 is a leap year');
- t.equal(ES.DaysInYear(2019), 365, '2019 is not a leap year');
- t.equal(ES.DaysInYear(2018), 365, '2018 is not a leap year');
- t.equal(ES.DaysInYear(2017), 365, '2017 is not a leap year');
- t.equal(ES.DaysInYear(2016), 366, '2016 is a leap year');
- t.equal(ES.DaysInYear(2000), 366, '2000 is a leap year');
- t.equal(ES.DaysInYear(1900), 365, '1900 is not a leap year');
-
- t.end();
- });
-
- test('InLeapYear', function (t) {
- t.equal(ES.InLeapYear(Date.UTC(2021, 0, 1)), 0, '2021 is not a leap year');
- t.equal(ES.InLeapYear(Date.UTC(2020, 0, 1)), 1, '2020 is a leap year');
- t.equal(ES.InLeapYear(Date.UTC(2019, 0, 1)), 0, '2019 is not a leap year');
- t.equal(ES.InLeapYear(Date.UTC(2018, 0, 1)), 0, '2018 is not a leap year');
- t.equal(ES.InLeapYear(Date.UTC(2017, 0, 1)), 0, '2017 is not a leap year');
- t.equal(ES.InLeapYear(Date.UTC(2016, 0, 1)), 1, '2016 is a leap year');
-
- t.end();
- });
-
- test('DayWithinYear', function (t) {
- t.equal(ES.DayWithinYear(Date.UTC(2019, 0, 1)), 0, '1/1 is the 1st day');
- t.equal(ES.DayWithinYear(Date.UTC(2019, 11, 31)), 364, '12/31 is the 365th day in a non leap year');
- t.equal(ES.DayWithinYear(Date.UTC(2016, 11, 31)), 365, '12/31 is the 366th day in a leap year');
-
- t.end();
- });
-
- test('MonthFromTime', function (t) {
- t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 1)), 0, 'non-leap: 1/1 gives January');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 0, 31)), 0, 'non-leap: 1/31 gives January');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 1)), 1, 'non-leap: 2/1 gives February');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 28)), 1, 'non-leap: 2/28 gives February');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 1, 29)), 2, 'non-leap: 2/29 gives March');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 1)), 2, 'non-leap: 3/1 gives March');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 2, 31)), 2, 'non-leap: 3/31 gives March');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 1)), 3, 'non-leap: 4/1 gives April');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 3, 30)), 3, 'non-leap: 4/30 gives April');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 1)), 4, 'non-leap: 5/1 gives May');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 4, 31)), 4, 'non-leap: 5/31 gives May');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 1)), 5, 'non-leap: 6/1 gives June');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 5, 30)), 5, 'non-leap: 6/30 gives June');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 1)), 6, 'non-leap: 7/1 gives July');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 6, 31)), 6, 'non-leap: 7/31 gives July');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 1)), 7, 'non-leap: 8/1 gives August');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 7, 30)), 7, 'non-leap: 8/30 gives August');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 1)), 8, 'non-leap: 9/1 gives September');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 8, 30)), 8, 'non-leap: 9/30 gives September');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 1)), 9, 'non-leap: 10/1 gives October');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 9, 31)), 9, 'non-leap: 10/31 gives October');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 1)), 10, 'non-leap: 11/1 gives November');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 10, 30)), 10, 'non-leap: 11/30 gives November');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 1)), 11, 'non-leap: 12/1 gives December');
- t.equal(ES.MonthFromTime(Date.UTC(2019, 11, 31)), 11, 'non-leap: 12/31 gives December');
-
- t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 1)), 0, 'leap: 1/1 gives January');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 0, 31)), 0, 'leap: 1/31 gives January');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 1)), 1, 'leap: 2/1 gives February');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 28)), 1, 'leap: 2/28 gives February');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 1, 29)), 1, 'leap: 2/29 gives February');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 1)), 2, 'leap: 3/1 gives March');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 2, 31)), 2, 'leap: 3/31 gives March');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 1)), 3, 'leap: 4/1 gives April');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 3, 30)), 3, 'leap: 4/30 gives April');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 1)), 4, 'leap: 5/1 gives May');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 4, 31)), 4, 'leap: 5/31 gives May');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 1)), 5, 'leap: 6/1 gives June');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 5, 30)), 5, 'leap: 6/30 gives June');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 1)), 6, 'leap: 7/1 gives July');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 6, 31)), 6, 'leap: 7/31 gives July');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 1)), 7, 'leap: 8/1 gives August');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 7, 30)), 7, 'leap: 8/30 gives August');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 1)), 8, 'leap: 9/1 gives September');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 8, 30)), 8, 'leap: 9/30 gives September');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 1)), 9, 'leap: 10/1 gives October');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 9, 31)), 9, 'leap: 10/31 gives October');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 1)), 10, 'leap: 11/1 gives November');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 10, 30)), 10, 'leap: 11/30 gives November');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 1)), 11, 'leap: 12/1 gives December');
- t.equal(ES.MonthFromTime(Date.UTC(2016, 11, 31)), 11, 'leap: 12/31 gives December');
- t.end();
- });
-
- test('DateFromTime', function (t) {
- var i;
- for (i = 1; i <= 28; i += 1) {
- t.equal(ES.DateFromTime(Date.UTC(2019, 1, i)), i, '2019.02.' + i + ' is date ' + i);
- }
- for (i = 1; i <= 29; i += 1) {
- t.equal(ES.DateFromTime(Date.UTC(2016, 1, i)), i, '2016.02.' + i + ' is date ' + i);
- }
- for (i = 1; i <= 30; i += 1) {
- t.equal(ES.DateFromTime(Date.UTC(2019, 2, i)), i, '2019.03.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 3, i)), i, '2019.04.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 5, i)), i, '2019.06.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 7, i)), i, '2019.08.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 8, i)), i, '2019.09.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 10, i)), i, '2019.11.' + i + ' is date ' + i);
- }
- for (i = 1; i <= 31; i += 1) {
- t.equal(ES.DateFromTime(Date.UTC(2019, 0, i)), i, '2019.01.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 4, i)), i, '2019.05.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 6, i)), i, '2019.07.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 9, i)), i, '2019.10.' + i + ' is date ' + i);
- t.equal(ES.DateFromTime(Date.UTC(2019, 11, i)), i, '2019.12.' + i + ' is date ' + i);
- }
- t.end();
- });
-
- test('MakeDay', function (t) {
- forEach([NaN, Infinity, -Infinity], function (nonFiniteNumber) {
- t.equal(ES.MakeDay(nonFiniteNumber, 0, 0), NaN, 'year: ' + debug(nonFiniteNumber) + ' is not finite');
- t.equal(ES.MakeDay(0, nonFiniteNumber, 0), NaN, 'month: ' + debug(nonFiniteNumber) + ' is not finite');
- t.equal(ES.MakeDay(0, 0, nonFiniteNumber), NaN, 'date: ' + debug(nonFiniteNumber) + ' is not finite');
- });
-
- var day2015 = 16687;
- t.equal(ES.MakeDay(2015, 8, 9), day2015, '2015.09.09 is day 16687');
- var day2016 = day2015 + 366; // 2016 is a leap year
- t.equal(ES.MakeDay(2016, 8, 9), day2016, '2015.09.09 is day 17053');
- var day2017 = day2016 + 365;
- t.equal(ES.MakeDay(2017, 8, 9), day2017, '2017.09.09 is day 17418');
- var day2018 = day2017 + 365;
- t.equal(ES.MakeDay(2018, 8, 9), day2018, '2018.09.09 is day 17783');
- var day2019 = day2018 + 365;
- t.equal(ES.MakeDay(2019, 8, 9), day2019, '2019.09.09 is day 18148');
-
- t.end();
- });
-
- test('MakeDate', function (t) {
- forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
- t.equal(ES.MakeDate(nonFiniteNumber, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `day`');
- t.equal(ES.MakeDate(0, nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `time`');
- });
- t.equal(ES.MakeDate(0, 0), 0, 'zero day and zero time is zero date');
- t.equal(ES.MakeDate(0, 123), 123, 'zero day and nonzero time is a date of the "time"');
- t.equal(ES.MakeDate(1, 0), msPerDay, 'day of 1 and zero time is a date of "ms per day"');
- t.equal(ES.MakeDate(3, 0), 3 * msPerDay, 'day of 3 and zero time is a date of thrice "ms per day"');
- t.equal(ES.MakeDate(1, 123), msPerDay + 123, 'day of 1 and nonzero time is a date of "ms per day" plus the "time"');
- t.equal(ES.MakeDate(3, 123), (3 * msPerDay) + 123, 'day of 3 and nonzero time is a date of thrice "ms per day" plus the "time"');
-
- t.end();
- });
-
- test('MakeTime', function (t) {
- forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
- t.equal(ES.MakeTime(nonFiniteNumber, 0, 0, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `hour`');
- t.equal(ES.MakeTime(0, nonFiniteNumber, 0, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `min`');
- t.equal(ES.MakeTime(0, 0, nonFiniteNumber, 0), NaN, debug(nonFiniteNumber) + ' is not a finite `sec`');
- t.equal(ES.MakeTime(0, 0, 0, nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `ms`');
- });
-
- t.equal(
- ES.MakeTime(1.2, 2.3, 3.4, 4.5),
- (1 * msPerHour) + (2 * msPerMinute) + (3 * msPerSecond) + 4,
- 'all numbers are converted to integer, multiplied by the right number of ms, and summed'
- );
-
- t.end();
- });
-
- test('TimeClip', function (t) {
- forEach(v.infinities.concat(NaN), function (nonFiniteNumber) {
- t.equal(ES.TimeClip(nonFiniteNumber), NaN, debug(nonFiniteNumber) + ' is not a finite `time`');
- });
- t.equal(ES.TimeClip(8.64e15 + 1), NaN, '8.64e15 is the largest magnitude considered "finite"');
- t.equal(ES.TimeClip(-8.64e15 - 1), NaN, '-8.64e15 is the largest magnitude considered "finite"');
-
- forEach(v.zeroes.concat([-10, 10, +new Date()]), function (time) {
- t.looseEqual(ES.TimeClip(time), time, debug(time) + ' is a time of ' + debug(time));
- });
-
- t.end();
- });
-
- test('modulo', function (t) {
- t.equal(3 % 2, 1, '+3 % 2 is +1');
- t.equal(ES.modulo(3, 2), 1, '+3 mod 2 is +1');
-
- t.equal(-3 % 2, -1, '-3 % 2 is -1');
- t.equal(ES.modulo(-3, 2), 1, '-3 mod 2 is +1');
- t.end();
- });
-};
-
-var es2015 = function ES2015(ES, ops, expectedMissing, skips) {
- es5(ES, ops, expectedMissing, assign(assign({}, skips), {
- CheckObjectCoercible: true,
- FromPropertyDescriptor: true,
- ToNumber: true,
- ToString: true,
- Type: true
- }));
- var test = makeTest(skips);
-
- var getNamelessFunction = function () {
- var f = Object(function () {});
- try {
- delete f.name;
- } catch (e) { /**/ }
- return f;
- };
-
- test('AdvanceStringIndex', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.AdvanceStringIndex(nonString); },
- TypeError,
- '"S" argument must be a String; ' + debug(nonString) + ' is not'
- );
- });
-
- var notInts = v.nonNumbers.concat(
- v.nonIntegerNumbers,
- v.infinities,
- [NaN, [], new Date(), Math.pow(2, 53), -1]
- );
- forEach(notInts, function (nonInt) {
- t['throws'](
- function () { ES.AdvanceStringIndex('abc', nonInt); },
- TypeError,
- '"index" argument must be an integer, ' + debug(nonInt) + ' is not.'
- );
- });
-
- forEach(v.nonBooleans, function (nonBoolean) {
- t['throws'](
- function () { ES.AdvanceStringIndex('abc', 0, nonBoolean); },
- TypeError,
- debug(nonBoolean) + ' is not a Boolean'
- );
- });
-
- var str = 'a' + wholePoo + 'c';
-
- t.test('non-unicode mode', function (st) {
- for (var i = 0; i < str.length + 2; i += 1) {
- st.equal(ES.AdvanceStringIndex(str, i, false), i + 1, i + ' advances to ' + (i + 1));
- }
-
- st.end();
- });
-
- t.test('unicode mode', function (st) {
- st.equal(ES.AdvanceStringIndex(str, 0, true), 1, '0 advances to 1');
- st.equal(ES.AdvanceStringIndex(str, 1, true), 3, '1 advances to 3');
- st.equal(ES.AdvanceStringIndex(str, 2, true), 3, '2 advances to 3');
- st.equal(ES.AdvanceStringIndex(str, 3, true), 4, '3 advances to 4');
- st.equal(ES.AdvanceStringIndex(str, 4, true), 5, '4 advances to 5');
-
- st.end();
- });
-
- t.test('lone surrogates', function (st) {
- var halfPoo = 'a' + leadingPoo + 'c';
-
- st.equal(ES.AdvanceStringIndex(halfPoo, 0, true), 1, '0 advances to 1');
- st.equal(ES.AdvanceStringIndex(halfPoo, 1, true), 2, '1 advances to 2');
- st.equal(ES.AdvanceStringIndex(halfPoo, 2, true), 3, '2 advances to 3');
- st.equal(ES.AdvanceStringIndex(halfPoo, 3, true), 4, '3 advances to 4');
-
- st.end();
- });
-
- t.test('surrogate pairs', function (st) {
- var lowestPair = String.fromCharCode('0xD800') + String.fromCharCode('0xDC00');
- var highestPair = String.fromCharCode('0xDBFF') + String.fromCharCode('0xDFFF');
-
- st.equal(ES.AdvanceStringIndex(lowestPair, 0, true), 2, 'lowest surrogate pair, 0 -> 2');
- st.equal(ES.AdvanceStringIndex(highestPair, 0, true), 2, 'highest surrogate pair, 0 -> 2');
- st.equal(ES.AdvanceStringIndex(wholePoo, 0, true), 2, 'poop, 0 -> 2');
-
- st.end();
- });
-
- t.end();
- });
-
- test('ArrayCreate', function (t) {
- forEach(v.nonIntegerNumbers.concat([-1]), function (nonIntegerNumber) {
- t['throws'](
- function () { ES.ArrayCreate(nonIntegerNumber); },
- TypeError,
- 'length must be an integer number >= 0'
- );
- });
-
- t['throws'](
- function () { ES.ArrayCreate(Math.pow(2, 32)); },
- RangeError,
- 'length must be < 2**32'
- );
-
- t.deepEqual(ES.ArrayCreate(-0), [], 'length of -0 creates an empty array');
- t.deepEqual(ES.ArrayCreate(0), [], 'length of +0 creates an empty array');
- // eslint-disable-next-line no-sparse-arrays, comma-spacing
- t.deepEqual(ES.ArrayCreate(1), [,], 'length of 1 creates a sparse array of length 1');
- // eslint-disable-next-line no-sparse-arrays, comma-spacing
- t.deepEqual(ES.ArrayCreate(2), [,,], 'length of 2 creates a sparse array of length 2');
-
- t.test('proto argument', { skip: !$setProto }, function (st) {
- var fakeProto = {
- push: { toString: function () { return 'not array push'; } }
- };
- st.equal(ES.ArrayCreate(0, fakeProto).push, fakeProto.push, 'passing the proto argument works');
- st.end();
- });
-
- t.end();
- });
-
- test('ArraySetLength', function (t) {
- forEach(v.primitives.concat(v.objects), function (nonArray) {
- t['throws'](
- function () { ES.ArraySetLength(nonArray, { '[[Value]]': 0 }); },
- TypeError,
- 'A: ' + debug(nonArray) + ' is not an Array'
- );
- });
-
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { ES.ArraySetLength([], primitive); },
- TypeError,
- 'Desc: ' + debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- t.test('making length nonwritable', { skip: !getOwnPropertyDescriptor }, function (st) {
- var a = [];
- ES.ArraySetLength(a, { '[[Writable]]': false });
- st.deepEqual(
- getOwnPropertyDescriptor(a, 'length'),
- {
- configurable: false,
- enumerable: false,
- value: 0,
- writable: false
- },
- 'without a value, length becomes nonwritable'
- );
- st.end();
- });
-
- forEach([-1, Math.pow(2, 32)].concat(v.nonIntegerNumbers), function (nonLength) {
- t['throws'](
- function () { ES.ArraySetLength([], { '[[Value]]': nonLength }); },
- RangeError,
- 'a non-integer, negative, or > (2**31 - 1) is not a valid length: ' + debug(nonLength)
- );
- });
-
- var arr = [];
- ES.ArraySetLength(arr, { '[[Value]]': 7 });
- t.equal(arr.length, 7, 'array now has a length of 7');
-
- t.end();
- });
-
- test('ArraySpeciesCreate', function (t) {
- t.test('errors', function (st) {
- var testNonNumber = function (nonNumber) {
- st['throws'](
- function () { ES.ArraySpeciesCreate([], nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a number'
- );
- };
- forEach(v.nonNumbers, testNonNumber);
-
- st['throws'](
- function () { ES.ArraySpeciesCreate([], -1); },
- TypeError,
- '-1 is not >= 0'
- );
- st['throws'](
- function () { ES.ArraySpeciesCreate([], -Infinity); },
- TypeError,
- '-Infinity is not >= 0'
- );
-
- var testNonIntegers = function (nonInteger) {
- st['throws'](
- function () { ES.ArraySpeciesCreate([], nonInteger); },
- TypeError,
- debug(nonInteger) + ' is not an integer'
- );
- };
- forEach(v.nonIntegerNumbers, testNonIntegers);
-
- st.end();
- });
-
- t.test('works with a non-array', function (st) {
- forEach(v.objects.concat(v.primitives), function (nonArray) {
- var arr = ES.ArraySpeciesCreate(nonArray, 0);
- st.ok(ES.IsArray(arr), 'is an array');
- st.equal(arr.length, 0, 'length is correct');
- st.equal(arr.constructor, Array, 'constructor is correct');
- });
-
- st.end();
- });
-
- t.test('works with a normal array', function (st) {
- var len = 2;
- var orig = [1, 2, 3];
- var arr = ES.ArraySpeciesCreate(orig, len);
-
- st.ok(ES.IsArray(arr), 'is an array');
- st.equal(arr.length, len, 'length is correct');
- st.equal(arr.constructor, orig.constructor, 'constructor is correct');
-
- st.end();
- });
-
- t.test('-0 length produces +0 length', function (st) {
- var len = -0;
- st.equal(len, -0, '-0 is negative zero');
- st.notEqual(len, 0, '-0 is not positive zero');
-
- var orig = [1, 2, 3];
- var arr = ES.ArraySpeciesCreate(orig, len);
-
- st.equal(ES.IsArray(arr), true);
- st.equal(arr.length, 0);
- st.equal(arr.constructor, orig.constructor);
-
- st.end();
- });
-
- t.test('works with species construtor', { skip: !hasSpecies }, function (st) {
- var sentinel = {};
- var Foo = function Foo(len) {
- this.length = len;
- this.sentinel = sentinel;
- };
- var Bar = getArraySubclassWithSpeciesConstructor(Foo);
- var bar = new Bar();
-
- st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
-
- var arr = ES.ArraySpeciesCreate(bar, 3);
- st.equal(arr.constructor, Foo, 'result used species constructor');
- st.equal(arr.length, 3, 'length property is correct');
- st.equal(arr.sentinel, sentinel, 'Foo constructor was exercised');
-
- st.end();
- });
-
- t.test('works with null species constructor', { skip: !hasSpecies }, function (st) {
- var Bar = getArraySubclassWithSpeciesConstructor(null);
- var bar = new Bar();
-
- st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
-
- var arr = ES.ArraySpeciesCreate(bar, 3);
- st.equal(arr.constructor, Array, 'result used default constructor');
- st.equal(arr.length, 3, 'length property is correct');
-
- st.end();
- });
-
- t.test('works with undefined species constructor', { skip: !hasSpecies }, function (st) {
- var Bar = getArraySubclassWithSpeciesConstructor();
- var bar = new Bar();
-
- st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
-
- var arr = ES.ArraySpeciesCreate(bar, 3);
- st.equal(arr.constructor, Array, 'result used default constructor');
- st.equal(arr.length, 3, 'length property is correct');
-
- st.end();
- });
-
- t.test('throws with object non-construtor species constructor', { skip: !hasSpecies }, function (st) {
- forEach(v.objects, function (obj) {
- var Bar = getArraySubclassWithSpeciesConstructor(obj);
- var bar = new Bar();
-
- st.equal(ES.IsArray(bar), true, 'Bar instance is an array');
-
- st['throws'](
- function () { ES.ArraySpeciesCreate(bar, 3); },
- TypeError,
- debug(obj) + ' is not a constructor'
- );
- });
-
- st.end();
- });
-
- t.end();
- });
-
- test('Call', function (t) {
- var receiver = {};
- var notFuncs = v.nonFunctions.concat([/a/g, new RegExp('a', 'g')]);
- t.plan(notFuncs.length + v.nonArrays.length + 5);
-
- forEach(notFuncs, function (notFunc) {
- t['throws'](
- function () { return ES.Call(notFunc, receiver); },
- TypeError,
- debug(notFunc) + ' (' + typeof notFunc + ') is not callable'
- );
- });
-
- forEach(v.nonArrays, function (nonArray) {
- t['throws'](
- function () { ES.Call(Function.prototype, null, nonArray); },
- TypeError,
- debug(nonArray) + ' is not an array'
- );
- });
-
- ES.Call(
- function (a, b) {
- t.equal(this, receiver, 'context matches expected');
- t.deepEqual([a, b], [1, 2], 'named args are correct');
- t.equal(arguments.length, 3, 'extra argument was passed');
- t.equal(arguments[2], 3, 'extra argument was correct');
- },
- receiver,
- [1, 2, 3]
- );
-
- t.test('Call doesn’t use func.apply', function (st) {
- st.plan(4);
-
- var bad = function (a, b) {
- st.equal(this, receiver, 'context matches expected');
- st.deepEqual([a, b], [1, 2], 'named args are correct');
- st.equal(arguments.length, 3, 'extra argument was passed');
- st.equal(arguments[2], 3, 'extra argument was correct');
- };
-
- defineProperty(bad, 'apply', {
- value: function () {
- st.fail('bad.apply shouldn’t get called');
- }
- });
-
- ES.Call(bad, receiver, [1, 2, 3]);
- st.end();
- });
-
- t.end();
- });
-
- test('CanonicalNumericIndexString', function (t) {
- var throwsOnNonString = function (notString) {
- t['throws'](
- function () { return ES.CanonicalNumericIndexString(notString); },
- TypeError,
- debug(notString) + ' is not a string'
- );
- };
- forEach(v.objects.concat(v.numbers), throwsOnNonString);
- t.equal(ES.CanonicalNumericIndexString('-0'), -0, '"-0" returns -0');
- for (var i = -50; i < 50; i += 10) {
- t.equal(i, ES.CanonicalNumericIndexString(String(i)), '"' + i + '" returns ' + i);
- t.equal(undefined, ES.CanonicalNumericIndexString(String(i) + 'a'), '"' + i + 'a" returns undefined');
- }
- t.end();
- });
-
- test('CompletePropertyDescriptor', function (t) {
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { ES.CompletePropertyDescriptor(primitive); },
- TypeError,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- var generic = v.genericDescriptor();
- t.deepEqual(
- ES.CompletePropertyDescriptor(generic),
- {
- '[[Configurable]]': !!generic['[[Configurable]]'],
- '[[Enumerable]]': !!generic['[[Enumerable]]'],
- '[[Value]]': undefined,
- '[[Writable]]': false
- },
- 'completes a Generic Descriptor'
- );
-
- var data = v.dataDescriptor();
- t.deepEqual(
- ES.CompletePropertyDescriptor(data),
- {
- '[[Configurable]]': !!data['[[Configurable]]'],
- '[[Enumerable]]': false,
- '[[Value]]': data['[[Value]]'],
- '[[Writable]]': !!data['[[Writable]]']
- },
- 'completes a Data Descriptor'
- );
-
- var accessor = v.accessorDescriptor();
- t.deepEqual(
- ES.CompletePropertyDescriptor(accessor),
- {
- '[[Get]]': accessor['[[Get]]'],
- '[[Enumerable]]': !!accessor['[[Enumerable]]'],
- '[[Configurable]]': !!accessor['[[Configurable]]'],
- '[[Set]]': undefined
- },
- 'completes an Accessor Descriptor'
- );
-
- var mutator = v.mutatorDescriptor();
- t.deepEqual(
- ES.CompletePropertyDescriptor(mutator),
- {
- '[[Set]]': mutator['[[Set]]'],
- '[[Enumerable]]': !!mutator['[[Enumerable]]'],
- '[[Configurable]]': !!mutator['[[Configurable]]'],
- '[[Get]]': undefined
- },
- 'completes a mutator Descriptor'
- );
-
- t['throws'](
- function () { ES.CompletePropertyDescriptor(v.bothDescriptor()); },
- TypeError,
- 'data and accessor descriptors are mutually exclusive'
- );
-
- t.end();
- });
-
- test('CreateDataProperty', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.CreateDataProperty(primitive); },
- TypeError,
- debug(primitive) + ' is not an object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.CreateDataProperty({}, nonPropertyKey); },
- TypeError,
- debug(nonPropertyKey) + ' is not a property key'
- );
- });
-
- var sentinel = { id: 'sentinel' };
- var secondSentinel = { id: 'second sentinel' };
- forEach(v.propertyKeys, function (propertyKey) {
- var obj = {};
- var status = ES.CreateDataProperty(obj, propertyKey, sentinel);
- t.equal(status, true, 'status is true');
- t.equal(
- obj[propertyKey],
- sentinel,
- debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object'
- );
- var secondStatus = ES.CreateDataProperty(obj, propertyKey, secondSentinel);
- t.equal(secondStatus, true, 'second status is true');
- t.equal(
- obj[propertyKey],
- secondSentinel,
- debug(secondSentinel) + ' is installed on "' + debug(propertyKey) + '" on the object'
- );
-
- t.test('with defineProperty', { skip: !defineProperty.oDP }, function (st) {
- var nonWritable = defineProperty({}, propertyKey, { configurable: true, writable: false });
-
- var nonWritableStatus = ES.CreateDataProperty(nonWritable, propertyKey, sentinel);
- st.equal(nonWritableStatus, false, 'create data property failed');
- st.notEqual(
- nonWritable[propertyKey],
- sentinel,
- debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object when key is nonwritable'
- );
-
- var nonConfigurable = defineProperty({}, propertyKey, { configurable: false, writable: true });
-
- var nonConfigurableStatus = ES.CreateDataProperty(nonConfigurable, propertyKey, sentinel);
- st.equal(nonConfigurableStatus, false, 'create data property failed');
- st.notEqual(
- nonConfigurable[propertyKey],
- sentinel,
- debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object when key is nonconfigurable'
- );
- st.end();
- });
- });
-
- t.end();
- });
-
- test('CreateDataPropertyOrThrow', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.CreateDataPropertyOrThrow(primitive); },
- TypeError,
- debug(primitive) + ' is not an object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.CreateDataPropertyOrThrow({}, nonPropertyKey); },
- TypeError,
- debug(nonPropertyKey) + ' is not a property key'
- );
- });
-
- var sentinel = {};
- forEach(v.propertyKeys, function (propertyKey) {
- var obj = {};
- var status = ES.CreateDataPropertyOrThrow(obj, propertyKey, sentinel);
- t.equal(status, true, 'status is true');
- t.equal(
- obj[propertyKey],
- sentinel,
- debug(sentinel) + ' is installed on "' + debug(propertyKey) + '" on the object'
- );
-
- if (typeof Object.preventExtensions === 'function') {
- var notExtensible = {};
- Object.preventExtensions(notExtensible);
-
- t['throws'](
- function () { ES.CreateDataPropertyOrThrow(notExtensible, propertyKey, sentinel); },
- TypeError,
- 'can not install ' + debug(propertyKey) + ' on non-extensible object'
- );
- t.notEqual(
- notExtensible[propertyKey],
- sentinel,
- debug(sentinel) + ' is not installed on "' + debug(propertyKey) + '" on the object'
- );
- }
- });
-
- t.end();
- });
-
- test('CreateListFromArrayLike', function (t) {
- forEach(v.primitives, function (nonObject) {
- t['throws'](
- function () { ES.CreateListFromArrayLike(nonObject); },
- TypeError,
- debug(nonObject) + ' is not an Object'
- );
- });
- forEach(v.nonArrays, function (nonArray) {
- t['throws'](
- function () { ES.CreateListFromArrayLike({}, nonArray); },
- TypeError,
- debug(nonArray) + ' is not an Array'
- );
- });
-
- t.deepEqual(
- ES.CreateListFromArrayLike({ length: 2, 0: 'a', 1: 'b', 2: 'c' }),
- ['a', 'b'],
- 'arraylike stops at the length'
- );
-
- t.end();
- });
-
- test('CreateHTML', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.CreateHTML('', nonString, '', ''); },
- TypeError,
- 'tag: ' + debug(nonString) + ' is not a String'
- );
- t['throws'](
- function () { ES.CreateHTML('', '', nonString, ''); },
- TypeError,
- 'attribute: ' + debug(nonString) + ' is not a String'
- );
- });
-
- t.equal(
- ES.CreateHTML(
- { toString: function () { return 'the string'; } },
- 'some HTML tag!',
- ''
- ),
- '<some HTML tag!>the string</some HTML tag!>',
- 'works with an empty string attribute value'
- );
-
- t.equal(
- ES.CreateHTML(
- { toString: function () { return 'the string'; } },
- 'some HTML tag!',
- 'attr',
- 'value "with quotes"'
- ),
- '<some HTML tag! attr="value "with quotes"">the string</some HTML tag!>',
- 'works with an attribute, and a value with quotes'
- );
-
- t.end();
- });
-
- test('CreateMethodProperty', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.CreateMethodProperty(primitive, 'key'); },
- TypeError,
- 'O must be an Object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.CreateMethodProperty({}, nonPropertyKey); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- t.test('defines correctly', function (st) {
- var obj = {};
- var key = 'the key';
- var value = { foo: 'bar' };
-
- st.equal(ES.CreateMethodProperty(obj, key, value), true, 'defines property successfully');
- st.test('property descriptor', { skip: !getOwnPropertyDescriptor }, function (s2t) {
- s2t.deepEqual(
- getOwnPropertyDescriptor(obj, key),
- {
- configurable: true,
- enumerable: false,
- value: value,
- writable: true
- },
- 'sets the correct property descriptor'
- );
-
- s2t.end();
- });
- st.equal(obj[key], value, 'sets the correct value');
-
- st.end();
- });
-
- t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) {
- var obj = Object.freeze({ foo: 'bar' });
- st['throws'](
- function () { ES.CreateMethodProperty(obj, 'foo', { value: 'baz' }); },
- TypeError,
- 'nonconfigurable key can not be defined'
- );
-
- st.end();
- });
-
- t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) {
- st['throws'](
- function () { ES.CreateMethodProperty(function () {}, 'name', { value: 'baz' }); },
- TypeError,
- 'nonconfigurable function name can not be defined'
- );
- st.end();
- });
-
- t.end();
- });
-
- test('CreateIterResultObject', function (t) {
- forEach(v.nonBooleans, function (nonBoolean) {
- t['throws'](
- function () { ES.CreateIterResultObject({}, nonBoolean); },
- TypeError,
- '"done" argument must be a boolean; ' + debug(nonBoolean) + ' is not'
- );
- });
-
- var value = {};
- t.deepEqual(
- ES.CreateIterResultObject(value, true),
- { value: value, done: true },
- 'creates a "done" iteration result'
- );
- t.deepEqual(
- ES.CreateIterResultObject(value, false),
- { value: value, done: false },
- 'creates a "not done" iteration result'
- );
-
- t.end();
- });
-
- test('DefinePropertyOrThrow', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.DefinePropertyOrThrow(primitive, 'key', {}); },
- TypeError,
- 'O must be an Object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.DefinePropertyOrThrow({}, nonPropertyKey, {}); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- t.test('defines correctly', function (st) {
- var obj = {};
- var key = 'the key';
- var descriptor = {
- configurable: true,
- enumerable: false,
- value: { foo: 'bar' },
- writable: true
- };
-
- st.equal(ES.DefinePropertyOrThrow(obj, key, descriptor), true, 'defines property successfully');
- st.test('property descriptor', { skip: !getOwnPropertyDescriptor }, function (s2t) {
- s2t.deepEqual(
- getOwnPropertyDescriptor(obj, key),
- descriptor,
- 'sets the correct property descriptor'
- );
-
- s2t.end();
- });
- st.deepEqual(obj[key], descriptor.value, 'sets the correct value');
-
- st.end();
- });
-
- t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) {
- var obj = Object.freeze({ foo: 'bar' });
- st['throws'](
- function () {
- ES.DefinePropertyOrThrow(obj, 'foo', { configurable: true, value: 'baz' });
- },
- TypeError,
- 'nonconfigurable key can not be defined'
- );
-
- st.end();
- });
-
- t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) {
- st['throws'](
- function () {
- ES.DefinePropertyOrThrow(function () {}, 'name', { configurable: true, value: 'baz' });
- },
- TypeError,
- 'nonconfigurable function name can not be defined'
- );
- st.end();
- });
-
- t.end();
- });
-
- test('DeletePropertyOrThrow', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.DeletePropertyOrThrow(primitive, 'key', {}); },
- TypeError,
- 'O must be an Object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.DeletePropertyOrThrow({}, nonPropertyKey, {}); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- t.test('defines correctly', function (st) {
- var obj = { 'the key': 42 };
- var key = 'the key';
-
- st.equal(ES.DeletePropertyOrThrow(obj, key), true, 'deletes property successfully');
- st.equal(key in obj, false, 'key is no longer in the object');
-
- st.end();
- });
-
- t.test('fails as expected on a frozen object', { skip: !Object.freeze }, function (st) {
- var obj = Object.freeze({ foo: 'bar' });
- st['throws'](
- function () { ES.DeletePropertyOrThrow(obj, 'foo'); },
- TypeError,
- 'nonconfigurable key can not be deleted'
- );
-
- st.end();
- });
-
- t.test('fails as expected on a function with a nonconfigurable name', { skip: !functionsHaveNames || functionsHaveConfigurableNames }, function (st) {
- st['throws'](
- function () { ES.DeletePropertyOrThrow(function () {}, 'name'); },
- TypeError,
- 'nonconfigurable function name can not be deleted'
- );
- st.end();
- });
-
- t.end();
- });
-
- test('EnumerableOwnNames', function (t) {
- var obj = testEnumerableOwnNames(t, function (O) { return ES.EnumerableOwnNames(O); });
-
- t.deepEqual(
- ES.EnumerableOwnNames(obj),
- ['own'],
- 'returns enumerable own names'
- );
-
- t.end();
- });
-
- test('FromPropertyDescriptor', function (t) {
- t.equal(ES.FromPropertyDescriptor(), undefined, 'no value begets undefined');
- t.equal(ES.FromPropertyDescriptor(undefined), undefined, 'undefined value begets undefined');
-
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- t['throws'](
- function () { ES.FromPropertyDescriptor(primitive); },
- TypeError,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- var accessor = v.accessorDescriptor();
- t.deepEqual(ES.FromPropertyDescriptor(accessor), {
- get: accessor['[[Get]]'],
- enumerable: !!accessor['[[Enumerable]]'],
- configurable: !!accessor['[[Configurable]]']
- });
-
- var mutator = v.mutatorDescriptor();
- t.deepEqual(ES.FromPropertyDescriptor(mutator), {
- set: mutator['[[Set]]'],
- enumerable: !!mutator['[[Enumerable]]'],
- configurable: !!mutator['[[Configurable]]']
- });
- var data = v.dataDescriptor();
- t.deepEqual(ES.FromPropertyDescriptor(data), {
- value: data['[[Value]]'],
- writable: data['[[Writable]]']
- });
-
- t.deepEqual(ES.FromPropertyDescriptor(v.genericDescriptor()), {
- enumerable: false,
- configurable: true
- });
-
- var both = v.bothDescriptor();
- t['throws'](
- function () {
- ES.FromPropertyDescriptor({ get: both['[[Get]]'], value: both['[[Value]]'] });
- },
- TypeError,
- 'data and accessor descriptors are mutually exclusive'
- );
-
- t.end();
- });
-
- test('Get', function (t) {
- t['throws'](function () { return ES.Get('a', 'a'); }, TypeError, 'Throws a TypeError if `O` is not an Object');
- t['throws'](function () { return ES.Get({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key');
-
- var value = {};
- t.test('Symbols', { skip: !v.hasSymbols }, function (st) {
- var sym = Symbol('sym');
- var obj = {};
- obj[sym] = value;
- st.equal(ES.Get(obj, sym), value, 'returns property `P` if it exists on object `O`');
- st.end();
- });
- t.equal(ES.Get({ a: value }, 'a'), value, 'returns property `P` if it exists on object `O`');
- t.end();
- });
-
- test('GetIterator', function (t) {
- var arr = [1, 2];
- testIterator(t, ES.GetIterator(arr), arr);
-
- testIterator(t, ES.GetIterator('abc'), 'abc'.split(''));
-
- var sentinel = {};
- forEach(v.primitives, function (nonObject) {
- var method = function () {
- return nonObject;
- };
- t['throws'](
- function () { ES.GetIterator(sentinel, method); },
- TypeError,
- debug(nonObject) + ' is not an Object; iterator method must return an Object'
- );
- });
-
- var i = 0;
- var manualMethod = function () {
- t.equal(this, sentinel, 'receiver is expected object');
- return {
- next: function () {
- var value = arr[i];
- i += 1;
- return {
- done: i > arr.length,
- value: value
- };
- }
- };
- };
- testIterator(t, ES.GetIterator(sentinel, manualMethod), arr);
-
- t.test('Symbol.iterator', { skip: !v.hasSymbols }, function (st) {
- var m = new Map();
- m.set(1, 'a');
- m.set(2, 'b');
-
- testIterator(st, ES.GetIterator(m), [[1, 'a'], [2, 'b']]);
-
- forEach(v.primitives, function (nonObject) {
- var badIterable = {};
- badIterable[Symbol.iterator] = function () {
- return nonObject;
- };
- st['throws'](
- function () { return ES.GetIterator(badIterable); },
- TypeError,
- debug(nonObject) + ' is not an Object; iterator method must return an Object'
- );
- });
-
- st.end();
- });
-
- t.end();
- });
-
- test('GetMethod', function (t) {
- t['throws'](function () { return ES.GetMethod({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key');
- t.equal(ES.GetMethod({}, 'a'), undefined, 'returns undefined in property is undefined');
- t.equal(ES.GetMethod({ a: null }, 'a'), undefined, 'returns undefined if property is null');
- t.equal(ES.GetMethod({ a: undefined }, 'a'), undefined, 'returns undefined if property is undefined');
- var obj = { a: function () {} };
- t['throws'](function () { ES.GetMethod({ a: 'b' }, 'a'); }, TypeError, 'throws TypeError if property exists and is not callable');
- t.equal(ES.GetMethod(obj, 'a'), obj.a, 'returns property if it is callable');
- t.end();
- });
-
- test('GetOwnPropertyKeys', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.GetOwnPropertyKeys(primitive, 'String'); },
- TypeError,
- 'O: ' + debug(primitive) + ' is not an Object'
- );
- });
-
- t['throws'](
- function () { ES.GetOwnPropertyKeys({}, 'not string or symbol'); },
- TypeError,
- 'Type: must be "String" or "Symbol"'
- );
-
- t.test('Symbols', { skip: !v.hasSymbols }, function (st) {
- var O = { a: 1 };
- O[Symbol.iterator] = true;
- var s = Symbol('test');
- defineProperty(O, s, { enumerable: false, value: true });
-
- st.deepEqual(
- ES.GetOwnPropertyKeys(O, 'Symbol'),
- [Symbol.iterator, s],
- 'works with Symbols, enumerable or not'
- );
-
- st.end();
- });
-
- t.test('non-enumerable names', { skip: !defineProperty.oDP }, function (st) {
- var O = { a: 1 };
- defineProperty(O, 'b', { enumerable: false, value: 2 });
- if (v.hasSymbols) {
- O[Symbol.iterator] = true;
- }
-
- st.deepEqual(
- ES.GetOwnPropertyKeys(O, 'String').sort(),
- ['a', 'b'].sort(),
- 'works with Strings, enumerable or not'
- );
-
- st.end();
- });
-
- t.deepEqual(
- ES.GetOwnPropertyKeys({ a: 1, b: 2 }, 'String').sort(),
- ['a', 'b'].sort(),
- 'works with enumerable keys'
- );
-
- t.end();
- });
-
- test('GetPrototypeFromConstructor', function (t) {
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- function () { ES.GetPrototypeFromConstructor(nonFunction, '%Array%'); },
- TypeError,
- debug(nonFunction) + ' is not a constructor'
- );
- });
-
- forEach(arrowFns, function (arrowFn) {
- t['throws'](
- function () { ES.GetPrototypeFromConstructor(arrowFn, '%Array%'); },
- TypeError,
- debug(arrowFn) + ' is not a constructor'
- );
- });
-
- var f = function () {};
- t.equal(
- ES.GetPrototypeFromConstructor(f, '%Array.prototype%'),
- f.prototype,
- 'function with normal `prototype` property returns it'
- );
- forEach([true, 'foo', 42], function (truthyPrimitive) {
- f.prototype = truthyPrimitive;
- t.equal(
- ES.GetPrototypeFromConstructor(f, '%Array.prototype%'),
- Array.prototype,
- 'function with non-object `prototype` property (' + debug(truthyPrimitive) + ') returns default intrinsic'
- );
- });
-
- t.end();
- });
-
- test('GetSubstitution', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.GetSubstitution(nonString, '', 0, [], ''); },
- TypeError,
- '`matched`: ' + debug(nonString) + ' is not a String'
- );
-
- t['throws'](
- function () { ES.GetSubstitution('', nonString, 0, [], ''); },
- TypeError,
- '`str`: ' + debug(nonString) + ' is not a String'
- );
-
- t['throws'](
- function () { ES.GetSubstitution('', '', 0, [], nonString); },
- TypeError,
- '`replacement`: ' + debug(nonString) + ' is not a String'
- );
-
- if (canDistinguishSparseFromUndefined || typeof nonString !== 'undefined') {
- t['throws'](
- function () { ES.GetSubstitution('', '', 0, [nonString], ''); },
- TypeError,
- '`captures`: ' + debug([nonString]) + ' is not an Array of strings'
- );
- }
- });
-
- forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) {
- t['throws'](
- function () { ES.GetSubstitution('', '', nonNonNegativeInteger, [], ''); },
- TypeError,
- '`position`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer'
- );
- });
-
- forEach(v.nonArrays, function (nonArray) {
- t['throws'](
- function () { ES.GetSubstitution('', '', 0, nonArray, ''); },
- TypeError,
- '`captures`: ' + debug(nonArray) + ' is not an Array'
- );
- });
-
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 3, [], '123'),
- '123',
- 'returns the substitution'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '$$2$'),
- '$2$',
- 'supports $$, and trailing $'
- );
-
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$&<'),
- '>abcdef<',
- 'supports $&'
- );
-
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$`<'),
- '><',
- 'supports $` at position 0'
- );
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 3, [], '>$`<'),
- '>ab<',
- 'supports $` at position > 0'
- );
-
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 7, [], ">$'<"),
- '><',
- "supports $' at a position where there's less than `matched.length` chars left"
- );
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 3, [], ">$'<"),
- '>ghi<',
- "supports $' at a position where there's more than `matched.length` chars left"
- );
-
- for (var i = 0; i < 100; i += 1) {
- var captures = [];
- captures[i] = 'test';
- if (i > 0) {
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$' + i + '<'),
- '>undefined<',
- 'supports $' + i + ' with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$' + i),
- '>undefined',
- 'supports $' + i + ' at the end of the replacement, with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$' + i + '<'),
- '><',
- 'supports $' + i + ' with a capture at that index'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$' + i),
- '>',
- 'supports $' + i + ' at the end of the replacement, with a capture at that index'
- );
- }
- if (i < 10) {
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$0' + i + '<'),
- i === 0 ? '><' : '>undefined<',
- 'supports $0' + i + ' with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], '>$0' + i),
- i === 0 ? '>' : '>undefined',
- 'supports $0' + i + ' at the end of the replacement, with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$0' + i + '<'),
- '><',
- 'supports $0' + i + ' with a capture at that index'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, '>$0' + i),
- '>',
- 'supports $0' + i + ' at the end of the replacement, with a capture at that index'
- );
- }
- }
-
- t.end();
- });
-
- test('GetV', function (t) {
- t['throws'](function () { return ES.GetV({ 7: 7 }, 7); }, TypeError, 'Throws a TypeError if `P` is not a property key');
- var obj = { a: function () {} };
- t.equal(ES.GetV(obj, 'a'), obj.a, 'returns property if it exists');
- t.equal(ES.GetV(obj, 'b'), undefined, 'returns undefiend if property does not exist');
- t.end();
- });
-
- test('HasOwnProperty', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.HasOwnProperty(primitive, 'key'); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonKey) {
- t['throws'](
- function () { ES.HasOwnProperty({}, nonKey); },
- TypeError,
- debug(nonKey) + ' is not a Property Key'
- );
- });
-
- t.equal(ES.HasOwnProperty({}, 'toString'), false, 'inherited properties are not own');
- t.equal(
- ES.HasOwnProperty({ toString: 1 }, 'toString'),
- true,
- 'shadowed inherited own properties are own'
- );
- t.equal(ES.HasOwnProperty({ a: 1 }, 'a'), true, 'own properties are own');
-
- t.end();
- });
-
- test('HasProperty', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.HasProperty(primitive, 'key'); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonKey) {
- t['throws'](
- function () { ES.HasProperty({}, nonKey); },
- TypeError,
- debug(nonKey) + ' is not a Property Key'
- );
- });
-
- t.equal(ES.HasProperty({}, 'nope'), false, 'object does not have nonexistent properties');
- t.equal(ES.HasProperty({}, 'toString'), true, 'object has inherited properties');
- t.equal(
- ES.HasProperty({ toString: 1 }, 'toString'),
- true,
- 'object has shadowed inherited own properties'
- );
- t.equal(ES.HasProperty({ a: 1 }, 'a'), true, 'object has own properties');
-
- t.end();
- });
-
- test('InstanceofOperator', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.InstanceofOperator(primitive, function () {}); },
- TypeError,
- debug(primitive) + ' is not an object'
- );
- });
-
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- function () { ES.InstanceofOperator({}, nonFunction); },
- TypeError,
- debug(nonFunction) + ' is not callable'
- );
- });
-
- var C = function C() {};
- var D = function D() {};
-
- t.equal(ES.InstanceofOperator(new C(), C), true, 'constructor function has an instance of itself');
- t.equal(ES.InstanceofOperator(new D(), C), false, 'constructor/instance mismatch is false');
- t.equal(ES.InstanceofOperator(new C(), D), false, 'instance/constructor mismatch is false');
- t.equal(ES.InstanceofOperator({}, C), false, 'plain object is not an instance of a constructor');
- t.equal(ES.InstanceofOperator({}, Object), true, 'plain object is an instance of Object');
-
- t.test('Symbol.hasInstance', { skip: !v.hasSymbols || !Symbol.hasInstance }, function (st) {
- st.plan(5);
-
- var O = {};
- var C2 = function () {};
- st.equal(ES.InstanceofOperator(O, C2), false, 'O is not an instance of C2');
-
- defineProperty(C2, Symbol.hasInstance, {
- configurable: true,
- value: function (obj) {
- st.equal(this, C2, 'hasInstance receiver is C2');
- st.equal(obj, O, 'hasInstance argument is O');
-
- return {}; // testing coercion to boolean
- }
- });
-
- st.equal(ES.InstanceofOperator(O, C2), true, 'O is now an instance of C2');
-
- defineProperty(C2, Symbol.hasInstance, {
- configurable: true,
- value: undefined
- });
-
- st.equal(ES.InstanceofOperator(O, C2), false, 'O is no longer an instance of C2');
-
- st.end();
- });
-
- t.end();
- });
-
- test('Invoke', function (t) {
- forEach(v.nonPropertyKeys, function (nonKey) {
- t['throws'](
- function () { ES.Invoke({}, nonKey); },
- TypeError,
- debug(nonKey) + ' is not a Property Key'
- );
- });
-
- t['throws'](
- function () { ES.Invoke({ o: false }, 'o'); },
- TypeError,
- 'fails on a non-function'
- );
-
- forEach(v.nonArrays, function (nonArray) {
- t['throws'](
- function () { ES.Invoke({}, '', nonArray); },
- TypeError,
- debug(nonArray) + ' is not an Array'
- );
- });
-
- t.test('invoked callback', function (st) {
- var aValue = {};
- var bValue = {};
- var obj = {
- f: function (a) {
- st.equal(arguments.length, 2, '2 args passed');
- st.equal(a, aValue, 'first arg is correct');
- st.equal(arguments[1], bValue, 'second arg is correct');
- }
- };
- st.plan(3);
- ES.Invoke(obj, 'f', [aValue, bValue]);
- });
-
- t.end();
- });
-
- test('IsArray', function (t) {
- t.equal(true, ES.IsArray([]), '[] is array');
- t.equal(false, ES.IsArray({}), '{} is not array');
- t.equal(false, ES.IsArray({ length: 1, 0: true }), 'arraylike object is not array');
- forEach(v.objects.concat(v.primitives), function (value) {
- t.equal(false, ES.IsArray(value), debug(value) + ' is not array');
- });
- t.end();
- });
-
- test('IsConcatSpreadable', function (t) {
- forEach(v.primitives, function (primitive) {
- t.equal(ES.IsConcatSpreadable(primitive), false, debug(primitive) + ' is not an Object');
- });
-
- var hasSymbolConcatSpreadable = v.hasSymbols && Symbol.isConcatSpreadable;
- t.test('Symbol.isConcatSpreadable', { skip: !hasSymbolConcatSpreadable }, function (st) {
- forEach(v.falsies, function (falsy) {
- var obj = {};
- obj[Symbol.isConcatSpreadable] = falsy;
- st.equal(
- ES.IsConcatSpreadable(obj),
- false,
- 'an object with ' + debug(falsy) + ' as Symbol.isConcatSpreadable is not concat spreadable'
- );
- });
-
- forEach(v.truthies, function (truthy) {
- var obj = {};
- obj[Symbol.isConcatSpreadable] = truthy;
- st.equal(
- ES.IsConcatSpreadable(obj),
- true,
- 'an object with ' + debug(truthy) + ' as Symbol.isConcatSpreadable is concat spreadable'
- );
- });
-
- st.end();
- });
-
- forEach(v.objects, function (object) {
- t.equal(
- ES.IsConcatSpreadable(object),
- false,
- 'non-array without Symbol.isConcatSpreadable is not concat spreadable'
- );
- });
-
- t.equal(ES.IsConcatSpreadable([]), true, 'arrays are concat spreadable');
-
- t.end();
- });
-
- test('IsConstructor', function (t) {
- t.equal(true, ES.IsConstructor(function () {}), 'function is constructor');
- t.equal(false, ES.IsConstructor(/a/g), 'regex is not constructor');
- forEach(v.objects, function (object) {
- t.equal(false, ES.IsConstructor(object), object + ' object is not constructor');
- });
-
- try {
- var arrow = Function('return () => {}')(); // eslint-disable-line no-new-func
- t.equal(ES.IsConstructor(arrow), false, 'arrow function is not constructor');
- } catch (e) {
- t.comment('SKIP: arrow function syntax not supported.');
- }
-
- try {
- var foo = Function('return class Foo {}')(); // eslint-disable-line no-new-func
- t.equal(ES.IsConstructor(foo), true, 'class is constructor');
- } catch (e) {
- t.comment('SKIP: class syntax not supported.');
- }
-
- if (typeof Reflect !== 'object' || typeof Proxy !== 'function' || has(Proxy, 'prototype')) {
- t.comment('SKIP: Proxy is constructor');
- } else {
- t.equal(ES.IsConstructor(Proxy), true, 'Proxy is constructor');
- }
-
- t.end();
- });
-
- test('IsExtensible', function (t) {
- forEach(v.objects, function (object) {
- t.equal(true, ES.IsExtensible(object), debug(object) + ' object is extensible');
- });
- forEach(v.primitives, function (primitive) {
- t.equal(false, ES.IsExtensible(primitive), debug(primitive) + ' is not extensible');
- });
- if (Object.preventExtensions) {
- t.equal(false, ES.IsExtensible(Object.preventExtensions({})), 'object with extensions prevented is not extensible');
- }
- t.end();
- });
-
- test('IsPromise', { skip: typeof Promise !== 'function' }, function (t) {
- forEach(v.objects.concat(v.primitives), function (nonPromise) {
- t.equal(ES.IsPromise(nonPromise), false, debug(nonPromise) + ' is not a Promise');
- });
-
- var thenable = { then: Promise.prototype.then };
- t.equal(ES.IsPromise(thenable), false, 'generic thenable is not a Promise');
-
- t.equal(ES.IsPromise(Promise.resolve()), true, 'Promise is a Promise');
-
- t.end();
- });
-
- test('IsPropertyDescriptor', function (t) {
- forEach(v.primitives, function (primitive) {
- t.equal(
- ES.IsPropertyDescriptor(primitive),
- false,
- debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- t.equal(ES.IsPropertyDescriptor({ invalid: true }), false, 'invalid keys not allowed on a Property Descriptor');
-
- t.equal(ES.IsPropertyDescriptor({}), true, 'empty object is an incomplete Property Descriptor');
-
- t.equal(ES.IsPropertyDescriptor(v.accessorDescriptor()), true, 'accessor descriptor is a Property Descriptor');
- t.equal(ES.IsPropertyDescriptor(v.mutatorDescriptor()), true, 'mutator descriptor is a Property Descriptor');
- t.equal(ES.IsPropertyDescriptor(v.dataDescriptor()), true, 'data descriptor is a Property Descriptor');
- t.equal(ES.IsPropertyDescriptor(v.genericDescriptor()), true, 'generic descriptor is a Property Descriptor');
-
- t['throws'](
- function () { ES.IsPropertyDescriptor(v.bothDescriptor()); },
- TypeError,
- 'a Property Descriptor can not be both a Data and an Accessor Descriptor'
- );
-
- t['throws'](
- function () { ES.IsPropertyDescriptor(v.bothDescriptorWritable()); },
- TypeError,
- 'a Property Descriptor can not be both a Data and an Accessor Descriptor'
- );
-
- t.end();
- });
-
- test('IsPropertyKey', function (t) {
- forEach(v.numbers.concat(v.objects), function (notKey) {
- t.equal(false, ES.IsPropertyKey(notKey), debug(notKey) + ' is not property key');
- });
-
- t.equal(true, ES.IsPropertyKey('foo'), 'string is property key');
-
- forEach(v.symbols, function (symbol) {
- t.equal(true, ES.IsPropertyKey(symbol), debug(symbol) + ' is property key');
- });
- t.end();
- });
-
- test('IsRegExp', function (t) {
- forEach([/a/g, new RegExp('a', 'g')], function (regex) {
- t.equal(true, ES.IsRegExp(regex), regex + ' is regex');
- });
-
- forEach(v.objects.concat(v.primitives), function (nonRegex) {
- t.equal(false, ES.IsRegExp(nonRegex), debug(nonRegex) + ' is not regex');
- });
-
- t.test('Symbol.match', { skip: !v.hasSymbols || !Symbol.match }, function (st) {
- var obj = {};
- obj[Symbol.match] = true;
- st.equal(true, ES.IsRegExp(obj), 'object with truthy Symbol.match is regex');
-
- var regex = /a/;
- defineProperty(regex, Symbol.match, { value: false });
- st.equal(false, ES.IsRegExp(regex), 'regex with falsy Symbol.match is not regex');
-
- st.end();
- });
-
- t.end();
- });
-
- test('IsInteger', function (t) {
- for (var i = -100; i < 100; i += 10) {
- t.equal(true, ES.IsInteger(i), i + ' is integer');
- t.equal(false, ES.IsInteger(i + 0.2), (i + 0.2) + ' is not integer');
- }
- t.equal(true, ES.IsInteger(-0), '-0 is integer');
- var notInts = v.nonNumbers.concat(v.nonIntegerNumbers, v.infinities, [NaN, [], new Date()]);
- forEach(notInts, function (notInt) {
- t.equal(false, ES.IsInteger(notInt), debug(notInt) + ' is not integer');
- });
- t.equal(false, ES.IsInteger(v.uncoercibleObject), 'uncoercibleObject is not integer');
- t.end();
- });
-
- test('IteratorNext', function (t) {
- forEach(v.primitives, function (nonObject) {
- t['throws'](
- function () { ES.IteratorNext(nonObject); },
- TypeError,
- debug(nonObject) + ' is not an Object'
- );
-
- t['throws'](
- function () { ES.IteratorNext({ next: function () { return nonObject; } }); },
- TypeError,
- '`next()` returns ' + debug(nonObject) + ', which is not an Object'
- );
- });
-
- var iterator = {
- next: function (value) {
- return [arguments.length, value];
- }
- };
- t.deepEqual(
- ES.IteratorNext(iterator),
- [0, undefined],
- 'returns expected value from `.next()`; `next` receives expected 0 arguments'
- );
- t.deepEqual(
- ES.IteratorNext(iterator, iterator),
- [1, iterator],
- 'returns expected value from `.next()`; `next` receives expected 1 argument'
- );
-
- t.end();
- });
-
- test('IteratorComplete', function (t) {
- forEach(v.primitives, function (nonObject) {
- t['throws'](
- function () { ES.IteratorComplete(nonObject); },
- TypeError,
- debug(nonObject) + ' is not an Object'
- );
- });
-
- forEach(v.truthies, function (truthy) {
- t.equal(ES.IteratorComplete({ done: truthy }), true, '{ done: ' + debug(truthy) + ' } is true');
- });
-
- forEach(v.falsies, function (falsy) {
- t.equal(ES.IteratorComplete({ done: falsy }), false, '{ done: ' + debug(falsy) + ' } is false');
- });
-
- t.end();
- });
-
- test('IteratorValue', function (t) {
- forEach(v.primitives, function (nonObject) {
- t['throws'](
- function () { ES.IteratorValue(nonObject); },
- TypeError,
- debug(nonObject) + ' is not an Object'
- );
- });
-
- var sentinel = {};
- t.equal(ES.IteratorValue({ value: sentinel }), sentinel, 'Gets `.value` off the object');
-
- t.end();
- });
-
- test('IteratorStep', function (t) {
- t.deepEqual(
- ES.IteratorStep({
- next: function () {
- return {
- done: false,
- value: [1, arguments.length]
- };
- }
- }),
- { done: false, value: [1, 0] },
- 'not-done iterator result yields iterator result'
- );
- t.deepEqual(
- ES.IteratorStep({
- next: function () {
- return {
- done: true,
- value: [2, arguments.length]
- };
- }
- }),
- false,
- 'done iterator result yields false'
- );
-
- t.end();
- });
-
- test('IteratorClose', function (t) {
- forEach(v.primitives, function (nonObject) {
- t['throws'](
- function () { ES.IteratorClose(nonObject); },
- TypeError,
- debug(nonObject) + ' is not an Object'
- );
-
- t['throws'](
- function () { ES.IteratorClose({ 'return': function () { return nonObject; } }, function () {}); },
- TypeError,
- '`.return` returns ' + debug(nonObject) + ', which is not an Object'
- );
- });
-
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- function () { ES.IteratorClose({}, nonFunction); },
- TypeError,
- debug(nonFunction) + ' is not a thunk for a Completion Record'
- );
-
- if (nonFunction != null) {
- t['throws'](
- function () { ES.IteratorClose({ 'return': nonFunction }, function () {}); },
- TypeError,
- '`.return` of ' + debug(nonFunction) + ' is not a Function'
- );
- }
- });
-
- var sentinel = {};
- t.equal(
- ES.IteratorClose({ 'return': undefined }, function () { return sentinel; }),
- sentinel,
- 'when `.return` is `undefined`, invokes and returns the completion thunk'
- );
-
- /* eslint no-throw-literal: 0 */
- t['throws'](
- function () { ES.IteratorClose({ 'return': function () { throw sentinel; } }, function () {}); },
- sentinel,
- '`.return` that throws, when completionThunk does not, throws exception from `.return`'
- );
- t['throws'](
- function () { ES.IteratorClose({ 'return': function () { throw sentinel; } }, function () { throw -1; }); },
- -1,
- '`.return` that throws, when completionThunk does too, throws exception from completionThunk'
- );
- t['throws'](
- function () { ES.IteratorClose({ 'return': function () { } }, function () { throw -1; }); },
- -1,
- '`.return` that does not throw, when completionThunk does, throws exception from completionThunk'
- );
-
- t.equal(
- ES.IteratorClose({ 'return': function () { return sentinel; } }, function () { return 42; }),
- 42,
- 'when `.return` and completionThunk do not throw, and `.return` returns an Object, returns completionThunk'
- );
-
- t.end();
- });
-
- test('ObjectCreate', function (t) {
- forEach(v.nonNullPrimitives, function (value) {
- t['throws'](
- function () { ES.ObjectCreate(value); },
- TypeError,
- debug(value) + ' is not null, or an object'
- );
- });
-
- t.test('proto arg', function (st) {
- var Parent = function Parent() {};
- Parent.prototype.foo = {};
- var child = ES.ObjectCreate(Parent.prototype);
- st.equal(child instanceof Parent, true, 'child is instanceof Parent');
- st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype');
-
- st.end();
- });
-
- t.test('internal slots arg', function (st) {
- st.doesNotThrow(function () { ES.ObjectCreate({}, []); }, 'an empty slot list is valid');
-
- st['throws'](
- function () { ES.ObjectCreate({}, ['a']); },
- SyntaxError,
- 'internal slots are not supported'
- );
-
- st.end();
- });
-
- t.test('null proto', { skip: !Object.create && !$setProto }, function (st) {
- st.equal('toString' in {}, true, 'normal objects have toString');
- st.equal('toString' in ES.ObjectCreate(null), false, 'makes a null object');
-
- st.end();
- });
-
- t.test('null proto when no native Object.create', { skip: Object.create || $setProto }, function (st) {
- st['throws'](
- function () { ES.ObjectCreate(null); },
- SyntaxError,
- 'without a native Object.create, can not create null objects'
- );
-
- st.end();
- });
-
- t.end();
- });
-
- test('OrdinaryCreateFromConstructor', function (t) {
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- function () { ES.OrdinaryCreateFromConstructor(nonFunction, '%Array.prototype%'); },
- TypeError,
- debug(nonFunction) + ' is not a constructor'
- );
- });
-
- forEach(arrowFns, function (arrowFn) {
- t['throws'](
- function () { ES.OrdinaryCreateFromConstructor(arrowFn, '%Array.prototype%'); },
- TypeError,
- debug(arrowFn) + ' is not a constructor'
- );
- });
-
- t.test('proto arg', function (st) {
- var Parent = function Parent() {};
- Parent.prototype.foo = {};
- var child = ES.OrdinaryCreateFromConstructor(Parent, '%Array.prototype%');
- st.equal(child instanceof Parent, true, 'child is instanceof Parent');
- st.equal(child instanceof Array, false, 'child is not instanceof Array');
- st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype');
-
- st.end();
- });
-
- t.test('internal slots arg', function (st) {
- st.doesNotThrow(
- function () { ES.OrdinaryCreateFromConstructor(function () {}, '%Array.prototype%', []); },
- 'an empty slot list is valid'
- );
-
- st['throws'](
- function () { ES.OrdinaryCreateFromConstructor(function () {}, '%Array.prototype%', ['a']); },
- SyntaxError,
- 'internal slots are not supported'
- );
-
- st.end();
- });
-
- t.end();
- });
-
- test('OrdinaryGetOwnProperty', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.OrdinaryGetOwnProperty(primitive, ''); },
- TypeError,
- 'O: ' + debug(primitive) + ' is not an Object'
- );
- });
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.OrdinaryGetOwnProperty({}, nonPropertyKey); },
- TypeError,
- 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- t.equal(ES.OrdinaryGetOwnProperty({}, 'not in the object'), undefined, 'missing property yields undefined');
- t.equal(ES.OrdinaryGetOwnProperty({}, 'toString'), undefined, 'inherited non-own property yields undefined');
-
- t.deepEqual(
- ES.OrdinaryGetOwnProperty({ a: 1 }, 'a'),
- ES.ToPropertyDescriptor({
- configurable: true,
- enumerable: true,
- value: 1,
- writable: true
- }),
- 'own assigned data property yields expected descriptor'
- );
-
- t.deepEqual(
- ES.OrdinaryGetOwnProperty(/a/, 'lastIndex'),
- ES.ToPropertyDescriptor({
- configurable: false,
- enumerable: false,
- value: 0,
- writable: true
- }),
- 'regex lastIndex yields expected descriptor'
- );
-
- t.deepEqual(
- ES.OrdinaryGetOwnProperty([], 'length'),
- ES.ToPropertyDescriptor({
- configurable: false,
- enumerable: false,
- value: 0,
- writable: true
- }),
- 'array length yields expected descriptor'
- );
-
- if (!Object.isFrozen || !Object.isFrozen(Object.prototype)) {
- t.deepEqual(
- ES.OrdinaryGetOwnProperty(Object.prototype, 'toString'),
- ES.ToPropertyDescriptor({
- configurable: true,
- enumerable: false,
- value: Object.prototype.toString,
- writable: true
- }),
- 'own non-enumerable data property yields expected descriptor'
- );
- }
-
- t.test('ES5+', { skip: !defineProperty.oDP }, function (st) {
- var O = {};
- defineProperty(O, 'foo', {
- configurable: false,
- enumerable: false,
- value: O,
- writable: true
- });
-
- st.deepEqual(
- ES.OrdinaryGetOwnProperty(O, 'foo'),
- ES.ToPropertyDescriptor({
- configurable: false,
- enumerable: false,
- value: O,
- writable: true
- }),
- 'defined own property yields expected descriptor'
- );
-
- st.end();
- });
-
- t.end();
- });
-
- test('OrdinaryDefineOwnProperty', { skip: !getOwnPropertyDescriptor }, function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.OrdinaryDefineOwnProperty(primitive, {}, []); },
- TypeError,
- 'O: ' + debug(primitive) + ' is not an Object'
- );
- });
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.OrdinaryDefineOwnProperty({}, nonPropertyKey, v.genericDescriptor()); },
- TypeError,
- 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.OrdinaryDefineOwnProperty(primitive, '', v.genericDescriptor()); },
- TypeError,
- 'Desc: ' + debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- var O = {};
- var P = 'property key';
- var Desc = v.accessorDescriptor();
- t.equal(
- ES.OrdinaryDefineOwnProperty(O, P, Desc),
- true,
- 'operation is successful'
- );
- t.deepEqual(
- getOwnPropertyDescriptor(O, P),
- ES.FromPropertyDescriptor(ES.CompletePropertyDescriptor(Desc)),
- 'expected property descriptor is defined'
- );
-
- t.end();
- });
-
- test('OrdinaryHasInstance', function (t) {
- forEach(v.nonFunctions, function (nonFunction) {
- t.equal(ES.OrdinaryHasInstance(nonFunction, {}), false, debug(nonFunction) + ' is not callable');
- });
-
- forEach(v.primitives, function (primitive) {
- t.equal(ES.OrdinaryHasInstance(function () {}, primitive), false, debug(primitive) + ' is not an object');
- });
-
- var C = function C() {};
- var D = function D() {};
- t.equal(ES.OrdinaryHasInstance(C, new C()), true, 'constructor function has an instance of itself');
- t.equal(ES.OrdinaryHasInstance(C, new D()), false, 'constructor/instance mismatch is false');
- t.equal(ES.OrdinaryHasInstance(D, new C()), false, 'instance/constructor mismatch is false');
- t.equal(ES.OrdinaryHasInstance(C, {}), false, 'plain object is not an instance of a constructor');
- t.equal(ES.OrdinaryHasInstance(Object, {}), true, 'plain object is an instance of Object');
-
- t.end();
- });
-
- test('OrdinaryHasProperty', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.OrdinaryHasProperty(primitive, ''); },
- TypeError,
- debug(primitive) + ' is not an object'
- );
- });
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.OrdinaryHasProperty({}, nonPropertyKey); },
- TypeError,
- 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- t.equal(ES.OrdinaryHasProperty({ a: 1 }, 'a'), true, 'own property is true');
- t.equal(ES.OrdinaryHasProperty({}, 'toString'), true, 'inherited property is true');
- t.equal(ES.OrdinaryHasProperty({}, 'nope'), false, 'absent property is false');
-
- t.end();
- });
-
- test('QuoteJSONString', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.QuoteJSONString(nonString); },
- TypeError,
- debug(nonString) + ' is not a String'
- );
- });
-
- t.equal(ES.QuoteJSONString(''), '""', '"" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('a'), '"a"', '"a" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('"'), '"\\""', '"\\"" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\b'), '"\\b"', '"\\b" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\t'), '"\\t"', '"\\t" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\n'), '"\\n"', '"\\n" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\f'), '"\\f"', '"\\f" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\r'), '"\\r"', '"\\r" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\\'), '"\\\\"', '"\\\\" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\\'), '"\\\\"', '"\\\\" gets properly JSON-quoted');
- t.equal(ES.QuoteJSONString('\u0019'), '"\\u0019"', '"\\u0019" gets properly JSON-quoted');
-
- t.end();
- });
-
- test('RegExpCreate', function (t) {
- forEach(v.nonStrings, function (nonString) {
- if (typeof nonString !== 'symbol') {
- var p = typeof nonString === 'undefined' ? '' : nonString;
- t.equal(
- String(ES.RegExpCreate(p, 'g')),
- '/' + (String(p) || '(?:)') + '/g',
- debug(nonString) + ' becomes `/' + String(p) + '/g`'
- );
- }
- });
-
- t.deepEqual(ES.RegExpCreate(), new RegExp(), 'undefined pattern and flags yields empty regex');
-
- t.end();
- });
-
- test('RegExpExec', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.RegExpExec(primitive); },
- TypeError,
- '"R" argument must be an object; ' + debug(primitive) + ' is not'
- );
- });
-
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.RegExpExec({}, nonString); },
- TypeError,
- '"S" argument must be a String; ' + debug(nonString) + ' is not'
- );
- });
-
- t.test('gets and calls a callable "exec"', function (st) {
- var str = '123';
- var o = {
- exec: function (S) {
- st.equal(this, o, '"exec" receiver is R');
- st.equal(S, str, '"exec" argument is S');
-
- return null;
- }
- };
- st.plan(2);
- ES.RegExpExec(o, str);
- st.end();
- });
-
- t.test('throws if a callable "exec" returns a non-null non-object', function (st) {
- var str = '123';
- st.plan(v.nonNullPrimitives.length);
- forEach(v.nonNullPrimitives, function (nonNullPrimitive) {
- st['throws'](
- function () { ES.RegExpExec({ exec: function () { return nonNullPrimitive; } }, str); },
- TypeError,
- '"exec" method must return `null` or an Object; ' + debug(nonNullPrimitive) + ' is not'
- );
- });
- st.end();
- });
-
- t.test('actual regex that should match against a string', function (st) {
- var S = 'aabc';
- var R = /a/g;
- var match1 = ES.RegExpExec(R, S);
- var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S }));
- var match2 = ES.RegExpExec(R, S);
- var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S }));
- var match3 = ES.RegExpExec(R, S);
- st.deepEqual(match1, expected1, 'match object 1 is as expected');
- st.deepEqual(match2, expected2, 'match object 2 is as expected');
- st.equal(match3, null, 'match 3 is null as expected');
- st.end();
- });
-
- t.test('actual regex that should match against a string, with shadowed "exec"', function (st) {
- var S = 'aabc';
- var R = /a/g;
- defineProperty(R, 'exec', { value: undefined });
- var match1 = ES.RegExpExec(R, S);
- var expected1 = assign(['a'], kludgeMatch(R, { index: 0, input: S }));
- var match2 = ES.RegExpExec(R, S);
- var expected2 = assign(['a'], kludgeMatch(R, { index: 1, input: S }));
- var match3 = ES.RegExpExec(R, S);
- st.deepEqual(match1, expected1, 'match object 1 is as expected');
- st.deepEqual(match2, expected2, 'match object 2 is as expected');
- st.equal(match3, null, 'match 3 is null as expected');
- st.end();
- });
- t.end();
- });
-
- test('RequireObjectCoercible', function (t) {
- t.equal(false, 'CheckObjectCoercible' in ES, 'CheckObjectCoercible -> RequireObjectCoercible in ES6');
- t['throws'](function () { return ES.RequireObjectCoercible(undefined); }, TypeError, 'undefined throws');
- t['throws'](function () { return ES.RequireObjectCoercible(null); }, TypeError, 'null throws');
- var isCoercible = function (value) {
- t.doesNotThrow(function () { return ES.RequireObjectCoercible(value); }, debug(value) + ' does not throw');
- };
- forEach(v.objects.concat(v.nonNullPrimitives), isCoercible);
- t.end();
- });
-
- test('SameValueZero', function (t) {
- t.equal(true, ES.SameValueZero(NaN, NaN), 'NaN is SameValueZero as NaN');
- t.equal(true, ES.SameValueZero(0, -0), '+0 is SameValueZero as -0');
- forEach(v.objects.concat(v.primitives), function (val) {
- t.equal(val === val, ES.SameValueZero(val, val), debug(val) + ' is SameValueZero to itself');
- });
- t.end();
- });
-
- test('Set', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.Set(primitive, '', null, false); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonKey) {
- t['throws'](
- function () { ES.Set({}, nonKey, null, false); },
- TypeError,
- debug(nonKey) + ' is not a Property Key'
- );
- });
-
- forEach(v.nonBooleans, function (nonBoolean) {
- t['throws'](
- function () { ES.Set({}, '', null, nonBoolean); },
- TypeError,
- debug(nonBoolean) + ' is not a Boolean'
- );
- });
-
- var o = {};
- var value = {};
- ES.Set(o, 'key', value, true);
- t.deepEqual(o, { key: value }, 'key is set');
-
- t.test('nonwritable', { skip: !defineProperty.oDP }, function (st) {
- var obj = { a: value };
- defineProperty(obj, 'a', { writable: false });
-
- st['throws'](
- function () { ES.Set(obj, 'a', {}, true); },
- TypeError,
- 'can not Set nonwritable property'
- );
-
- st.doesNotThrow(
- function () {
- st.equal(ES.Set(obj, 'a', {}, false), false, 'unsuccessful Set returns false');
- },
- 'setting Throw to false prevents an exception'
- );
-
- st.end();
- });
-
- t.test('nonconfigurable', { skip: !defineProperty.oDP }, function (st) {
- var obj = { a: value };
- defineProperty(obj, 'a', { configurable: false });
-
- st.equal(ES.Set(obj, 'a', value, true), true, 'successful Set returns true');
- st.deepEqual(obj, { a: value }, 'key is set');
-
- st.end();
- });
-
- t.test('doesn’t call [[Get]] in conforming strict mode environments', { skip: noThrowOnStrictViolation }, function (st) {
- var getterCalled = false;
- var setterCalls = 0;
- var obj = {};
- defineProperty(obj, 'a', {
- get: function () {
- getterCalled = true;
- },
- set: function () {
- setterCalls += 1;
- }
- });
-
- st.equal(ES.Set(obj, 'a', value, false), true, 'successful Set returns true');
- st.equal(setterCalls, 1, 'setter was called once');
- st.equal(getterCalled, false, 'getter was not called');
-
- st.end();
- });
-
- t.end();
- });
-
- test('SetFunctionName', function (t) {
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- function () { ES.SetFunctionName(nonFunction, ''); },
- TypeError,
- debug(nonFunction) + ' is not a Function'
- );
- });
-
- t.test('non-extensible function', { skip: !Object.preventExtensions }, function (st) {
- var f = getNamelessFunction();
- Object.preventExtensions(f);
- st['throws'](
- function () { ES.SetFunctionName(f, ''); },
- TypeError,
- 'throws on a non-extensible function'
- );
- st.end();
- });
-
- t.test('has an own name property', { skip: !functionsHaveNames }, function (st) {
- st['throws'](
- function () { ES.SetFunctionName(function g() {}, ''); },
- TypeError,
- 'throws if function has an own `name` property'
- );
- st.end();
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.SetFunctionName(getNamelessFunction(), nonPropertyKey); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Symbol or String'
- );
- });
-
- t.test('symbols', { skip: !v.hasSymbols || has(getNamelessFunction(), 'name') }, function (st) {
- var pairs = [
- [Symbol(), ''],
- [Symbol(undefined), ''],
- [Symbol(null), '[null]'],
- [Symbol(''), getInferredName ? '[]' : ''],
- [Symbol.iterator, '[Symbol.iterator]'],
- [Symbol('foo'), '[foo]']
- ];
- forEach(pairs, function (pair) {
- var sym = pair[0];
- var desc = pair[1];
- var f = getNamelessFunction();
- ES.SetFunctionName(f, sym);
- st.equal(f.name, desc, debug(sym) + ' yields a name of ' + debug(desc));
- });
-
- st.end();
- });
-
- var f = getNamelessFunction();
- t.test('when names are configurable', { skip: !functionsHaveConfigurableNames || has(f, 'name') }, function (st) {
- // without prefix
- st.notEqual(f.name, 'foo', 'precondition');
- ES.SetFunctionName(f, 'foo');
- st.equal(f.name, 'foo', 'function name is set without a prefix');
-
- // with prefix
- var g = getNamelessFunction();
- st.notEqual(g.name, 'pre- foo', 'precondition');
- ES.SetFunctionName(g, 'foo', 'pre-');
- st.equal(g.name, 'pre- foo', 'function name is set with a prefix');
-
- st.end();
- });
-
- t.end();
- });
-
- test('SetIntegrityLevel', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.SetIntegrityLevel(primitive); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
-
- t['throws'](
- function () { ES.SetIntegrityLevel({}); },
- /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/,
- '`level` must be `"sealed"` or `"frozen"`'
- );
-
- var O = { a: 1 };
- t.test('sealed', { skip: !Object.preventExtensions || noThrowOnStrictViolation }, function (st) {
- st.equal(ES.SetIntegrityLevel(O, 'sealed'), true);
- st['throws'](
- function () { O.b = 2; },
- /^TypeError: (Cannot|Can't) add property b, object is not extensible$/,
- 'sealing prevent new properties from being added'
- );
- O.a = 2;
- st.equal(O.a, 2, 'pre-frozen, existing properties are mutable');
- st.end();
- });
-
- t.test('frozen', { skip: !Object.freeze || noThrowOnStrictViolation }, function (st) {
- st.equal(ES.SetIntegrityLevel(O, 'frozen'), true);
- st['throws'](
- function () { O.a = 3; },
- /^TypeError: Cannot assign to read only property 'a' of /,
- 'freezing prevents existing properties from being mutated'
- );
- st.end();
- });
-
- t.end();
- });
-
- test('SpeciesConstructor', function (t) {
- t['throws'](function () { ES.SpeciesConstructor(null); }, TypeError);
- t['throws'](function () { ES.SpeciesConstructor(undefined); }, TypeError);
-
- var defaultConstructor = function Foo() {};
-
- t.equal(
- ES.SpeciesConstructor({ constructor: undefined }, defaultConstructor),
- defaultConstructor,
- 'undefined constructor returns defaultConstructor'
- );
-
- t['throws'](
- function () { return ES.SpeciesConstructor({ constructor: null }, defaultConstructor); },
- TypeError,
- 'non-undefined non-object constructor throws'
- );
-
- t.test('with Symbol.species', { skip: !hasSpecies }, function (st) {
- var Bar = function Bar() {};
- Bar[Symbol.species] = null;
-
- st.equal(
- ES.SpeciesConstructor(new Bar(), defaultConstructor),
- defaultConstructor,
- 'undefined/null Symbol.species returns default constructor'
- );
-
- var Baz = function Baz() {};
- Baz[Symbol.species] = Bar;
- st.equal(
- ES.SpeciesConstructor(new Baz(), defaultConstructor),
- Bar,
- 'returns Symbol.species constructor value'
- );
-
- Baz[Symbol.species] = {};
- st['throws'](
- function () { ES.SpeciesConstructor(new Baz(), defaultConstructor); },
- TypeError,
- 'throws when non-constructor non-null non-undefined species value found'
- );
-
- st.end();
- });
-
- t.end();
- });
-
- test('SplitMatch', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.SplitMatch(nonString, 0, ''); },
- TypeError,
- 'S: ' + debug(nonString) + ' is not a String'
- );
- t['throws'](
- function () { ES.SplitMatch('', 0, nonString); },
- TypeError,
- 'R: ' + debug(nonString) + ' is not a String'
- );
- });
-
- forEach(v.nonNumbers.concat(v.nonIntegerNumbers), function (nonIntegerNumber) {
- t['throws'](
- function () { ES.SplitMatch('', nonIntegerNumber, ''); },
- TypeError,
- 'q: ' + debug(nonIntegerNumber) + ' is not an integer'
- );
- });
-
- t.equal(ES.SplitMatch('abc', 0, 'a'), 1, '"a" is found at index 0, before index 1, in "abc"');
- t.equal(ES.SplitMatch('abc', 1, 'a'), false, '"a" is not found at index 1 in "abc"');
- t.equal(ES.SplitMatch('abc', 2, 'a'), false, '"a" is not found at index 2 in "abc"');
-
- t.equal(ES.SplitMatch('abc', 0, 'b'), false, '"a" is not found at index 0 in "abc"');
- t.equal(ES.SplitMatch('abc', 1, 'b'), 2, '"b" is found at index 1, before index 2, in "abc"');
- t.equal(ES.SplitMatch('abc', 2, 'b'), false, '"a" is not found at index 2 in "abc"');
-
- t.equal(ES.SplitMatch('abc', 0, 'c'), false, '"a" is not found at index 0 in "abc"');
- t.equal(ES.SplitMatch('abc', 1, 'c'), false, '"a" is not found at index 1 in "abc"');
- t.equal(ES.SplitMatch('abc', 2, 'c'), 3, '"c" is found at index 2, before index 3, in "abc"');
-
- t.equal(ES.SplitMatch('a', 0, 'ab'), false, 'R longer than S yields false');
-
- var s = 'a' + wholePoo + 'c';
- t.equal(ES.SplitMatch(s, 1, wholePoo), 3, debug(wholePoo) + ' is found at index 1, before index 3, in ' + debug(s));
-
- t.end();
- });
-
- test('StringCreate', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.StringCreate(nonString); },
- TypeError,
- debug(nonString) + ' is not a String'
- );
- });
-
- t.deepEqual(ES.StringCreate('foo', String.prototype), Object('foo'), '"foo" with `String.prototype` makes `Object("foo")');
-
- if ($setProto) {
- var proto = {};
- t.equal($getProto(ES.StringCreate('', proto)), proto, '[[Prototype]] is set as expected');
- } else {
- t['throws'](
- function () { ES.StringCreate('', proto); },
- SyntaxError,
- 'setting [[Prototype]] is not supported in this env'
- );
- }
-
- t.equal(ES.StringCreate('a', String.prototype).length, 'a'.length, 'length is preserved');
-
- t.end();
- });
-
- test('StringGetIndexProperty', function (t) {
- forEach(v.nonStrings.concat(v.strings), function (nonStringObjects) {
- t['throws'](
- function () { ES.StringGetIndexProperty(nonStringObjects); },
- TypeError,
- debug(nonStringObjects) + ' is not a boxed String Object'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.StringGetIndexProperty('', nonPropertyKey); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- forEach(v.symbols, function (symbol) {
- t.equal(
- ES.StringGetIndexProperty(Object('a'), symbol),
- undefined,
- debug(symbol) + ' is a Property Key, but not a String'
- );
- });
-
- // a string where CanonicalNumericIndexString returns undefined, a non-integer, or -0
- forEach(['-1', '-0', 'undefined'].concat(v.nonIntegerNumbers), function (nonIndex) {
- var S = Object('abc');
- t.equal(
- ES.StringGetIndexProperty(S, String(nonIndex)),
- undefined,
- debug(nonIndex) + ' is not an index inside ' + debug(S)
- );
- });
-
- forEach(v.strings, function (str) {
- var S = Object(str);
- for (var i = 0; i < str.length; i += 1) {
- var desc = {
- '[[Configurable]]': false,
- '[[Enumerable]]': true,
- '[[Value]]': str.charAt(i),
- '[[Writable]]': false
- };
- t.deepEqual(
- ES.StringGetIndexProperty(S, String(i)),
- desc,
- 'boxed String ' + debug(S) + ' at index ' + debug(i) + ' is ' + debug(desc)
- );
- }
- t.equal(
- ES.StringGetIndexProperty(S, String(str.length)),
- undefined,
- 'boxed String ' + debug(S) + ' at OOB index ' + debug(str.length) + ' is `undefined'
- );
- });
-
- t.end();
- });
-
- test('SymbolDescriptiveString', function (t) {
- forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) {
- t['throws'](
- function () { ES.SymbolDescriptiveString(nonSymbol); },
- TypeError,
- debug(nonSymbol) + ' is not a Symbol'
- );
- });
-
- t.test('Symbols', { skip: !v.hasSymbols }, function (st) {
- st.equal(ES.SymbolDescriptiveString(Symbol()), 'Symbol()', 'undefined description');
- st.equal(ES.SymbolDescriptiveString(Symbol('')), 'Symbol()', 'empty string description');
- st.equal(ES.SymbolDescriptiveString(Symbol.iterator), 'Symbol(Symbol.iterator)', 'well-known symbol');
- st.equal(ES.SymbolDescriptiveString(Symbol('foo')), 'Symbol(foo)', 'string description');
-
- st.end();
- });
-
- t.end();
- });
-
- test('TestIntegrityLevel', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.TestIntegrityLevel(primitive); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
-
- t['throws'](
- function () { ES.TestIntegrityLevel({ a: 1 }); },
- /^TypeError: Assertion failed: `level` must be `"sealed"` or `"frozen"`$/,
- '`level` must be `"sealed"` or `"frozen"`'
- );
-
- t.equal(ES.TestIntegrityLevel({ a: 1 }, 'sealed'), false, 'basic object is not sealed');
- t.equal(ES.TestIntegrityLevel({ a: 1 }, 'frozen'), false, 'basic object is not frozen');
-
- t.test('preventExtensions', { skip: !Object.preventExtensions }, function (st) {
- var o = Object.preventExtensions({ a: 1 });
- st.equal(ES.TestIntegrityLevel(o, 'sealed'), false, 'nonextensible object is not sealed');
- st.equal(ES.TestIntegrityLevel(o, 'frozen'), false, 'nonextensible object is not frozen');
-
- var empty = Object.preventExtensions({});
- st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty nonextensible object is sealed');
- st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty nonextensible object is frozen');
- st.end();
- });
-
- t.test('seal', { skip: !Object.seal }, function (st) {
- var o = Object.seal({ a: 1 });
- st.equal(ES.TestIntegrityLevel(o, 'sealed'), true, 'sealed object is sealed');
- st.equal(ES.TestIntegrityLevel(o, 'frozen'), false, 'sealed object is not frozen');
-
- var empty = Object.seal({});
- st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty sealed object is sealed');
- st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty sealed object is frozen');
-
- st.end();
- });
-
- t.test('freeze', { skip: !Object.freeze }, function (st) {
- var o = Object.freeze({ a: 1 });
- st.equal(ES.TestIntegrityLevel(o, 'sealed'), true, 'frozen object is sealed');
- st.equal(ES.TestIntegrityLevel(o, 'frozen'), true, 'frozen object is frozen');
-
- var empty = Object.freeze({});
- st.equal(ES.TestIntegrityLevel(empty, 'sealed'), true, 'empty frozen object is sealed');
- st.equal(ES.TestIntegrityLevel(empty, 'frozen'), true, 'empty frozen object is frozen');
-
- st.end();
- });
-
- t.end();
- });
-
- test('thisNumberValue', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.thisNumberValue(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach(v.numbers, function (number) {
- t.equal(ES.thisNumberValue(number), number, debug(number) + ' is its own thisNumberValue');
- var obj = Object(number);
- t.equal(ES.thisNumberValue(obj), number, debug(obj) + ' is the boxed thisNumberValue');
- });
-
- t.end();
- });
-
- test('thisBooleanValue', function (t) {
- forEach(v.nonBooleans, function (nonBoolean) {
- t['throws'](
- function () { ES.thisBooleanValue(nonBoolean); },
- TypeError,
- debug(nonBoolean) + ' is not a Boolean'
- );
- });
-
- forEach(v.booleans, function (boolean) {
- t.equal(ES.thisBooleanValue(boolean), boolean, debug(boolean) + ' is its own thisBooleanValue');
- var obj = Object(boolean);
- t.equal(ES.thisBooleanValue(obj), boolean, debug(obj) + ' is the boxed thisBooleanValue');
- });
-
- t.end();
- });
-
- test('thisStringValue', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.thisStringValue(nonString); },
- TypeError,
- debug(nonString) + ' is not a String'
- );
- });
-
- forEach(v.strings, function (string) {
- t.equal(ES.thisStringValue(string), string, debug(string) + ' is its own thisStringValue');
- var obj = Object(string);
- t.equal(ES.thisStringValue(obj), string, debug(obj) + ' is the boxed thisStringValue');
- });
-
- t.end();
- });
-
- test('thisTimeValue', function (t) {
- forEach(v.primitives.concat(v.objects), function (nonDate) {
- t['throws'](
- function () { ES.thisTimeValue(nonDate); },
- TypeError,
- debug(nonDate) + ' is not a Date'
- );
- });
-
- forEach(v.timestamps, function (timestamp) {
- var date = new Date(timestamp);
-
- t.equal(ES.thisTimeValue(date), timestamp, debug(date) + ' is its own thisTimeValue');
- });
-
- t.end();
- });
-
- test('ToDateString', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.ToDateString(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.ToDateString(NaN), 'Invalid Date', 'NaN becomes "Invalid Date"');
- var now = +new Date();
- t.equal(ES.ToDateString(now), Date(now), 'any timestamp becomes `Date(timestamp)`');
- t.end();
- });
-
- test('ToInt16', function (t) {
- t.equal(0, ES.ToInt16(NaN), 'NaN coerces to +0');
- forEach([0, Infinity], function (num) {
- t.equal(0, ES.ToInt16(num), num + ' returns +0');
- t.equal(0, ES.ToInt16(-num), '-' + num + ' returns +0');
- });
- t['throws'](function () { return ES.ToInt16(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.equal(ES.ToInt16(0x100000000), 0, '2^32 returns +0');
- t.equal(ES.ToInt16(0x100000000 - 1), -1, '2^32 - 1 returns -1');
- t.equal(ES.ToInt16(0x80000000), 0, '2^31 returns +0');
- t.equal(ES.ToInt16(0x80000000 - 1), -1, '2^31 - 1 returns -1');
- t.equal(ES.ToInt16(0x10000), 0, '2^16 returns +0');
- t.equal(ES.ToInt16(0x10000 - 1), -1, '2^16 - 1 returns -1');
- t.end();
- });
-
- test('ToInt8', function (t) {
- t.equal(0, ES.ToInt8(NaN), 'NaN coerces to +0');
- forEach([0, Infinity], function (num) {
- t.equal(0, ES.ToInt8(num), num + ' returns +0');
- t.equal(0, ES.ToInt8(-num), '-' + num + ' returns +0');
- });
- t['throws'](function () { return ES.ToInt8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.equal(ES.ToInt8(0x100000000), 0, '2^32 returns +0');
- t.equal(ES.ToInt8(0x100000000 - 1), -1, '2^32 - 1 returns -1');
- t.equal(ES.ToInt8(0x80000000), 0, '2^31 returns +0');
- t.equal(ES.ToInt8(0x80000000 - 1), -1, '2^31 - 1 returns -1');
- t.equal(ES.ToInt8(0x10000), 0, '2^16 returns +0');
- t.equal(ES.ToInt8(0x10000 - 1), -1, '2^16 - 1 returns -1');
- t.equal(ES.ToInt8(0x100), 0, '2^8 returns +0');
- t.equal(ES.ToInt8(0x100 - 1), -1, '2^8 - 1 returns -1');
- t.equal(ES.ToInt8(0x10), 0x10, '2^4 returns 2^4');
- t.end();
- });
-
- test('ToNumber', function (t) {
- testToNumber(t, ES, ES.ToNumber);
-
- t.end();
- });
-
- test('ToUint8', function (t) {
- t.equal(0, ES.ToUint8(NaN), 'NaN coerces to +0');
- forEach([0, Infinity], function (num) {
- t.equal(0, ES.ToUint8(num), num + ' returns +0');
- t.equal(0, ES.ToUint8(-num), '-' + num + ' returns +0');
- });
- t['throws'](function () { return ES.ToUint8(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.equal(ES.ToUint8(0x100000000), 0, '2^32 returns +0');
- t.equal(ES.ToUint8(0x100000000 - 1), 0x100 - 1, '2^32 - 1 returns 2^8 - 1');
- t.equal(ES.ToUint8(0x80000000), 0, '2^31 returns +0');
- t.equal(ES.ToUint8(0x80000000 - 1), 0x100 - 1, '2^31 - 1 returns 2^8 - 1');
- t.equal(ES.ToUint8(0x10000), 0, '2^16 returns +0');
- t.equal(ES.ToUint8(0x10000 - 1), 0x100 - 1, '2^16 - 1 returns 2^8 - 1');
- t.equal(ES.ToUint8(0x100), 0, '2^8 returns +0');
- t.equal(ES.ToUint8(0x100 - 1), 0x100 - 1, '2^8 - 1 returns 2^16 - 1');
- t.equal(ES.ToUint8(0x10), 0x10, '2^4 returns 2^4');
- t.equal(ES.ToUint8(0x10 - 1), 0x10 - 1, '2^4 - 1 returns 2^4 - 1');
- t.end();
- });
-
- test('ToUint8Clamp', function (t) {
- t.equal(0, ES.ToUint8Clamp(NaN), 'NaN coerces to +0');
- t.equal(0, ES.ToUint8Clamp(0), '+0 returns +0');
- t.equal(0, ES.ToUint8Clamp(-0), '-0 returns +0');
- t.equal(0, ES.ToUint8Clamp(-Infinity), '-Infinity returns +0');
- t['throws'](function () { return ES.ToUint8Clamp(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- forEach([255, 256, 0x100000, Infinity], function (number) {
- t.equal(255, ES.ToUint8Clamp(number), number + ' coerces to 255');
- });
- t.equal(1, ES.ToUint8Clamp(1.49), '1.49 coerces to 1');
- t.equal(2, ES.ToUint8Clamp(1.5), '1.5 coerces to 2, because 2 is even');
- t.equal(2, ES.ToUint8Clamp(1.51), '1.51 coerces to 2');
-
- t.equal(2, ES.ToUint8Clamp(2.49), '2.49 coerces to 2');
- t.equal(2, ES.ToUint8Clamp(2.5), '2.5 coerces to 2, because 2 is even');
- t.equal(3, ES.ToUint8Clamp(2.51), '2.51 coerces to 3');
- t.end();
- });
-
- test('ToLength', function (t) {
- t['throws'](function () { return ES.ToLength(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws a TypeError');
- t.equal(3, ES.ToLength(v.coercibleObject), 'coercibleObject coerces to 3');
- t.equal(42, ES.ToLength('42.5'), '"42.5" coerces to 42');
- t.equal(7, ES.ToLength(7.3), '7.3 coerces to 7');
- forEach([-0, -1, -42, -Infinity], function (negative) {
- t.equal(0, ES.ToLength(negative), negative + ' coerces to +0');
- });
- t.equal(MAX_SAFE_INTEGER, ES.ToLength(MAX_SAFE_INTEGER + 1), '2^53 coerces to 2^53 - 1');
- t.equal(MAX_SAFE_INTEGER, ES.ToLength(MAX_SAFE_INTEGER + 3), '2^53 + 2 coerces to 2^53 - 1');
- t.end();
- });
-
- test('ToPropertyKey', function (t) {
- forEach(v.objects.concat(v.nonSymbolPrimitives), function (value) {
- t.equal(ES.ToPropertyKey(value), String(value), 'ToPropertyKey(value) === String(value) for non-Symbols');
- });
-
- forEach(v.symbols, function (symbol) {
- t.equal(
- ES.ToPropertyKey(symbol),
- symbol,
- 'ToPropertyKey(' + debug(symbol) + ') === ' + debug(symbol)
- );
- t.equal(
- ES.ToPropertyKey(Object(symbol)),
- symbol,
- 'ToPropertyKey(' + debug(Object(symbol)) + ') === ' + debug(symbol)
- );
- });
-
- t.end();
- });
-
- test('ToString', function (t) {
- forEach(v.objects.concat(v.nonSymbolPrimitives), function (item) {
- t.equal(ES.ToString(item), String(item), 'ES.ToString(' + debug(item) + ') ToStrings to String(' + debug(item) + ')');
- });
-
- t['throws'](function () { return ES.ToString(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
-
- forEach(v.symbols, function (symbol) {
- t['throws'](function () { return ES.ToString(symbol); }, TypeError, debug(symbol) + ' throws');
- });
- t.end();
- });
-
- test('Type', function (t) {
- t.equal(ES.Type(), 'Undefined', 'Type() is Undefined');
- t.equal(ES.Type(undefined), 'Undefined', 'Type(undefined) is Undefined');
- t.equal(ES.Type(null), 'Null', 'Type(null) is Null');
- t.equal(ES.Type(true), 'Boolean', 'Type(true) is Boolean');
- t.equal(ES.Type(false), 'Boolean', 'Type(false) is Boolean');
- t.equal(ES.Type(0), 'Number', 'Type(0) is Number');
- t.equal(ES.Type(NaN), 'Number', 'Type(NaN) is Number');
- t.equal(ES.Type('abc'), 'String', 'Type("abc") is String');
- t.equal(ES.Type(function () {}), 'Object', 'Type(function () {}) is Object');
- t.equal(ES.Type({}), 'Object', 'Type({}) is Object');
-
- t.test('symbols', { skip: !v.hasSymbols }, function (st) {
- st.equal(ES.Type(Symbol.iterator), 'Symbol', 'Type(Symbol.iterator) is Symbol');
- st.end();
- });
-
- t.end();
- });
-
- test('ValidateAndApplyPropertyDescriptor', function (t) {
- forEach(v.nonUndefinedPrimitives, function (nonUndefinedPrimitive) {
- t['throws'](
- function () { ES.ValidateAndApplyPropertyDescriptor(nonUndefinedPrimitive, '', false, v.genericDescriptor(), v.genericDescriptor()); },
- TypeError,
- 'O: ' + debug(nonUndefinedPrimitive) + ' is not undefined or an Object'
- );
- });
-
- forEach(v.nonBooleans, function (nonBoolean) {
- t['throws'](
- function () {
- return ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- null,
- nonBoolean,
- v.genericDescriptor(),
- v.genericDescriptor()
- );
- },
- TypeError,
- 'extensible: ' + debug(nonBoolean) + ' is not a Boolean'
- );
- });
-
- forEach(v.primitives, function (primitive) {
- // Desc must be a Property Descriptor
- t['throws'](
- function () {
- return ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- null,
- false,
- primitive,
- v.genericDescriptor()
- );
- },
- TypeError,
- 'Desc: ' + debug(primitive) + ' is not a Property Descriptor'
- );
- });
-
- forEach(v.nonUndefinedPrimitives, function (primitive) {
- // current must be undefined or a Property Descriptor
- t['throws'](
- function () {
- return ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- null,
- false,
- v.genericDescriptor(),
- primitive
- );
- },
- TypeError,
- 'current: ' + debug(primitive) + ' is not a Property Descriptor or undefined'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- // if O is an object, P must be a property key
- t['throws'](
- function () {
- return ES.ValidateAndApplyPropertyDescriptor(
- {},
- nonPropertyKey,
- false,
- v.genericDescriptor(),
- v.genericDescriptor()
- );
- },
- TypeError,
- 'P: ' + debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- t.test('current is undefined', function (st) {
- var propertyKey = 'howdy';
-
- st.test('generic descriptor', function (s2t) {
- var generic = v.genericDescriptor();
- generic['[[Enumerable]]'] = true;
- var O = {};
- ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, generic);
- s2t.equal(
- ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, generic),
- false,
- 'when extensible is false, nothing happens'
- );
- s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false');
- s2t.equal(
- ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, generic),
- true,
- 'operation is successful'
- );
- var expected = {};
- expected[propertyKey] = undefined;
- s2t.deepEqual(O, expected, 'generic descriptor has been defined as an own data property');
- s2t.end();
- });
-
- st.test('data descriptor', function (s2t) {
- var data = v.dataDescriptor();
- data['[[Enumerable]]'] = true;
-
- var O = {};
- s2t.equal(
- ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, data),
- true,
- 'noop when O is undefined'
- );
- s2t.equal(
- ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, data),
- false,
- 'when extensible is false, nothing happens'
- );
- s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false');
- s2t.equal(
- ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, data),
- true,
- 'operation is successful'
- );
- var expected = {};
- expected[propertyKey] = data['[[Value]]'];
- s2t.deepEqual(O, expected, 'data descriptor has been defined as an own data property');
- s2t.end();
- });
-
- st.test('accessor descriptor', { skip: !defineProperty.oDP }, function (s2t) {
- var count = 0;
- var accessor = v.accessorDescriptor();
- accessor['[[Enumerable]]'] = true;
- accessor['[[Get]]'] = function () {
- count += 1;
- return count;
- };
-
- var O = {};
- ES.ValidateAndApplyPropertyDescriptor(undefined, propertyKey, true, accessor);
- s2t.equal(
- ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, false, accessor),
- false,
- 'when extensible is false, nothing happens'
- );
- s2t.deepEqual(O, {}, 'no changes applied when O is undefined or extensible is false');
- s2t.equal(
- ES.ValidateAndApplyPropertyDescriptor(O, propertyKey, true, accessor),
- true,
- 'operation is successful'
- );
- var expected = {};
- expected[propertyKey] = accessor['[[Get]]']() + 1;
- s2t.deepEqual(O, expected, 'accessor descriptor has been defined as an own accessor property');
- s2t.end();
- });
-
- st.end();
- });
-
- t.test('every field in Desc is absent', { skip: 'it is unclear if having no fields qualifies Desc to be a Property Descriptor' });
-
- forEach([v.dataDescriptor, v.accessorDescriptor, v.mutatorDescriptor], function (getDescriptor) {
- t.equal(
- ES.ValidateAndApplyPropertyDescriptor(undefined, 'property key', true, getDescriptor(), getDescriptor()),
- true,
- 'when Desc and current are the same, early return true'
- );
- });
-
- t.test('current is nonconfigurable', function (st) {
- // note: these must not be generic descriptors, or else the algorithm returns an early true
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.descriptors.configurable(v.dataDescriptor()),
- v.descriptors.nonConfigurable(v.dataDescriptor())
- ),
- false,
- 'false if Desc is configurable'
- );
-
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.descriptors.enumerable(v.dataDescriptor()),
- v.descriptors.nonEnumerable(v.dataDescriptor())
- ),
- false,
- 'false if Desc is Enumerable and current is not'
- );
-
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.descriptors.nonEnumerable(v.dataDescriptor()),
- v.descriptors.enumerable(v.dataDescriptor())
- ),
- false,
- 'false if Desc is not Enumerable and current is'
- );
-
- var descLackingEnumerable = v.accessorDescriptor();
- delete descLackingEnumerable['[[Enumerable]]'];
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- descLackingEnumerable,
- v.descriptors.enumerable(v.accessorDescriptor())
- ),
- true,
- 'not false if Desc lacks Enumerable'
- );
-
- st.end();
- });
-
- t.test('Desc and current: one is a data descriptor, one is not', { skip: !defineProperty || !getOwnPropertyDescriptor }, function (st) {
- // note: Desc must be configurable if current is nonconfigurable, to hit this branch
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.descriptors.configurable(v.accessorDescriptor()),
- v.descriptors.nonConfigurable(v.dataDescriptor())
- ),
- false,
- 'false if current (data) is nonconfigurable'
- );
-
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.descriptors.configurable(v.dataDescriptor()),
- v.descriptors.nonConfigurable(v.accessorDescriptor())
- ),
- false,
- 'false if current (not data) is nonconfigurable'
- );
-
- // one is data and one is not,
- // // if current is data, convert to accessor
- // // else convert to data
-
- var startsWithData = {
- 'property key': 42
- };
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- startsWithData,
- 'property key',
- true,
- v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor())),
- v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor()))
- ),
- true,
- 'operation is successful: current is data, Desc is accessor'
- );
- var shouldBeAccessor = getOwnPropertyDescriptor(startsWithData, 'property key');
- st.equal(typeof shouldBeAccessor.get, 'function', 'has a getter');
-
- var key = 'property key';
- var startsWithAccessor = {};
- defineProperty(startsWithAccessor, key, {
- configurable: true,
- enumerable: true,
- get: function get() { return 42; }
- });
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- startsWithAccessor,
- key,
- true,
- v.descriptors.enumerable(v.descriptors.configurable(v.dataDescriptor())),
- v.descriptors.enumerable(v.descriptors.configurable(v.accessorDescriptor(42)))
- ),
- true,
- 'operation is successful: current is accessor, Desc is data'
- );
- var shouldBeData = getOwnPropertyDescriptor(startsWithAccessor, 'property key');
- st.deepEqual(shouldBeData, { configurable: true, enumerable: true, value: 42, writable: false }, 'is a data property');
-
- st.end();
- });
-
- t.test('Desc and current are both data descriptors', function (st) {
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.descriptors.writable(v.dataDescriptor()),
- v.descriptors.nonWritable(v.descriptors.nonConfigurable(v.dataDescriptor()))
- ),
- false,
- 'false if frozen current and writable Desc'
- );
-
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.descriptors.configurable({ '[[Value]]': 42 }),
- v.descriptors.nonWritable({ '[[Value]]': 7 })
- ),
- false,
- 'false if nonwritable current has a different value than Desc'
- );
-
- st.end();
- });
-
- t.test('current is nonconfigurable; Desc and current are both accessor descriptors', function (st) {
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.mutatorDescriptor(),
- v.descriptors.nonConfigurable(v.mutatorDescriptor())
- ),
- false,
- 'false if both Sets are not equal'
- );
-
- st.equal(
- ES.ValidateAndApplyPropertyDescriptor(
- undefined,
- 'property key',
- true,
- v.accessorDescriptor(),
- v.descriptors.nonConfigurable(v.accessorDescriptor())
- ),
- false,
- 'false if both Gets are not equal'
- );
-
- st.end();
- });
-
- t.end();
- });
-};
-
-var es2016 = function ES2016(ES, ops, expectedMissing, skips) {
- es2015(ES, ops, expectedMissing, assign(assign({}, skips), {
- StringGetIndexProperty: true
- }));
- var test = makeTest(skips);
-
- test('IterableToArrayLike', function (t) {
- t.test('custom iterables', { skip: !v.hasSymbols }, function (st) {
- var O = {};
- O[Symbol.iterator] = function () {
- var i = -1;
- return {
- next: function () {
- i += 1;
- return {
- done: i >= 5,
- value: i
- };
- }
- };
- };
- st.deepEqual(
- ES.IterableToArrayLike(O),
- [0, 1, 2, 3, 4],
- 'Symbol.iterator method is called and values collected'
- );
-
- st.end();
- });
-
- t.deepEqual(ES.IterableToArrayLike('abc'), ['a', 'b', 'c'], 'a string of code units spreads');
- t.deepEqual(ES.IterableToArrayLike('💩'), ['💩'], 'a string of code points spreads');
- t.deepEqual(ES.IterableToArrayLike('a💩c'), ['a', '💩', 'c'], 'a string of code points and units spreads');
-
- var arr = [1, 2, 3];
- t.deepEqual(ES.IterableToArrayLike(arr), arr, 'an array becomes a similar array');
- t.notEqual(ES.IterableToArrayLike(arr), arr, 'an array becomes a different, but similar, array');
-
- var O = {};
- t.equal(ES.IterableToArrayLike(O), O, 'a non-iterable non-array non-string object is returned directly');
-
- t.end();
- });
-
- test('OrdinaryGetPrototypeOf', function (t) {
- t.test('values', { skip: !$getProto }, function (st) {
- st.equal(ES.OrdinaryGetPrototypeOf([]), Array.prototype, 'array [[Prototype]] is Array.prototype');
- st.equal(ES.OrdinaryGetPrototypeOf({}), Object.prototype, 'object [[Prototype]] is Object.prototype');
- st.equal(ES.OrdinaryGetPrototypeOf(/a/g), RegExp.prototype, 'regex [[Prototype]] is RegExp.prototype');
- st.equal(ES.OrdinaryGetPrototypeOf(Object('')), String.prototype, 'boxed string [[Prototype]] is String.prototype');
- st.equal(ES.OrdinaryGetPrototypeOf(Object(42)), Number.prototype, 'boxed number [[Prototype]] is Number.prototype');
- st.equal(ES.OrdinaryGetPrototypeOf(Object(true)), Boolean.prototype, 'boxed boolean [[Prototype]] is Boolean.prototype');
- if (v.hasSymbols) {
- st.equal(ES.OrdinaryGetPrototypeOf(Object(Symbol.iterator)), Symbol.prototype, 'boxed symbol [[Prototype]] is Symbol.prototype');
- }
- st.end();
- });
-
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.OrdinaryGetPrototypeOf(primitive); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
- t.end();
- });
-
- test('OrdinarySetPrototypeOf', { skip: !$getProto || !$setProto }, function (t) {
- var a = [];
- var proto = {};
-
- t.equal(ES.OrdinaryGetPrototypeOf(a), Array.prototype, 'precondition');
- t.equal(ES.OrdinarySetPrototypeOf(a, proto), true, 'setting prototype is successful');
- t.equal(ES.OrdinaryGetPrototypeOf(a), proto, 'postcondition');
-
- t.end();
- });
-
- test('SameValueNonNumber', function (t) {
- var willThrow = [
- [3, 4],
- [NaN, 4],
- [4, ''],
- ['abc', true],
- [{}, false]
- ];
- forEach(willThrow, function (nums) {
- t['throws'](function () { return ES.SameValueNonNumber.apply(ES, nums); }, TypeError, 'value must be same type and non-number');
- });
-
- forEach(v.objects.concat(v.nonNumberPrimitives), function (val) {
- t.equal(val === val, ES.SameValueNonNumber(val, val), debug(val) + ' is SameValueNonNumber to itself');
- });
-
- t.end();
- });
-
- test('UTF16Encoding', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.UTF16Encoding(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- t['throws'](
- function () { ES.UTF16Encoding(-1); },
- TypeError,
- '-1 is < 0'
- );
-
- t['throws'](
- function () { ES.UTF16Encoding(0x10FFFF + 1); },
- TypeError,
- '0x10FFFF + 1 is > 0x10FFFF'
- );
-
- t.equal(ES.UTF16Encoding(0xD83D), leadingPoo, '0xD83D is the first half of ' + wholePoo);
- t.equal(ES.UTF16Encoding(0xDCA9), trailingPoo, '0xDCA9 is the last half of ' + wholePoo);
- t.equal(ES.UTF16Encoding(0x1F4A9), wholePoo, '0xDCA9 is the last half of ' + wholePoo);
-
- t.end();
- });
-
- test('UTF16Decode', function (t) {
- t['throws'](
- function () { ES.UTF16Decode('a'.charCodeAt(0), trailingPoo.charCodeAt(0)); },
- TypeError,
- '"a" is not a leading surrogate'
- );
- t['throws'](
- function () { ES.UTF16Decode(leadingPoo.charCodeAt(0), 'b'.charCodeAt(0)); },
- TypeError,
- '"b" is not a trailing surrogate'
- );
-
- t.equal(ES.UTF16Decode(leadingPoo.charCodeAt(0), trailingPoo.charCodeAt(0)), wholePoo);
-
- t.end();
- });
-};
-
-var es2017 = function ES2017(ES, ops, expectedMissing, skips) {
- es2016(ES, ops, expectedMissing, assign({}, skips, {
- EnumerableOwnNames: true,
- IterableToArrayLike: true
- }));
- var test = makeTest(skips);
-
- test('EnumerableOwnProperties', function (t) {
- var obj = testEnumerableOwnNames(t, function (O) {
- return ES.EnumerableOwnProperties(O, 'key');
- });
-
- t.deepEqual(
- ES.EnumerableOwnProperties(obj, 'value'),
- [obj.own],
- 'returns enumerable own values'
- );
-
- t.deepEqual(
- ES.EnumerableOwnProperties(obj, 'key+value'),
- [['own', obj.own]],
- 'returns enumerable own entries'
- );
-
- t.end();
- });
-
- test('IterableToList', function (t) {
- var customIterator = function () {
- var i = -1;
- return {
- next: function () {
- i += 1;
- return {
- done: i >= 5,
- value: i
- };
- }
- };
- };
-
- t.deepEqual(
- ES.IterableToList({}, customIterator),
- [0, 1, 2, 3, 4],
- 'iterator method is called and values collected'
- );
-
- t.test('Symbol support', { skip: !v.hasSymbols }, function (st) {
- st.deepEqual(ES.IterableToList('abc', String.prototype[Symbol.iterator]), ['a', 'b', 'c'], 'a string of code units spreads');
- st.deepEqual(ES.IterableToList('☃', String.prototype[Symbol.iterator]), ['☃'], 'a string of code points spreads');
-
- var arr = [1, 2, 3];
- st.deepEqual(ES.IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a similar array');
- st.notEqual(ES.IterableToList(arr, arr[Symbol.iterator]), arr, 'an array becomes a different, but similar, array');
-
- st.end();
- });
-
- t['throws'](
- function () { ES.IterableToList({}, void 0); },
- TypeError,
- 'non-function iterator method'
- );
-
- t.end();
- });
-
- test('StringGetOwnProperty', function (t) {
- forEach(v.nonStrings.concat(v.strings), function (nonBoxedString) {
- t['throws'](
- function () { ES.StringGetOwnProperty(nonBoxedString, '0'); },
- TypeError,
- debug(nonBoxedString) + ' is not a boxed String'
- );
- });
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- t['throws'](
- function () { ES.StringGetOwnProperty(Object(''), nonPropertyKey); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- t.equal(ES.StringGetOwnProperty(Object(''), '0'), undefined, 'empty boxed string yields undefined');
-
- forEach(v.strings, function (string) {
- if (string) {
- var S = Object(string);
- for (var i = 0; i < string.length; i += 1) {
- var descriptor = ES.StringGetOwnProperty(S, String(i));
- t.deepEqual(
- descriptor,
- {
- '[[Configurable]]': false,
- '[[Enumerable]]': true,
- '[[Value]]': string.charAt(i),
- '[[Writable]]': false
- },
- debug(string) + ': property ' + debug(String(i)) + ': returns expected descriptor'
- );
- }
- }
- });
-
- t.end();
- });
-
- test('ToIndex', function (t) {
- t.equal(ES.ToIndex(), 0, 'no value gives +0');
- t.equal(ES.ToIndex(undefined), 0, 'undefined value gives +0');
- t.equal(ES.ToIndex(-0), 0, '-0 gives +0');
-
- t['throws'](function () { ES.ToIndex(-1); }, RangeError, 'negative numbers throw');
-
- t['throws'](function () { ES.ToIndex(MAX_SAFE_INTEGER + 1); }, RangeError, 'too large numbers throw');
-
- t.equal(ES.ToIndex(3), 3, 'numbers work');
- t.equal(ES.ToIndex(v.valueOfOnlyObject), 4, 'coercible objects are coerced');
-
- t.end();
- });
-};
-
-var es2018 = function ES2018(ES, ops, expectedMissing, skips) {
- es2017(ES, ops, expectedMissing, assign({}, skips, {
- EnumerableOwnProperties: true,
- GetSubstitution: true,
- IsPropertyDescriptor: true
- }));
- var test = makeTest(skips);
-
- test('CopyDataProperties', function (t) {
- t.test('first argument: target', function (st) {
- forEach(v.primitives, function (primitive) {
- st['throws'](
- function () { ES.CopyDataProperties(primitive, {}, []); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
- st.end();
- });
-
- t.test('second argument: source', function (st) {
- var frozenTarget = Object.freeze ? Object.freeze({}) : {};
- forEach(v.nullPrimitives, function (nullish) {
- st.equal(
- ES.CopyDataProperties(frozenTarget, nullish, []),
- frozenTarget,
- debug(nullish) + ' "source" yields identical, unmodified target'
- );
- });
-
- forEach(v.nonNullPrimitives, function (objectCoercible) {
- var target = {};
- var result = ES.CopyDataProperties(target, objectCoercible, []);
- st.equal(result, target, 'result === target');
- st.deepEqual(keys(result), keys(Object(objectCoercible)), 'target ends up with keys of ' + debug(objectCoercible));
- });
-
- st.test('enumerable accessor property', { skip: !defineProperty.oDP }, function (s2t) {
- var target = {};
- var source = {};
- defineProperty(source, 'a', {
- enumerable: true,
- get: function () { return 42; }
- });
- var result = ES.CopyDataProperties(target, source, []);
- s2t.equal(result, target, 'result === target');
- s2t.deepEqual(result, { a: 42 }, 'target ends up with enumerable accessor of source');
- s2t.end();
- });
-
- st.end();
- });
-
- t.test('third argument: excludedItems', function (st) {
- forEach(v.objects.concat(v.primitives), function (nonArray) {
- st['throws'](
- function () { ES.CopyDataProperties({}, {}, nonArray); },
- TypeError,
- debug(nonArray) + ' is not an Array'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- st['throws'](
- function () { ES.CopyDataProperties({}, {}, [nonPropertyKey]); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- var result = ES.CopyDataProperties({}, { a: 1, b: 2, c: 3 }, ['b']);
- st.deepEqual(keys(result).sort(), ['a', 'c'].sort(), 'excluded string keys are excluded');
-
- st.test('excluding symbols', { skip: !v.hasSymbols }, function (s2t) {
- var source = {};
- forEach(v.symbols, function (symbol) {
- source[symbol] = true;
- });
-
- var includedSymbols = v.symbols.slice(1);
- var excludedSymbols = v.symbols.slice(0, 1);
- var target = ES.CopyDataProperties({}, source, excludedSymbols);
-
- forEach(includedSymbols, function (symbol) {
- s2t.equal(has(target, symbol), true, debug(symbol) + ' is included');
- });
-
- forEach(excludedSymbols, function (symbol) {
- s2t.equal(has(target, symbol), false, debug(symbol) + ' is excluded');
- });
-
- s2t.end();
- });
-
- st.end();
- });
-
- // TODO: CopyDataProperties does not throw when copying fails
-
- t.end();
- });
-
- test('DateString', function (t) {
- forEach(v.nonNumbers.concat(NaN), function (nonNumberOrNaN) {
- t['throws'](
- function () { ES.DateString(nonNumberOrNaN); },
- TypeError,
- debug(nonNumberOrNaN) + ' is not a non-NaN Number'
- );
- });
-
- t.equal(ES.DateString(Date.UTC(2019, 8, 10, 7, 8, 9)), 'Tue Sep 10 2019');
- t.equal(ES.DateString(Date.UTC(2016, 1, 29, 7, 8, 9)), 'Mon Feb 29 2016'); // leap day
- t.end();
- });
-
- test('EnumerableOwnPropertyNames', function (t) {
- var obj = testEnumerableOwnNames(t, function (O) {
- return ES.EnumerableOwnPropertyNames(O, 'key');
- });
-
- t.deepEqual(
- ES.EnumerableOwnPropertyNames(obj, 'value'),
- [obj.own],
- 'returns enumerable own values'
- );
-
- t.deepEqual(
- ES.EnumerableOwnPropertyNames(obj, 'key+value'),
- [['own', obj.own]],
- 'returns enumerable own entries'
- );
-
- t.end();
- });
-
- test('GetSubstitution', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.GetSubstitution(nonString, '', 0, [], undefined, ''); },
- TypeError,
- '`matched`: ' + debug(nonString) + ' is not a String'
- );
-
- t['throws'](
- function () { ES.GetSubstitution('', nonString, 0, [], undefined, ''); },
- TypeError,
- '`str`: ' + debug(nonString) + ' is not a String'
- );
-
- t['throws'](
- function () { ES.GetSubstitution('', '', 0, [], undefined, nonString); },
- TypeError,
- '`replacement`: ' + debug(nonString) + ' is not a String'
- );
-
- t['throws'](
- function () { ES.GetSubstitution('', '', 0, [nonString], undefined, ''); },
- TypeError,
- '`captures`: ' + debug([nonString]) + ' is not an Array of strings'
- );
- });
-
- forEach(v.notNonNegativeIntegers, function (nonNonNegativeInteger) {
- t['throws'](
- function () { ES.GetSubstitution('', '', nonNonNegativeInteger, [], undefined, ''); },
- TypeError,
- '`position`: ' + debug(nonNonNegativeInteger) + ' is not a non-negative integer'
- );
- });
-
- forEach(v.nonArrays, function (nonArray) {
- t['throws'](
- function () { ES.GetSubstitution('', '', 0, nonArray, undefined, ''); },
- TypeError,
- '`captures`: ' + debug(nonArray) + ' is not an Array'
- );
- });
-
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, '123'),
- '123',
- 'returns the substitution'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '$$2$'),
- '$2$',
- 'supports $$, and trailing $'
- );
-
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$&<'),
- '>abcdef<',
- 'supports $&'
- );
-
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$`<'),
- '><',
- 'supports $` at position 0'
- );
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, '>$`<'),
- '>ab<',
- 'supports $` at position > 0'
- );
-
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 7, [], undefined, ">$'<"),
- '><',
- "supports $' at a position where there's less than `matched.length` chars left"
- );
- t.equal(
- ES.GetSubstitution('def', 'abcdefghi', 3, [], undefined, ">$'<"),
- '>ghi<',
- "supports $' at a position where there's more than `matched.length` chars left"
- );
-
- for (var i = 0; i < 100; i += 1) {
- var captures = [];
- captures[i] = 'test';
- if (i > 0) {
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i + '<'),
- '>undefined<',
- 'supports $' + i + ' with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$' + i),
- '>undefined',
- 'supports $' + i + ' at the end of the replacement, with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i + '<'),
- '><',
- 'supports $' + i + ' with a capture at that index'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$' + i),
- '>',
- 'supports $' + i + ' at the end of the replacement, with a capture at that index'
- );
- }
- if (i < 10) {
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i + '<'),
- i === 0 ? '><' : '>undefined<',
- 'supports $0' + i + ' with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, [], undefined, '>$0' + i),
- i === 0 ? '>' : '>undefined',
- 'supports $0' + i + ' at the end of the replacement, with no captures'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i + '<'),
- '><',
- 'supports $0' + i + ' with a capture at that index'
- );
- t.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, undefined, '>$0' + i),
- '>',
- 'supports $0' + i + ' at the end of the replacement, with a capture at that index'
- );
- }
- }
-
- t.test('named captures', function (st) {
- var namedCaptures = {
- foo: 'foo!'
- };
-
- st.equal(
- ES.GetSubstitution('abcdef', 'abcdefghi', 0, captures, namedCaptures, 'a>$<foo><z'),
- 'a>foo!<z',
- 'supports named captures'
- );
-
- st.end();
- });
-
- t.end();
- });
-
- test('IsStringPrefix', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.IsStringPrefix(nonString, 'a'); },
- TypeError,
- 'first arg: ' + debug(nonString) + ' is not a string'
- );
- t['throws'](
- function () { ES.IsStringPrefix('a', nonString); },
- TypeError,
- 'second arg: ' + debug(nonString) + ' is not a string'
- );
- });
-
- forEach(v.strings, function (string) {
- t.equal(ES.IsStringPrefix(string, string), true, debug(string) + ' is a prefix of itself');
-
- t.equal(ES.IsStringPrefix('', string), true, 'the empty string is a prefix of everything');
- });
-
- t.equal(ES.IsStringPrefix('abc', 'abcd'), true, '"abc" is a prefix of "abcd"');
- t.equal(ES.IsStringPrefix('abcd', 'abc'), false, '"abcd" is not a prefix of "abc"');
-
- t.equal(ES.IsStringPrefix('a', 'bc'), false, '"a" is not a prefix of "bc"');
-
- t.end();
- });
-
- test('NumberToString', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.NumberToString(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach(v.numbers, function (number) {
- t.equal(ES.NumberToString(number), String(number), debug(number) + ' stringifies to ' + number);
- });
-
- t.end();
- });
-
- test('PromiseResolve', function (t) {
- t.test('Promises unsupported', { skip: typeof Promise === 'function' }, function (st) {
- st['throws'](
- function () { ES.PromiseResolve(); },
- SyntaxError,
- 'Promises are not supported'
- );
- st.end();
- });
-
- t.test('Promises supported', { skip: typeof Promise !== 'function' }, function (st) {
- st.plan(2);
-
- var a = {};
- var b = {};
- var fulfilled = Promise.resolve(a);
- var rejected = Promise.reject(b);
-
- ES.PromiseResolve(Promise, fulfilled).then(function (x) {
- st.equal(x, a, 'fulfilled promise resolves to fulfilled');
- });
-
- ES.PromiseResolve(Promise, rejected)['catch'](function (e) {
- st.equal(e, b, 'rejected promise resolves to rejected');
- });
- });
-
- t.end();
- });
-
- test('SetFunctionLength', function (t) {
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- function () { ES.SetFunctionLength(nonFunction, 0); },
- TypeError,
- debug(nonFunction) + ' is not a Function'
- );
- });
-
- t.test('non-extensible function', { skip: !Object.preventExtensions }, function (st) {
- var F = function F() {};
- Object.preventExtensions(F);
-
- st['throws'](
- function () { ES.SetFunctionLength(F, 0); },
- TypeError,
- 'non-extensible function throws'
- );
- st.end();
- });
-
- var HasLength = function HasLength(_) { return _; };
- t.equal(has(HasLength, 'length'), true, 'precondition: `HasLength` has own length');
- t['throws'](
- function () { ES.SetFunctionLength(HasLength, 0); },
- TypeError,
- 'function with own length throws'
- );
-
- t.test('no length', { skip: !functionsHaveConfigurableNames }, function (st) {
- var HasNoLength = function HasNoLength() {};
- delete HasNoLength.length;
-
- st.equal(has(HasNoLength, 'length'), false, 'precondition: `HasNoLength` has no own length');
-
- forEach(v.nonNumbers, function (nonNumber) {
- st['throws'](
- function () { ES.SetFunctionLength(HasNoLength, nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach([-1, -42, -Infinity, Infinity].concat(v.nonIntegerNumbers), function (nonPositiveInteger) {
- st['throws'](
- function () { ES.SetFunctionLength(HasNoLength, nonPositiveInteger); },
- TypeError,
- debug(nonPositiveInteger) + ' is not a positive integer Number'
- );
- });
-
- st.end();
- });
-
- // defines an own configurable non-enum non-write length property
-
- t.end();
- });
-
- test('thisSymbolValue', function (t) {
- forEach(v.nonSymbolPrimitives.concat(v.objects), function (nonSymbol) {
- t['throws'](
- function () { ES.thisSymbolValue(nonSymbol); },
- v.hasSymbols ? TypeError : SyntaxError,
- debug(nonSymbol) + ' is not a Symbol'
- );
- });
-
- t.test('no native Symbols', { skip: v.hasSymbols }, function (st) {
- forEach(v.objects.concat(v.primitives), function (value) {
- st['throws'](
- function () { ES.thisSymbolValue(value); },
- SyntaxError,
- 'Symbols are not supported'
- );
- });
- st.end();
- });
-
- t.test('symbol values', { skip: !v.hasSymbols }, function (st) {
- forEach(v.symbols, function (symbol) {
- st.equal(ES.thisSymbolValue(symbol), symbol, 'Symbol value of ' + debug(symbol) + ' is same symbol');
-
- st.equal(
- ES.thisSymbolValue(Object(symbol)),
- symbol,
- 'Symbol value of ' + debug(Object(symbol)) + ' is ' + debug(symbol)
- );
- });
-
- st.end();
- });
-
- t.end();
- });
-
- test('TimeString', function (t) {
- forEach(v.nonNumbers.concat(NaN), function (nonNumberOrNaN) {
- t['throws'](
- function () { ES.TimeString(nonNumberOrNaN); },
- TypeError,
- debug(nonNumberOrNaN) + ' is not a non-NaN Number'
- );
- });
-
- var tv = Date.UTC(2019, 8, 10, 7, 8, 9);
- t.equal(ES.TimeString(tv), '07:08:09 GMT');
- t.end();
- });
-
- test('UnicodeEscape', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.UnicodeEscape(nonString); },
- TypeError,
- debug(nonString) + ' is not a String'
- );
- });
- t['throws'](
- function () { ES.UnicodeEscape(''); },
- TypeError,
- 'empty string does not have length 1'
- );
- t['throws'](
- function () { ES.UnicodeEscape('ab'); },
- TypeError,
- '2-char string does not have length 1'
- );
-
- t.equal(ES.UnicodeEscape(' '), '\\u0020');
- t.equal(ES.UnicodeEscape('a'), '\\u0061');
- t.equal(ES.UnicodeEscape(leadingPoo), '\\ud83d');
- t.equal(ES.UnicodeEscape(trailingPoo), '\\udca9');
-
- t.end();
- });
-};
-
-var es2019 = function ES2019(ES, ops, expectedMissing, skips) {
- es2018(ES, ops, expectedMissing, assign({}, skips, {
- }));
- var test = makeTest(skips);
-
- test('AddEntriesFromIterable', function (t) {
- t['throws'](
- function () { ES.AddEntriesFromIterable({}, undefined, function () {}); },
- TypeError,
- 'iterable must not be undefined'
- );
- t['throws'](
- function () { ES.AddEntriesFromIterable({}, null, function () {}); },
- TypeError,
- 'iterable must not be null'
- );
- forEach(v.nonFunctions, function (nonFunction) {
- t['throws'](
- function () { ES.AddEntriesFromIterable({}, {}, nonFunction); },
- TypeError,
- debug(nonFunction) + ' is not a function'
- );
- });
-
- t.test('Symbol support', { skip: !v.hasSymbols }, function (st) {
- st.plan(4);
-
- var O = {};
- st.equal(ES.AddEntriesFromIterable(O, [], function () {}), O, 'returns the target');
-
- var adder = function (key, value) {
- st.equal(this, O, 'adder gets proper receiver');
- st.equal(key, 0, 'k is key');
- st.equal(value, 'a', 'v is value');
- };
- ES.AddEntriesFromIterable(O, ['a'].entries(), adder);
-
- st.end();
- });
-
- t.end();
- });
-
- test('FlattenIntoArray', function (t) {
- t.test('no mapper function', function (st) {
- var testDepth = function testDepth(tt, depth, expected) {
- var a = [];
- var o = [[1], 2, , [[3]], [], 4, [[[[5]]]]]; // eslint-disable-line no-sparse-arrays
- ES.FlattenIntoArray(a, o, o.length, 0, depth);
- tt.deepEqual(a, expected, 'depth: ' + depth);
- };
-
- testDepth(st, 1, [1, 2, [3], 4, [[[5]]]]);
- testDepth(st, 2, [1, 2, 3, 4, [[5]]]);
- testDepth(st, 3, [1, 2, 3, 4, [5]]);
- testDepth(st, 4, [1, 2, 3, 4, 5]);
- testDepth(st, Infinity, [1, 2, 3, 4, 5]);
- st.end();
- });
-
- t.test('mapper function', function (st) {
- var testMapper = function testMapper(tt, mapper, expected, thisArg) {
- var a = [];
- var o = [[1], 2, , [[3]], [], 4, [[[[5]]]]]; // eslint-disable-line no-sparse-arrays
- ES.FlattenIntoArray(a, o, o.length, 0, 1, mapper, thisArg);
- tt.deepEqual(a, expected);
- };
-
- var double = function double(x) {
- return typeof x === 'number' ? 2 * x : x;
- };
- testMapper(
- st,
- double,
- [1, 4, [3], 8, [[[5]]]]
- );
- var receiver = hasStrictMode ? 42 : Object(42);
- testMapper(
- st,
- function (x) { return [this, double(x)]; },
- [receiver, [1], receiver, 4, receiver, [[3]], receiver, [], receiver, 8, receiver, [[[[5]]]]],
- 42
- );
- st.end();
- });
-
- t.end();
- });
-
- test('TrimString', function (t) {
- t.test('non-object string', function (st) {
- forEach(v.nullPrimitives, function (nullish) {
- st['throws'](
- function () { ES.TrimString(nullish); },
- debug(nullish) + ' is not an Object'
- );
- });
- st.end();
- });
-
- var string = ' \n abc \n ';
- t.equal(ES.TrimString(string, 'start'), string.slice(string.indexOf('a')));
- t.equal(ES.TrimString(string, 'end'), string.slice(0, string.lastIndexOf('c') + 1));
- t.equal(ES.TrimString(string, 'start+end'), string.slice(string.indexOf('a'), string.lastIndexOf('c') + 1));
-
- t.end();
- });
-};
-
-var es2020 = function ES2020(ES, ops, expectedMissing, skips) {
- es2019(ES, ops, expectedMissing, assign({}, skips, {
- CopyDataProperties: true,
- GetIterator: true,
- NumberToString: true,
- ObjectCreate: true,
- SameValueNonNumber: true,
- ToInteger: true,
- ToNumber: true,
- UTF16Decode: true
- }));
- var test = makeTest(skips);
-
- test('BigInt::add', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.add(nonBigInt, 0); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.add(0, nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.equal(ES.BigInt.add($BigInt(0), $BigInt(0)), $BigInt(0), '0n + 0n is 0n');
-
- forEach(v.bigints, function (bigint) {
- if (bigint !== $BigInt(0)) {
- t.equal(ES.BigInt.add(bigint, $BigInt(0)), bigint, debug(bigint) + ' + 0n adds to ' + bigint);
- }
- t.equal(ES.BigInt.add(bigint, $BigInt(1)), bigint + $BigInt(1), debug(bigint) + ' + 1n adds to ' + (bigint + $BigInt(1)));
- t.equal(ES.BigInt.add(bigint, -$BigInt(42)), bigint - $BigInt(42), debug(bigint) + ' + -42n adds to ' + (bigint - $BigInt(42)));
- });
-
- t.end();
- });
-
- test('BigInt::bitwiseAND', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.bitwiseAND(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.bitwiseAND($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.equal(ES.BigInt.bitwiseAND($BigInt(1), $BigInt(2)), $BigInt(1) & $BigInt(2));
-
- t.end();
- });
-
- test('BigInt::bitwiseNOT', function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.bitwiseNOT(nonBigInt); },
- TypeError,
- debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.test('actual BigInts', { skip: !hasBigInts }, function (st) {
- forEach(v.int32s, function (int32) {
- var bigInt32 = $BigInt(int32);
- st.equal(ES.BigInt.bitwiseNOT(bigInt32), ~bigInt32, debug(bigInt32) + ' becomes ~' + debug(bigInt32));
- });
- st.end();
- });
-
- t.end();
- });
-
- test('BigInt::bitwiseOR', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.bitwiseOR(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.bitwiseOR($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.equal(ES.BigInt.bitwiseOR($BigInt(1), $BigInt(2)), $BigInt(1) | $BigInt(2));
-
- t.end();
- });
-
- test('BigInt::bitwiseXOR', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.bitwiseXOR(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.bitwiseXOR($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.equal(ES.BigInt.bitwiseXOR($BigInt(1), $BigInt(2)), $BigInt(1) ^ $BigInt(2));
-
- t.end();
- });
-
- test('BigInt::divide', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.divide(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.divide($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t['throws'](
- function () { ES.BigInt.divide($BigInt(1), $BigInt(0)); },
- RangeError,
- 'dividing by zero throws'
- );
-
- forEach(v.bigints, function (bigint) {
- if (bigint !== $BigInt(0)) {
- t.equal(ES.BigInt.divide(bigint, bigint), $BigInt(1), debug(bigint) + ' divided by itself is 1n');
- t.equal(ES.BigInt.divide(bigint, $BigInt(2)), bigint / $BigInt(2), debug(bigint) + ' divided by 2n is half itself');
- }
- });
-
- t.end();
- });
-
- test('BigInt::equal', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.equal(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.Number.equal($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a Number'
- );
- });
-
- forEach(v.bigints, function (bigint) {
- if (BigInt !== $BigInt(0)) {
- t.equal(ES.BigInt.equal(bigint, bigint), true, debug(bigint) + ' is equal to itself');
- t.equal(ES.BigInt.equal(bigint, bigint + $BigInt(1)), false, debug(bigint) + ' is not equal to itself plus 1n');
- }
- });
-
- t.end();
- });
-
- test('BigInt::exponentiate', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.exponentiate(nonBigInt, $BigInt(0)); },
- TypeError,
- 'base: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.exponentiate($BigInt(0), nonBigInt); },
- TypeError,
- 'exponent: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t['throws'](
- function () { ES.BigInt.exponentiate($BigInt(1), -$BigInt(1)); },
- RangeError,
- 'negative exponent throws'
- );
-
- forEach(v.bigints, function (bigint) {
- if (bigint !== $BigInt(0)) {
- t.equal(ES.BigInt.exponentiate(bigint, $BigInt(0)), $BigInt(1), debug(bigint) + ' ** 0n is 1n');
-
- var square = bigint;
- for (var i = 0; i < Number(bigint); i += 1) {
- square += bigint;
- }
- t.equal(ES.BigInt.exponentiate(bigint, bigint), square, debug(bigint) + ' ** ' + debug(bigint) + ' is equal to ' + debug(square));
- }
- });
-
- t.end();
- });
-
- test('BigInt::leftShift', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.leftShift(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.leftShift($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- forEach([0].concat(v.int32s), function (int32) {
- var bigInt32 = $BigInt(int32);
- forEach([1, 3, 5, 31, 32, 33], function (bits) {
- var bitsN = $BigInt(bits);
- t.equal(
- ES.BigInt.leftShift(bigInt32, bitsN),
- bigInt32 << bitsN,
- debug(bigInt32) + ' << ' + debug(bitsN) + ' is ' + debug(bigInt32 << bitsN)
- );
- });
- });
-
- t.end();
- });
-
- test('BigInt::lessThan', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.lessThan(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.lessThan($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.equal(ES.BigInt.lessThan($BigInt(0), $BigInt(0)), false, '0n < 0n is false');
-
- forEach(v.bigints, function (bigint) {
- t.equal(ES.BigInt.lessThan(bigint, bigint), false, debug(bigint) + ' is not less than itself');
-
- t.equal(ES.BigInt.lessThan(bigint, bigint + $BigInt(1)), true, debug(bigint) + ' < ' + debug(bigint + $BigInt(1)) + ' is true');
- t.equal(ES.BigInt.lessThan(bigint + $BigInt(1), bigint), false, debug(bigint + $BigInt(1)) + ' < ' + debug(bigint) + ' is false');
- });
-
- t.end();
- });
-
- test('BigInt::multiply', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.multiply(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.multiply($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a Number'
- );
- });
-
- t.equal(ES.BigInt.multiply($BigInt(0), $BigInt(0)), $BigInt(0), '0n * 0n is 0n');
-
- forEach(v.bigints, function (bigint) {
- if (bigint !== $BigInt(0)) {
- t.equal(ES.BigInt.multiply(bigint, $BigInt(0)), $BigInt(0), debug(bigint) + ' * 0n produces 0n');
- t.equal(ES.BigInt.multiply(bigint, $BigInt(1)), bigint, debug(bigint) + ' * 1n produces itself');
- t.equal(ES.BigInt.multiply(bigint, -$BigInt(42)), bigint * -$BigInt(42), debug(bigint) + ' * -42n produces ' + (bigint - $BigInt(42)));
- }
- });
-
- t.end();
- });
-
- test('BigInt::remainder', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.remainder(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.remainder($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t['throws'](
- function () { ES.BigInt.remainder($BigInt(1), $BigInt(0)); },
- RangeError,
- 'dividing by zero throws'
- );
-
- forEach(v.bigints, function (bigint) {
- if (bigint !== $BigInt(0)) {
- t.equal(
- ES.BigInt.remainder($BigInt(0), bigint),
- $BigInt(0),
- '0n % ' + debug(bigint) + ' is 0n'
- );
- t.equal(
- ES.BigInt.remainder(bigint + $BigInt(1), bigint),
- $BigInt(1),
- debug(bigint) + ' % ' + debug(bigint + $BigInt(1)) + ' is 1n'
- );
- }
- });
-
- t.end();
- });
-
- test('BigInt::sameValue', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.sameValue(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.sameValue($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.equal(ES.BigInt.sameValue($BigInt(0), $BigInt(0)), true, '0n is sameValue as 0n');
-
- forEach(v.bigints, function (bigint) {
- t.ok(ES.BigInt.sameValue(bigint, bigint), debug(bigint) + ' is the sameValue as itself');
- });
-
- t.end();
- });
-
- test('BigInt::sameValueZero', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.sameValueZero(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.sameValueZero($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- forEach(v.bigints, function (bigint) {
- t.ok(ES.BigInt.sameValueZero(bigint, bigint), debug(bigint) + ' is the sameValueZero as itself');
- });
-
- t.end();
- });
-
- test('BigInt::signedRightShift', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.signedRightShift(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.signedRightShift($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- forEach([0].concat(v.int32s), function (int32) {
- var bigInt32 = $BigInt(int32);
- forEach([1, 3, 5, 31, 32, 33], function (bits) {
- var bitsN = $BigInt(bits);
- t.equal(
- ES.BigInt.signedRightShift(bigInt32, bitsN),
- bigInt32 >> bitsN,
- debug(bigInt32) + ' >> ' + debug(bitsN) + ' is ' + debug(bigInt32 >> bitsN)
- );
- });
- });
-
- t.end();
- });
-
- test('BigInt::subtract', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.subtract(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.subtract($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.equal(ES.BigInt.subtract($BigInt(0), $BigInt(0)), $BigInt(0), '0n - 0n is 0n');
-
- forEach(v.bigints, function (bigint) {
- t.equal(ES.BigInt.subtract(bigint, $BigInt(0)), bigint, debug(bigint) + ' - 0n produces ' + bigint);
- t.equal(ES.BigInt.subtract(bigint, $BigInt(1)), bigint - $BigInt(1), debug(bigint) + ' - 1n produces ' + (bigint + $BigInt(1)));
- t.equal(ES.BigInt.subtract(bigint, $BigInt(42)), bigint - $BigInt(42), debug(bigint) + ' - 42n produces ' + (bigint - $BigInt(42)));
- });
-
- t.end();
- });
-
- test('BigInt::toString', function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.toString(nonBigInt); },
- TypeError,
- debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- forEach(v.bigints, function (bigint) {
- t.equal(ES.BigInt.toString(bigint), String(bigint), debug(bigint) + ' stringifies to ' + bigint);
- });
-
- t.end();
- });
-
- test('BigInt::unaryMinus', function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.unaryMinus(nonBigInt); },
- TypeError,
- debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.test('actual BigInts', { skip: !hasBigInts }, function (st) {
- forEach(v.bigints, function (bigint) {
- st.equal(ES.BigInt.unaryMinus(bigint), -bigint, debug(bigint) + ' produces -' + debug(bigint));
- });
- st.end();
- });
-
- t.end();
- });
-
- test('BigInt::unsignedRightShift', { skip: !hasBigInts }, function (t) {
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.BigInt.unsignedRightShift(nonBigInt, $BigInt(0)); },
- TypeError,
- 'x: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- t['throws'](
- function () { ES.BigInt.unsignedRightShift($BigInt(0), nonBigInt); },
- TypeError,
- 'y: ' + debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- forEach([0].concat(v.int32s), function (int32) {
- var bigInt32 = $BigInt(int32);
- forEach([1, 3, 5, 31, 32, 33], function (bits) {
- var bitsN = $BigInt(bits);
- t['throws'](
- function () { ES.BigInt.unsignedRightShift(bigInt32, bitsN); },
- TypeError,
- debug(bigInt32) + ' >>> ' + debug(bitsN) + ' throws'
- );
- });
- });
-
- t.end();
- });
-
- test('BigIntBitwiseOp', { skip: !hasBigInts }, function (t) {
- t['throws'](
- function () { ES.BigIntBitwiseOp('invalid', BigInt(0), BigInt(0)); },
- TypeError,
- 'throws with an invalid op'
- );
-
- t.equal(ES.BigIntBitwiseOp('&', BigInt(1), BigInt(2)), BigInt(1) & BigInt(2));
- t.equal(ES.BigIntBitwiseOp('|', BigInt(1), BigInt(2)), BigInt(1) | BigInt(2));
- t.equal(ES.BigIntBitwiseOp('^', BigInt(1), BigInt(2)), BigInt(1) ^ BigInt(2));
-
- t.end();
- });
-
- test('BinaryAnd', function (t) {
- t.equal(ES.BinaryAnd(0, 0), 0);
- t.equal(ES.BinaryAnd(0, 1), 0);
- t.equal(ES.BinaryAnd(1, 0), 0);
- t.equal(ES.BinaryAnd(1, 1), 1);
-
- forEach(v.nonIntegerNumbers.concat(v.nonNumberPrimitives, v.objects), function (nonBit) {
- t['throws'](
- function () { ES.BinaryAnd(0, nonBit); },
- TypeError
- );
- t['throws'](
- function () { ES.BinaryAnd(nonBit, 1); },
- TypeError
- );
- });
- t.end();
- });
-
- test('BinaryOr', function (t) {
- t.equal(ES.BinaryOr(0, 0), 0);
- t.equal(ES.BinaryOr(0, 1), 1);
- t.equal(ES.BinaryOr(1, 0), 1);
- t.equal(ES.BinaryOr(1, 1), 1);
-
- forEach(v.nonIntegerNumbers.concat(v.nonNumberPrimitives, v.objects), function (nonBit) {
- t['throws'](
- function () { ES.BinaryOr(0, nonBit); },
- TypeError
- );
- t['throws'](
- function () { ES.BinaryOr(nonBit, 1); },
- TypeError
- );
- });
- t.end();
- });
-
- test('BinaryXor', function (t) {
- t.equal(ES.BinaryXor(0, 0), 0);
- t.equal(ES.BinaryXor(0, 1), 1);
- t.equal(ES.BinaryXor(1, 0), 1);
- t.equal(ES.BinaryXor(1, 1), 0);
-
- forEach(v.nonIntegerNumbers.concat(v.nonNumberPrimitives, v.objects), function (nonBit) {
- t['throws'](
- function () { ES.BinaryXor(0, nonBit); },
- TypeError
- );
- t['throws'](
- function () { ES.BinaryXor(nonBit, 1); },
- TypeError
- );
- });
- t.end();
- });
-
- test('CodePointAt', function (t) {
- t['throws'](
- function () { ES.CodePointAt('abc', -1); },
- TypeError,
- 'requires an index >= 0'
- );
- t['throws'](
- function () { ES.CodePointAt('abc', 3); },
- TypeError,
- 'requires an index < string length'
- );
-
- t.deepEqual(ES.CodePointAt('abc', 0), {
- '[[CodePoint]]': 'a',
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': false
- });
- t.deepEqual(ES.CodePointAt('abc', 1), {
- '[[CodePoint]]': 'b',
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': false
- });
- t.deepEqual(ES.CodePointAt('abc', 2), {
- '[[CodePoint]]': 'c',
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': false
- });
-
- var strWithHalfPoo = 'a' + leadingPoo + 'c';
- var strWithWholePoo = 'a' + wholePoo + 'd';
-
- t.deepEqual(ES.CodePointAt(strWithHalfPoo, 0), {
- '[[CodePoint]]': 'a',
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': false
- });
- t.deepEqual(ES.CodePointAt(strWithHalfPoo, 1), {
- '[[CodePoint]]': leadingPoo,
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': true
- });
- t.deepEqual(ES.CodePointAt(strWithHalfPoo, 2), {
- '[[CodePoint]]': 'c',
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': false
- });
-
- t.deepEqual(ES.CodePointAt(strWithWholePoo, 0), {
- '[[CodePoint]]': 'a',
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': false
- });
- t.deepEqual(ES.CodePointAt(strWithWholePoo, 1), {
- '[[CodePoint]]': wholePoo,
- '[[CodeUnitCount]]': 2,
- '[[IsUnpairedSurrogate]]': false
- });
- t.deepEqual(ES.CodePointAt(strWithWholePoo, 2), {
- '[[CodePoint]]': trailingPoo,
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': true
- });
- t.deepEqual(ES.CodePointAt(strWithWholePoo, 3), {
- '[[CodePoint]]': 'd',
- '[[CodeUnitCount]]': 1,
- '[[IsUnpairedSurrogate]]': false
- });
-
- t.end();
- });
-
- test('CopyDataProperties', function (t) {
- t.test('first argument: target', function (st) {
- forEach(v.primitives, function (primitive) {
- st['throws'](
- function () { ES.CopyDataProperties(primitive, {}, []); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
- st.end();
- });
-
- t.test('second argument: source', function (st) {
- var frozenTarget = Object.freeze ? Object.freeze({}) : {};
- forEach(v.nullPrimitives, function (nullish) {
- st.equal(
- ES.CopyDataProperties(frozenTarget, nullish, []),
- frozenTarget,
- debug(nullish) + ' "source" yields identical, unmodified target'
- );
- });
-
- forEach(v.nonNullPrimitives, function (objectCoercible) {
- var target = {};
- var result = ES.CopyDataProperties(target, objectCoercible, []);
- st.equal(result, target, 'result === target');
- st.deepEqual(keys(result), keys(Object(objectCoercible)), 'target ends up with keys of ' + debug(objectCoercible));
- });
-
- st.test('enumerable accessor property', { skip: !defineProperty.oDP }, function (s2t) {
- var target = {};
- var source = {};
- defineProperty(source, 'a', {
- enumerable: true,
- get: function () { return 42; }
- });
- var result = ES.CopyDataProperties(target, source, []);
- s2t.equal(result, target, 'result === target');
- s2t.deepEqual(result, { a: 42 }, 'target ends up with enumerable accessor of source');
- s2t.end();
- });
-
- st.end();
- });
-
- t.test('third argument: excludedItems', function (st) {
- forEach(v.objects.concat(v.primitives), function (nonArray) {
- st['throws'](
- function () { ES.CopyDataProperties({}, {}, nonArray); },
- TypeError,
- debug(nonArray) + ' is not an Array'
- );
- });
-
- forEach(v.nonPropertyKeys, function (nonPropertyKey) {
- st['throws'](
- function () { ES.CopyDataProperties({}, {}, [nonPropertyKey]); },
- TypeError,
- debug(nonPropertyKey) + ' is not a Property Key'
- );
- });
-
- var result = ES.CopyDataProperties({}, { a: 1, b: 2, c: 3 }, ['b']);
- st.deepEqual(keys(result).sort(), ['a', 'c'].sort(), 'excluded string keys are excluded');
-
- st.test('excluding symbols', { skip: !v.hasSymbols }, function (s2t) {
- var source = {};
- forEach(v.symbols, function (symbol) {
- source[symbol] = true;
- });
-
- var includedSymbols = v.symbols.slice(1);
- var excludedSymbols = v.symbols.slice(0, 1);
- var target = ES.CopyDataProperties({}, source, excludedSymbols);
-
- forEach(includedSymbols, function (symbol) {
- s2t.equal(has(target, symbol), true, debug(symbol) + ' is included');
- });
-
- forEach(excludedSymbols, function (symbol) {
- s2t.equal(has(target, symbol), false, debug(symbol) + ' is excluded');
- });
-
- s2t.end();
- });
-
- st.end();
- });
-
- // TODO: CopyDataProperties throws when copying fails
-
- t.end();
- });
-
- test('GetIterator', function (t) {
- try {
- ES.GetIterator({}, null);
- } catch (e) {
- t.ok(e.message.indexOf('Assertion failed: `hint` must be one of \'sync\' or \'async\'' >= 0));
- }
-
- var arr = [1, 2];
- testIterator(t, ES.GetIterator(arr), arr);
-
- testIterator(t, ES.GetIterator('abc'), 'abc'.split(''));
-
- t.test('Symbol.iterator', { skip: !v.hasSymbols }, function (st) {
- var m = new Map();
- m.set(1, 'a');
- m.set(2, 'b');
-
- testIterator(st, ES.GetIterator(m), [[1, 'a'], [2, 'b']]);
-
- st.end();
- });
-
- t.test('Symbol.asyncIterator', { skip: !v.hasSymbols || !Symbol.asyncIterator }, function (st) {
- try {
- ES.GetIterator(arr, 'async');
- } catch (e) {
- st.ok(e.message.indexOf("async from sync iterators aren't currently supported") >= 0);
- }
-
- var it = {
- next: function () {
- return Promise.resolve({
- done: true
- });
- }
- };
- var obj = {};
- obj[Symbol.asyncIterator] = function () {
- return it;
- };
-
- st.equal(ES.GetIterator(obj, 'async'), it);
-
- st.end();
- });
-
- t.end();
- });
-
- var unclampedUnsignedIntegerTypes = [
- 'Int8',
- 'Int16',
- 'Int32'
- ];
- var clampedTypes = [
- 'Uint8C'
- ];
- var unclampedSignedIntegerTypes = [
- 'Uint8',
- 'Uint16',
- 'Uint32'
- ];
- var unclampedIntegerTypes = unclampedUnsignedIntegerTypes.concat(unclampedSignedIntegerTypes);
- var floatTypes = [
- 'Float32',
- 'Float64'
- ];
- var integerTypes = unclampedIntegerTypes.concat(clampedTypes, floatTypes);
- var bigIntTypes = [
- 'BigInt64',
- 'BigUint64'
- ];
- var numberTypes = floatTypes.concat(integerTypes);
- var nonIntegerTypes = floatTypes.concat(bigIntTypes);
- var unsignedElementTypes = unclampedSignedIntegerTypes.concat([
- 'BigUint64'
- ]);
- var signedElementTypes = unclampedUnsignedIntegerTypes;
-
- test('IsBigIntElementType', function (t) {
- forEach(bigIntTypes, function (type) {
- t.equal(
- ES.IsBigIntElementType(type),
- true,
- debug(type) + ' is a BigInt element type'
- );
- });
-
- forEach(numberTypes, function (type) {
- t.equal(
- ES.IsBigIntElementType(type),
- false,
- debug(type) + ' is not a BigInt element type'
- );
- });
-
- t.end();
- });
-
- test('IsUnsignedElementType', function (t) {
- forEach(unsignedElementTypes, function (type) {
- t.equal(
- ES.IsUnsignedElementType(type),
- true,
- debug(type) + ' is an unsigned element type'
- );
- });
-
- forEach(signedElementTypes, function (type) {
- t.equal(
- ES.IsUnsignedElementType(type),
- false,
- debug(type) + ' is not an unsigned element type'
- );
- });
-
- t.end();
- });
-
- test('IsUnclampedIntegerElementType', function (t) {
- forEach(unclampedIntegerTypes, function (type) {
- t.equal(
- ES.IsUnclampedIntegerElementType(type),
- true,
- debug(type) + ' is an unclamped integer element type'
- );
- });
-
- forEach(clampedTypes.concat(nonIntegerTypes), function (type) {
- t.equal(
- ES.IsUnclampedIntegerElementType(type),
- false,
- debug(type) + ' is not an unclamped integer element type'
- );
- });
-
- t.end();
- });
-
- test('IsNonNegativeInteger', function (t) {
- forEach(v.notNonNegativeIntegers, function (nonIntegerNumber) {
- t.equal(
- ES.IsNonNegativeInteger(nonIntegerNumber),
- false,
- debug(nonIntegerNumber) + ' is not a non-negative integer'
- );
- });
-
- forEach(v.zeroes.concat(v.integerNumbers), function (nonNegativeInteger) {
- t.equal(
- ES.IsNonNegativeInteger(nonNegativeInteger),
- true,
- debug(nonNegativeInteger) + ' is a non-negative integer'
- );
- });
-
- t.end();
- });
-
- test('IsNoTearConfiguration', function (t) {
- forEach(unclampedIntegerTypes, function (type) {
- t.equal(
- ES.IsNoTearConfiguration(type),
- true,
- debug(type) + ' with any order is a no-tear configuration'
- );
- });
-
- forEach(bigIntTypes, function (type) {
- t.equal(
- ES.IsNoTearConfiguration(type, 'Init'),
- false,
- debug(type) + ' with ' + debug('Init') + ' is not a no-tear configuration'
- );
-
- t.equal(
- ES.IsNoTearConfiguration(type, 'Unordered'),
- false,
- debug(type) + ' with ' + debug('Unordered') + ' is not a no-tear configuration'
- );
-
- t.equal(
- ES.IsNoTearConfiguration(type),
- true,
- debug(type) + ' with any other order is a no-tear configuration'
- );
- });
-
- forEach(clampedTypes, function (type) {
- t.equal(
- ES.IsNoTearConfiguration(type),
- false,
- debug(type) + ' with any order is not a no-tear configuration'
- );
- });
-
- t.end();
- });
-
- test('LengthOfArrayLike', function (t) {
- forEach(v.primitives, function (primitive) {
- t['throws'](
- function () { ES.LengthOfArrayLike(primitive); },
- TypeError,
- debug(primitive) + ' is not an Object'
- );
- });
-
- t.equal(ES.LengthOfArrayLike([]), 0);
- t.equal(ES.LengthOfArrayLike([1]), 1);
- t.equal(ES.LengthOfArrayLike({ length: 42 }), 42);
-
- t.end();
- });
-
- test('Number::add', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.add(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.add(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.add(+Infinity, +Infinity), +Infinity, '+∞ + +∞ is +∞');
- t.equal(ES.Number.add(-Infinity, -Infinity), -Infinity, '-∞ + -∞ is -∞');
- t.equal(ES.Number.add(+Infinity, -Infinity), NaN, '+∞ + -∞ is NaN');
- t.equal(ES.Number.add(-Infinity, +Infinity), NaN, '-∞ + +∞ is NaN');
-
- t.equal(ES.Number.add(+0, +0), +0, '0 + 0 is +0');
- t.equal(ES.Number.add(+0, -0), +0, '0 + -0 is +0');
- t.equal(ES.Number.add(-0, +0), +0, '-0 + 0 is +0');
- t.equal(ES.Number.add(-0, -0), -0, '-0 + -0 is -0');
-
- forEach(v.numbers, function (number) {
- if (number !== 0) {
- t.equal(ES.Number.add(number, 0), number, debug(number) + ' + 0 adds to ' + number);
- }
- t.equal(ES.Number.add(number, 1), number + 1, debug(number) + ' + 1 adds to ' + (number + 1));
- t.equal(ES.Number.add(1, number), number + 1, '1 + ' + debug(number) + ' adds to ' + (number + 1));
- t.equal(ES.Number.add(number, -42), number - 42, debug(number) + ' + -42 adds to ' + (number - 42));
- t.equal(ES.Number.add(-42, number), number - 42, '-42 + ' + debug(number) + ' adds to ' + (number - 42));
- });
-
- t.end();
- });
-
- test('Number::bitwiseAND', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.bitwiseAND(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.bitwiseAND(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.bitwiseAND(1, 2), 1 & 2);
-
- t.end();
- });
-
- test('Number::bitwiseNOT', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.bitwiseNOT(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach(v.int32s, function (int32) {
- t.equal(ES.Number.bitwiseNOT(int32), ~int32, debug(int32) + ' becomes ~' + debug(int32));
- });
-
- t.end();
- });
-
- test('Number::bitwiseOR', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.bitwiseOR(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.bitwiseOR(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.bitwiseOR(1, 2), 1 | 2);
-
- t.end();
- });
-
- test('Number::bitwiseXOR', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.bitwiseXOR(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.bitwiseXOR(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.bitwiseXOR(1, 2), 1 ^ 2);
-
- t.end();
- });
-
- test('Number::divide', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.divide(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.divide(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.divide(Infinity, Infinity), NaN, '∞ / ∞ is NaN');
- t.equal(ES.Number.divide(-Infinity, Infinity), NaN, '-∞ / ∞ is NaN');
- t.equal(ES.Number.divide(Infinity, -Infinity), NaN, '∞ / -∞ is NaN');
- t.equal(ES.Number.divide(-Infinity, -Infinity), NaN, '-∞ / -∞ is NaN');
-
- t.equal(ES.Number.divide(NaN, NaN), NaN, 'NaN / NaN is NaN');
-
- t.equal(ES.Number.divide(+Infinity, +0), +Infinity, '+∞ / +0 is +∞');
- t.equal(ES.Number.divide(-Infinity, -0), +Infinity, '-∞ / -0 is +∞');
- t.equal(ES.Number.divide(+Infinity, -0), -Infinity, '+∞ / -0 is -∞');
- t.equal(ES.Number.divide(-Infinity, +0), -Infinity, '-∞ / +0 is -∞');
-
- t.equal(ES.Number.divide(+0, +Infinity), +0, '+0 / +∞ is +0');
- t.equal(ES.Number.divide(-0, -Infinity), +0, '-0 / -∞ is +0');
- t.equal(ES.Number.divide(-0, +Infinity), -0, '-0 / +∞ is -0');
- t.equal(ES.Number.divide(+0, -Infinity), -0, '+0 / -∞ is -0');
-
- forEach(v.numbers, function (number) {
- if (number !== 0 && isFinite(number)) {
- t.equal(ES.Number.divide(number, number), 1, debug(number) + ' divided by itself is 1');
- t.equal(ES.Number.divide(number, 2), number / 2, debug(number) + ' divided by 2 is half itself');
- }
- });
-
- t.end();
- });
-
- test('Number::equal', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.equal(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.equal(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.equal(Infinity, Infinity), true, '∞ === ∞');
- t.equal(ES.Number.equal(-Infinity, Infinity), false, '-∞ !== ∞');
- t.equal(ES.Number.equal(Infinity, -Infinity), false, '∞ !== -∞');
- t.equal(ES.Number.equal(-Infinity, -Infinity), true, '-∞ === -∞');
-
- t.equal(ES.Number.equal(NaN, NaN), false, 'NaN !== NaN');
-
- t.equal(ES.Number.equal(Infinity, 0), false, '∞ !== 0');
- t.equal(ES.Number.equal(-Infinity, -0), false, '-∞ !== -0');
- t.equal(ES.Number.equal(Infinity, -0), false, '∞ !== -0');
- t.equal(ES.Number.equal(-Infinity, 0), false, '-∞ !== 0');
-
- t.equal(ES.Number.equal(+0, +0), true, '+0 === +0');
- t.equal(ES.Number.equal(+0, -0), true, '+0 === -0');
- t.equal(ES.Number.equal(-0, +0), true, '-0 === +0');
- t.equal(ES.Number.equal(-0, -0), true, '-0 === -0');
-
- forEach(v.numbers, function (number) {
- if (isFinite(number)) {
- t.equal(ES.Number.equal(number, number), true, debug(number) + ' is equal to itself');
- t.equal(ES.Number.equal(number, number + 1), false, debug(number) + ' is not equal to itself plus 1');
- }
- });
-
- t.end();
- });
-
- test('Number::exponentiate', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.exponentiate(nonNumber, 0); },
- TypeError,
- 'base: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.exponentiate(0, nonNumber); },
- TypeError,
- 'exponent: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.exponentiate(0, 42), 0, '+0 ** 42 is +0');
- t.equal(ES.Number.exponentiate(0, -42), Infinity, '+0 ** 42 is +∞');
- t.equal(ES.Number.exponentiate(-0, 42), 0, '-0 ** 42 is +0');
- t.equal(ES.Number.exponentiate(-0, 41), -0, '-0 ** 41 is -0');
- t.equal(ES.Number.exponentiate(-0, -42), Infinity, '-0 ** 42 is +∞');
- t.equal(ES.Number.exponentiate(-0, -41), -Infinity, '-0 ** 41 is -∞');
-
- t.equal(ES.Number.exponentiate(Infinity, 0), 1, '+∞ ** 0 is 1');
- t.equal(ES.Number.exponentiate(Infinity, -0), 1, '+∞ ** -0 is 1');
- t.equal(ES.Number.exponentiate(-Infinity, 0), 1, '-∞ ** 0 is 1');
- t.equal(ES.Number.exponentiate(-Infinity, -0), 1, '-∞ ** -0 is 1');
-
- t.equal(ES.Number.exponentiate(Infinity, 1), Infinity, '+∞ ** 1 is +∞');
- t.equal(ES.Number.exponentiate(Infinity, 2), Infinity, '+∞ ** 2 is +∞');
- t.equal(ES.Number.exponentiate(Infinity, -1), +0, '+∞ ** -1 is +0');
- t.equal(ES.Number.exponentiate(Infinity, -2), +0, '+∞ ** -2 is +0');
-
- t.equal(ES.Number.exponentiate(-Infinity, 1), -Infinity, '-∞ ** 1 is -∞');
- t.equal(ES.Number.exponentiate(-Infinity, 2), Infinity, '-∞ ** 2 is +∞');
- t.equal(ES.Number.exponentiate(-Infinity, -1), -0, '-∞ ** --1 is -0');
- t.equal(ES.Number.exponentiate(-Infinity, -2), +0, '-∞ ** --2 is +0');
-
- t.equal(ES.Number.exponentiate(1.1, Infinity), Infinity, '1.1 ** +∞ is +∞');
- t.equal(ES.Number.exponentiate(1.1, -Infinity), 0, '1.1 ** -∞ is +0');
- t.equal(ES.Number.exponentiate(-1.1, Infinity), Infinity, '-1.1 ** +∞ is +∞');
- t.equal(ES.Number.exponentiate(-1.1, -Infinity), 0, '-1.1 ** -∞ is +0');
-
- t.equal(ES.Number.exponentiate(1, Infinity), NaN, '1 ** +∞ is NaN');
- t.equal(ES.Number.exponentiate(1, -Infinity), NaN, '1 ** -∞ is NaN');
- t.equal(ES.Number.exponentiate(-1, Infinity), NaN, '-1 ** +∞ is NaN');
- t.equal(ES.Number.exponentiate(-1, -Infinity), NaN, '-1 ** -∞ is NaN');
-
- t.equal(ES.Number.exponentiate(0.9, Infinity), 0, '0.9 ** +∞ is +0');
- t.equal(ES.Number.exponentiate(0.9, -Infinity), Infinity, '0.9 ** -∞ is ∞');
- t.equal(ES.Number.exponentiate(-0.9, Infinity), 0, '-0.9 ** +∞ is +0');
- t.equal(ES.Number.exponentiate(-0.9, -Infinity), Infinity, '-0.9 ** -∞ is +∞');
-
- forEach(v.numbers.concat(NaN), function (number) {
- t.equal(ES.Number.exponentiate(number, NaN), NaN, debug(number) + ' ** NaN is NaN');
-
- if (number !== 0) {
- t.equal(ES.Number.exponentiate(number, 0), 1, debug(number) + ' ** +0 is 1');
- t.equal(ES.Number.exponentiate(number, -0), 1, debug(number) + ' ** -0 is 1');
- t.equal(ES.Number.exponentiate(NaN, number), NaN, 'NaN ** ' + debug(number) + ' is NaN');
- }
-
- if (number !== 0 && isFinite(number)) {
- t.equal(ES.Number.equal(number, number), true, debug(number) + ' is equal to itself');
- t.equal(ES.Number.equal(number, number + 1), false, debug(number) + ' is not equal to itself plus 1');
- }
- });
-
- t.end();
- });
-
- test('Number::leftShift', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.leftShift(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.leftShift(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach([0].concat(v.int32s), function (int32) {
- forEach([1, 3, 5, 31, 32, 33], function (bits) {
- t.equal(ES.Number.leftShift(int32, bits), int32 << bits, debug(int32) + ' << ' + bits + ' is ' + debug(int32 << bits));
- });
- });
-
- t.end();
- });
-
- test('Number::lessThan', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.lessThan(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.lessThan(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.lessThan(+0, -0), false, '+0 < -0 is false');
- t.equal(ES.Number.lessThan(+0, +0), false, '+0 < +0 is false');
- t.equal(ES.Number.lessThan(-0, +0), false, '-0 < +0 is false');
- t.equal(ES.Number.lessThan(-0, -0), false, '-0 < -0 is false');
-
- t.equal(ES.Number.lessThan(NaN, NaN), undefined, 'NaN < NaN is undefined');
-
- t.equal(ES.Number.lessThan(+Infinity, +Infinity), false, '+∞ < +∞ is false');
- t.equal(ES.Number.lessThan(+Infinity, -Infinity), false, '+∞ < -∞ is false');
- t.equal(ES.Number.lessThan(-Infinity, +Infinity), true, '-∞ < +∞ is true');
- t.equal(ES.Number.lessThan(-Infinity, -Infinity), false, '-∞ < -∞ is false');
-
- forEach(v.numbers.concat(v.infinities), function (number) {
- t.equal(ES.Number.lessThan(NaN, number), undefined, 'NaN < ' + debug(number) + ' is undefined');
- t.equal(ES.Number.lessThan(number, NaN), undefined, debug(number) + ' < NaN is undefined');
-
- t.equal(ES.Number.lessThan(number, number), false, debug(number) + ' is not less than itself');
-
- if (isFinite(number)) {
- t.equal(ES.Number.lessThan(number, number + 1), true, debug(number) + ' < ' + debug(number + 1) + ' is true');
- t.equal(ES.Number.lessThan(number + 1, number), false, debug(number + 1) + ' < ' + debug(number) + ' is false');
-
- t.equal(ES.Number.lessThan(Infinity, number), false, '+∞ < ' + debug(number) + ' is false');
- t.equal(ES.Number.lessThan(number, Infinity), true, debug(number) + ' < +∞ is true');
- t.equal(ES.Number.lessThan(-Infinity, number), true, '-∞ < ' + debug(number) + ' is true');
- t.equal(ES.Number.lessThan(number, -Infinity), false, debug(number) + ' < -∞ is false');
- }
- });
-
- t.end();
- });
-
- test('Number::multiply', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.multiply(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.multiply(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach([+0, -0, 1, -1], function (x) {
- var expected = x === 0 ? NaN : Infinity;
- t.equal(ES.Number.multiply(Infinity, x), expected, '+∞ * ' + debug(x) + ' is ' + debug(expected));
- t.equal(ES.Number.multiply(x, Infinity), expected, debug(x) + ' * +∞ is ' + debug(expected));
- t.equal(ES.Number.multiply(-Infinity, x), -expected, '-∞ * ' + debug(x) + ' is ' + debug(expected));
- t.equal(ES.Number.multiply(x, -Infinity), -expected, debug(x) + ' * -∞ is ' + debug(expected));
- });
-
- t.equal(ES.Number.multiply(Infinity, Infinity), Infinity, '+∞ * +∞ is +∞');
- t.equal(ES.Number.multiply(Infinity, -Infinity), -Infinity, '+∞ * -∞ is -∞');
- t.equal(ES.Number.multiply(-Infinity, Infinity), -Infinity, '-∞ * +∞ is -∞');
- t.equal(ES.Number.multiply(-Infinity, -Infinity), Infinity, '-∞ * -∞ is +∞');
-
- t.equal(ES.Number.multiply(+0, +0), +0, '0 * 0 is +0');
- t.equal(ES.Number.multiply(+0, -0), -0, '0 * -0 is -0');
- t.equal(ES.Number.multiply(-0, +0), -0, '-0 * 0 is -0');
- t.equal(ES.Number.multiply(-0, -0), +0, '-0 * -0 is +0');
-
- forEach(v.numbers.concat(NaN), function (number) {
- t.equal(ES.Number.multiply(NaN, number), NaN, 'NaN * ' + debug(number) + ' is NaN');
- t.equal(ES.Number.multiply(number, NaN), NaN, debug(number) + ' * NaN is NaN');
-
- if (number !== 0 && isFinite(number)) {
- t.equal(ES.Number.multiply(number, 0), number > 0 ? 0 : -0, debug(number) + ' * +0 produces ' + (number > 0 ? '+0' : '-0'));
- t.equal(ES.Number.multiply(0, number), number > 0 ? 0 : -0, '+0 * ' + debug(number) + ' produces ' + (number > 0 ? '+0' : '-0'));
- t.equal(ES.Number.multiply(number, -0), number > 0 ? -0 : 0, debug(number) + ' * -0 produces ' + (number > 0 ? '-0' : '+0'));
- t.equal(ES.Number.multiply(-0, number), number > 0 ? -0 : 0, '-0 * ' + debug(number) + ' produces ' + (number > 0 ? '-0' : '+0'));
- t.equal(ES.Number.multiply(number, 1), number, debug(number) + ' * 1 produces itself');
- t.equal(ES.Number.multiply(number, -42), number * -42, debug(number) + ' * -42 produces ' + (number - 42));
- }
- });
-
- t.end();
- });
-
- test('Number::remainder', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.remainder(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.remainder(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.remainder(NaN, NaN), NaN, 'NaN % NaN is NaN');
-
- t.equal(ES.Number.remainder(+0, +0), NaN, '+0 % +0 is NaN');
- t.equal(ES.Number.remainder(+0, -0), NaN, '+0 % -0 is NaN');
- t.equal(ES.Number.remainder(-0, +0), NaN, '-0 % +0 is NaN');
- t.equal(ES.Number.remainder(-0, -0), NaN, '-0 % -0 is NaN');
-
- forEach(v.numbers, function (number) {
- t.equal(ES.Number.remainder(number, NaN), NaN, debug(number) + ' % NaN is NaN');
- t.equal(ES.Number.remainder(NaN, number), NaN, 'NaN % ' + debug(number) + ' is NaN');
-
- t.equal(ES.Number.remainder(Infinity, number), NaN, '+∞ % ' + debug(number) + ' is NaN');
- t.equal(ES.Number.remainder(-Infinity, number), NaN, '-∞ % ' + debug(number) + ' is NaN');
- t.equal(ES.Number.remainder(number, 0), NaN, debug(number) + ' % +0 is NaN');
- t.equal(ES.Number.remainder(number, -0), NaN, debug(number) + ' % -0 is NaN');
-
- if (isFinite(number)) {
- t.equal(ES.Number.remainder(number, Infinity), number, debug(number) + ' % +∞ is ' + debug(number));
- t.equal(ES.Number.remainder(number, -Infinity), number, debug(number) + ' % -∞ is ' + debug(number));
- if (number !== 0) {
- t.equal(ES.Number.remainder(0, number), 0, '+0 % ' + debug(number) + ' is ' + debug(number));
- t.equal(ES.Number.remainder(-0, number), -0, '-0 % ' + debug(number) + ' is ' + debug(number));
- t.looseEqual(ES.Number.remainder(number * 2, number), 0, debug(number) + ' % ' + debug(number * 2) + ' is 0');
- }
- }
- });
-
- t.end();
- });
-
- test('Number::sameValue', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.sameValue(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.sameValue(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.ok(ES.Number.sameValue(NaN, NaN), true, 'NaN is the sameValue as NaN');
-
- t.equal(ES.Number.sameValue(+0, +0), true, '+0 is sameValue as +0');
- t.equal(ES.Number.sameValue(+0, -0), false, '+0 is not sameValue as -0');
- t.equal(ES.Number.sameValue(-0, +0), false, '-0 is not sameValue as +0');
- t.equal(ES.Number.sameValue(-0, -0), true, '-0 is sameValue as -0');
-
- forEach(v.numbers, function (number) {
- t.ok(ES.Number.sameValue(number, number), debug(number) + ' is the sameValue as itself');
- });
-
- t.end();
- });
-
- test('Number::sameValueZero', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.sameValueZero(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.sameValueZero(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.ok(ES.Number.sameValueZero(NaN, NaN), true, 'NaN is the sameValueZero as NaN');
-
- t.equal(ES.Number.sameValueZero(+0, +0), true, '+0 is sameValueZero as +0');
- t.equal(ES.Number.sameValueZero(+0, -0), true, '+0 is sameValueZero as -0');
- t.equal(ES.Number.sameValueZero(-0, +0), true, '-0 is sameValueZero as +0');
- t.equal(ES.Number.sameValueZero(-0, -0), true, '-0 is sameValueZero as -0');
-
- forEach(v.numbers, function (number) {
- t.ok(ES.Number.sameValueZero(number, number), debug(number) + ' is the sameValueZero as itself');
- });
-
- t.end();
- });
-
- test('Number::signedRightShift', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.signedRightShift(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.signedRightShift(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach([0].concat(v.int32s), function (int32) {
- forEach([1, 3, 5, 31, 32, 33], function (bits) {
- t.equal(ES.Number.signedRightShift(int32, bits), int32 >> bits, debug(int32) + ' >> ' + bits + ' is ' + debug(int32 >> bits));
- });
- });
-
- t.end();
- });
-
- test('Number::subtract', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.subtract(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.subtract(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.subtract(+0, +0), +0, '0 - 0 is +0');
- t.equal(ES.Number.subtract(+0, -0), +0, '0 - -0 is +0');
- t.equal(ES.Number.subtract(-0, +0), -0, '-0 - 0 is -0');
- t.equal(ES.Number.subtract(-0, -0), +0, '-0 - -0 is +0');
-
- forEach(v.numbers, function (number) {
- if (number !== 0) {
- t.equal(ES.Number.subtract(number, 0), number, debug(number) + ' - 0 produces ' + number);
- }
- t.equal(ES.Number.subtract(number, 1), number - 1, debug(number) + ' - 1 produces ' + (number + 1));
- t.equal(ES.Number.subtract(number, 42), number - 42, debug(number) + ' - 42 produces ' + (number - 42));
- });
-
- t.end();
- });
-
- test('Number::toString', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.toString(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach(v.numbers, function (number) {
- t.equal(ES.Number.toString(number), String(number), debug(number) + ' stringifies to ' + number);
- });
-
- t.end();
- });
-
- test('Number::unaryMinus', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.unaryMinus(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.Number.unaryMinus(NaN), NaN, 'NaN produces NaN');
-
- forEach(v.numbers, function (number) {
- t.equal(ES.Number.unaryMinus(number), -number, debug(number) + ' produces -' + debug(number));
- });
-
- t.end();
- });
-
- test('Number::unsignedRightShift', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.Number.unsignedRightShift(nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.Number.unsignedRightShift(0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach([0].concat(v.int32s), function (int32) {
- forEach([1, 3, 5, 31, 32, 33], function (bits) {
- t.equal(ES.Number.unsignedRightShift(int32, bits), int32 >>> bits, debug(int32) + ' >>> ' + bits + ' is ' + debug(int32 >>> bits));
- });
- });
-
- t.end();
- });
-
- test('NumberToBigInt', function (t) {
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.NumberToBigInt(nonNumber); },
- TypeError,
- debug(nonNumber) + ' is not a Number'
- );
- });
-
- forEach(v.nonIntegerNumbers, function (nonIntegerNumber) {
- t['throws'](
- function () { ES.NumberToBigInt(nonIntegerNumber); },
- RangeError,
- debug(nonIntegerNumber) + ' is not an integer'
- );
- });
-
- t.test('actual BigInts', { skip: !hasBigInts }, function (st) {
- forEach(v.integerNumbers, function (int) {
- if (int >= 1e17) {
- // BigInt(1e17) throws on node v10.4 - v10.8
- try {
- st.equal(ES.NumberToBigInt(int), $BigInt(int), debug(int) + ' becomes ' + debug($BigInt(int)));
- } catch (e) {
- st['throws'](
- function () { $BigInt(int); },
- RangeError,
- debug(int) + ' is too large on this engine to convert into a BigInt'
- );
- }
- } else {
- st.equal(ES.NumberToBigInt(int), $BigInt(int), debug(int) + ' becomes ' + debug($BigInt(int)));
- }
- });
- st.end();
- });
-
- t.end();
- });
-
- test('OrdinaryObjectCreate', function (t) {
- forEach(v.nonNullPrimitives, function (value) {
- t['throws'](
- function () { ES.OrdinaryObjectCreate(value); },
- TypeError,
- debug(value) + ' is not null, or an object'
- );
- });
-
- t.test('proto arg', function (st) {
- var Parent = function Parent() {};
- Parent.prototype.foo = {};
- var child = ES.OrdinaryObjectCreate(Parent.prototype);
- st.equal(child instanceof Parent, true, 'child is instanceof Parent');
- st.equal(child.foo, Parent.prototype.foo, 'child inherits properties from Parent.prototype');
-
- st.end();
- });
-
- t.test('internal slots arg', function (st) {
- st.doesNotThrow(function () { ES.OrdinaryObjectCreate({}, []); }, 'an empty slot list is valid');
-
- st['throws'](
- function () { ES.OrdinaryObjectCreate({}, ['a']); },
- SyntaxError,
- 'internal slots are not supported'
- );
-
- st.end();
- });
-
- t.test('null proto', { skip: !$setProto }, function (st) {
- st.equal('toString' in {}, true, 'normal objects have toString');
- st.equal('toString' in ES.OrdinaryObjectCreate(null), false, 'makes a null object');
-
- st.end();
- });
-
- t.test('null proto when no native Object.create', { skip: $setProto }, function (st) {
- st['throws'](
- function () { ES.OrdinaryObjectCreate(null); },
- SyntaxError,
- 'without a native Object.create, can not create null objects'
- );
-
- st.end();
- });
-
- t.end();
- });
-
- test('SameValueNonNumeric', function (t) {
- var willThrow = [
- [3, 4],
- [NaN, 4],
- [4, ''],
- ['abc', true],
- [{}, false]
- ];
- forEach(willThrow, function (nums) {
- t['throws'](function () { return ES.SameValueNonNumeric.apply(ES, nums); }, TypeError, 'value must be same type and non-number');
- });
-
- forEach(v.objects.concat(v.nonNumberPrimitives), function (val) {
- t.equal(val === val, ES.SameValueNonNumeric(val, val), debug(val) + ' is SameValueNonNumeric to itself');
- });
-
- t.end();
- });
-
- test('StringPad', function (t) {
- t.equal(ES.StringPad('a', 3, undefined, 'start'), ' a');
- t.equal(ES.StringPad('a', 3, undefined, 'end'), 'a ');
- t.equal(ES.StringPad('a', 3, '0', 'start'), '00a');
- t.equal(ES.StringPad('a', 3, '0', 'end'), 'a00');
- t.equal(ES.StringPad('a', 3, '012', 'start'), '01a');
- t.equal(ES.StringPad('a', 3, '012', 'end'), 'a01');
- t.equal(ES.StringPad('a', 7, '012', 'start'), '012012a');
- t.equal(ES.StringPad('a', 7, '012', 'end'), 'a012012');
-
- t.end();
- });
-
- test('thisBigIntValue', { skip: !hasBigInts }, function (t) {
- t.equal(ES.thisBigIntValue(BigInt(42)), BigInt(42));
- t.equal(ES.thisBigIntValue(Object(BigInt(42))), BigInt(42));
-
- forEach(v.nonBigInts, function (nonBigInt) {
- t['throws'](
- function () { ES.thisBigIntValue(nonBigInt); },
- TypeError,
- debug(nonBigInt) + ' is not a BigInt'
- );
- });
-
- t.end();
- });
-
- test('ToInteger', function (t) {
- forEach([0, -0, NaN], function (num) {
- t.equal(0, ES.ToInteger(num), debug(num) + ' returns +0');
- });
- forEach([Infinity, 42], function (num) {
- t.equal(num, ES.ToInteger(num), debug(num) + ' returns itself');
- t.equal(-num, ES.ToInteger(-num), '-' + debug(num) + ' returns itself');
- });
- t.equal(3, ES.ToInteger(Math.PI), 'pi returns 3');
- t['throws'](function () { return ES.ToInteger(v.uncoercibleObject); }, TypeError, 'uncoercibleObject throws');
- t.end();
- });
-
- test('ToNumber', function (t) {
- testToNumber(t, ES, ES.ToNumber);
-
- forEach(v.bigints, function (bigInt) {
- t['throws'](
- function () { ES.ToNumber(bigInt); },
- TypeError,
- 'ToNumber of ' + debug(bigInt) + ' throws'
- );
-
- var boxed = Object(bigInt);
- t['throws'](
- function () { ES.ToNumber(boxed); },
- TypeError,
- 'ToNumber of ' + debug(boxed) + ' throws'
- );
- });
-
- t.end();
- });
-
- test('UTF16DecodeSurrogatePair', function (t) {
- t['throws'](
- function () { ES.UTF16DecodeSurrogatePair('a'.charCodeAt(0), trailingPoo.charCodeAt(0)); },
- TypeError,
- '"a" is not a leading surrogate'
- );
- t['throws'](
- function () { ES.UTF16DecodeSurrogatePair(leadingPoo.charCodeAt(0), 'b'.charCodeAt(0)); },
- TypeError,
- '"b" is not a trailing surrogate'
- );
-
- t.equal(ES.UTF16DecodeSurrogatePair(leadingPoo.charCodeAt(0), trailingPoo.charCodeAt(0)), wholePoo);
-
- t.end();
- });
-
- test('NumberBitwiseOp', function (t) {
- t['throws'](
- function () { ES.NumberBitwiseOp('invalid', 0, 0); },
- TypeError,
- 'throws with an invalid op'
- );
-
- forEach(v.nonNumbers, function (nonNumber) {
- t['throws'](
- function () { ES.NumberBitwiseOp('&', nonNumber, 0); },
- TypeError,
- 'x: ' + debug(nonNumber) + ' is not a Number'
- );
- t['throws'](
- function () { ES.NumberBitwiseOp('&', 0, nonNumber); },
- TypeError,
- 'y: ' + debug(nonNumber) + ' is not a Number'
- );
- });
-
- t.equal(ES.NumberBitwiseOp('&', 1, 2), 1 & 2);
- t.equal(ES.NumberBitwiseOp('|', 1, 2), 1 | 2);
- t.equal(ES.NumberBitwiseOp('^', 1, 2), 1 ^ 2);
-
- t.end();
- });
-
- test('ToNumeric', function (t) {
- testToNumber(t, ES, ES.ToNumeric);
-
- t.test('BigInts', { skip: !hasBigInts }, function (st) {
- st.equal(ES.ToNumeric(BigInt(42)), BigInt(42), debug(BigInt(42)) + ' is ' + debug(BigInt(42)));
- st.equal(ES.ToNumeric(Object(BigInt(42))), BigInt(42), debug(Object(BigInt(42))) + ' is ' + debug(BigInt(42)));
-
- var valueOf = { valueOf: function () { return BigInt(7); } };
- st.equal(ES.ToNumeric(valueOf), valueOf.valueOf(), debug(valueOf) + ' is ' + debug(valueOf.valueOf()));
-
- var toPrimitive = {};
- var value = BigInt(-2);
- toPrimitive[Symbol.toPrimitive] = function () { return value; };
- st.equal(ES.ToNumeric(toPrimitive), value, debug(toPrimitive) + ' is ' + debug(value));
-
- st.end();
- });
-
- t.end();
- });
-
- test('UTF16DecodeString', function (t) {
- forEach(v.nonStrings, function (nonString) {
- t['throws'](
- function () { ES.UTF16DecodeString(nonString); },
- TypeError,
- debug(nonString) + ' is not a String'
- );
- });
-
- t.deepEqual(ES.UTF16DecodeString('abc'), ['a', 'b', 'c'], 'code units get split');
- t.deepEqual(ES.UTF16DecodeString('a' + wholePoo + 'c'), ['a', wholePoo, 'c'], 'code points get split too');
-
- t.end();
- });
-};
-
-module.exports = {
- es5: es5,
- es2015: es2015,
- es2016: es2016,
- es2017: es2017,
- es2018: es2018,
- es2019: es2019,
- es2020: es2020
-};
diff --git a/node_modules/eslint-module-utils/.eslintrc b/node_modules/eslint-module-utils/.eslintrc
index 3fd3f5e..fa000aa 100644
--- a/node_modules/eslint-module-utils/.eslintrc
+++ b/node_modules/eslint-module-utils/.eslintrc
@@ -2,4 +2,14 @@
"parserOptions": {
"ecmaVersion": 6,
},
+ "rules": {
+ "comma-dangle": ["error", {
+ "arrays": "always-multiline",
+ "objects": "always-multiline",
+ "imports": "always-multiline",
+ "exports": "always-multiline",
+ "functions": "never"
+ }],
+ "no-console": 1,
+ }
}
diff --git a/node_modules/eslint-module-utils/.eslintrc.yml b/node_modules/eslint-module-utils/.eslintrc.yml
deleted file mode 100644
index d30c264..0000000
--- a/node_modules/eslint-module-utils/.eslintrc.yml
+++ /dev/null
@@ -1,3 +0,0 @@
----
-rules:
- no-console: 1
diff --git a/node_modules/eslint-module-utils/.nycrc b/node_modules/eslint-module-utils/.nycrc
index 8147f38..5d75e21 100644
--- a/node_modules/eslint-module-utils/.nycrc
+++ b/node_modules/eslint-module-utils/.nycrc
@@ -1,7 +1,7 @@
{
"all": true,
"check-coverage": false,
- "reporter": ["text-summary", "text", "html", "json"],
+ "reporter": ["text-summary", "lcov", "text", "html", "json"],
"require": [
"babel-register"
],
@@ -10,6 +10,10 @@
"exclude": [
"coverage",
"test",
- "tests"
+ "tests",
+ "resolvers/*/test",
+ "scripts",
+ "memo-parser",
+ "lib"
]
}
diff --git a/node_modules/eslint-module-utils/CHANGELOG.md b/node_modules/eslint-module-utils/CHANGELOG.md
index 9160055..bfa7e80 100644
--- a/node_modules/eslint-module-utils/CHANGELOG.md
+++ b/node_modules/eslint-module-utils/CHANGELOG.md
@@ -5,6 +5,18 @@
## Unreleased
+## v2.7.1 - 2021-10-13
+
+### Fixed
+ - fixed SyntaxError in node <= 6: Unexpected token ) in parse.js ([#2261], thanks [@VitusFW])
+
+## v2.7.0 - 2021-10-11
+
+### Added
+- `fileExistsWithCaseSync`: add `strict` argument ([#1262], thanks [@sergei-startsev])
+- add `visit`, to support dynamic imports ([#1660], [#2212], thanks [@maxkomarychev], [@aladdin-add], [@Hypnosphi])
+- create internal replacement for `pkg-up` and `read-pkg-up` ([#2047], [@mgwalker])
+
## v2.6.2 - 2021-08-08
### Fixed
@@ -90,10 +102,14 @@
### Fixed
- `unambiguous.test()` regex is now properly in multiline mode
+[#2261]: https://github.com/import-js/eslint-plugin-import/pull/2261
+[#2212]: https://github.com/import-js/eslint-plugin-import/pull/2212
[#2160]: https://github.com/import-js/eslint-plugin-import/pull/2160
+[#2047]: https://github.com/import-js/eslint-plugin-import/pull/2047
[#2026]: https://github.com/import-js/eslint-plugin-import/pull/2026
[#1786]: https://github.com/import-js/eslint-plugin-import/pull/1786
[#1671]: https://github.com/import-js/eslint-plugin-import/pull/1671
+[#1660]: https://github.com/import-js/eslint-plugin-import/pull/1660
[#1606]: https://github.com/import-js/eslint-plugin-import/pull/1606
[#1602]: https://github.com/import-js/eslint-plugin-import/pull/1602
[#1591]: https://github.com/import-js/eslint-plugin-import/pull/1591
@@ -102,6 +118,7 @@
[#1409]: https://github.com/import-js/eslint-plugin-import/pull/1409
[#1356]: https://github.com/import-js/eslint-plugin-import/pull/1356
[#1290]: https://github.com/import-js/eslint-plugin-import/pull/1290
+[#1262]: https://github.com/import-js/eslint-plugin-import/pull/1262
[#1218]: https://github.com/import-js/eslint-plugin-import/pull/1218
[#1166]: https://github.com/import-js/eslint-plugin-import/issues/1166
[#1160]: https://github.com/import-js/eslint-plugin-import/pull/1160
@@ -114,11 +131,16 @@
[@brettz9]: https://github.com/brettz9
[@christophercurrie]: https://github.com/christophercurrie
[@hulkish]: https://github.com/hulkish
+[@Hypnosphi]: https://github.com/Hypnosphi
[@iamnapo]: https://github.com/iamnapo
[@JounQin]: https://github.com/JounQin
[@kaiyoma]: https://github.com/kaiyoma
[@manuth]: https://github.com/manuth
+[@maxkomarychev]: https://github.com/maxkomarychev
+[@mgwalker]: https://github.com/mgwalker
[@pmcelhaney]: https://github.com/pmcelhaney
+[@sergei-startsev]: https://github.com/sergei-startsev
[@sompylasar]: https://github.com/sompylasar
[@timkraut]: https://github.com/timkraut
-[@vikr01]: https://github.com/vikr01
\ No newline at end of file
+[@vikr01]: https://github.com/vikr01
+[@VitusFW]: https://github.com/VitusFW
diff --git a/node_modules/eslint-module-utils/module-require.js b/node_modules/eslint-module-utils/module-require.js
index 70e5510..c03671c 100644
--- a/node_modules/eslint-module-utils/module-require.js
+++ b/node_modules/eslint-module-utils/module-require.js
@@ -18,12 +18,12 @@
const eslintPath = require.resolve('eslint');
const eslintModule = createModule(eslintPath);
return require(Module._resolveFilename(p, eslintModule));
- } catch(err) { /* ignore */ }
+ } catch (err) { /* ignore */ }
try {
// try relative to entry point
return require.main.require(p);
- } catch(err) { /* ignore */ }
+ } catch (err) { /* ignore */ }
// finally, try from here
return require(p);
diff --git a/node_modules/eslint-module-utils/moduleVisitor.js b/node_modules/eslint-module-utils/moduleVisitor.js
index 6926998..8fb2b26 100644
--- a/node_modules/eslint-module-utils/moduleVisitor.js
+++ b/node_modules/eslint-module-utils/moduleVisitor.js
@@ -37,7 +37,7 @@
// for esmodule dynamic `import()` calls
function checkImportCall(node) {
let modulePath;
- // refs https://github.com/estree/estree/blob/master/es2020.md#importexpression
+ // refs https://github.com/estree/estree/blob/HEAD/es2020.md#importexpression
if (node.type === 'ImportExpression') {
modulePath = node.source;
} else if (node.type === 'CallExpression') {
@@ -131,7 +131,7 @@
'additionalProperties': false,
};
- if (additionalProperties){
+ if (additionalProperties) {
for (const key in additionalProperties) {
base.properties[key] = additionalProperties[key];
}
diff --git a/node_modules/eslint-plugin-import/node_modules/find-up/index.js b/node_modules/eslint-module-utils/node_modules/find-up/index.js
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/find-up/index.js
rename to node_modules/eslint-module-utils/node_modules/find-up/index.js
diff --git a/node_modules/eslint-plugin-import/node_modules/find-up/license b/node_modules/eslint-module-utils/node_modules/find-up/license
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/find-up/license
rename to node_modules/eslint-module-utils/node_modules/find-up/license
diff --git a/node_modules/eslint-plugin-import/node_modules/find-up/package.json b/node_modules/eslint-module-utils/node_modules/find-up/package.json
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/find-up/package.json
rename to node_modules/eslint-module-utils/node_modules/find-up/package.json
diff --git a/node_modules/eslint-plugin-import/node_modules/find-up/readme.md b/node_modules/eslint-module-utils/node_modules/find-up/readme.md
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/find-up/readme.md
rename to node_modules/eslint-module-utils/node_modules/find-up/readme.md
diff --git a/node_modules/eslint-plugin-import/node_modules/locate-path/index.js b/node_modules/eslint-module-utils/node_modules/locate-path/index.js
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/locate-path/index.js
rename to node_modules/eslint-module-utils/node_modules/locate-path/index.js
diff --git a/node_modules/eslint-plugin-import/node_modules/locate-path/license b/node_modules/eslint-module-utils/node_modules/locate-path/license
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/locate-path/license
rename to node_modules/eslint-module-utils/node_modules/locate-path/license
diff --git a/node_modules/eslint-plugin-import/node_modules/locate-path/package.json b/node_modules/eslint-module-utils/node_modules/locate-path/package.json
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/locate-path/package.json
rename to node_modules/eslint-module-utils/node_modules/locate-path/package.json
diff --git a/node_modules/eslint-plugin-import/node_modules/locate-path/readme.md b/node_modules/eslint-module-utils/node_modules/locate-path/readme.md
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/locate-path/readme.md
rename to node_modules/eslint-module-utils/node_modules/locate-path/readme.md
diff --git a/node_modules/eslint-plugin-import/node_modules/p-limit/index.js b/node_modules/eslint-module-utils/node_modules/p-limit/index.js
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-limit/index.js
rename to node_modules/eslint-module-utils/node_modules/p-limit/index.js
diff --git a/node_modules/eslint-plugin-import/node_modules/p-limit/license b/node_modules/eslint-module-utils/node_modules/p-limit/license
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-limit/license
rename to node_modules/eslint-module-utils/node_modules/p-limit/license
diff --git a/node_modules/eslint-plugin-import/node_modules/p-limit/package.json b/node_modules/eslint-module-utils/node_modules/p-limit/package.json
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-limit/package.json
rename to node_modules/eslint-module-utils/node_modules/p-limit/package.json
diff --git a/node_modules/eslint-plugin-import/node_modules/p-limit/readme.md b/node_modules/eslint-module-utils/node_modules/p-limit/readme.md
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-limit/readme.md
rename to node_modules/eslint-module-utils/node_modules/p-limit/readme.md
diff --git a/node_modules/eslint-plugin-import/node_modules/p-locate/index.js b/node_modules/eslint-module-utils/node_modules/p-locate/index.js
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-locate/index.js
rename to node_modules/eslint-module-utils/node_modules/p-locate/index.js
diff --git a/node_modules/eslint-plugin-import/node_modules/p-locate/license b/node_modules/eslint-module-utils/node_modules/p-locate/license
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-locate/license
rename to node_modules/eslint-module-utils/node_modules/p-locate/license
diff --git a/node_modules/eslint-plugin-import/node_modules/p-locate/package.json b/node_modules/eslint-module-utils/node_modules/p-locate/package.json
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-locate/package.json
rename to node_modules/eslint-module-utils/node_modules/p-locate/package.json
diff --git a/node_modules/eslint-plugin-import/node_modules/p-locate/readme.md b/node_modules/eslint-module-utils/node_modules/p-locate/readme.md
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-locate/readme.md
rename to node_modules/eslint-module-utils/node_modules/p-locate/readme.md
diff --git a/node_modules/eslint-plugin-import/node_modules/p-try/index.js b/node_modules/eslint-module-utils/node_modules/p-try/index.js
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-try/index.js
rename to node_modules/eslint-module-utils/node_modules/p-try/index.js
diff --git a/node_modules/eslint-plugin-import/node_modules/p-try/license b/node_modules/eslint-module-utils/node_modules/p-try/license
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-try/license
rename to node_modules/eslint-module-utils/node_modules/p-try/license
diff --git a/node_modules/eslint-plugin-import/node_modules/p-try/package.json b/node_modules/eslint-module-utils/node_modules/p-try/package.json
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-try/package.json
rename to node_modules/eslint-module-utils/node_modules/p-try/package.json
diff --git a/node_modules/eslint-plugin-import/node_modules/p-try/readme.md b/node_modules/eslint-module-utils/node_modules/p-try/readme.md
similarity index 100%
rename from node_modules/eslint-plugin-import/node_modules/p-try/readme.md
rename to node_modules/eslint-module-utils/node_modules/p-try/readme.md
diff --git a/node_modules/eslint-module-utils/package.json b/node_modules/eslint-module-utils/package.json
index f726b79..2c4c53b 100644
--- a/node_modules/eslint-module-utils/package.json
+++ b/node_modules/eslint-module-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "eslint-module-utils",
- "version": "2.6.2",
+ "version": "2.7.1",
"description": "Core utilities to support eslint-plugin-import and other module-related plugins.",
"engines": {
"node": ">=4"
@@ -27,6 +27,7 @@
"homepage": "https://github.com/import-js/eslint-plugin-import#readme",
"dependencies": {
"debug": "^3.2.7",
+ "find-up": "^2.1.0",
"pkg-dir": "^2.0.0"
}
}
diff --git a/node_modules/eslint-module-utils/parse.js b/node_modules/eslint-module-utils/parse.js
index 3b2ac02..a771544 100644
--- a/node_modules/eslint-module-utils/parse.js
+++ b/node_modules/eslint-module-utils/parse.js
@@ -3,9 +3,42 @@
const moduleRequire = require('./module-require').default;
const extname = require('path').extname;
+const fs = require('fs');
const log = require('debug')('eslint-plugin-import:parse');
+function getBabelVisitorKeys(parserPath) {
+ if (parserPath.endsWith('index.js')) {
+ const hypotheticalLocation = parserPath.replace('index.js', 'visitor-keys.js');
+ if (fs.existsSync(hypotheticalLocation)) {
+ const keys = moduleRequire(hypotheticalLocation);
+ return keys.default || keys;
+ }
+ } else if (parserPath.endsWith('index.cjs')) {
+ const hypotheticalLocation = parserPath.replace('index.cjs', 'worker/ast-info.cjs');
+ if (fs.existsSync(hypotheticalLocation)) {
+ const astInfo = moduleRequire(hypotheticalLocation);
+ return astInfo.getVisitorKeys();
+ }
+ }
+ return null;
+}
+
+function keysFromParser(parserPath, parserInstance, parsedResult) {
+ if (/.*espree.*/.test(parserPath)) {
+ return parserInstance.VisitorKeys;
+ }
+ if (/.*(babel-eslint|@babel\/eslint-parser).*/.test(parserPath)) {
+ return getBabelVisitorKeys(parserPath);
+ }
+ if (/.*@typescript-eslint\/parser/.test(parserPath)) {
+ if (parsedResult) {
+ return parsedResult.visitorKeys;
+ }
+ }
+ return null;
+}
+
exports.default = function parse(path, content, context) {
if (context == null) throw new Error('need context to parse properly');
@@ -45,20 +78,36 @@
if (typeof parser.parseForESLint === 'function') {
let ast;
try {
- ast = parser.parseForESLint(content, parserOptions).ast;
+ const parserRaw = parser.parseForESLint(content, parserOptions);
+ ast = parserRaw.ast;
+ return {
+ ast,
+ visitorKeys: keysFromParser(parserPath, parser, parserRaw),
+ };
} catch (e) {
console.warn();
console.warn('Error while parsing ' + parserOptions.filePath);
console.warn('Line ' + e.lineNumber + ', column ' + e.column + ': ' + e.message);
}
if (!ast || typeof ast !== 'object') {
- console.warn('`parseForESLint` from parser `' + parserPath + '` is invalid and will just be ignored');
+ console.warn(
+ '`parseForESLint` from parser `' +
+ parserPath +
+ '` is invalid and will just be ignored'
+ );
} else {
- return ast;
+ return {
+ ast,
+ visitorKeys: keysFromParser(parserPath, parser, undefined),
+ };
}
}
- return parser.parse(content, parserOptions);
+ const keys = keysFromParser(parserPath, parser, undefined);
+ return {
+ ast: parser.parse(content, parserOptions),
+ visitorKeys: keys,
+ };
};
function getParserPath(path, context) {
diff --git a/node_modules/eslint-module-utils/pkgUp.js b/node_modules/eslint-module-utils/pkgUp.js
new file mode 100644
index 0000000..f73e3f7
--- /dev/null
+++ b/node_modules/eslint-module-utils/pkgUp.js
@@ -0,0 +1,8 @@
+'use strict';
+exports.__esModule = true;
+
+const findUp = require('find-up');
+
+exports.default = function pkgUp(opts) {
+ return findUp.sync('package.json', opts);
+};
diff --git a/node_modules/eslint-module-utils/readPkgUp.js b/node_modules/eslint-module-utils/readPkgUp.js
new file mode 100644
index 0000000..6a6a1ee
--- /dev/null
+++ b/node_modules/eslint-module-utils/readPkgUp.js
@@ -0,0 +1,52 @@
+'use strict';
+exports.__esModule = true;
+
+const fs = require('fs');
+const pkgUp = require('./pkgUp').default;
+
+function stripBOM(str) {
+ return str.replace(/^\uFEFF/, '');
+}
+
+/**
+ * Derived significantly from [email protected]. See license below.
+ *
+ * @copyright Sindre Sorhus
+ * MIT License
+ *
+ * Copyright (c) Sindre Sorhus <[email protected]> (https://sindresorhus.com)
+ *
+ * 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.
+ */
+exports.default = function readPkgUp(opts) {
+ const fp = pkgUp(opts);
+
+ if (!fp) {
+ return {};
+ }
+
+ try {
+ return {
+ pkg: JSON.parse(stripBOM(fs.readFileSync(fp, { encoding: 'utf-8' }))),
+ path: fp,
+ };
+ } catch (e) {
+ return {};
+ }
+};
diff --git a/node_modules/eslint-module-utils/resolve.js b/node_modules/eslint-module-utils/resolve.js
index f488ea7..27d5dcc 100644
--- a/node_modules/eslint-module-utils/resolve.js
+++ b/node_modules/eslint-module-utils/resolve.js
@@ -42,7 +42,7 @@
} else {
resolved = require.resolve(target);
}
- } catch(e) {
+ } catch (e) {
// If the target does not exist then just return undefined
return undefined;
}
@@ -52,13 +52,13 @@
}
// http://stackoverflow.com/a/27382838
-exports.fileExistsWithCaseSync = function fileExistsWithCaseSync(filepath, cacheSettings) {
+exports.fileExistsWithCaseSync = function fileExistsWithCaseSync(filepath, cacheSettings, strict) {
// don't care if the FS is case-sensitive
if (CASE_SENSITIVE_FS) return true;
// null means it resolved to a builtin
if (filepath === null) return true;
- if (filepath.toLowerCase() === process.cwd().toLowerCase()) return true;
+ if (filepath.toLowerCase() === process.cwd().toLowerCase() && !strict) return true;
const parsedPath = path.parse(filepath);
const dir = parsedPath.dir;
@@ -73,7 +73,7 @@
if (filenames.indexOf(parsedPath.base) === -1) {
result = false;
} else {
- result = fileExistsWithCaseSync(dir, cacheSettings);
+ result = fileExistsWithCaseSync(dir, cacheSettings, strict);
}
}
fileExistsCache.set(filepath, result);
diff --git a/node_modules/eslint-module-utils/unambiguous.js b/node_modules/eslint-module-utils/unambiguous.js
index 1446632..75f2169 100644
--- a/node_modules/eslint-module-utils/unambiguous.js
+++ b/node_modules/eslint-module-utils/unambiguous.js
@@ -1,8 +1,7 @@
'use strict';
exports.__esModule = true;
-
-const pattern = /(^|;)\s*(export|import)((\s+\w)|(\s*[{*=]))/m;
+const pattern = /(^|;)\s*(export|import)((\s+\w)|(\s*[{*=]))|import\(/m;
/**
* detect possible imports/exports without a full parse.
*
@@ -26,5 +25,5 @@
* @return {Boolean}
*/
exports.isModule = function isUnambiguousModule(ast) {
- return ast.body.some(node => unambiguousNodeType.test(node.type));
+ return ast.body && ast.body.some(node => unambiguousNodeType.test(node.type));
};
diff --git a/node_modules/eslint-module-utils/visit.js b/node_modules/eslint-module-utils/visit.js
new file mode 100644
index 0000000..77b0985
--- /dev/null
+++ b/node_modules/eslint-module-utils/visit.js
@@ -0,0 +1,24 @@
+'use strict';
+exports.__esModule = true;
+
+exports.default = function visit(node, keys, visitorSpec) {
+ if (!node || !keys) {
+ return;
+ }
+ const type = node.type;
+ if (typeof visitorSpec[type] === 'function') {
+ visitorSpec[type](node);
+ }
+ const childFields = keys[type];
+ if (!childFields) {
+ return;
+ }
+ childFields.forEach((fieldName) => {
+ [].concat(node[fieldName]).forEach((item) => {
+ visit(item, keys, visitorSpec);
+ });
+ });
+ if (typeof visitorSpec[`${type}:Exit`] === 'function') {
+ visitorSpec[`${type}:Exit`](node);
+ }
+};
diff --git a/node_modules/eslint-plugin-import/CHANGELOG.md b/node_modules/eslint-plugin-import/CHANGELOG.md
index 355985a..46a250c 100644
--- a/node_modules/eslint-plugin-import/CHANGELOG.md
+++ b/node_modules/eslint-plugin-import/CHANGELOG.md
@@ -6,6 +6,35 @@
## [Unreleased]
+## [2.25.2] - 2021-10-12
+
+### Fixed
+- [Deps] update `eslint-module-utils` for real this time ([#2255])
+
+## [2.25.1] - 2021-10-11
+
+### Fixed
+- [Deps] update `eslint-module-utils`
+
+## [2.25.0] - 2021-10-11
+
+### Added
+- Support `eslint` v8 ([#2191], thanks [@ota-meshi])
+- [`no-unresolved`]: add `caseSensitiveStrict` option ([#1262], thanks [@sergei-startsev])
+- [`no-unused-modules`]: add eslint v8 support ([#2194], thanks [@coderaiser])
+- [`no-restricted-paths`]: add/restore glob pattern support ([#2219], thanks [@stropho])
+- [`no-unused-modules`]: support dynamic imports ([#1660], [#2212], thanks [@maxkomarychev], [@aladdin-add], [@Hypnosphi])
+
+### Fixed
+- [`no-unresolved`]: ignore type-only imports ([#2220], thanks [@jablko])
+- [`order`]: fix sorting imports inside TypeScript module declarations ([#2226], thanks [@remcohaszing])
+- [`default`], `ExportMap`: Resolve extended TypeScript configuration files ([#2240], thanks [@mrmckeb])
+
+### Changed
+- [Refactor] switch to an internal replacement for `pkg-up` and `read-pkg-up` ([#2047], thanks [@mgwalker])
+- [patch] TypeScript config: remove `.d.ts` from [`import/parsers` setting] and [`import/extensions` setting] ([#2220], thanks [@jablko])
+- [Refactor] [`no-unresolved`], [`no-extraneous-dependencies`]: moduleVisitor usage ([#2233], thanks [@jablko])
+
## [2.24.2] - 2021-08-24
### Fixed
@@ -221,7 +250,7 @@
- [`order`]: add option pathGroupsExcludedImportTypes to allow ordering of external import types ([#1565], thanks [@Mairu])
### Fixed
-- [`no-unused-modules`]: fix usage of `import/extensions` settings ([#1560], thanks [@stekycz])
+- [`no-unused-modules`]: fix usage of [`import/extensions` setting] ([#1560], thanks [@stekycz])
- [`extensions`]: ignore non-main modules ([#1563], thanks [@saschanaz])
- TypeScript config: lookup for external modules in @types folder ([#1526], thanks [@joaovieira])
- [`no-extraneous-dependencies`]: ensure `node.source` is truthy ([#1589], thanks [@ljharb])
@@ -900,13 +929,21 @@
[`memo-parser`]: ./memo-parser/README.md
+[#2240]: https://github.com/import-js/eslint-plugin-import/pull/2240
+[#2233]: https://github.com/import-js/eslint-plugin-import/pull/2233
+[#2226]: https://github.com/import-js/eslint-plugin-import/pull/2226
+[#2220]: https://github.com/import-js/eslint-plugin-import/pull/2220
+[#2219]: https://github.com/import-js/eslint-plugin-import/pull/2219
+[#2212]: https://github.com/import-js/eslint-plugin-import/pull/2212
[#2196]: https://github.com/import-js/eslint-plugin-import/pull/2196
+[#2194]: https://github.com/import-js/eslint-plugin-import/pull/2194
+[#2191]: https://github.com/import-js/eslint-plugin-import/pull/2191
[#2184]: https://github.com/import-js/eslint-plugin-import/pull/2184
[#2179]: https://github.com/import-js/eslint-plugin-import/pull/2179
[#2160]: https://github.com/import-js/eslint-plugin-import/pull/2160
[#2158]: https://github.com/import-js/eslint-plugin-import/pull/2158
[#2156]: https://github.com/import-js/eslint-plugin-import/pull/2156
-[#2149]: https://github.com/benmosher/eslint-plugin-import/pull/2149
+[#2149]: https://github.com/import-js/eslint-plugin-import/pull/2149
[#2146]: https://github.com/import-js/eslint-plugin-import/pull/2146
[#2140]: https://github.com/import-js/eslint-plugin-import/pull/2140
[#2138]: https://github.com/import-js/eslint-plugin-import/pull/2138
@@ -919,6 +956,7 @@
[#2083]: https://github.com/import-js/eslint-plugin-import/pull/2083
[#2075]: https://github.com/import-js/eslint-plugin-import/pull/2075
[#2071]: https://github.com/import-js/eslint-plugin-import/pull/2071
+[#2047]: https://github.com/import-js/eslint-plugin-import/pull/2047
[#2034]: https://github.com/import-js/eslint-plugin-import/pull/2034
[#2028]: https://github.com/import-js/eslint-plugin-import/pull/2028
[#2026]: https://github.com/import-js/eslint-plugin-import/pull/2026
@@ -976,6 +1014,7 @@
[#1676]: https://github.com/import-js/eslint-plugin-import/pull/1676
[#1666]: https://github.com/import-js/eslint-plugin-import/pull/1666
[#1664]: https://github.com/import-js/eslint-plugin-import/pull/1664
+[#1660]: https://github.com/import-js/eslint-plugin-import/pull/1660
[#1658]: https://github.com/import-js/eslint-plugin-import/pull/1658
[#1651]: https://github.com/import-js/eslint-plugin-import/pull/1651
[#1626]: https://github.com/import-js/eslint-plugin-import/pull/1626
@@ -1047,6 +1086,7 @@
[#1294]: https://github.com/import-js/eslint-plugin-import/pull/1294
[#1290]: https://github.com/import-js/eslint-plugin-import/pull/1290
[#1277]: https://github.com/import-js/eslint-plugin-import/pull/1277
+[#1262]: https://github.com/import-js/eslint-plugin-import/pull/1262
[#1257]: https://github.com/import-js/eslint-plugin-import/pull/1257
[#1253]: https://github.com/import-js/eslint-plugin-import/pull/1253
[#1248]: https://github.com/import-js/eslint-plugin-import/pull/1248
@@ -1156,13 +1196,14 @@
[#211]: https://github.com/import-js/eslint-plugin-import/pull/211
[#164]: https://github.com/import-js/eslint-plugin-import/pull/164
[#157]: https://github.com/import-js/eslint-plugin-import/pull/157
+[#2255]: https://github.com/import-js/eslint-plugin-import/issues/2255
[#2201]: https://github.com/import-js/eslint-plugin-import/issues/2201
[#2199]: https://github.com/import-js/eslint-plugin-import/issues/2199
[#2161]: https://github.com/import-js/eslint-plugin-import/issues/2161
[#2118]: https://github.com/import-js/eslint-plugin-import/issues/2118
[#2067]: https://github.com/import-js/eslint-plugin-import/issues/2067
-[#2056]: https://github.com/import-js/eslint-plugin-import/issues/2056
[#2063]: https://github.com/import-js/eslint-plugin-import/issues/2063
+[#2056]: https://github.com/import-js/eslint-plugin-import/issues/2056
[#1998]: https://github.com/import-js/eslint-plugin-import/issues/1998
[#1965]: https://github.com/import-js/eslint-plugin-import/issues/1965
[#1924]: https://github.com/import-js/eslint-plugin-import/issues/1924
@@ -1267,7 +1308,10 @@
[#119]: https://github.com/import-js/eslint-plugin-import/issues/119
[#89]: https://github.com/import-js/eslint-plugin-import/issues/89
-[Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.24.2...HEAD
+[Unreleased]: https://github.com/import-js/eslint-plugin-import/compare/v2.25.2...HEAD
+[2.25.2]: https://github.com/import-js/eslint-plugin-import/compare/v2.25.1...v2.25.2
+[2.25.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.25.0...v2.25.1
+[2.25.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.24.2...v2.25.0
[2.24.2]: https://github.com/import-js/eslint-plugin-import/compare/v2.24.1...v2.24.2
[2.24.1]: https://github.com/import-js/eslint-plugin-import/compare/v2.24.0...v2.24.1
[2.24.0]: https://github.com/import-js/eslint-plugin-import/compare/v2.23.4...v2.24.0
@@ -1429,6 +1473,7 @@
[@isiahmeadows]: https://github.com/isiahmeadows
[@IvanGoncharov]: https://github.com/IvanGoncharov
[@ivo-stefchev]: https://github.com/ivo-stefchev
+[@jablko]: https://github.com/jablko
[@jakubsta]: https://github.com/jakubsta
[@jeffshaver]: https://github.com/jeffshaver
[@jf248]: https://github.com/jf248
@@ -1479,14 +1524,18 @@
[@MatthiasKunnen]: https://github.com/MatthiasKunnen
[@mattijsbliek]: https://github.com/mattijsbliek
[@Maxim-Mazurok]: https://github.com/Maxim-Mazurok
+[@maxkomarychev]: https://github.com/maxkomarychev
[@maxmalov]: https://github.com/maxmalov
+[@mgwalker]: https://github.com/mgwalker
[@MikeyBeLike]: https://github.com/MikeyBeLike
[@mplewis]: https://github.com/mplewis
+[@mrmckeb]: https://github.com/mrmckeb
[@nickofthyme]: https://github.com/nickofthyme
[@nicolashenry]: https://github.com/nicolashenry
[@noelebrun]: https://github.com/noelebrun
[@ntdb]: https://github.com/ntdb
[@nwalters512]: https://github.com/nwalters512
+[@ota-meshi]: https://github.com/ota-meshi
[@panrafal]: https://github.com/panrafal
[@paztis]: https://github.com/paztis
[@pcorpet]: https://github.com/pcorpet
@@ -1497,6 +1546,7 @@
[@ramasilveyra]: https://github.com/ramasilveyra
[@randallreedjr]: https://github.com/randallreedjr
[@redbugz]: https://github.com/redbugz
+[@remcohaszing]: https://github.com/remcohaszing
[@rfermann]: https://github.com/rfermann
[@rhettlivingston]: https://github.com/rhettlivingston
[@rhys-vdw]: https://github.com/rhys-vdw
diff --git a/node_modules/eslint-plugin-import/config/typescript.js b/node_modules/eslint-plugin-import/config/typescript.js
index 01b59f0..ed03fb3 100644
--- a/node_modules/eslint-plugin-import/config/typescript.js
+++ b/node_modules/eslint-plugin-import/config/typescript.js
@@ -2,7 +2,10 @@
* Adds `.jsx`, `.ts` and `.tsx` as an extension, and enables JSX/TSX parsing.
*/
-const allExtensions = ['.ts', '.tsx', '.d.ts', '.js', '.jsx'];
+// Omit `.d.ts` because 1) TypeScript compilation already confirms that
+// types are resolved, and 2) it would mask an unresolved
+// `.ts`/`.tsx`/`.js`/`.jsx` implementation.
+const allExtensions = ['.ts', '.tsx', '.js', '.jsx'];
module.exports = {
@@ -10,7 +13,7 @@
'import/extensions': allExtensions,
'import/external-module-folders': ['node_modules', 'node_modules/@types'],
'import/parsers': {
- '@typescript-eslint/parser': ['.ts', '.tsx', '.d.ts'],
+ '@typescript-eslint/parser': ['.ts', '.tsx'],
},
'import/resolver': {
'node': {
diff --git a/node_modules/eslint-plugin-import/docs/rules/no-namespace.md b/node_modules/eslint-plugin-import/docs/rules/no-namespace.md
index e987260..854f65d 100644
--- a/node_modules/eslint-plugin-import/docs/rules/no-namespace.md
+++ b/node_modules/eslint-plugin-import/docs/rules/no-namespace.md
@@ -22,7 +22,7 @@
```
```js
-/* eslint import/no-namespace: ["error", {ignore: ['*.ext']] */
+/* eslint import/no-namespace: ["error", {ignore: ['*.ext']}] */
import * as bar from './ignored-module.ext';
```
diff --git a/node_modules/eslint-plugin-import/docs/rules/no-restricted-paths.md b/node_modules/eslint-plugin-import/docs/rules/no-restricted-paths.md
index bfcb9af..c939075 100644
--- a/node_modules/eslint-plugin-import/docs/rules/no-restricted-paths.md
+++ b/node_modules/eslint-plugin-import/docs/rules/no-restricted-paths.md
@@ -9,8 +9,18 @@
This rule has one option. The option is an object containing the definition of all restricted `zones` and the optional `basePath` which is used to resolve relative paths within.
The default value for `basePath` is the current working directory.
-Each zone consists of the `target` path and a `from` path. The `target` is the path where the restricted imports should be applied. The `from` path defines the folder that is not allowed to be used in an import. An optional `except` may be defined for a zone, allowing exception paths that would otherwise violate the related `from`. Note that `except` is relative to `from` and cannot backtrack to a parent directory.
-You may also specify an optional `message` for a zone, which will be displayed in case of the rule violation.
+
+Each zone consists of the `target` path, a `from` path, and an optional `except` and `message` attribute.
+- `target` is the path where the restricted imports should be applied. It can be expressed by
+ - directory string path that matches all its containing files
+ - glob pattern matching all the targeted files
+- `from` path defines the folder that is not allowed to be used in an import. It can be expressed by
+ - directory string path that matches all its containing files
+ - glob pattern matching all the files restricted to be imported
+- `except` may be defined for a zone, allowing exception paths that would otherwise violate the related `from`. Note that it does not alter the behaviour of `target` in any way.
+ - in case `from` is a glob pattern, `except` must be an array of glob patterns as well
+ - in case `from` is a directory path, `except` is relative to `from` and cannot backtrack to a parent directory.
+- `message` - will be displayed in case of the rule violation.
### Examples
@@ -77,4 +87,40 @@
```js
import b from './b'
+
+```
+
+---------------
+
+Given the following folder structure:
+
+```
+my-project
+├── client
+ └── foo.js
+ └── sub-module
+ └── bar.js
+ └── baz.js
+
+```
+
+and the current configuration is set to:
+
+```
+{ "zones": [ {
+ "target": "./tests/files/restricted-paths/client/!(sub-module)/**/*",
+ "from": "./tests/files/restricted-paths/client/sub-module/**/*",
+} ] }
+```
+
+The following import is considered a problem in `my-project/client/foo.js`:
+
+```js
+import a from './sub-module/baz'
+```
+
+The following import is not considered a problem in `my-project/client/sub-module/bar.js`:
+
+```js
+import b from './baz'
```
diff --git a/node_modules/eslint-plugin-import/docs/rules/no-unresolved.md b/node_modules/eslint-plugin-import/docs/rules/no-unresolved.md
index ae6177d..89d00b9 100644
--- a/node_modules/eslint-plugin-import/docs/rules/no-unresolved.md
+++ b/node_modules/eslint-plugin-import/docs/rules/no-unresolved.md
@@ -76,10 +76,25 @@
const { default: x } = require('./foo') // reported if './foo' is actually './Foo' and caseSensitive: true
```
+#### `caseSensitiveStrict`
+
+The `caseSensitive` option does not detect case for the current working directory. The `caseSensitiveStrict` option allows checking `cwd` in resolved path. By default, the option is disabled.
+
+
+```js
+/*eslint import/no-unresolved: [2, { caseSensitiveStrict: true }]*/
+
+// Absolute paths
+import Foo from `/Users/fOo/bar/file.js` // reported, /Users/foo/bar/file.js
+import Foo from `d:/fOo/bar/file.js` // reported, d:/foo/bar/file.js
+
+// Relative paths, cwd is Users/foo/
+import Foo from `./../fOo/bar/file.js` // reported
+```
+
## When Not To Use It
-If you're using a module bundler other than Node or Webpack, you may end up with
-a lot of false positive reports of missing dependencies.
+If you're using a module bundler other than Node or Webpack, you may end up with a lot of false positive reports of missing dependencies.
## Further Reading
diff --git a/node_modules/eslint-plugin-import/docs/rules/no-unused-modules.md b/node_modules/eslint-plugin-import/docs/rules/no-unused-modules.md
index 01c1355..0bd8056 100644
--- a/node_modules/eslint-plugin-import/docs/rules/no-unused-modules.md
+++ b/node_modules/eslint-plugin-import/docs/rules/no-unused-modules.md
@@ -3,8 +3,8 @@
Reports:
- modules without any exports
- individual exports not being statically `import`ed or `require`ed from other modules in the same project
+ - dynamic imports are supported if argument is a literal string
-Note: dynamic imports are currently not supported.
## Rule Details
diff --git a/node_modules/eslint-plugin-import/lib/ExportMap.js b/node_modules/eslint-plugin-import/lib/ExportMap.js
index 6ecf73a..b5fc193 100644
--- a/node_modules/eslint-plugin-import/lib/ExportMap.js
+++ b/node_modules/eslint-plugin-import/lib/ExportMap.js
@@ -683,7 +683,54 @@
-recursivePatternCapture = recursivePatternCapture;var _fs = require('fs');var _fs2 = _interopRequireDefault(_fs);var _doctrine = require('doctrine');var _doctrine2 = _interopRequireDefault(_doctrine);var _debug = require('debug');var _debug2 = _interopRequireDefault(_debug);var _eslint = require('eslint');var _parse = require('eslint-module-utils/parse');var _parse2 = _interopRequireDefault(_parse);var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);var _ignore = require('eslint-module-utils/ignore');var _ignore2 = _interopRequireDefault(_ignore);var _hash = require('eslint-module-utils/hash');var _unambiguous = require('eslint-module-utils/unambiguous');var unambiguous = _interopRequireWildcard(_unambiguous);var _tsconfigLoader = require('tsconfig-paths/lib/tsconfig-loader');var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes);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)) newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}var parseConfigFileTextToJson = void 0;var log = (0, _debug2['default'])('eslint-plugin-import:ExportMap');var exportCache = new Map();var tsConfigCache = new Map();var ExportMap = function () {function ExportMap(path) {_classCallCheck(this, ExportMap);this.path = path;this.namespace = new Map(); // todo: restructure to key on path, value is resolver + map of names
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+recursivePatternCapture = recursivePatternCapture;var _fs = require('fs');var _fs2 = _interopRequireDefault(_fs);var _path = require('path');var _doctrine = require('doctrine');var _doctrine2 = _interopRequireDefault(_doctrine);var _debug = require('debug');var _debug2 = _interopRequireDefault(_debug);var _eslint = require('eslint');var _parse = require('eslint-module-utils/parse');var _parse2 = _interopRequireDefault(_parse);var _visit = require('eslint-module-utils/visit');var _visit2 = _interopRequireDefault(_visit);var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);var _ignore = require('eslint-module-utils/ignore');var _ignore2 = _interopRequireDefault(_ignore);var _hash = require('eslint-module-utils/hash');var _unambiguous = require('eslint-module-utils/unambiguous');var unambiguous = _interopRequireWildcard(_unambiguous);var _tsconfigLoader = require('tsconfig-paths/lib/tsconfig-loader');var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes);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)) newObj[key] = obj[key];}}newObj['default'] = obj;return newObj;}}function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}var ts = void 0;var log = (0, _debug2['default'])('eslint-plugin-import:ExportMap');var exportCache = new Map();var tsConfigCache = new Map();var ExportMap = function () {function ExportMap(path) {_classCallCheck(this, ExportMap);this.path = path;this.namespace = new Map(); // todo: restructure to key on path, value is resolver + map of names
this.reexports = new Map(); /**
* star-exports
* @type {Set} of () => ExportMap
@@ -738,14 +785,15 @@
if (!(0, _ignore.hasValidExtension)(path, context)) {exportCache.set(cacheKey, null);return null;} // check for and cache ignore
if ((0, _ignore2['default'])(path, context)) {log('ignored path due to ignore settings:', path);exportCache.set(cacheKey, null);return null;}var content = _fs2['default'].readFileSync(path, { encoding: 'utf8' }); // check for and cache unambiguous modules
if (!unambiguous.test(content)) {log('ignored path due to unambiguous regex:', path);exportCache.set(cacheKey, null);return null;}log('cache miss', cacheKey, 'for path', path);exportMap = ExportMap.parse(path, content, context); // ambiguous modules return null
- if (exportMap == null) return null;exportMap.mtime = stats.mtime;exportCache.set(cacheKey, exportMap);return exportMap;};ExportMap.parse = function (path, content, context) {var m = new ExportMap(path);var isEsModuleInteropTrue = isEsModuleInterop();var ast = void 0;try {ast = (0, _parse2['default'])(path, content, context);} catch (err) {log('parse error:', path, err);m.errors.push(err);return m; // can't continue
- }if (!unambiguous.isModule(ast)) return null;var docstyle = context.settings && context.settings['import/docstyle'] || ['jsdoc'];var docStyleParsers = {};docstyle.forEach(function (style) {docStyleParsers[style] = availableDocStyleParsers[style];}); // attempt to collect module doc
+ if (exportMap == null) return null;exportMap.mtime = stats.mtime;exportCache.set(cacheKey, exportMap);return exportMap;};ExportMap.parse = function (path, content, context) {var m = new ExportMap(path);var isEsModuleInteropTrue = isEsModuleInterop();var ast = void 0;var visitorKeys = void 0;try {var result = (0, _parse2['default'])(path, content, context);ast = result.ast;visitorKeys = result.visitorKeys;} catch (err) {m.errors.push(err);return m; // can't continue
+ }m.visitorKeys = visitorKeys;var hasDynamicImports = false;function processDynamicImport(source) {hasDynamicImports = true;if (source.type !== 'Literal') {return null;}var p = remotePath(source.value);if (p == null) {return null;}var importedSpecifiers = new Set();importedSpecifiers.add('ImportNamespaceSpecifier');var getter = thunkFor(p, context);m.imports.set(p, { getter: getter, declarations: new Set([{ source: { // capturing actual node reference holds full AST in memory!
+ value: source.value, loc: source.loc }, importedSpecifiers: importedSpecifiers }]) });}(0, _visit2['default'])(ast, visitorKeys, { ImportExpression: function () {function ImportExpression(node) {processDynamicImport(node.source);}return ImportExpression;}(), CallExpression: function () {function CallExpression(node) {if (node.callee.type === 'Import') {processDynamicImport(node.arguments[0]);}}return CallExpression;}() });if (!unambiguous.isModule(ast) && !hasDynamicImports) return null;var docstyle = context.settings && context.settings['import/docstyle'] || ['jsdoc'];var docStyleParsers = {};docstyle.forEach(function (style) {docStyleParsers[style] = availableDocStyleParsers[style];}); // attempt to collect module doc
if (ast.comments) {ast.comments.some(function (c) {if (c.type !== 'Block') return false;try {var doc = _doctrine2['default'].parse(c.value, { unwrap: true });if (doc.tags.some(function (t) {return t.title === 'module';})) {m.doc = doc;return true;}} catch (err) {/* ignore */}return false;});}var namespaces = new Map();function remotePath(value) {return _resolve2['default'].relative(value, path, context.settings);}function resolveImport(value) {var rp = remotePath(value);if (rp == null) return null;return ExportMap['for'](childContext(rp, context));}function getNamespace(identifier) {if (!namespaces.has(identifier.name)) return;return function () {return resolveImport(namespaces.get(identifier.name));};}function addNamespace(object, identifier) {var nsfn = getNamespace(identifier);if (nsfn) {Object.defineProperty(object, 'namespace', { get: nsfn });}return object;}function processSpecifier(s, n, m) {var nsource = n.source && n.source.value;var exportMeta = {};var local = void 0;switch (s.type) {case 'ExportDefaultSpecifier':if (!nsource) return;local = 'default';break;case 'ExportNamespaceSpecifier':m.namespace.set(s.exported.name, Object.defineProperty(exportMeta, 'namespace', { get: function () {function get() {return resolveImport(nsource);}return get;}() }));return;case 'ExportAllDeclaration':m.namespace.set(s.exported.name, addNamespace(exportMeta, s.source.value));return;case 'ExportSpecifier':if (!n.source) {m.namespace.set(s.exported.name, addNamespace(exportMeta, s.local));return;} // else falls through
default:local = s.local.name;break;} // todo: JSDoc
m.reexports.set(s.exported.name, { local: local, getImport: function () {function getImport() {return resolveImport(nsource);}return getImport;}() });}function captureDependency(_ref, isOnlyImportingTypes) {var source = _ref.source;var importedSpecifiers = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : new Set();if (source == null) return null;var p = remotePath(source.value);if (p == null) return null;var declarationMetadata = { // capturing actual node reference holds full AST in memory!
- source: { value: source.value, loc: source.loc }, isOnlyImportingTypes: isOnlyImportingTypes, importedSpecifiers: importedSpecifiers };var existing = m.imports.get(p);if (existing != null) {existing.declarations.add(declarationMetadata);return existing.getter;}var getter = thunkFor(p, context);m.imports.set(p, { getter: getter, declarations: new Set([declarationMetadata]) });return getter;}var source = makeSourceCode(content, ast);function readTsConfig() {var tsConfigInfo = (0, _tsconfigLoader.tsConfigLoader)({ cwd: context.parserOptions && context.parserOptions.tsconfigRootDir || process.cwd(), getEnv: function () {function getEnv(key) {return process.env[key];}return getEnv;}() });try {if (tsConfigInfo.tsConfigPath !== undefined) {var jsonText = _fs2['default'].readFileSync(tsConfigInfo.tsConfigPath).toString();if (!parseConfigFileTextToJson) {var _require = require('typescript'); // this is because projects not using TypeScript won't have typescript installed
- parseConfigFileTextToJson = _require.parseConfigFileTextToJson;}return parseConfigFileTextToJson(tsConfigInfo.tsConfigPath, jsonText).config;}} catch (e) {// Catch any errors
- }return null;}function isEsModuleInterop() {var cacheKey = (0, _hash.hashObject)({ tsconfigRootDir: context.parserOptions && context.parserOptions.tsconfigRootDir }).digest('hex');var tsConfig = tsConfigCache.get(cacheKey);if (typeof tsConfig === 'undefined') {tsConfig = readTsConfig();tsConfigCache.set(cacheKey, tsConfig);}return tsConfig && tsConfig.compilerOptions ? tsConfig.compilerOptions.esModuleInterop : false;}ast.body.forEach(function (n) {if (n.type === 'ExportDefaultDeclaration') {var exportMeta = captureDoc(source, docStyleParsers, n);if (n.declaration.type === 'Identifier') {addNamespace(exportMeta, n.declaration);}m.namespace.set('default', exportMeta);return;}if (n.type === 'ExportAllDeclaration') {var getter = captureDependency(n, n.exportKind === 'type');if (getter) m.dependencies.add(getter);if (n.exported) {processSpecifier(n, n.exported, m);}return;} // capture namespaces in case of later export
+ source: { value: source.value, loc: source.loc }, isOnlyImportingTypes: isOnlyImportingTypes, importedSpecifiers: importedSpecifiers };var existing = m.imports.get(p);if (existing != null) {existing.declarations.add(declarationMetadata);return existing.getter;}var getter = thunkFor(p, context);m.imports.set(p, { getter: getter, declarations: new Set([declarationMetadata]) });return getter;}var source = makeSourceCode(content, ast);function readTsConfig() {var tsConfigInfo = (0, _tsconfigLoader.tsConfigLoader)({ cwd: context.parserOptions && context.parserOptions.tsconfigRootDir || process.cwd(), getEnv: function () {function getEnv(key) {return process.env[key];}return getEnv;}() });try {if (tsConfigInfo.tsConfigPath !== undefined) {// Projects not using TypeScript won't have `typescript` installed.
+ if (!ts) {ts = require('typescript');}var configFile = ts.readConfigFile(tsConfigInfo.tsConfigPath, ts.sys.readFile);return ts.parseJsonConfigFileContent(configFile.config, ts.sys, (0, _path.dirname)(tsConfigInfo.tsConfigPath));}} catch (e) {// Catch any errors
+ }return null;}function isEsModuleInterop() {var cacheKey = (0, _hash.hashObject)({ tsconfigRootDir: context.parserOptions && context.parserOptions.tsconfigRootDir }).digest('hex');var tsConfig = tsConfigCache.get(cacheKey);if (typeof tsConfig === 'undefined') {tsConfig = readTsConfig(context);tsConfigCache.set(cacheKey, tsConfig);}return tsConfig && tsConfig.options ? tsConfig.options.esModuleInterop : false;}ast.body.forEach(function (n) {if (n.type === 'ExportDefaultDeclaration') {var exportMeta = captureDoc(source, docStyleParsers, n);if (n.declaration.type === 'Identifier') {addNamespace(exportMeta, n.declaration);}m.namespace.set('default', exportMeta);return;}if (n.type === 'ExportAllDeclaration') {var getter = captureDependency(n, n.exportKind === 'type');if (getter) m.dependencies.add(getter);if (n.exported) {processSpecifier(n, n.exported, m);}return;} // capture namespaces in case of later export
if (n.type === 'ImportDeclaration') {// import type { Foo } (TS and Flow)
var declarationIsType = n.importKind === 'type'; // import './foo' or import {} from './foo' (both 0 specifiers) is a side effect and
// shouldn't be considered to be just importing types
@@ -783,4 +831,4 @@
*/function makeSourceCode(text, ast) {if (_eslint.SourceCode.length > 1) {// ESLint 3
return new _eslint.SourceCode(text, ast);} else {// ESLint 4, 5
return new _eslint.SourceCode({ text: text, ast: ast });}}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FeHBvcnRNYXAuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJ1bmFtYmlndW91cyIsInBhcnNlQ29uZmlnRmlsZVRleHRUb0pzb24iLCJsb2ciLCJleHBvcnRDYWNoZSIsIk1hcCIsInRzQ29uZmlnQ2FjaGUiLCJFeHBvcnRNYXAiLCJwYXRoIiwibmFtZXNwYWNlIiwicmVleHBvcnRzIiwiZGVwZW5kZW5jaWVzIiwiU2V0IiwiaW1wb3J0cyIsImVycm9ycyIsIm5hbWUiLCJoYXMiLCJkZXAiLCJpbm5lck1hcCIsImZvdW5kIiwiZ2V0IiwiaW1wb3J0ZWQiLCJnZXRJbXBvcnQiLCJsb2NhbCIsImRlZXAiLCJoYXNEZWVwIiwidW5zaGlmdCIsImlubmVyVmFsdWUiLCJ1bmRlZmluZWQiLCJjYWxsYmFjayIsInRoaXNBcmciLCJmb3JFYWNoIiwidiIsIm4iLCJjYWxsIiwicmVleHBvcnRlZCIsImQiLCJjb250ZXh0IiwiZGVjbGFyYXRpb24iLCJyZXBvcnQiLCJub2RlIiwic291cmNlIiwibWVzc2FnZSIsInZhbHVlIiwibWFwIiwiZSIsImxpbmVOdW1iZXIiLCJjb2x1bW4iLCJqb2luIiwic2l6ZSIsImNhcHR1cmVEb2MiLCJkb2NTdHlsZVBhcnNlcnMiLCJtZXRhZGF0YSIsIm5vZGVzIiwic29tZSIsImxlYWRpbmdDb21tZW50cyIsInJhbmdlIiwiZ2V0Q29tbWVudHNCZWZvcmUiLCJsZW5ndGgiLCJkb2MiLCJlcnIiLCJhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMiLCJqc2RvYyIsImNhcHR1cmVKc0RvYyIsInRvbWRvYyIsImNhcHR1cmVUb21Eb2MiLCJjb21tZW50cyIsImNvbW1lbnQiLCJ0eXBlIiwiZG9jdHJpbmUiLCJwYXJzZSIsInVud3JhcCIsImxpbmVzIiwiaSIsIm1hdGNoIiwicHVzaCIsInRyaW0iLCJzdGF0dXNNYXRjaCIsImRlc2NyaXB0aW9uIiwidGFncyIsInRpdGxlIiwidG9Mb3dlckNhc2UiLCJzdXBwb3J0ZWRJbXBvcnRUeXBlcyIsImNoaWxkQ29udGV4dCIsImNhY2hlS2V5IiwiZGlnZXN0IiwiZXhwb3J0TWFwIiwic3RhdHMiLCJmcyIsInN0YXRTeW5jIiwibXRpbWUiLCJzZXQiLCJjb250ZW50IiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJ0ZXN0IiwibSIsImlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSIsImlzRXNNb2R1bGVJbnRlcm9wIiwiYXN0IiwiaXNNb2R1bGUiLCJkb2NzdHlsZSIsInNldHRpbmdzIiwic3R5bGUiLCJjIiwidCIsIm5hbWVzcGFjZXMiLCJyZW1vdGVQYXRoIiwicmVzb2x2ZSIsInJlbGF0aXZlIiwicmVzb2x2ZUltcG9ydCIsInJwIiwiZ2V0TmFtZXNwYWNlIiwiaWRlbnRpZmllciIsImFkZE5hbWVzcGFjZSIsIm9iamVjdCIsIm5zZm4iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInByb2Nlc3NTcGVjaWZpZXIiLCJzIiwibnNvdXJjZSIsImV4cG9ydE1ldGEiLCJleHBvcnRlZCIsImNhcHR1cmVEZXBlbmRlbmN5IiwiaXNPbmx5SW1wb3J0aW5nVHlwZXMiLCJpbXBvcnRlZFNwZWNpZmllcnMiLCJwIiwiZGVjbGFyYXRpb25NZXRhZGF0YSIsImxvYyIsImV4aXN0aW5nIiwiZGVjbGFyYXRpb25zIiwiYWRkIiwiZ2V0dGVyIiwidGh1bmtGb3IiLCJtYWtlU291cmNlQ29kZSIsInJlYWRUc0NvbmZpZyIsInRzQ29uZmlnSW5mbyIsImN3ZCIsInBhcnNlck9wdGlvbnMiLCJ0c2NvbmZpZ1Jvb3REaXIiLCJwcm9jZXNzIiwiZ2V0RW52Iiwia2V5IiwiZW52IiwidHNDb25maWdQYXRoIiwianNvblRleHQiLCJ0b1N0cmluZyIsInJlcXVpcmUiLCJjb25maWciLCJ0c0NvbmZpZyIsImNvbXBpbGVyT3B0aW9ucyIsImVzTW9kdWxlSW50ZXJvcCIsImJvZHkiLCJleHBvcnRLaW5kIiwiZGVjbGFyYXRpb25Jc1R5cGUiLCJpbXBvcnRLaW5kIiwic3BlY2lmaWVyc09ubHlJbXBvcnRpbmdUeXBlcyIsInNwZWNpZmllcnMiLCJzcGVjaWZpZXIiLCJucyIsImZpbmQiLCJpZCIsImV4cG9ydHMiLCJleHBvcnRlZE5hbWUiLCJleHByZXNzaW9uIiwiZGVjbFR5cGVzIiwiZXhwb3J0ZWREZWNscyIsImZpbHRlciIsImRlY2wiLCJtb2R1bGVCbG9ja05vZGUiLCJuYW1lc3BhY2VEZWNsIiwicGF0dGVybiIsInByb3BlcnRpZXMiLCJhcmd1bWVudCIsImVsZW1lbnRzIiwiZWxlbWVudCIsImxlZnQiLCJwYXJzZXJQYXRoIiwidGV4dCIsIlNvdXJjZUNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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NUcsSUFBUixLQUFpQiwwQkFBakIsSUFBK0M0RyxRQUFRNUcsSUFBUixLQUFpQixhQUFwRSxFQUFtRixDQUNqRnZDLFNBQVNtSixRQUFRRixRQUFqQixFQUNBLE9BQ0QsQ0FDRDlLLHdCQUF3QmdMLE9BQXhCLEVBQWlDbkosUUFBakMsRUFDRCxDQVBELEVBUUEsTUFFRixLQUFLLG1CQUFMLENBQ0VBLFNBQVMrSSxRQUFRSyxJQUFqQixFQUNBLE1BNUJGLENBOEJELEMsQ0FFRDs7eWpCQUdBLFNBQVM5RixZQUFULENBQXNCM0UsSUFBdEIsRUFBNEI2QixPQUE1QixFQUFxQyxLQUMzQmlFLFFBRDJCLEdBQ2FqRSxPQURiLENBQzNCaUUsUUFEMkIsQ0FDakJxQyxhQURpQixHQUNhdEcsT0FEYixDQUNqQnNHLGFBRGlCLENBQ0Z1QyxVQURFLEdBQ2E3SSxPQURiLENBQ0Y2SSxVQURFLENBRW5DLE9BQU8sRUFDTDVFLGtCQURLLEVBRUxxQyw0QkFGSyxFQUdMdUMsc0JBSEssRUFJTDFLLFVBSkssRUFBUCxDQU1ELEMsQ0FHRDs7MHlCQUdBLFNBQVMrSCxjQUFULENBQXdCNEMsSUFBeEIsRUFBOEJoRixHQUE5QixFQUFtQyxDQUNqQyxJQUFJaUYsbUJBQVcxSCxNQUFYLEdBQW9CLENBQXhCLEVBQTJCLENBQ3pCO0FBQ0EsV0FBTyxJQUFJMEgsa0JBQUosQ0FBZUQsSUFBZixFQUFxQmhGLEdBQXJCLENBQVAsQ0FDRCxDQUhELE1BR08sQ0FDTDtBQUNBLFdBQU8sSUFBSWlGLGtCQUFKLENBQWUsRUFBRUQsVUFBRixFQUFRaEYsUUFBUixFQUFmLENBQVAsQ0FDRCxDQUNGIiwiZmlsZSI6IkV4cG9ydE1hcC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5cbmltcG9ydCBkb2N0cmluZSBmcm9tICdkb2N0cmluZSc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCB7IFNvdXJjZUNvZGUgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wYXJzZSc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IGlzSWdub3JlZCwgeyBoYXNWYWxpZEV4dGVuc2lvbiB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcblxuaW1wb3J0IHsgaGFzaE9iamVjdCB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaGFzaCc7XG5pbXBvcnQgKiBhcyB1bmFtYmlndW91cyBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3VuYW1iaWd1b3VzJztcblxuaW1wb3J0IHsgdHNDb25maWdMb2FkZXIgfSBmcm9tICd0c2NvbmZpZy1wYXRocy9saWIvdHNjb25maWctbG9hZGVyJztcblxuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcblxubGV0IHBhcnNlQ29uZmlnRmlsZVRleHRUb0pzb247XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdlc2xpbnQtcGx1Z2luLWltcG9ydDpFeHBvcnRNYXAnKTtcblxuY29uc3QgZXhwb3J0Q2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCB0c0NvbmZpZ0NhY2hlID0gbmV3IE1hcCgpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBvcnRNYXAge1xuICBjb25zdHJ1Y3RvcihwYXRoKSB7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLm5hbWVzcGFjZSA9IG5ldyBNYXAoKTtcbiAgICAvLyB0b2RvOiByZXN0cnVjdHVyZSB0byBrZXkgb24gcGF0aCwgdmFsdWUgaXMgcmVzb2x2ZXIgKyBtYXAgb2YgbmFtZXNcbiAgICB0aGlzLnJlZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAvKipcbiAgICAgKiBzdGFyLWV4cG9ydHNcbiAgICAgKiBAdHlwZSB7U2V0fSBvZiAoKSA9PiBFeHBvcnRNYXBcbiAgICAgKi9cbiAgICB0aGlzLmRlcGVuZGVuY2llcyA9IG5ldyBTZXQoKTtcbiAgICAvKipcbiAgICAgKiBkZXBlbmRlbmNpZXMgb2YgdGhpcyBtb2R1bGUgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWRcbiAgICAgKiBAdHlwZSB7TWFwfSBmcm9tIHBhdGggPSAoKSA9PiBFeHBvcnRNYXBcbiAgICAgKi9cbiAgICB0aGlzLmltcG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuXG4gIGdldCBoYXNEZWZhdWx0KCkgeyByZXR1cm4gdGhpcy5nZXQoJ2RlZmF1bHQnKSAhPSBudWxsOyB9IC8vIHN0cm9uZ2VyIHRoYW4gdGhpcy5oYXNcblxuICBnZXQgc2l6ZSgpIHtcbiAgICBsZXQgc2l6ZSA9IHRoaXMubmFtZXNwYWNlLnNpemUgKyB0aGlzLnJlZXhwb3J0cy5zaXplO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgc2l6ZSArPSBkLnNpemU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNpemU7XG4gIH1cblxuICAvKipcbiAgICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgY2hlY2sgZXhwbGljaXRseSByZS1leHBvcnRlZCBuYW1lcyBmb3IgZXhpc3RlbmNlXG4gICAqIGluIHRoZSBiYXNlIG5hbWVzcGFjZSwgYnV0IGl0IHdpbGwgZXhwYW5kIGFsbCBgZXhwb3J0ICogZnJvbSAnLi4uJ2AgZXhwb3J0c1xuICAgKiBpZiBub3QgZm91bmQgaW4gdGhlIGV4cGxpY2l0IG5hbWVzcGFjZS5cbiAgICogQHBhcmFtICB7c3RyaW5nfSAgbmFtZVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlmIGBuYW1lYCBpcyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZS5cbiAgICovXG4gIGhhcyhuYW1lKSB7XG4gICAgaWYgKHRoaXMubmFtZXNwYWNlLmhhcyhuYW1lKSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkgcmV0dXJuIHRydWU7XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG5cbiAgICAgICAgLy8gdG9kbzogcmVwb3J0IGFzIHVucmVzb2x2ZWQ/XG4gICAgICAgIGlmICghaW5uZXJNYXApIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChpbm5lck1hcC5oYXMobmFtZSkpIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbnN1cmUgdGhhdCBpbXBvcnRlZCBuYW1lIGZ1bGx5IHJlc29sdmVzLlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7eyBmb3VuZDogYm9vbGVhbiwgcGF0aDogRXhwb3J0TWFwW10gfX1cbiAgICovXG4gIGhhc0RlZXAobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTtcblxuICAgIGlmICh0aGlzLnJlZXhwb3J0cy5oYXMobmFtZSkpIHtcbiAgICAgIGNvbnN0IHJlZXhwb3J0cyA9IHRoaXMucmVleHBvcnRzLmdldChuYW1lKTtcbiAgICAgIGNvbnN0IGltcG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuXG4gICAgICAvLyBpZiBpbXBvcnQgaXMgaWdub3JlZCwgcmV0dXJuIGV4cGxpY2l0ICdudWxsJ1xuICAgICAgaWYgKGltcG9ydGVkID09IG51bGwpIHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTtcblxuICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzLCBvbmx5IGlmIG5hbWUgbWF0Y2hlc1xuICAgICAgaWYgKGltcG9ydGVkLnBhdGggPT09IHRoaXMucGF0aCAmJiByZWV4cG9ydHMubG9jYWwgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHsgZm91bmQ6IGZhbHNlLCBwYXRoOiBbdGhpc10gfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVlcCA9IGltcG9ydGVkLmhhc0RlZXAocmVleHBvcnRzLmxvY2FsKTtcbiAgICAgIGRlZXAucGF0aC51bnNoaWZ0KHRoaXMpO1xuXG4gICAgICByZXR1cm4gZGVlcDtcbiAgICB9XG5cblxuICAgIC8vIGRlZmF1bHQgZXhwb3J0cyBtdXN0IGJlIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgKCMzMjgpXG4gICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgY29uc3QgaW5uZXJNYXAgPSBkZXAoKTtcbiAgICAgICAgaWYgKGlubmVyTWFwID09IG51bGwpIHJldHVybiB7IGZvdW5kOiB0cnVlLCBwYXRoOiBbdGhpc10gfTtcbiAgICAgICAgLy8gdG9kbzogcmVwb3J0IGFzIHVucmVzb2x2ZWQ/XG4gICAgICAgIGlmICghaW5uZXJNYXApIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIHNhZmVndWFyZCBhZ2FpbnN0IGN5Y2xlc1xuICAgICAgICBpZiAoaW5uZXJNYXAucGF0aCA9PT0gdGhpcy5wYXRoKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBpbm5lclZhbHVlID0gaW5uZXJNYXAuaGFzRGVlcChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUuZm91bmQpIHtcbiAgICAgICAgICBpbm5lclZhbHVlLnBhdGgudW5zaGlmdCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gaW5uZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHJldHVybiB0aGlzLm5hbWVzcGFjZS5nZXQobmFtZSk7XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzLCBvbmx5IGlmIG5hbWUgbWF0Y2hlc1xuICAgICAgaWYgKGltcG9ydGVkLnBhdGggPT09IHRoaXMucGF0aCAmJiByZWV4cG9ydHMubG9jYWwgPT09IG5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiBpbXBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKTtcbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSBjb250aW51ZTtcblxuICAgICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXNcbiAgICAgICAgaWYgKGlubmVyTWFwLnBhdGggPT09IHRoaXMucGF0aCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgaW5uZXJWYWx1ZSA9IGlubmVyTWFwLmdldChuYW1lKTtcbiAgICAgICAgaWYgKGlubmVyVmFsdWUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGlubmVyVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICB0aGlzLm5hbWVzcGFjZS5mb3JFYWNoKCh2LCBuKSA9PlxuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2LCBuLCB0aGlzKSk7XG5cbiAgICB0aGlzLnJlZXhwb3J0cy5mb3JFYWNoKChyZWV4cG9ydHMsIG5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHJlZXhwb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG4gICAgICAvLyBjYW4ndCBsb29rIHVwIG1ldGEgZm9yIGlnbm9yZWQgcmUtZXhwb3J0cyAoIzM0OClcbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgcmVleHBvcnRlZCAmJiByZWV4cG9ydGVkLmdldChyZWV4cG9ydHMubG9jYWwpLCBuYW1lLCB0aGlzKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmZvckVhY2goZGVwID0+IHtcbiAgICAgIGNvbnN0IGQgPSBkZXAoKTtcbiAgICAgIC8vIENKUyAvIGlnbm9yZWQgZGVwZW5kZW5jaWVzIHdvbid0IGV4aXN0ICgjNzE3KVxuICAgICAgaWYgKGQgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICBkLmZvckVhY2goKHYsIG4pID0+XG4gICAgICAgIG4gIT09ICdkZWZhdWx0JyAmJiBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHYsIG4sIHRoaXMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHRvZG86IGtleXMsIHZhbHVlcywgZW50cmllcz9cblxuICByZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBkZWNsYXJhdGlvbi5zb3VyY2UsXG4gICAgICBtZXNzYWdlOiBgUGFyc2UgZXJyb3JzIGluIGltcG9ydGVkIG1vZHVsZSAnJHtkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWV9JzogYCArXG4gICAgICAgICAgICAgICAgICBgJHt0aGlzLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAubWFwKGUgPT4gYCR7ZS5tZXNzYWdlfSAoJHtlLmxpbmVOdW1iZXJ9OiR7ZS5jb2x1bW59KWApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWAsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBwYXJzZSBkb2NzIGZyb20gdGhlIGZpcnN0IG5vZGUgdGhhdCBoYXMgbGVhZGluZyBjb21tZW50c1xuICovXG5mdW5jdGlvbiBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCAuLi5ub2Rlcykge1xuICBjb25zdCBtZXRhZGF0YSA9IHt9O1xuXG4gIC8vICdzb21lJyBzaG9ydC1jaXJjdWl0cyBvbiBmaXJzdCAndHJ1ZSdcbiAgbm9kZXMuc29tZShuID0+IHtcbiAgICB0cnkge1xuXG4gICAgICBsZXQgbGVhZGluZ0NvbW1lbnRzO1xuXG4gICAgICAvLyBuLmxlYWRpbmdDb21tZW50cyBpcyBsZWdhY3kgYGF0dGFjaENvbW1lbnRzYCBiZWhhdmlvclxuICAgICAgaWYgKCdsZWFkaW5nQ29tbWVudHMnIGluIG4pIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gbi5sZWFkaW5nQ29tbWVudHM7XG4gICAgICB9IGVsc2UgaWYgKG4ucmFuZ2UpIHtcbiAgICAgICAgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlLmdldENvbW1lbnRzQmVmb3JlKG4pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkb2NTdHlsZVBhcnNlcnMpIHtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jU3R5bGVQYXJzZXJzW25hbWVdKGxlYWRpbmdDb21tZW50cyk7XG4gICAgICAgIGlmIChkb2MpIHtcbiAgICAgICAgICBtZXRhZGF0YS5kb2MgPSBkb2M7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gbWV0YWRhdGE7XG59XG5cbmNvbnN0IGF2YWlsYWJsZURvY1N0eWxlUGFyc2VycyA9IHtcbiAganNkb2M6IGNhcHR1cmVKc0RvYyxcbiAgdG9tZG9jOiBjYXB0dXJlVG9tRG9jLFxufTtcblxuLyoqXG4gKiBwYXJzZSBKU0RvYyBmcm9tIGxlYWRpbmcgY29tbWVudHNcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNvbW1lbnRzXG4gKiBAcmV0dXJuIHt7IGRvYzogb2JqZWN0IH19XG4gKi9cbmZ1bmN0aW9uIGNhcHR1cmVKc0RvYyhjb21tZW50cykge1xuICBsZXQgZG9jO1xuXG4gIC8vIGNhcHR1cmUgWFNEb2NcbiAgY29tbWVudHMuZm9yRWFjaChjb21tZW50ID0+IHtcbiAgICAvLyBza2lwIG5vbi1ibG9jayBjb21tZW50c1xuICAgIGlmIChjb21tZW50LnR5cGUgIT09ICdCbG9jaycpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgZG9jID0gZG9jdHJpbmUucGFyc2UoY29tbWVudC52YWx1ZSwgeyB1bndyYXA6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvKiBkb24ndCBjYXJlLCBmb3Igbm93PyBtYXliZSBhZGQgdG8gYGVycm9ycz9gICovXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZG9jO1xufVxuXG4vKipcbiAgKiBwYXJzZSBUb21Eb2Mgc2VjdGlvbiBmcm9tIGNvbW1lbnRzXG4gICovXG5mdW5jdGlvbiBjYXB0dXJlVG9tRG9jKGNvbW1lbnRzKSB7XG4gIC8vIGNvbGxlY3QgbGluZXMgdXAgdG8gZmlyc3QgcGFyYWdyYXBoIGJyZWFrXG4gIGNvbnN0IGxpbmVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb21tZW50ID0gY29tbWVudHNbaV07XG4gICAgaWYgKGNvbW1lbnQudmFsdWUubWF0Y2goL15cXHMqJC8pKSBicmVhaztcbiAgICBsaW5lcy5wdXNoKGNvbW1lbnQudmFsdWUudHJpbSgpKTtcbiAgfVxuXG4gIC8vIHJldHVybiBkb2N0cmluZS1saWtlIG9iamVjdFxuICBjb25zdCBzdGF0dXNNYXRjaCA9IGxpbmVzLmpvaW4oJyAnKS5tYXRjaCgvXihQdWJsaWN8SW50ZXJuYWx8RGVwcmVjYXRlZCk6XFxzKiguKykvKTtcbiAgaWYgKHN0YXR1c01hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBzdGF0dXNNYXRjaFsyXSxcbiAgICAgIHRhZ3M6IFt7XG4gICAgICAgIHRpdGxlOiBzdGF0dXNNYXRjaFsxXS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB9XSxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IHN1cHBvcnRlZEltcG9ydFR5cGVzID0gbmV3IFNldChbJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInLCAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJ10pO1xuXG5FeHBvcnRNYXAuZ2V0ID0gZnVuY3Rpb24gKHNvdXJjZSwgY29udGV4dCkge1xuICBjb25zdCBwYXRoID0gcmVzb2x2ZShzb3VyY2UsIGNvbnRleHQpO1xuICBpZiAocGF0aCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gRXhwb3J0TWFwLmZvcihjaGlsZENvbnRleHQocGF0aCwgY29udGV4dCkpO1xufTtcblxuRXhwb3J0TWFwLmZvciA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIGNvbnN0IHsgcGF0aCB9ID0gY29udGV4dDtcblxuICBjb25zdCBjYWNoZUtleSA9IGhhc2hPYmplY3QoY29udGV4dCkuZGlnZXN0KCdoZXgnKTtcbiAgbGV0IGV4cG9ydE1hcCA9IGV4cG9ydENhY2hlLmdldChjYWNoZUtleSk7XG5cbiAgLy8gcmV0dXJuIGNhY2hlZCBpZ25vcmVcbiAgaWYgKGV4cG9ydE1hcCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoKTtcbiAgaWYgKGV4cG9ydE1hcCAhPSBudWxsKSB7XG4gICAgLy8gZGF0ZSBlcXVhbGl0eSBjaGVja1xuICAgIGlmIChleHBvcnRNYXAubXRpbWUgLSBzdGF0cy5tdGltZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGV4cG9ydE1hcDtcbiAgICB9XG4gICAgLy8gZnV0dXJlOiBjaGVjayBjb250ZW50IGVxdWFsaXR5P1xuICB9XG5cbiAgLy8gY2hlY2sgdmFsaWQgZXh0ZW5zaW9ucyBmaXJzdFxuICBpZiAoIWhhc1ZhbGlkRXh0ZW5zaW9uKHBhdGgsIGNvbnRleHQpKSB7XG4gICAgZXhwb3J0Q2FjaGUuc2V0KGNhY2hlS2V5LCBudWxsKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGNoZWNrIGZvciBhbmQgY2FjaGUgaWdub3JlXG4gIGlmIChpc0lnbm9yZWQocGF0aCwgY29udGV4dCkpIHtcbiAgICBsb2coJ2lnbm9yZWQgcGF0aCBkdWUgdG8gaWdub3JlIHNldHRpbmdzOicsIHBhdGgpO1xuICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHBhdGgsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcblxuICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIHVuYW1iaWd1b3VzIG1vZHVsZXNcbiAgaWYgKCF1bmFtYmlndW91cy50ZXN0KGNvbnRlbnQpKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIHVuYW1iaWd1b3VzIHJlZ2V4OicsIHBhdGgpO1xuICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsb2coJ2NhY2hlIG1pc3MnLCBjYWNoZUtleSwgJ2ZvciBwYXRoJywgcGF0aCk7XG4gIGV4cG9ydE1hcCA9IEV4cG9ydE1hcC5wYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcblxuICAvLyBhbWJpZ3VvdXMgbW9kdWxlcyByZXR1cm4gbnVsbFxuICBpZiAoZXhwb3J0TWFwID09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIGV4cG9ydE1hcC5tdGltZSA9IHN0YXRzLm10aW1lO1xuXG4gIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgZXhwb3J0TWFwKTtcbiAgcmV0dXJuIGV4cG9ydE1hcDtcbn07XG5cblxuRXhwb3J0TWFwLnBhcnNlID0gZnVuY3Rpb24gKHBhdGgsIGNvbnRlbnQsIGNvbnRleHQpIHtcbiAgY29uc3QgbSA9IG5ldyBFeHBvcnRNYXAocGF0aCk7XG4gIGNvbnN0IGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSA9IGlzRXNNb2R1bGVJbnRlcm9wKCk7XG5cbiAgbGV0IGFzdDtcbiAgdHJ5IHtcbiAgICBhc3QgPSBwYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nKCdwYXJzZSBlcnJvcjonLCBwYXRoLCBlcnIpO1xuICAgIG0uZXJyb3JzLnB1c2goZXJyKTtcbiAgICByZXR1cm4gbTsgLy8gY2FuJ3QgY29udGludWVcbiAgfVxuXG4gIGlmICghdW5hbWJpZ3VvdXMuaXNNb2R1bGUoYXN0KSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgZG9jc3R5bGUgPSAoY29udGV4dC5zZXR0aW5ncyAmJiBjb250ZXh0LnNldHRpbmdzWydpbXBvcnQvZG9jc3R5bGUnXSkgfHwgWydqc2RvYyddO1xuICBjb25zdCBkb2NTdHlsZVBhcnNlcnMgPSB7fTtcbiAgZG9jc3R5bGUuZm9yRWFjaChzdHlsZSA9PiB7XG4gICAgZG9jU3R5bGVQYXJzZXJzW3N0eWxlXSA9IGF2YWlsYWJsZURvY1N0eWxlUGFyc2Vyc1tzdHlsZV07XG4gIH0pO1xuXG4gIC8vIGF0dGVtcHQgdG8gY29sbGVjdCBtb2R1bGUgZG9jXG4gIGlmIChhc3QuY29tbWVudHMpIHtcbiAgICBhc3QuY29tbWVudHMuc29tZShjID0+IHtcbiAgICAgIGlmIChjLnR5cGUgIT09ICdCbG9jaycpIHJldHVybiBmYWxzZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY3RyaW5lLnBhcnNlKGMudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgICAgICBpZiAoZG9jLnRhZ3Muc29tZSh0ID0+IHQudGl0bGUgPT09ICdtb2R1bGUnKSkge1xuICAgICAgICAgIG0uZG9jID0gZG9jO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHsgLyogaWdub3JlICovIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgZnVuY3Rpb24gcmVtb3RlUGF0aCh2YWx1ZSkge1xuICAgIHJldHVybiByZXNvbHZlLnJlbGF0aXZlKHZhbHVlLCBwYXRoLCBjb250ZXh0LnNldHRpbmdzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc29sdmVJbXBvcnQodmFsdWUpIHtcbiAgICBjb25zdCBycCA9IHJlbW90ZVBhdGgodmFsdWUpO1xuICAgIGlmIChycCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gRXhwb3J0TWFwLmZvcihjaGlsZENvbnRleHQocnAsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldE5hbWVzcGFjZShpZGVudGlmaWVyKSB7XG4gICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhpZGVudGlmaWVyLm5hbWUpKSByZXR1cm47XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVJbXBvcnQobmFtZXNwYWNlcy5nZXQoaWRlbnRpZmllci5uYW1lKSk7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZE5hbWVzcGFjZShvYmplY3QsIGlkZW50aWZpZXIpIHtcbiAgICBjb25zdCBuc2ZuID0gZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpO1xuICAgIGlmIChuc2ZuKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCAnbmFtZXNwYWNlJywgeyBnZXQ6IG5zZm4gfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NTcGVjaWZpZXIocywgbiwgbSkge1xuICAgIGNvbnN0IG5zb3VyY2UgPSBuLnNvdXJjZSAmJiBuLnNvdXJjZS52YWx1ZTtcbiAgICBjb25zdCBleHBvcnRNZXRhID0ge307XG4gICAgbGV0IGxvY2FsO1xuXG4gICAgc3dpdGNoIChzLnR5cGUpIHtcbiAgICBjYXNlICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzpcbiAgICAgIGlmICghbnNvdXJjZSkgcmV0dXJuO1xuICAgICAgbG9jYWwgPSAnZGVmYXVsdCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdFeHBvcnROYW1lc3BhY2VTcGVjaWZpZXInOlxuICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydE1ldGEsICduYW1lc3BhY2UnLCB7XG4gICAgICAgIGdldCgpIHsgcmV0dXJuIHJlc29sdmVJbXBvcnQobnNvdXJjZSk7IH0sXG4gICAgICB9KSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nOlxuICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSwgYWRkTmFtZXNwYWNlKGV4cG9ydE1ldGEsIHMuc291cmNlLnZhbHVlKSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSAnRXhwb3J0U3BlY2lmaWVyJzpcbiAgICAgIGlmICghbi5zb3VyY2UpIHtcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KHMuZXhwb3J0ZWQubmFtZSwgYWRkTmFtZXNwYWNlKGV4cG9ydE1ldGEsIHMubG9jYWwpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZWxzZSBmYWxscyB0aHJvdWdoXG4gICAgZGVmYXVsdDpcbiAgICAgIGxvY2FsID0gcy5sb2NhbC5uYW1lO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gdG9kbzogSlNEb2NcbiAgICBtLnJlZXhwb3J0cy5zZXQocy5leHBvcnRlZC5uYW1lLCB7IGxvY2FsLCBnZXRJbXBvcnQ6ICgpID0+IHJlc29sdmVJbXBvcnQobnNvdXJjZSkgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBjYXB0dXJlRGVwZW5kZW5jeSh7IHNvdXJjZSB9LCBpc09ubHlJbXBvcnRpbmdUeXBlcywgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpKSB7XG4gICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHAgPSByZW1vdGVQYXRoKHNvdXJjZS52YWx1ZSk7XG4gICAgaWYgKHAgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBkZWNsYXJhdGlvbk1ldGFkYXRhID0ge1xuICAgICAgLy8gY2FwdHVyaW5nIGFjdHVhbCBub2RlIHJlZmVyZW5jZSBob2xkcyBmdWxsIEFTVCBpbiBtZW1vcnkhXG4gICAgICBzb3VyY2U6IHsgdmFsdWU6IHNvdXJjZS52YWx1ZSwgbG9jOiBzb3VyY2UubG9jIH0sXG4gICAgICBpc09ubHlJbXBvcnRpbmdUeXBlcyxcbiAgICAgIGltcG9ydGVkU3BlY2lmaWVycyxcbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBtLmltcG9ydHMuZ2V0KHApO1xuICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7XG4gICAgICBleGlzdGluZy5kZWNsYXJhdGlvbnMuYWRkKGRlY2xhcmF0aW9uTWV0YWRhdGEpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nLmdldHRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBnZXR0ZXIgPSB0aHVua0ZvcihwLCBjb250ZXh0KTtcbiAgICBtLmltcG9ydHMuc2V0KHAsIHsgZ2V0dGVyLCBkZWNsYXJhdGlvbnM6IG5ldyBTZXQoW2RlY2xhcmF0aW9uTWV0YWRhdGFdKSB9KTtcbiAgICByZXR1cm4gZ2V0dGVyO1xuICB9XG5cbiAgY29uc3Qgc291cmNlID0gbWFrZVNvdXJjZUNvZGUoY29udGVudCwgYXN0KTtcblxuICBmdW5jdGlvbiByZWFkVHNDb25maWcoKSB7XG4gICAgY29uc3QgdHNDb25maWdJbmZvID0gdHNDb25maWdMb2FkZXIoe1xuICAgICAgY3dkOlxuICAgICAgICAoY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIpIHx8XG4gICAgICAgIHByb2Nlc3MuY3dkKCksXG4gICAgICBnZXRFbnY6IChrZXkpID0+IHByb2Nlc3MuZW52W2tleV0sXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0c0NvbmZpZ0luZm8udHNDb25maWdQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QganNvblRleHQgPSBmcy5yZWFkRmlsZVN5bmModHNDb25maWdJbmZvLnRzQ29uZmlnUGF0aCkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKCFwYXJzZUNvbmZpZ0ZpbGVUZXh0VG9Kc29uKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBiZWNhdXNlIHByb2plY3RzIG5vdCB1c2luZyBUeXBlU2NyaXB0IHdvbid0IGhhdmUgdHlwZXNjcmlwdCBpbnN0YWxsZWRcbiAgICAgICAgICAoeyBwYXJzZUNvbmZpZ0ZpbGVUZXh0VG9Kc29uIH0gPSByZXF1aXJlKCd0eXBlc2NyaXB0JykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUNvbmZpZ0ZpbGVUZXh0VG9Kc29uKHRzQ29uZmlnSW5mby50c0NvbmZpZ1BhdGgsIGpzb25UZXh0KS5jb25maWc7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yc1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KHtcbiAgICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gICAgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBsZXQgdHNDb25maWcgPSB0c0NvbmZpZ0NhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRzQ29uZmlnID0gcmVhZFRzQ29uZmlnKCk7XG4gICAgICB0c0NvbmZpZ0NhY2hlLnNldChjYWNoZUtleSwgdHNDb25maWcpO1xuICAgIH1cblxuICAgIHJldHVybiB0c0NvbmZpZyAmJiB0c0NvbmZpZy5jb21waWxlck9wdGlvbnMgPyB0c0NvbmZpZy5jb21waWxlck9wdGlvbnMuZXNNb2R1bGVJbnRlcm9wIDogZmFsc2U7XG4gIH1cblxuICBhc3QuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBuKTtcbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgbi5kZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBleHBvcnRNZXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBnZXR0ZXIgPSBjYXB0dXJlRGVwZW5kZW5jeShuLCBuLmV4cG9ydEtpbmQgPT09ICd0eXBlJyk7XG4gICAgICBpZiAoZ2V0dGVyKSBtLmRlcGVuZGVuY2llcy5hZGQoZ2V0dGVyKTtcbiAgICAgIGlmIChuLmV4cG9ydGVkKSB7XG4gICAgICAgIHByb2Nlc3NTcGVjaWZpZXIobiwgbi5leHBvcnRlZCwgbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2FwdHVyZSBuYW1lc3BhY2VzIGluIGNhc2Ugb2YgbGF0ZXIgZXhwb3J0XG4gICAgaWYgKG4udHlwZSA9PT0gJ0ltcG9ydERlY2xhcmF0aW9uJykge1xuICAgICAgLy8gaW1wb3J0IHR5cGUgeyBGb28gfSAoVFMgYW5kIEZsb3cpXG4gICAgICBjb25zdCBkZWNsYXJhdGlvbklzVHlwZSA9IG4uaW1wb3J0S2luZCA9PT0gJ3R5cGUnO1xuICAgICAgLy8gaW1wb3J0ICcuL2Zvbycgb3IgaW1wb3J0IHt9IGZyb20gJy4vZm9vJyAoYm90aCAwIHNwZWNpZmllcnMpIGlzIGEgc2lkZSBlZmZlY3QgYW5kXG4gICAgICAvLyBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCB0byBiZSBqdXN0IGltcG9ydGluZyB0eXBlc1xuICAgICAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoO1xuICAgICAgY29uc3QgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpO1xuICAgICAgbi5zcGVjaWZpZXJzLmZvckVhY2goc3BlY2lmaWVyID0+IHtcbiAgICAgICAgaWYgKHN1cHBvcnRlZEltcG9ydFR5cGVzLmhhcyhzcGVjaWZpZXIudHlwZSkpIHtcbiAgICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMuYWRkKHNwZWNpZmllci50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnRTcGVjaWZpZXInKSB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbXBvcnQgeyB0eXBlIEZvbyB9IChGbG93KVxuICAgICAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID1cbiAgICAgICAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzICYmIHNwZWNpZmllci5pbXBvcnRLaW5kID09PSAndHlwZSc7XG4gICAgICB9KTtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIGltcG9ydGVkU3BlY2lmaWVycyk7XG5cbiAgICAgIGNvbnN0IG5zID0gbi5zcGVjaWZpZXJzLmZpbmQocyA9PiBzLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBuYW1lc3BhY2VzLnNldChucy5sb2NhbC5uYW1lLCBuLnNvdXJjZS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nKSB7XG4gICAgICAvLyBjYXB0dXJlIGRlY2xhcmF0aW9uXG4gICAgICBpZiAobi5kZWNsYXJhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAobi5kZWNsYXJhdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0Z1bmN0aW9uRGVjbGFyYXRpb24nOlxuICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnVHlwZUFsaWFzJzogLy8gZmxvd3R5cGUgd2l0aCBiYWJlbC1lc2xpbnQgcGFyc2VyXG4gICAgICAgIGNhc2UgJ0ludGVyZmFjZURlY2xhcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgY2FzZSAnVFNEZWNsYXJlRnVuY3Rpb24nOlxuICAgICAgICBjYXNlICdUU0VudW1EZWNsYXJhdGlvbic6XG4gICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICBjYXNlICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24nOlxuICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQobi5kZWNsYXJhdGlvbi5pZC5uYW1lLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBuKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICAgIG4uZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+XG4gICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShkLmlkLFxuICAgICAgICAgICAgICBpZCA9PiBtLm5hbWVzcGFjZS5zZXQoaWQubmFtZSwgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgZCwgbikpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbi5zcGVjaWZpZXJzLmZvckVhY2goKHMpID0+IHByb2Nlc3NTcGVjaWZpZXIocywgbiwgbSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydHMgPSBbJ1RTRXhwb3J0QXNzaWdubWVudCddO1xuICAgIGlmIChpc0VzTW9kdWxlSW50ZXJvcFRydWUpIHtcbiAgICAgIGV4cG9ydHMucHVzaCgnVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZG9lc24ndCBkZWNsYXJlIGFueXRoaW5nLCBidXQgY2hhbmdlcyB3aGF0J3MgYmVpbmcgZXhwb3J0ZWQuXG4gICAgaWYgKGluY2x1ZGVzKGV4cG9ydHMsIG4udHlwZSkpIHtcbiAgICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IG4udHlwZSA9PT0gJ1RTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24nXG4gICAgICAgID8gbi5pZC5uYW1lXG4gICAgICAgIDogKG4uZXhwcmVzc2lvbiAmJiBuLmV4cHJlc3Npb24ubmFtZSB8fCAobi5leHByZXNzaW9uLmlkICYmIG4uZXhwcmVzc2lvbi5pZC5uYW1lKSB8fCBudWxsKTtcbiAgICAgIGNvbnN0IGRlY2xUeXBlcyA9IFtcbiAgICAgICAgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgICAgICAnQ2xhc3NEZWNsYXJhdGlvbicsXG4gICAgICAgICdUU0RlY2xhcmVGdW5jdGlvbicsXG4gICAgICAgICdUU0VudW1EZWNsYXJhdGlvbicsXG4gICAgICAgICdUU1R5cGVBbGlhc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNNb2R1bGVEZWNsYXJhdGlvbicsXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwb3J0ZWREZWNscyA9IGFzdC5ib2R5LmZpbHRlcigoeyB0eXBlLCBpZCwgZGVjbGFyYXRpb25zIH0pID0+IGluY2x1ZGVzKGRlY2xUeXBlcywgdHlwZSkgJiYgKFxuICAgICAgICAoaWQgJiYgaWQubmFtZSA9PT0gZXhwb3J0ZWROYW1lKSB8fCAoZGVjbGFyYXRpb25zICYmIGRlY2xhcmF0aW9ucy5maW5kKChkKSA9PiBkLmlkLm5hbWUgPT09IGV4cG9ydGVkTmFtZSkpXG4gICAgICApKTtcbiAgICAgIGlmIChleHBvcnRlZERlY2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBFeHBvcnQgaXMgbm90IHJlZmVyZW5jaW5nIGFueSBsb2NhbCBkZWNsYXJhdGlvbiwgbXVzdCBiZSByZS1leHBvcnRpbmdcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgbikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAgICAgJiYgIW0ubmFtZXNwYWNlLmhhcygnZGVmYXVsdCcpIC8vIGFuZCBkZWZhdWx0IGlzbid0IGFkZGVkIGFscmVhZHlcbiAgICAgICkge1xuICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCB7fSk7IC8vIGFkZCBkZWZhdWx0IGV4cG9ydFxuICAgICAgfVxuICAgICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICAgIGlmIChkZWNsLnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgIGlmIChkZWNsLmJvZHkgJiYgZGVjbC5ib2R5LnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KGRlY2wuYm9keS5pZC5uYW1lLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsLmJvZHkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgICAgZGVjbC5ib2R5LmJvZHkuZm9yRWFjaCgobW9kdWxlQmxvY2tOb2RlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEV4cG9ydC1hc3NpZ25tZW50IGV4cG9ydHMgYWxsIG1lbWJlcnMgaW4gdGhlIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZURlY2wgPSBtb2R1bGVCbG9ja05vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nID9cbiAgICAgICAgICAgICAgICBtb2R1bGVCbG9ja05vZGUuZGVjbGFyYXRpb24gOlxuICAgICAgICAgICAgICAgIG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZURlY2wpIHtcbiAgICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IGNhbiBjaGVjayB0aGlzIGZvciB1czsgd2UgbmVlZG4ndFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT5cbiAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGQuaWQsIChpZCkgPT4gbS5uYW1lc3BhY2Uuc2V0KFxuICAgICAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsLCBuYW1lc3BhY2VEZWNsLCBtb2R1bGVCbG9ja05vZGUpLFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgICBuYW1lc3BhY2VEZWNsLmlkLm5hbWUsXG4gICAgICAgICAgICAgICAgICBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBtb2R1bGVCbG9ja05vZGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEV4cG9ydCBhcyBkZWZhdWx0XG4gICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgZGVjbCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChcbiAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUgLy8gZXNNb2R1bGVJbnRlcm9wIGlzIG9uIGluIHRzY29uZmlnXG4gICAgJiYgbS5uYW1lc3BhY2Uuc2l6ZSA+IDAgLy8gYW55dGhpbmcgaXMgZXhwb3J0ZWRcbiAgICAmJiAhbS5uYW1lc3BhY2UuaGFzKCdkZWZhdWx0JykgLy8gYW5kIGRlZmF1bHQgaXNuJ3QgYWRkZWQgYWxyZWFkeVxuICApIHtcbiAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCB7fSk7IC8vIGFkZCBkZWZhdWx0IGV4cG9ydFxuICB9XG5cbiAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIFRoZSBjcmVhdGlvbiBvZiB0aGlzIGNsb3N1cmUgaXMgaXNvbGF0ZWQgZnJvbSBvdGhlciBzY29wZXNcbiAqIHRvIGF2b2lkIG92ZXItcmV0ZW50aW9uIG9mIHVucmVsYXRlZCB2YXJpYWJsZXMsIHdoaWNoIGhhc1xuICogY2F1c2VkIG1lbW9yeSBsZWFrcy4gU2VlICMxMjY2LlxuICovXG5mdW5jdGlvbiB0aHVua0ZvcihwLCBjb250ZXh0KSB7XG4gIHJldHVybiAoKSA9PiBFeHBvcnRNYXAuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cblxuLyoqXG4gKiBUcmF2ZXJzZSBhIHBhdHRlcm4vaWRlbnRpZmllciBub2RlLCBjYWxsaW5nICdjYWxsYmFjaydcbiAqIGZvciBlYWNoIGxlYWYgaWRlbnRpZmllci5cbiAqIEBwYXJhbSAge25vZGV9ICAgcGF0dGVyblxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUocGF0dGVybiwgY2FsbGJhY2spIHtcbiAgc3dpdGNoIChwYXR0ZXJuLnR5cGUpIHtcbiAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgIGNhbGxiYWNrKHBhdHRlcm4pO1xuICAgIGJyZWFrO1xuXG4gIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgIHBhdHRlcm4ucHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgIGNhbGxiYWNrKHAuYXJndW1lbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShwLnZhbHVlLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gICAgYnJlYWs7XG5cbiAgY2FzZSAnQXJyYXlQYXR0ZXJuJzpcbiAgICBwYXR0ZXJuLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICBjYWxsYmFjayhlbGVtZW50LmFyZ3VtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZWxlbWVudCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIGJyZWFrO1xuXG4gIGNhc2UgJ0Fzc2lnbm1lbnRQYXR0ZXJuJzpcbiAgICBjYWxsYmFjayhwYXR0ZXJuLmxlZnQpO1xuICAgIGJyZWFrO1xuICB9XG59XG5cbi8qKlxuICogZG9uJ3QgaG9sZCBmdWxsIGNvbnRleHQgb2JqZWN0IGluIG1lbW9yeSwganVzdCBncmFiIHdoYXQgd2UgbmVlZC5cbiAqL1xuZnVuY3Rpb24gY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzZXR0aW5ncywgcGFyc2VyT3B0aW9ucywgcGFyc2VyUGF0aCB9ID0gY29udGV4dDtcbiAgcmV0dXJuIHtcbiAgICBzZXR0aW5ncyxcbiAgICBwYXJzZXJPcHRpb25zLFxuICAgIHBhcnNlclBhdGgsXG4gICAgcGF0aCxcbiAgfTtcbn1cblxuXG4vKipcbiAqIHNvbWV0aW1lcyBsZWdhY3kgc3VwcG9ydCBpc24ndCBfdGhhdF8gaGFyZC4uLiByaWdodD9cbiAqL1xuZnVuY3Rpb24gbWFrZVNvdXJjZUNvZGUodGV4dCwgYXN0KSB7XG4gIGlmIChTb3VyY2VDb2RlLmxlbmd0aCA+IDEpIHtcbiAgICAvLyBFU0xpbnQgM1xuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh0ZXh0LCBhc3QpO1xuICB9IGVsc2Uge1xuICAgIC8vIEVTTGludCA0LCA1XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VDb2RlKHsgdGV4dCwgYXN0IH0pO1xuICB9XG59XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9FeHBvcnRNYXAuanMiXSwibmFtZXMiOlsicmVjdXJzaXZlUGF0dGVybkNhcHR1cmUiLCJ1bmFtYmlndW91cyIsInRzIiwibG9nIiwiZXhwb3J0Q2FjaGUiLCJNYXAiLCJ0c0NvbmZpZ0NhY2hlIiwiRXhwb3J0TWFwIiwicGF0aCIsIm5hbWVzcGFjZSIsInJlZXhwb3J0cyIsImRlcGVuZGVuY2llcyIsIlNldCIsImltcG9ydHMiLCJlcnJvcnMiLCJuYW1lIiwiaGFzIiwiZGVwIiwiaW5uZXJNYXAiLCJmb3VuZCIsImdldCIsImltcG9ydGVkIiwiZ2V0SW1wb3J0IiwibG9jYWwiLCJkZWVwIiwiaGFzRGVlcCIsInVuc2hpZnQiLCJpbm5lclZhbHVlIiwidW5kZWZpbmVkIiwiY2FsbGJhY2siLCJ0aGlzQXJnIiwiZm9yRWFjaCIsInYiLCJuIiwiY2FsbCIsInJlZXhwb3J0ZWQiLCJkIiwiY29udGV4dCIsImRlY2xhcmF0aW9uIiwicmVwb3J0Iiwibm9kZSIsInNvdXJjZSIsIm1lc3NhZ2UiLCJ2YWx1ZSIsIm1hcCIsImUiLCJsaW5lTnVtYmVyIiwiY29sdW1uIiwiam9pbiIsInNpemUiLCJjYXB0dXJlRG9jIiwiZG9jU3R5bGVQYXJzZXJzIiwibWV0YWRhdGEiLCJub2RlcyIsInNvbWUiLCJsZWFkaW5nQ29tbWVudHMiLCJyYW5nZSIsImdldENvbW1lbnRzQmVmb3JlIiwibGVuZ3RoIiwiZG9jIiwiZXJyIiwiYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzIiwianNkb2MiLCJjYXB0dXJlSnNEb2MiLCJ0b21kb2MiLCJjYXB0dXJlVG9tRG9jIiwiY29tbWVudHMiLCJjb21tZW50IiwidHlwZSIsImRvY3RyaW5lIiwicGFyc2UiLCJ1bndyYXAiLCJsaW5lcyIsImkiLCJtYXRjaCIsInB1c2giLCJ0cmltIiwic3RhdHVzTWF0Y2giLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJ0aXRsZSIsInRvTG93ZXJDYXNlIiwic3VwcG9ydGVkSW1wb3J0VHlwZXMiLCJjaGlsZENvbnRleHQiLCJjYWNoZUtleSIsImRpZ2VzdCIsImV4cG9ydE1hcCIsInN0YXRzIiwiZnMiLCJzdGF0U3luYyIsIm10aW1lIiwic2V0IiwiY29udGVudCIsInJlYWRGaWxlU3luYyIsImVuY29kaW5nIiwidGVzdCIsIm0iLCJpc0VzTW9kdWxlSW50ZXJvcFRydWUiLCJpc0VzTW9kdWxlSW50ZXJvcCIsImFzdCIsInZpc2l0b3JLZXlzIiwicmVzdWx0IiwiaGFzRHluYW1pY0ltcG9ydHMiLCJwcm9jZXNzRHluYW1pY0ltcG9ydCIsInAiLCJyZW1vdGVQYXRoIiwiaW1wb3J0ZWRTcGVjaWZpZXJzIiwiYWRkIiwiZ2V0dGVyIiwidGh1bmtGb3IiLCJkZWNsYXJhdGlvbnMiLCJsb2MiLCJJbXBvcnRFeHByZXNzaW9uIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJhcmd1bWVudHMiLCJpc01vZHVsZSIsImRvY3N0eWxlIiwic2V0dGluZ3MiLCJzdHlsZSIsImMiLCJ0IiwibmFtZXNwYWNlcyIsInJlc29sdmUiLCJyZWxhdGl2ZSIsInJlc29sdmVJbXBvcnQiLCJycCIsImdldE5hbWVzcGFjZSIsImlkZW50aWZpZXIiLCJhZGROYW1lc3BhY2UiLCJvYmplY3QiLCJuc2ZuIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJwcm9jZXNzU3BlY2lmaWVyIiwicyIsIm5zb3VyY2UiLCJleHBvcnRNZXRhIiwiZXhwb3J0ZWQiLCJjYXB0dXJlRGVwZW5kZW5jeSIsImlzT25seUltcG9ydGluZ1R5cGVzIiwiZGVjbGFyYXRpb25NZXRhZGF0YSIsImV4aXN0aW5nIiwibWFrZVNvdXJjZUNvZGUiLCJyZWFkVHNDb25maWciLCJ0c0NvbmZpZ0luZm8iLCJjd2QiLCJwYXJzZXJPcHRpb25zIiwidHNjb25maWdSb290RGlyIiwicHJvY2VzcyIsImdldEVudiIsImtleSIsImVudiIsInRzQ29uZmlnUGF0aCIsInJlcXVpcmUiLCJjb25maWdGaWxlIiwicmVhZENvbmZpZ0ZpbGUiLCJzeXMiLCJyZWFkRmlsZSIsInBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50IiwiY29uZmlnIiwidHNDb25maWciLCJvcHRpb25zIiwiZXNNb2R1bGVJbnRlcm9wIiwiYm9keSIsImV4cG9ydEtpbmQiLCJkZWNsYXJhdGlvbklzVHlwZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzIiwic3BlY2lmaWVycyIsInNwZWNpZmllciIsIm5zIiwiZmluZCIsImlkIiwiZXhwb3J0cyIsImV4cG9ydGVkTmFtZSIsImV4cHJlc3Npb24iLCJkZWNsVHlwZXMiLCJleHBvcnRlZERlY2xzIiwiZmlsdGVyIiwiZGVjbCIsIm1vZHVsZUJsb2NrTm9kZSIsIm5hbWVzcGFjZURlY2wiLCJwYXR0ZXJuIiwicHJvcGVydGllcyIsImFyZ3VtZW50IiwiZWxlbWVudHMiLCJlbGVtZW50IiwibGVmdCIsInBhcnNlclBhdGgiLCJ0ZXh0IiwiU291cmNlQ29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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STRGLGtCQUFKLENBQWUsRUFBRUQsVUFBRixFQUFRM0YsUUFBUixFQUFmLENBQVAsQ0FDRCxDQUNGIiwiZmlsZSI6IkV4cG9ydE1hcC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCBkb2N0cmluZSBmcm9tICdkb2N0cmluZSc7XG5cbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCB7IFNvdXJjZUNvZGUgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgcGFyc2UgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wYXJzZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IGlzSWdub3JlZCwgeyBoYXNWYWxpZEV4dGVuc2lvbiB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcblxuaW1wb3J0IHsgaGFzaE9iamVjdCB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaGFzaCc7XG5pbXBvcnQgKiBhcyB1bmFtYmlndW91cyBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3VuYW1iaWd1b3VzJztcblxuaW1wb3J0IHsgdHNDb25maWdMb2FkZXIgfSBmcm9tICd0c2NvbmZpZy1wYXRocy9saWIvdHNjb25maWctbG9hZGVyJztcblxuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcblxubGV0IHRzO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnZXNsaW50LXBsdWdpbi1pbXBvcnQ6RXhwb3J0TWFwJyk7XG5cbmNvbnN0IGV4cG9ydENhY2hlID0gbmV3IE1hcCgpO1xuY29uc3QgdHNDb25maWdDYWNoZSA9IG5ldyBNYXAoKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXhwb3J0TWFwIHtcbiAgY29uc3RydWN0b3IocGF0aCkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5uYW1lc3BhY2UgPSBuZXcgTWFwKCk7XG4gICAgLy8gdG9kbzogcmVzdHJ1Y3R1cmUgdG8ga2V5IG9uIHBhdGgsIHZhbHVlIGlzIHJlc29sdmVyICsgbWFwIG9mIG5hbWVzXG4gICAgdGhpcy5yZWV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgLyoqXG4gICAgICogc3Rhci1leHBvcnRzXG4gICAgICogQHR5cGUge1NldH0gb2YgKCkgPT4gRXhwb3J0TWFwXG4gICAgICovXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBuZXcgU2V0KCk7XG4gICAgLyoqXG4gICAgICogZGVwZW5kZW5jaWVzIG9mIHRoaXMgbW9kdWxlIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5IHJlLWV4cG9ydGVkXG4gICAgICogQHR5cGUge01hcH0gZnJvbSBwYXRoID0gKCkgPT4gRXhwb3J0TWFwXG4gICAgICovXG4gICAgdGhpcy5pbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gIH1cblxuICBnZXQgaGFzRGVmYXVsdCgpIHsgcmV0dXJuIHRoaXMuZ2V0KCdkZWZhdWx0JykgIT0gbnVsbDsgfSAvLyBzdHJvbmdlciB0aGFuIHRoaXMuaGFzXG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgbGV0IHNpemUgPSB0aGlzLm5hbWVzcGFjZS5zaXplICsgdGhpcy5yZWV4cG9ydHMuc2l6ZTtcbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHJldHVybjtcbiAgICAgIHNpemUgKz0gZC5zaXplO1xuICAgIH0pO1xuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGNoZWNrIGV4cGxpY2l0bHkgcmUtZXhwb3J0ZWQgbmFtZXMgZm9yIGV4aXN0ZW5jZVxuICAgKiBpbiB0aGUgYmFzZSBuYW1lc3BhY2UsIGJ1dCBpdCB3aWxsIGV4cGFuZCBhbGwgYGV4cG9ydCAqIGZyb20gJy4uLidgIGV4cG9ydHNcbiAgICogaWYgbm90IGZvdW5kIGluIHRoZSBleHBsaWNpdCBuYW1lc3BhY2UuXG4gICAqIEBwYXJhbSAge3N0cmluZ30gIG5hbWVcbiAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBgbmFtZWAgaXMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuXG4gICAqL1xuICBoYXMobmFtZSkge1xuICAgIGlmICh0aGlzLm5hbWVzcGFjZS5oYXMobmFtZSkpIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLnJlZXhwb3J0cy5oYXMobmFtZSkpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuXG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSBjb250aW51ZTtcblxuICAgICAgICBpZiAoaW5uZXJNYXAuaGFzKG5hbWUpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogZW5zdXJlIHRoYXQgaW1wb3J0ZWQgbmFtZSBmdWxseSByZXNvbHZlcy5cbiAgICogQHBhcmFtICB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm4ge3sgZm91bmQ6IGJvb2xlYW4sIHBhdGg6IEV4cG9ydE1hcFtdIH19XG4gICAqL1xuICBoYXNEZWVwKG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSByZXR1cm4geyBmb3VuZDogdHJ1ZSwgcGF0aDogW3RoaXNdIH07XG5cbiAgICBpZiAodGhpcy5yZWV4cG9ydHMuaGFzKG5hbWUpKSB7XG4gICAgICBjb25zdCByZWV4cG9ydHMgPSB0aGlzLnJlZXhwb3J0cy5nZXQobmFtZSk7XG4gICAgICBjb25zdCBpbXBvcnRlZCA9IHJlZXhwb3J0cy5nZXRJbXBvcnQoKTtcblxuICAgICAgLy8gaWYgaW1wb3J0IGlzIGlnbm9yZWQsIHJldHVybiBleHBsaWNpdCAnbnVsbCdcbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSByZXR1cm4geyBmb3VuZDogdHJ1ZSwgcGF0aDogW3RoaXNdIH07XG5cbiAgICAgIC8vIHNhZmVndWFyZCBhZ2FpbnN0IGN5Y2xlcywgb25seSBpZiBuYW1lIG1hdGNoZXNcbiAgICAgIGlmIChpbXBvcnRlZC5wYXRoID09PSB0aGlzLnBhdGggJiYgcmVleHBvcnRzLmxvY2FsID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB7IGZvdW5kOiBmYWxzZSwgcGF0aDogW3RoaXNdIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZXAgPSBpbXBvcnRlZC5oYXNEZWVwKHJlZXhwb3J0cy5sb2NhbCk7XG4gICAgICBkZWVwLnBhdGgudW5zaGlmdCh0aGlzKTtcblxuICAgICAgcmV0dXJuIGRlZXA7XG4gICAgfVxuXG5cbiAgICAvLyBkZWZhdWx0IGV4cG9ydHMgbXVzdCBiZSBleHBsaWNpdGx5IHJlLWV4cG9ydGVkICgjMzI4KVxuICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTWFwID0gZGVwKCk7XG4gICAgICAgIGlmIChpbm5lck1hcCA9PSBudWxsKSByZXR1cm4geyBmb3VuZDogdHJ1ZSwgcGF0aDogW3RoaXNdIH07XG4gICAgICAgIC8vIHRvZG86IHJlcG9ydCBhcyB1bnJlc29sdmVkP1xuICAgICAgICBpZiAoIWlubmVyTWFwKSBjb250aW51ZTtcblxuICAgICAgICAvLyBzYWZlZ3VhcmQgYWdhaW5zdCBjeWNsZXNcbiAgICAgICAgaWYgKGlubmVyTWFwLnBhdGggPT09IHRoaXMucGF0aCkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgaW5uZXJWYWx1ZSA9IGlubmVyTWFwLmhhc0RlZXAobmFtZSk7XG4gICAgICAgIGlmIChpbm5lclZhbHVlLmZvdW5kKSB7XG4gICAgICAgICAgaW5uZXJWYWx1ZS5wYXRoLnVuc2hpZnQodGhpcyk7XG4gICAgICAgICAgcmV0dXJuIGlubmVyVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBmb3VuZDogZmFsc2UsIHBhdGg6IFt0aGlzXSB9O1xuICB9XG5cbiAgZ2V0KG5hbWUpIHtcbiAgICBpZiAodGhpcy5uYW1lc3BhY2UuaGFzKG5hbWUpKSByZXR1cm4gdGhpcy5uYW1lc3BhY2UuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKHRoaXMucmVleHBvcnRzLmhhcyhuYW1lKSkge1xuICAgICAgY29uc3QgcmVleHBvcnRzID0gdGhpcy5yZWV4cG9ydHMuZ2V0KG5hbWUpO1xuICAgICAgY29uc3QgaW1wb3J0ZWQgPSByZWV4cG9ydHMuZ2V0SW1wb3J0KCk7XG5cbiAgICAgIC8vIGlmIGltcG9ydCBpcyBpZ25vcmVkLCByZXR1cm4gZXhwbGljaXQgJ251bGwnXG4gICAgICBpZiAoaW1wb3J0ZWQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIHNhZmVndWFyZCBhZ2FpbnN0IGN5Y2xlcywgb25seSBpZiBuYW1lIG1hdGNoZXNcbiAgICAgIGlmIChpbXBvcnRlZC5wYXRoID09PSB0aGlzLnBhdGggJiYgcmVleHBvcnRzLmxvY2FsID09PSBuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gaW1wb3J0ZWQuZ2V0KHJlZXhwb3J0cy5sb2NhbCk7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCBleHBvcnRzIG11c3QgYmUgZXhwbGljaXRseSByZS1leHBvcnRlZCAoIzMyOClcbiAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgICBjb25zdCBpbm5lck1hcCA9IGRlcCgpO1xuICAgICAgICAvLyB0b2RvOiByZXBvcnQgYXMgdW5yZXNvbHZlZD9cbiAgICAgICAgaWYgKCFpbm5lck1hcCkgY29udGludWU7XG5cbiAgICAgICAgLy8gc2FmZWd1YXJkIGFnYWluc3QgY3ljbGVzXG4gICAgICAgIGlmIChpbm5lck1hcC5wYXRoID09PSB0aGlzLnBhdGgpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IGlubmVyVmFsdWUgPSBpbm5lck1hcC5nZXQobmFtZSk7XG4gICAgICAgIGlmIChpbm5lclZhbHVlICE9PSB1bmRlZmluZWQpIHJldHVybiBpbm5lclZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrLCB0aGlzQXJnKSB7XG4gICAgdGhpcy5uYW1lc3BhY2UuZm9yRWFjaCgodiwgbikgPT5cbiAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdiwgbiwgdGhpcykpO1xuXG4gICAgdGhpcy5yZWV4cG9ydHMuZm9yRWFjaCgocmVleHBvcnRzLCBuYW1lKSA9PiB7XG4gICAgICBjb25zdCByZWV4cG9ydGVkID0gcmVleHBvcnRzLmdldEltcG9ydCgpO1xuICAgICAgLy8gY2FuJ3QgbG9vayB1cCBtZXRhIGZvciBpZ25vcmVkIHJlLWV4cG9ydHMgKCMzNDgpXG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHJlZXhwb3J0ZWQgJiYgcmVleHBvcnRlZC5nZXQocmVleHBvcnRzLmxvY2FsKSwgbmFtZSwgdGhpcyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICBjb25zdCBkID0gZGVwKCk7XG4gICAgICAvLyBDSlMgLyBpZ25vcmVkIGRlcGVuZGVuY2llcyB3b24ndCBleGlzdCAoIzcxNylcbiAgICAgIGlmIChkID09IG51bGwpIHJldHVybjtcblxuICAgICAgZC5mb3JFYWNoKCh2LCBuKSA9PlxuICAgICAgICBuICE9PSAnZGVmYXVsdCcgJiYgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2LCBuLCB0aGlzKSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyB0b2RvOiBrZXlzLCB2YWx1ZXMsIGVudHJpZXM/XG5cbiAgcmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogZGVjbGFyYXRpb24uc291cmNlLFxuICAgICAgbWVzc2FnZTogYFBhcnNlIGVycm9ycyBpbiBpbXBvcnRlZCBtb2R1bGUgJyR7ZGVjbGFyYXRpb24uc291cmNlLnZhbHVlfSc6IGAgK1xuICAgICAgICAgICAgICAgICAgYCR7dGhpcy5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcChlID0+IGAke2UubWVzc2FnZX0gKCR7ZS5saW5lTnVtYmVyfToke2UuY29sdW1ufSlgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKX1gLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogcGFyc2UgZG9jcyBmcm9tIHRoZSBmaXJzdCBub2RlIHRoYXQgaGFzIGxlYWRpbmcgY29tbWVudHNcbiAqL1xuZnVuY3Rpb24gY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgLi4ubm9kZXMpIHtcbiAgY29uc3QgbWV0YWRhdGEgPSB7fTtcblxuICAvLyAnc29tZScgc2hvcnQtY2lyY3VpdHMgb24gZmlyc3QgJ3RydWUnXG4gIG5vZGVzLnNvbWUobiA9PiB7XG4gICAgdHJ5IHtcblxuICAgICAgbGV0IGxlYWRpbmdDb21tZW50cztcblxuICAgICAgLy8gbi5sZWFkaW5nQ29tbWVudHMgaXMgbGVnYWN5IGBhdHRhY2hDb21tZW50c2AgYmVoYXZpb3JcbiAgICAgIGlmICgnbGVhZGluZ0NvbW1lbnRzJyBpbiBuKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IG4ubGVhZGluZ0NvbW1lbnRzO1xuICAgICAgfSBlbHNlIGlmIChuLnJhbmdlKSB7XG4gICAgICAgIGxlYWRpbmdDb21tZW50cyA9IHNvdXJjZS5nZXRDb21tZW50c0JlZm9yZShuKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsZWFkaW5nQ29tbWVudHMgfHwgbGVhZGluZ0NvbW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZG9jU3R5bGVQYXJzZXJzKSB7XG4gICAgICAgIGNvbnN0IGRvYyA9IGRvY1N0eWxlUGFyc2Vyc1tuYW1lXShsZWFkaW5nQ29tbWVudHMpO1xuICAgICAgICBpZiAoZG9jKSB7XG4gICAgICAgICAgbWV0YWRhdGEuZG9jID0gZG9jO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1ldGFkYXRhO1xufVxuXG5jb25zdCBhdmFpbGFibGVEb2NTdHlsZVBhcnNlcnMgPSB7XG4gIGpzZG9jOiBjYXB0dXJlSnNEb2MsXG4gIHRvbWRvYzogY2FwdHVyZVRvbURvYyxcbn07XG5cbi8qKlxuICogcGFyc2UgSlNEb2MgZnJvbSBsZWFkaW5nIGNvbW1lbnRzXG4gKiBAcGFyYW0ge29iamVjdFtdfSBjb21tZW50c1xuICogQHJldHVybiB7eyBkb2M6IG9iamVjdCB9fVxuICovXG5mdW5jdGlvbiBjYXB0dXJlSnNEb2MoY29tbWVudHMpIHtcbiAgbGV0IGRvYztcblxuICAvLyBjYXB0dXJlIFhTRG9jXG4gIGNvbW1lbnRzLmZvckVhY2goY29tbWVudCA9PiB7XG4gICAgLy8gc2tpcCBub24tYmxvY2sgY29tbWVudHNcbiAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGRvYyA9IGRvY3RyaW5lLnBhcnNlKGNvbW1lbnQudmFsdWUsIHsgdW53cmFwOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLyogZG9uJ3QgY2FyZSwgZm9yIG5vdz8gbWF5YmUgYWRkIHRvIGBlcnJvcnM/YCAqL1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRvYztcbn1cblxuLyoqXG4gICogcGFyc2UgVG9tRG9jIHNlY3Rpb24gZnJvbSBjb21tZW50c1xuICAqL1xuZnVuY3Rpb24gY2FwdHVyZVRvbURvYyhjb21tZW50cykge1xuICAvLyBjb2xsZWN0IGxpbmVzIHVwIHRvIGZpcnN0IHBhcmFncmFwaCBicmVha1xuICBjb25zdCBsaW5lcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY29tbWVudCA9IGNvbW1lbnRzW2ldO1xuICAgIGlmIChjb21tZW50LnZhbHVlLm1hdGNoKC9eXFxzKiQvKSkgYnJlYWs7XG4gICAgbGluZXMucHVzaChjb21tZW50LnZhbHVlLnRyaW0oKSk7XG4gIH1cblxuICAvLyByZXR1cm4gZG9jdHJpbmUtbGlrZSBvYmplY3RcbiAgY29uc3Qgc3RhdHVzTWF0Y2ggPSBsaW5lcy5qb2luKCcgJykubWF0Y2goL14oUHVibGljfEludGVybmFsfERlcHJlY2F0ZWQpOlxccyooLispLyk7XG4gIGlmIChzdGF0dXNNYXRjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbjogc3RhdHVzTWF0Y2hbMl0sXG4gICAgICB0YWdzOiBbe1xuICAgICAgICB0aXRsZTogc3RhdHVzTWF0Y2hbMV0udG9Mb3dlckNhc2UoKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHN0YXR1c01hdGNoWzJdLFxuICAgICAgfV0sXG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBzdXBwb3J0ZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQoWydJbXBvcnREZWZhdWx0U3BlY2lmaWVyJywgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllciddKTtcblxuRXhwb3J0TWFwLmdldCA9IGZ1bmN0aW9uIChzb3VyY2UsIGNvbnRleHQpIHtcbiAgY29uc3QgcGF0aCA9IHJlc29sdmUoc291cmNlLCBjb250ZXh0KTtcbiAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIEV4cG9ydE1hcC5mb3IoY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpKTtcbn07XG5cbkV4cG9ydE1hcC5mb3IgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCB7IHBhdGggfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KGNvbnRleHQpLmRpZ2VzdCgnaGV4Jyk7XG4gIGxldCBleHBvcnRNYXAgPSBleHBvcnRDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gIC8vIHJldHVybiBjYWNoZWQgaWdub3JlXG4gIGlmIChleHBvcnRNYXAgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aCk7XG4gIGlmIChleHBvcnRNYXAgIT0gbnVsbCkge1xuICAgIC8vIGRhdGUgZXF1YWxpdHkgY2hlY2tcbiAgICBpZiAoZXhwb3J0TWFwLm10aW1lIC0gc3RhdHMubXRpbWUgPT09IDApIHtcbiAgICAgIHJldHVybiBleHBvcnRNYXA7XG4gICAgfVxuICAgIC8vIGZ1dHVyZTogY2hlY2sgY29udGVudCBlcXVhbGl0eT9cbiAgfVxuXG4gIC8vIGNoZWNrIHZhbGlkIGV4dGVuc2lvbnMgZmlyc3RcbiAgaWYgKCFoYXNWYWxpZEV4dGVuc2lvbihwYXRoLCBjb250ZXh0KSkge1xuICAgIGV4cG9ydENhY2hlLnNldChjYWNoZUtleSwgbnVsbCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBjaGVjayBmb3IgYW5kIGNhY2hlIGlnbm9yZVxuICBpZiAoaXNJZ25vcmVkKHBhdGgsIGNvbnRleHQpKSB7XG4gICAgbG9nKCdpZ25vcmVkIHBhdGggZHVlIHRvIGlnbm9yZSBzZXR0aW5nczonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG5cbiAgLy8gY2hlY2sgZm9yIGFuZCBjYWNoZSB1bmFtYmlndW91cyBtb2R1bGVzXG4gIGlmICghdW5hbWJpZ3VvdXMudGVzdChjb250ZW50KSkge1xuICAgIGxvZygnaWdub3JlZCBwYXRoIGR1ZSB0byB1bmFtYmlndW91cyByZWdleDonLCBwYXRoKTtcbiAgICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIG51bGwpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbG9nKCdjYWNoZSBtaXNzJywgY2FjaGVLZXksICdmb3IgcGF0aCcsIHBhdGgpO1xuICBleHBvcnRNYXAgPSBFeHBvcnRNYXAucGFyc2UocGF0aCwgY29udGVudCwgY29udGV4dCk7XG5cbiAgLy8gYW1iaWd1b3VzIG1vZHVsZXMgcmV0dXJuIG51bGxcbiAgaWYgKGV4cG9ydE1hcCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBleHBvcnRNYXAubXRpbWUgPSBzdGF0cy5tdGltZTtcblxuICBleHBvcnRDYWNoZS5zZXQoY2FjaGVLZXksIGV4cG9ydE1hcCk7XG4gIHJldHVybiBleHBvcnRNYXA7XG59O1xuXG5cbkV4cG9ydE1hcC5wYXJzZSA9IGZ1bmN0aW9uIChwYXRoLCBjb250ZW50LCBjb250ZXh0KSB7XG4gIGNvbnN0IG0gPSBuZXcgRXhwb3J0TWFwKHBhdGgpO1xuICBjb25zdCBpc0VzTW9kdWxlSW50ZXJvcFRydWUgPSBpc0VzTW9kdWxlSW50ZXJvcCgpO1xuXG4gIGxldCBhc3Q7XG4gIGxldCB2aXNpdG9yS2V5cztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBwYXJzZShwYXRoLCBjb250ZW50LCBjb250ZXh0KTtcbiAgICBhc3QgPSByZXN1bHQuYXN0O1xuICAgIHZpc2l0b3JLZXlzID0gcmVzdWx0LnZpc2l0b3JLZXlzO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBtLmVycm9ycy5wdXNoKGVycik7XG4gICAgcmV0dXJuIG07IC8vIGNhbid0IGNvbnRpbnVlXG4gIH1cblxuICBtLnZpc2l0b3JLZXlzID0gdmlzaXRvcktleXM7XG5cbiAgbGV0IGhhc0R5bmFtaWNJbXBvcnRzID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0R5bmFtaWNJbXBvcnQoc291cmNlKSB7XG4gICAgaGFzRHluYW1pY0ltcG9ydHMgPSB0cnVlO1xuICAgIGlmIChzb3VyY2UudHlwZSAhPT0gJ0xpdGVyYWwnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcCA9IHJlbW90ZVBhdGgoc291cmNlLnZhbHVlKTtcbiAgICBpZiAocCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpO1xuICAgIGltcG9ydGVkU3BlY2lmaWVycy5hZGQoJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICAgIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICAgIG0uaW1wb3J0cy5zZXQocCwge1xuICAgICAgZ2V0dGVyLFxuICAgICAgZGVjbGFyYXRpb25zOiBuZXcgU2V0KFt7XG4gICAgICAgIHNvdXJjZToge1xuICAgICAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICAgICAgICB2YWx1ZTogc291cmNlLnZhbHVlLFxuICAgICAgICAgIGxvYzogc291cmNlLmxvYyxcbiAgICAgICAgfSxcbiAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICAgICAgfV0pLFxuICAgIH0pO1xuICB9XG5cbiAgdmlzaXQoYXN0LCB2aXNpdG9yS2V5cywge1xuICAgIEltcG9ydEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQobm9kZS5zb3VyY2UpO1xuICAgIH0sXG4gICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgPT09ICdJbXBvcnQnKSB7XG4gICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KG5vZGUuYXJndW1lbnRzWzBdKTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICBpZiAoIXVuYW1iaWd1b3VzLmlzTW9kdWxlKGFzdCkgJiYgIWhhc0R5bmFtaWNJbXBvcnRzKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBkb2NzdHlsZSA9IChjb250ZXh0LnNldHRpbmdzICYmIGNvbnRleHQuc2V0dGluZ3NbJ2ltcG9ydC9kb2NzdHlsZSddKSB8fCBbJ2pzZG9jJ107XG4gIGNvbnN0IGRvY1N0eWxlUGFyc2VycyA9IHt9O1xuICBkb2NzdHlsZS5mb3JFYWNoKHN0eWxlID0+IHtcbiAgICBkb2NTdHlsZVBhcnNlcnNbc3R5bGVdID0gYXZhaWxhYmxlRG9jU3R5bGVQYXJzZXJzW3N0eWxlXTtcbiAgfSk7XG5cbiAgLy8gYXR0ZW1wdCB0byBjb2xsZWN0IG1vZHVsZSBkb2NcbiAgaWYgKGFzdC5jb21tZW50cykge1xuICAgIGFzdC5jb21tZW50cy5zb21lKGMgPT4ge1xuICAgICAgaWYgKGMudHlwZSAhPT0gJ0Jsb2NrJykgcmV0dXJuIGZhbHNlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZG9jID0gZG9jdHJpbmUucGFyc2UoYy52YWx1ZSwgeyB1bndyYXA6IHRydWUgfSk7XG4gICAgICAgIGlmIChkb2MudGFncy5zb21lKHQgPT4gdC50aXRsZSA9PT0gJ21vZHVsZScpKSB7XG4gICAgICAgICAgbS5kb2MgPSBkb2M7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikgeyAvKiBpZ25vcmUgKi8gfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcblxuICBmdW5jdGlvbiByZW1vdGVQYXRoKHZhbHVlKSB7XG4gICAgcmV0dXJuIHJlc29sdmUucmVsYXRpdmUodmFsdWUsIHBhdGgsIGNvbnRleHQuc2V0dGluZ3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZUltcG9ydCh2YWx1ZSkge1xuICAgIGNvbnN0IHJwID0gcmVtb3RlUGF0aCh2YWx1ZSk7XG4gICAgaWYgKHJwID09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBFeHBvcnRNYXAuZm9yKGNoaWxkQ29udGV4dChycCwgY29udGV4dCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlKGlkZW50aWZpZXIpIHtcbiAgICBpZiAoIW5hbWVzcGFjZXMuaGFzKGlkZW50aWZpZXIubmFtZSkpIHJldHVybjtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZUltcG9ydChuYW1lc3BhY2VzLmdldChpZGVudGlmaWVyLm5hbWUpKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gYWRkTmFtZXNwYWNlKG9iamVjdCwgaWRlbnRpZmllcikge1xuICAgIGNvbnN0IG5zZm4gPSBnZXROYW1lc3BhY2UoaWRlbnRpZmllcik7XG4gICAgaWYgKG5zZm4pIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsICduYW1lc3BhY2UnLCB7IGdldDogbnNmbiB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1NwZWNpZmllcihzLCBuLCBtKSB7XG4gICAgY29uc3QgbnNvdXJjZSA9IG4uc291cmNlICYmIG4uc291cmNlLnZhbHVlO1xuICAgIGNvbnN0IGV4cG9ydE1ldGEgPSB7fTtcbiAgICBsZXQgbG9jYWw7XG5cbiAgICBzd2l0Y2ggKHMudHlwZSkge1xuICAgIGNhc2UgJ0V4cG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgaWYgKCFuc291cmNlKSByZXR1cm47XG4gICAgICBsb2NhbCA9ICdkZWZhdWx0JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0V4cG9ydE5hbWVzcGFjZVNwZWNpZmllcic6XG4gICAgICBtLm5hbWVzcGFjZS5zZXQocy5leHBvcnRlZC5uYW1lLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0TWV0YSwgJ25hbWVzcGFjZScsIHtcbiAgICAgICAgZ2V0KCkgeyByZXR1cm4gcmVzb2x2ZUltcG9ydChuc291cmNlKTsgfSxcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdFeHBvcnRBbGxEZWNsYXJhdGlvbic6XG4gICAgICBtLm5hbWVzcGFjZS5zZXQocy5leHBvcnRlZC5uYW1lLCBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgcy5zb3VyY2UudmFsdWUpKTtcbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdFeHBvcnRTcGVjaWZpZXInOlxuICAgICAgaWYgKCFuLnNvdXJjZSkge1xuICAgICAgICBtLm5hbWVzcGFjZS5zZXQocy5leHBvcnRlZC5uYW1lLCBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgcy5sb2NhbCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBlbHNlIGZhbGxzIHRocm91Z2hcbiAgICBkZWZhdWx0OlxuICAgICAgbG9jYWwgPSBzLmxvY2FsLm5hbWU7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICAvLyB0b2RvOiBKU0RvY1xuICAgIG0ucmVleHBvcnRzLnNldChzLmV4cG9ydGVkLm5hbWUsIHsgbG9jYWwsIGdldEltcG9ydDogKCkgPT4gcmVzb2x2ZUltcG9ydChuc291cmNlKSB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhcHR1cmVEZXBlbmRlbmN5KHsgc291cmNlIH0sIGlzT25seUltcG9ydGluZ1R5cGVzLCBpbXBvcnRlZFNwZWNpZmllcnMgPSBuZXcgU2V0KCkpIHtcbiAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcCA9IHJlbW90ZVBhdGgoc291cmNlLnZhbHVlKTtcbiAgICBpZiAocCA9PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGRlY2xhcmF0aW9uTWV0YWRhdGEgPSB7XG4gICAgICAvLyBjYXB0dXJpbmcgYWN0dWFsIG5vZGUgcmVmZXJlbmNlIGhvbGRzIGZ1bGwgQVNUIGluIG1lbW9yeSFcbiAgICAgIHNvdXJjZTogeyB2YWx1ZTogc291cmNlLnZhbHVlLCBsb2M6IHNvdXJjZS5sb2MgfSxcbiAgICAgIGlzT25seUltcG9ydGluZ1R5cGVzLFxuICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLFxuICAgIH07XG5cbiAgICBjb25zdCBleGlzdGluZyA9IG0uaW1wb3J0cy5nZXQocCk7XG4gICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHtcbiAgICAgIGV4aXN0aW5nLmRlY2xhcmF0aW9ucy5hZGQoZGVjbGFyYXRpb25NZXRhZGF0YSk7XG4gICAgICByZXR1cm4gZXhpc3RpbmcuZ2V0dGVyO1xuICAgIH1cblxuICAgIGNvbnN0IGdldHRlciA9IHRodW5rRm9yKHAsIGNvbnRleHQpO1xuICAgIG0uaW1wb3J0cy5zZXQocCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9uczogbmV3IFNldChbZGVjbGFyYXRpb25NZXRhZGF0YV0pIH0pO1xuICAgIHJldHVybiBnZXR0ZXI7XG4gIH1cblxuICBjb25zdCBzb3VyY2UgPSBtYWtlU291cmNlQ29kZShjb250ZW50LCBhc3QpO1xuXG4gIGZ1bmN0aW9uIHJlYWRUc0NvbmZpZygpIHtcbiAgICBjb25zdCB0c0NvbmZpZ0luZm8gPSB0c0NvbmZpZ0xvYWRlcih7XG4gICAgICBjd2Q6XG4gICAgICAgIChjb250ZXh0LnBhcnNlck9wdGlvbnMgJiYgY29udGV4dC5wYXJzZXJPcHRpb25zLnRzY29uZmlnUm9vdERpcikgfHxcbiAgICAgICAgcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGdldEVudjogKGtleSkgPT4gcHJvY2Vzcy5lbnZba2V5XSxcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRzQ29uZmlnSW5mby50c0NvbmZpZ1BhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBQcm9qZWN0cyBub3QgdXNpbmcgVHlwZVNjcmlwdCB3b24ndCBoYXZlIGB0eXBlc2NyaXB0YCBpbnN0YWxsZWQuXG4gICAgICAgIGlmICghdHMpIHsgdHMgPSByZXF1aXJlKCd0eXBlc2NyaXB0Jyk7IH1cbiAgXG4gICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZSh0c0NvbmZpZ0luZm8udHNDb25maWdQYXRoLCB0cy5zeXMucmVhZEZpbGUpO1xuICAgICAgICByZXR1cm4gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICAgICAgY29uZmlnRmlsZS5jb25maWcsXG4gICAgICAgICAgdHMuc3lzLFxuICAgICAgICAgIGRpcm5hbWUodHNDb25maWdJbmZvLnRzQ29uZmlnUGF0aCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gQ2F0Y2ggYW55IGVycm9yc1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFc01vZHVsZUludGVyb3AoKSB7XG4gICAgY29uc3QgY2FjaGVLZXkgPSBoYXNoT2JqZWN0KHtcbiAgICAgIHRzY29uZmlnUm9vdERpcjogY29udGV4dC5wYXJzZXJPcHRpb25zICYmIGNvbnRleHQucGFyc2VyT3B0aW9ucy50c2NvbmZpZ1Jvb3REaXIsXG4gICAgfSkuZGlnZXN0KCdoZXgnKTtcbiAgICBsZXQgdHNDb25maWcgPSB0c0NvbmZpZ0NhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKHR5cGVvZiB0c0NvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRzQ29uZmlnID0gcmVhZFRzQ29uZmlnKGNvbnRleHQpO1xuICAgICAgdHNDb25maWdDYWNoZS5zZXQoY2FjaGVLZXksIHRzQ29uZmlnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHNDb25maWcgJiYgdHNDb25maWcub3B0aW9ucyA/IHRzQ29uZmlnLm9wdGlvbnMuZXNNb2R1bGVJbnRlcm9wIDogZmFsc2U7XG4gIH1cblxuICBhc3QuYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG4gICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicpIHtcbiAgICAgIGNvbnN0IGV4cG9ydE1ldGEgPSBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBuKTtcbiAgICAgIGlmIChuLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdJZGVudGlmaWVyJykge1xuICAgICAgICBhZGROYW1lc3BhY2UoZXhwb3J0TWV0YSwgbi5kZWNsYXJhdGlvbik7XG4gICAgICB9XG4gICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCBleHBvcnRNZXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobi50eXBlID09PSAnRXhwb3J0QWxsRGVjbGFyYXRpb24nKSB7XG4gICAgICBjb25zdCBnZXR0ZXIgPSBjYXB0dXJlRGVwZW5kZW5jeShuLCBuLmV4cG9ydEtpbmQgPT09ICd0eXBlJyk7XG4gICAgICBpZiAoZ2V0dGVyKSBtLmRlcGVuZGVuY2llcy5hZGQoZ2V0dGVyKTtcbiAgICAgIGlmIChuLmV4cG9ydGVkKSB7XG4gICAgICAgIHByb2Nlc3NTcGVjaWZpZXIobiwgbi5leHBvcnRlZCwgbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2FwdHVyZSBuYW1lc3BhY2VzIGluIGNhc2Ugb2YgbGF0ZXIgZXhwb3J0XG4gICAgaWYgKG4udHlwZSA9PT0gJ0ltcG9ydERlY2xhcmF0aW9uJykge1xuICAgICAgLy8gaW1wb3J0IHR5cGUgeyBGb28gfSAoVFMgYW5kIEZsb3cpXG4gICAgICBjb25zdCBkZWNsYXJhdGlvbklzVHlwZSA9IG4uaW1wb3J0S2luZCA9PT0gJ3R5cGUnO1xuICAgICAgLy8gaW1wb3J0ICcuL2Zvbycgb3IgaW1wb3J0IHt9IGZyb20gJy4vZm9vJyAoYm90aCAwIHNwZWNpZmllcnMpIGlzIGEgc2lkZSBlZmZlY3QgYW5kXG4gICAgICAvLyBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCB0byBiZSBqdXN0IGltcG9ydGluZyB0eXBlc1xuICAgICAgbGV0IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMgPSBuLnNwZWNpZmllcnMubGVuZ3RoO1xuICAgICAgY29uc3QgaW1wb3J0ZWRTcGVjaWZpZXJzID0gbmV3IFNldCgpO1xuICAgICAgbi5zcGVjaWZpZXJzLmZvckVhY2goc3BlY2lmaWVyID0+IHtcbiAgICAgICAgaWYgKHN1cHBvcnRlZEltcG9ydFR5cGVzLmhhcyhzcGVjaWZpZXIudHlwZSkpIHtcbiAgICAgICAgICBpbXBvcnRlZFNwZWNpZmllcnMuYWRkKHNwZWNpZmllci50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnRTcGVjaWZpZXInKSB7XG4gICAgICAgICAgaW1wb3J0ZWRTcGVjaWZpZXJzLmFkZChzcGVjaWZpZXIuaW1wb3J0ZWQubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbXBvcnQgeyB0eXBlIEZvbyB9IChGbG93KVxuICAgICAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzID1cbiAgICAgICAgICBzcGVjaWZpZXJzT25seUltcG9ydGluZ1R5cGVzICYmIHNwZWNpZmllci5pbXBvcnRLaW5kID09PSAndHlwZSc7XG4gICAgICB9KTtcbiAgICAgIGNhcHR1cmVEZXBlbmRlbmN5KG4sIGRlY2xhcmF0aW9uSXNUeXBlIHx8IHNwZWNpZmllcnNPbmx5SW1wb3J0aW5nVHlwZXMsIGltcG9ydGVkU3BlY2lmaWVycyk7XG5cbiAgICAgIGNvbnN0IG5zID0gbi5zcGVjaWZpZXJzLmZpbmQocyA9PiBzLnR5cGUgPT09ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInKTtcbiAgICAgIGlmIChucykge1xuICAgICAgICBuYW1lc3BhY2VzLnNldChucy5sb2NhbC5uYW1lLCBuLnNvdXJjZS52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG4udHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nKSB7XG4gICAgICAvLyBjYXB0dXJlIGRlY2xhcmF0aW9uXG4gICAgICBpZiAobi5kZWNsYXJhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAobi5kZWNsYXJhdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ0Z1bmN0aW9uRGVjbGFyYXRpb24nOlxuICAgICAgICBjYXNlICdDbGFzc0RlY2xhcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnVHlwZUFsaWFzJzogLy8gZmxvd3R5cGUgd2l0aCBiYWJlbC1lc2xpbnQgcGFyc2VyXG4gICAgICAgIGNhc2UgJ0ludGVyZmFjZURlY2xhcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnRGVjbGFyZUZ1bmN0aW9uJzpcbiAgICAgICAgY2FzZSAnVFNEZWNsYXJlRnVuY3Rpb24nOlxuICAgICAgICBjYXNlICdUU0VudW1EZWNsYXJhdGlvbic6XG4gICAgICAgIGNhc2UgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nOlxuICAgICAgICBjYXNlICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24nOlxuICAgICAgICBjYXNlICdUU01vZHVsZURlY2xhcmF0aW9uJzpcbiAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQobi5kZWNsYXJhdGlvbi5pZC5uYW1lLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBuKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nOlxuICAgICAgICAgIG4uZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zLmZvckVhY2goKGQpID0+XG4gICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShkLmlkLFxuICAgICAgICAgICAgICBpZCA9PiBtLm5hbWVzcGFjZS5zZXQoaWQubmFtZSwgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgZCwgbikpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbi5zcGVjaWZpZXJzLmZvckVhY2goKHMpID0+IHByb2Nlc3NTcGVjaWZpZXIocywgbiwgbSkpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydHMgPSBbJ1RTRXhwb3J0QXNzaWdubWVudCddO1xuICAgIGlmIChpc0VzTW9kdWxlSW50ZXJvcFRydWUpIHtcbiAgICAgIGV4cG9ydHMucHVzaCgnVFNOYW1lc3BhY2VFeHBvcnREZWNsYXJhdGlvbicpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZG9lc24ndCBkZWNsYXJlIGFueXRoaW5nLCBidXQgY2hhbmdlcyB3aGF0J3MgYmVpbmcgZXhwb3J0ZWQuXG4gICAgaWYgKGluY2x1ZGVzKGV4cG9ydHMsIG4udHlwZSkpIHtcbiAgICAgIGNvbnN0IGV4cG9ydGVkTmFtZSA9IG4udHlwZSA9PT0gJ1RTTmFtZXNwYWNlRXhwb3J0RGVjbGFyYXRpb24nXG4gICAgICAgID8gbi5pZC5uYW1lXG4gICAgICAgIDogKG4uZXhwcmVzc2lvbiAmJiBuLmV4cHJlc3Npb24ubmFtZSB8fCAobi5leHByZXNzaW9uLmlkICYmIG4uZXhwcmVzc2lvbi5pZC5uYW1lKSB8fCBudWxsKTtcbiAgICAgIGNvbnN0IGRlY2xUeXBlcyA9IFtcbiAgICAgICAgJ1ZhcmlhYmxlRGVjbGFyYXRpb24nLFxuICAgICAgICAnQ2xhc3NEZWNsYXJhdGlvbicsXG4gICAgICAgICdUU0RlY2xhcmVGdW5jdGlvbicsXG4gICAgICAgICdUU0VudW1EZWNsYXJhdGlvbicsXG4gICAgICAgICdUU1R5cGVBbGlhc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNBYnN0cmFjdENsYXNzRGVjbGFyYXRpb24nLFxuICAgICAgICAnVFNNb2R1bGVEZWNsYXJhdGlvbicsXG4gICAgICBdO1xuICAgICAgY29uc3QgZXhwb3J0ZWREZWNscyA9IGFzdC5ib2R5LmZpbHRlcigoeyB0eXBlLCBpZCwgZGVjbGFyYXRpb25zIH0pID0+IGluY2x1ZGVzKGRlY2xUeXBlcywgdHlwZSkgJiYgKFxuICAgICAgICAoaWQgJiYgaWQubmFtZSA9PT0gZXhwb3J0ZWROYW1lKSB8fCAoZGVjbGFyYXRpb25zICYmIGRlY2xhcmF0aW9ucy5maW5kKChkKSA9PiBkLmlkLm5hbWUgPT09IGV4cG9ydGVkTmFtZSkpXG4gICAgICApKTtcbiAgICAgIGlmIChleHBvcnRlZERlY2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBFeHBvcnQgaXMgbm90IHJlZmVyZW5jaW5nIGFueSBsb2NhbCBkZWNsYXJhdGlvbiwgbXVzdCBiZSByZS1leHBvcnRpbmdcbiAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgbikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGlzRXNNb2R1bGVJbnRlcm9wVHJ1ZSAvLyBlc01vZHVsZUludGVyb3AgaXMgb24gaW4gdHNjb25maWdcbiAgICAgICAgJiYgIW0ubmFtZXNwYWNlLmhhcygnZGVmYXVsdCcpIC8vIGFuZCBkZWZhdWx0IGlzbid0IGFkZGVkIGFscmVhZHlcbiAgICAgICkge1xuICAgICAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCB7fSk7IC8vIGFkZCBkZWZhdWx0IGV4cG9ydFxuICAgICAgfVxuICAgICAgZXhwb3J0ZWREZWNscy5mb3JFYWNoKChkZWNsKSA9PiB7XG4gICAgICAgIGlmIChkZWNsLnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgIGlmIChkZWNsLmJvZHkgJiYgZGVjbC5ib2R5LnR5cGUgPT09ICdUU01vZHVsZURlY2xhcmF0aW9uJykge1xuICAgICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KGRlY2wuYm9keS5pZC5uYW1lLCBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsLmJvZHkpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlY2wuYm9keSAmJiBkZWNsLmJvZHkuYm9keSkge1xuICAgICAgICAgICAgZGVjbC5ib2R5LmJvZHkuZm9yRWFjaCgobW9kdWxlQmxvY2tOb2RlKSA9PiB7XG4gICAgICAgICAgICAgIC8vIEV4cG9ydC1hc3NpZ25tZW50IGV4cG9ydHMgYWxsIG1lbWJlcnMgaW4gdGhlIG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgLy8gZXhwbGljaXRseSBleHBvcnRlZCBvciBub3QuXG4gICAgICAgICAgICAgIGNvbnN0IG5hbWVzcGFjZURlY2wgPSBtb2R1bGVCbG9ja05vZGUudHlwZSA9PT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nID9cbiAgICAgICAgICAgICAgICBtb2R1bGVCbG9ja05vZGUuZGVjbGFyYXRpb24gOlxuICAgICAgICAgICAgICAgIG1vZHVsZUJsb2NrTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoIW5hbWVzcGFjZURlY2wpIHtcbiAgICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IGNhbiBjaGVjayB0aGlzIGZvciB1czsgd2UgbmVlZG4ndFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVzcGFjZURlY2wudHlwZSA9PT0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbmFtZXNwYWNlRGVjbC5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoZCkgPT5cbiAgICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGQuaWQsIChpZCkgPT4gbS5uYW1lc3BhY2Uuc2V0KFxuICAgICAgICAgICAgICAgICAgICBpZC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBkZWNsLCBuYW1lc3BhY2VEZWNsLCBtb2R1bGVCbG9ja05vZGUpLFxuICAgICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtLm5hbWVzcGFjZS5zZXQoXG4gICAgICAgICAgICAgICAgICBuYW1lc3BhY2VEZWNsLmlkLm5hbWUsXG4gICAgICAgICAgICAgICAgICBjYXB0dXJlRG9jKHNvdXJjZSwgZG9jU3R5bGVQYXJzZXJzLCBtb2R1bGVCbG9ja05vZGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEV4cG9ydCBhcyBkZWZhdWx0XG4gICAgICAgICAgbS5uYW1lc3BhY2Uuc2V0KCdkZWZhdWx0JywgY2FwdHVyZURvYyhzb3VyY2UsIGRvY1N0eWxlUGFyc2VycywgZGVjbCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmIChcbiAgICBpc0VzTW9kdWxlSW50ZXJvcFRydWUgLy8gZXNNb2R1bGVJbnRlcm9wIGlzIG9uIGluIHRzY29uZmlnXG4gICAgJiYgbS5uYW1lc3BhY2Uuc2l6ZSA+IDAgLy8gYW55dGhpbmcgaXMgZXhwb3J0ZWRcbiAgICAmJiAhbS5uYW1lc3BhY2UuaGFzKCdkZWZhdWx0JykgLy8gYW5kIGRlZmF1bHQgaXNuJ3QgYWRkZWQgYWxyZWFkeVxuICApIHtcbiAgICBtLm5hbWVzcGFjZS5zZXQoJ2RlZmF1bHQnLCB7fSk7IC8vIGFkZCBkZWZhdWx0IGV4cG9ydFxuICB9XG5cbiAgcmV0dXJuIG07XG59O1xuXG4vKipcbiAqIFRoZSBjcmVhdGlvbiBvZiB0aGlzIGNsb3N1cmUgaXMgaXNvbGF0ZWQgZnJvbSBvdGhlciBzY29wZXNcbiAqIHRvIGF2b2lkIG92ZXItcmV0ZW50aW9uIG9mIHVucmVsYXRlZCB2YXJpYWJsZXMsIHdoaWNoIGhhc1xuICogY2F1c2VkIG1lbW9yeSBsZWFrcy4gU2VlICMxMjY2LlxuICovXG5mdW5jdGlvbiB0aHVua0ZvcihwLCBjb250ZXh0KSB7XG4gIHJldHVybiAoKSA9PiBFeHBvcnRNYXAuZm9yKGNoaWxkQ29udGV4dChwLCBjb250ZXh0KSk7XG59XG5cblxuLyoqXG4gKiBUcmF2ZXJzZSBhIHBhdHRlcm4vaWRlbnRpZmllciBub2RlLCBjYWxsaW5nICdjYWxsYmFjaydcbiAqIGZvciBlYWNoIGxlYWYgaWRlbnRpZmllci5cbiAqIEBwYXJhbSAge25vZGV9ICAgcGF0dGVyblxuICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUocGF0dGVybiwgY2FsbGJhY2spIHtcbiAgc3dpdGNoIChwYXR0ZXJuLnR5cGUpIHtcbiAgY2FzZSAnSWRlbnRpZmllcic6IC8vIGJhc2UgY2FzZVxuICAgIGNhbGxiYWNrKHBhdHRlcm4pO1xuICAgIGJyZWFrO1xuXG4gIGNhc2UgJ09iamVjdFBhdHRlcm4nOlxuICAgIHBhdHRlcm4ucHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgaWYgKHAudHlwZSA9PT0gJ0V4cGVyaW1lbnRhbFJlc3RQcm9wZXJ0eScgfHwgcC50eXBlID09PSAnUmVzdEVsZW1lbnQnKSB7XG4gICAgICAgIGNhbGxiYWNrKHAuYXJndW1lbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShwLnZhbHVlLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gICAgYnJlYWs7XG5cbiAgY2FzZSAnQXJyYXlQYXR0ZXJuJzpcbiAgICBwYXR0ZXJuLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdFeHBlcmltZW50YWxSZXN0UHJvcGVydHknIHx8IGVsZW1lbnQudHlwZSA9PT0gJ1Jlc3RFbGVtZW50Jykge1xuICAgICAgICBjYWxsYmFjayhlbGVtZW50LmFyZ3VtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZWxlbWVudCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICAgIGJyZWFrO1xuXG4gIGNhc2UgJ0Fzc2lnbm1lbnRQYXR0ZXJuJzpcbiAgICBjYWxsYmFjayhwYXR0ZXJuLmxlZnQpO1xuICAgIGJyZWFrO1xuICB9XG59XG5cbi8qKlxuICogZG9uJ3QgaG9sZCBmdWxsIGNvbnRleHQgb2JqZWN0IGluIG1lbW9yeSwganVzdCBncmFiIHdoYXQgd2UgbmVlZC5cbiAqL1xuZnVuY3Rpb24gY2hpbGRDb250ZXh0KHBhdGgsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzZXR0aW5ncywgcGFyc2VyT3B0aW9ucywgcGFyc2VyUGF0aCB9ID0gY29udGV4dDtcbiAgcmV0dXJuIHtcbiAgICBzZXR0aW5ncyxcbiAgICBwYXJzZXJPcHRpb25zLFxuICAgIHBhcnNlclBhdGgsXG4gICAgcGF0aCxcbiAgfTtcbn1cblxuXG4vKipcbiAqIHNvbWV0aW1lcyBsZWdhY3kgc3VwcG9ydCBpc24ndCBfdGhhdF8gaGFyZC4uLiByaWdodD9cbiAqL1xuZnVuY3Rpb24gbWFrZVNvdXJjZUNvZGUodGV4dCwgYXN0KSB7XG4gIGlmIChTb3VyY2VDb2RlLmxlbmd0aCA+IDEpIHtcbiAgICAvLyBFU0xpbnQgM1xuICAgIHJldHVybiBuZXcgU291cmNlQ29kZSh0ZXh0LCBhc3QpO1xuICB9IGVsc2Uge1xuICAgIC8vIEVTTGludCA0LCA1XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VDb2RlKHsgdGV4dCwgYXN0IH0pO1xuICB9XG59XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/core/importType.js b/node_modules/eslint-plugin-import/lib/core/importType.js
index f778257..ae35ea6 100644
--- a/node_modules/eslint-plugin-import/lib/core/importType.js
+++ b/node_modules/eslint-plugin-import/lib/core/importType.js
@@ -108,4 +108,4 @@
resolveImportType;var _path = require('path');var _isCoreModule = require('is-core-module');var _isCoreModule2 = _interopRequireDefault(_isCoreModule);var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);var _packagePath = require('./packagePath');function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}function baseModule(name) {if (isScoped(name)) {var _name$split = name.split('/'),_name$split2 = _slicedToArray(_name$split, 2),scope = _name$split2[0],_pkg = _name$split2[1];return String(scope) + '/' + String(_pkg);}var _name$split3 = name.split('/'),_name$split4 = _slicedToArray(_name$split3, 1),pkg = _name$split4[0];return pkg;}function isAbsolute(name) {return (0, _path.isAbsolute)(name);} // path is defined only when a resolver resolves to a non-standard path
function isBuiltIn(name, settings, path) {if (path || !name) return false;var base = baseModule(name);var extras = settings && settings['import/core-modules'] || [];return (0, _isCoreModule2['default'])(base) || extras.indexOf(base) > -1;}function isExternalModule(name, settings, path, context) {if (arguments.length < 4) {throw new TypeError('isExternalModule: name, settings, path, and context are all required');}return isModule(name) && isExternalPath(name, settings, path, (0, _packagePath.getContextPackagePath)(context));}function isExternalModuleMain(name, settings, path, context) {return isModuleMain(name) && isExternalPath(name, settings, path, (0, _packagePath.getContextPackagePath)(context));}function isExternalPath(name, settings, path, packagePath) {var internalScope = settings && settings['import/internal-regex'];if (internalScope && new RegExp(internalScope).test(name)) {return false;}if (!path || (0, _path.relative)(packagePath, path).startsWith('..')) {return true;}var folders = settings && settings['import/external-module-folders'] || ['node_modules'];return folders.some(function (folder) {var folderPath = (0, _path.resolve)(packagePath, folder);var relativePath = (0, _path.relative)(folderPath, path);return !relativePath.startsWith('..');});}var moduleRegExp = /^\w/;function isModule(name) {return name && moduleRegExp.test(name);}var moduleMainRegExp = /^[\w]((?!\/).)*$/;function isModuleMain(name) {return name && moduleMainRegExp.test(name);}var scopedRegExp = /^@[^/]+\/?[^/]+/;function isScoped(name) {return name && scopedRegExp.test(name);}var scopedMainRegExp = /^@[^/]+\/?[^/]+$/;function isScopedMain(name) {return name && scopedMainRegExp.test(name);}function isRelativeToParent(name) {return (/^\.\.$|^\.\.[\\/]/.test(name));}var indexFiles = ['.', './', './index', './index.js'];function isIndex(name) {return indexFiles.indexOf(name) !== -1;}function isRelativeToSibling(name) {return (/^\.[\\/]/.test(name));}function typeTest(name, context, path) {var settings = context.settings;if (isAbsolute(name, settings, path)) {return 'absolute';}if (isBuiltIn(name, settings, path)) {return 'builtin';}if (isModule(name, settings, path) || isScoped(name, settings, path)) {var packagePath = (0, _packagePath.getContextPackagePath)(context);return isExternalPath(name, settings, path, packagePath) ? 'external' : 'internal';}if (isRelativeToParent(name, settings, path)) {return 'parent';}if (isIndex(name, settings, path)) {return 'index';}if (isRelativeToSibling(name, settings, path)) {return 'sibling';}return 'unknown';}function isScopedModule(name) {return name.indexOf('@') === 0 && !name.startsWith('@/');}function resolveImportType(name, context) {return typeTest(name, context, (0, _resolve2['default'])(name, context));
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNBYnNvbHV0ZSIsImlzQnVpbHRJbiIsImlzRXh0ZXJuYWxNb2R1bGUiLCJpc0V4dGVybmFsTW9kdWxlTWFpbiIsImlzU2NvcGVkIiwiaXNTY29wZWRNYWluIiwiaXNTY29wZWRNb2R1bGUiLCJyZXNvbHZlSW1wb3J0VHlwZSIsImJhc2VNb2R1bGUiLCJuYW1lIiwic3BsaXQiLCJzY29wZSIsInBrZyIsInNldHRpbmdzIiwicGF0aCIsImJhc2UiLCJleHRyYXMiLCJpbmRleE9mIiwiY29udGV4dCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIlR5cGVFcnJvciIsImlzTW9kdWxlIiwiaXNFeHRlcm5hbFBhdGgiLCJpc01vZHVsZU1haW4iLCJwYWNrYWdlUGF0aCIsImludGVybmFsU2NvcGUiLCJSZWdFeHAiLCJ0ZXN0Iiwic3RhcnRzV2l0aCIsImZvbGRlcnMiLCJzb21lIiwiZm9sZGVyIiwiZm9sZGVyUGF0aCIsInJlbGF0aXZlUGF0aCIsIm1vZHVsZVJlZ0V4cCIsIm1vZHVsZU1haW5SZWdFeHAiLCJzY29wZWRSZWdFeHAiLCJzY29wZWRNYWluUmVnRXhwIiwiaXNSZWxhdGl2ZVRvUGFyZW50IiwiaW5kZXhGaWxlcyIsImlzSW5kZXgiLCJpc1JlbGF0aXZlVG9TaWJsaW5nIiwidHlwZVRlc3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQWVnQkEsVSxHQUFBQSxVOzs7OztBQUtBQyxTLEdBQUFBLFM7Ozs7Ozs7QUFPQUMsZ0IsR0FBQUEsZ0I7Ozs7Ozs7QUFPQUMsb0IsR0FBQUEsb0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQUMsUSxHQUFBQSxROzs7OztBQUtBQyxZLEdBQUFBLFk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQkFDLGMsR0FBQUEsYzs7OztBQUlRQyxpQixDQTNHeEIsNEJBQ0EsOEMsMkRBRUEsc0QsaURBQ0EsNEMs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UUFBZixFQUF5QkMsSUFBekIsS0FBa0NWLFNBQVNLLElBQVQsRUFBZUksUUFBZixFQUF5QkMsSUFBekIsQ0FBdEMsRUFBc0UsQ0FDcEUsSUFBTVcsY0FBYyx3Q0FBc0JQLE9BQXRCLENBQXBCLENBQ0EsT0FBT0ssZUFBZWQsSUFBZixFQUFxQkksUUFBckIsRUFBK0JDLElBQS9CLEVBQXFDVyxXQUFyQyxJQUFvRCxVQUFwRCxHQUFpRSxVQUF4RSxDQUNELENBQ0QsSUFBSWMsbUJBQW1COUIsSUFBbkIsRUFBeUJJLFFBQXpCLEVBQW1DQyxJQUFuQyxDQUFKLEVBQThDLENBQUUsT0FBTyxRQUFQLENBQWtCLENBQ2xFLElBQUkyQixRQUFRaEMsSUFBUixFQUFjSSxRQUFkLEVBQXdCQyxJQUF4QixDQUFKLEVBQW1DLENBQUUsT0FBTyxPQUFQLENBQWlCLENBQ3RELElBQUk0QixvQkFBb0JqQyxJQUFwQixFQUEwQkksUUFBMUIsRUFBb0NDLElBQXBDLENBQUosRUFBK0MsQ0FBRSxPQUFPLFNBQVAsQ0FBbUIsQ0FDcEUsT0FBTyxTQUFQLENBQ0QsQ0FFTSxTQUFTUixjQUFULENBQXdCRyxJQUF4QixFQUE4QixDQUNuQyxPQUFPQSxLQUFLUSxPQUFMLENBQWEsR0FBYixNQUFzQixDQUF0QixJQUEyQixDQUFDUixLQUFLb0IsVUFBTCxDQUFnQixJQUFoQixDQUFuQyxDQUNELENBRWMsU0FBU3RCLGlCQUFULENBQTJCRSxJQUEzQixFQUFpQ1MsT0FBakMsRUFBMEMsQ0FDdkQsT0FBT3lCLFNBQVNsQyxJQUFULEVBQWVTLE9BQWYsRUFBd0IsMEJBQVFULElBQVIsRUFBY1MsT0FBZCxDQUF4QixDQUFQO0FBQ0QiLCJmaWxlIjoiaW1wb3J0VHlwZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQWJzb2x1dGUgYXMgbm9kZUlzQWJzb2x1dGUsIHJlbGF0aXZlLCByZXNvbHZlIGFzIG5vZGVSZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgaXNDb3JlTW9kdWxlIGZyb20gJ2lzLWNvcmUtbW9kdWxlJztcblxuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCB7IGdldENvbnRleHRQYWNrYWdlUGF0aCB9IGZyb20gJy4vcGFja2FnZVBhdGgnO1xuXG5mdW5jdGlvbiBiYXNlTW9kdWxlKG5hbWUpIHtcbiAgaWYgKGlzU2NvcGVkKG5hbWUpKSB7XG4gICAgY29uc3QgW3Njb3BlLCBwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICAgIHJldHVybiBgJHtzY29wZX0vJHtwa2d9YDtcbiAgfVxuICBjb25zdCBbcGtnXSA9IG5hbWUuc3BsaXQoJy8nKTtcbiAgcmV0dXJuIHBrZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUobmFtZSkge1xuICByZXR1cm4gbm9kZUlzQWJzb2x1dGUobmFtZSk7XG59XG5cbi8vIHBhdGggaXMgZGVmaW5lZCBvbmx5IHdoZW4gYSByZXNvbHZlciByZXNvbHZlcyB0byBhIG5vbi1zdGFuZGFyZCBwYXRoXG5leHBvcnQgZnVuY3Rpb24gaXNCdWlsdEluKG5hbWUsIHNldHRpbmdzLCBwYXRoKSB7XG4gIGlmIChwYXRoIHx8ICFuYW1lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSAoc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9jb3JlLW1vZHVsZXMnXSkgfHwgW107XG4gIHJldHVybiBpc0NvcmVNb2R1bGUoYmFzZSkgfHwgZXh0cmFzLmluZGV4T2YoYmFzZSkgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXh0ZXJuYWxNb2R1bGUobmFtZSwgc2V0dGluZ3MsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCA0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgc2V0dGluZ3MsIHBhdGgsIGFuZCBjb250ZXh0IGFyZSBhbGwgcmVxdWlyZWQnKTtcbiAgfVxuICByZXR1cm4gaXNNb2R1bGUobmFtZSkgJiYgaXNFeHRlcm5hbFBhdGgobmFtZSwgc2V0dGluZ3MsIHBhdGgsIGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlTWFpbihuYW1lLCBzZXR0aW5ncywgcGF0aCwgY29udGV4dCkge1xuICByZXR1cm4gaXNNb2R1bGVNYWluKG5hbWUpICYmIGlzRXh0ZXJuYWxQYXRoKG5hbWUsIHNldHRpbmdzLCBwYXRoLCBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCkpO1xufVxuXG5mdW5jdGlvbiBpc0V4dGVybmFsUGF0aChuYW1lLCBzZXR0aW5ncywgcGF0aCwgcGFja2FnZVBhdGgpIHtcbiAgY29uc3QgaW50ZXJuYWxTY29wZSA9IChzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2ludGVybmFsLXJlZ2V4J10pO1xuICBpZiAoaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXBhdGggfHwgcmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlcnMgPSAoc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9leHRlcm5hbC1tb2R1bGUtZm9sZGVycyddKSB8fCBbJ25vZGVfbW9kdWxlcyddO1xuICByZXR1cm4gZm9sZGVycy5zb21lKChmb2xkZXIpID0+IHtcbiAgICBjb25zdCBmb2xkZXJQYXRoID0gbm9kZVJlc29sdmUocGFja2FnZVBhdGgsIGZvbGRlcik7XG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoZm9sZGVyUGF0aCwgcGF0aCk7XG4gICAgcmV0dXJuICFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi4nKTtcbiAgfSk7XG59XG5cbmNvbnN0IG1vZHVsZVJlZ0V4cCA9IC9eXFx3LztcbmZ1bmN0aW9uIGlzTW9kdWxlKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IG1vZHVsZU1haW5SZWdFeHAgPSAvXltcXHddKCg/IVxcLykuKSokLztcbmZ1bmN0aW9uIGlzTW9kdWxlTWFpbihuYW1lKSB7XG4gIHJldHVybiBuYW1lICYmIG1vZHVsZU1haW5SZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3Qgc2NvcGVkUmVnRXhwID0gL15AW14vXStcXC8/W14vXSsvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IHNjb3BlZE1haW5SZWdFeHAgPSAvXkBbXi9dK1xcLz9bXi9dKyQvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkTWFpbihuYW1lKSB7XG4gIHJldHVybiBuYW1lICYmIHNjb3BlZE1haW5SZWdFeHAudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUpIHtcbiAgcmV0dXJuL15cXC5cXC4kfF5cXC5cXC5bXFxcXC9dLy50ZXN0KG5hbWUpO1xufVxuXG5jb25zdCBpbmRleEZpbGVzID0gWycuJywgJy4vJywgJy4vaW5kZXgnLCAnLi9pbmRleC5qcyddO1xuZnVuY3Rpb24gaXNJbmRleChuYW1lKSB7XG4gIHJldHVybiBpbmRleEZpbGVzLmluZGV4T2YobmFtZSkgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBpc1JlbGF0aXZlVG9TaWJsaW5nKG5hbWUpIHtcbiAgcmV0dXJuIC9eXFwuW1xcXFwvXS8udGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gdHlwZVRlc3QobmFtZSwgY29udGV4dCwgcGF0aCkge1xuICBjb25zdCB7IHNldHRpbmdzIH0gPSBjb250ZXh0O1xuICBpZiAoaXNBYnNvbHV0ZShuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdhYnNvbHV0ZSc7IH1cbiAgaWYgKGlzQnVpbHRJbihuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdidWlsdGluJzsgfVxuICBpZiAoaXNNb2R1bGUobmFtZSwgc2V0dGluZ3MsIHBhdGgpIHx8IGlzU2NvcGVkKG5hbWUsIHNldHRpbmdzLCBwYXRoKSkge1xuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gZ2V0Q29udGV4dFBhY2thZ2VQYXRoKGNvbnRleHQpO1xuICAgIHJldHVybiBpc0V4dGVybmFsUGF0aChuYW1lLCBzZXR0aW5ncywgcGF0aCwgcGFja2FnZVBhdGgpID8gJ2V4dGVybmFsJyA6ICdpbnRlcm5hbCc7XG4gIH1cbiAgaWYgKGlzUmVsYXRpdmVUb1BhcmVudChuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdwYXJlbnQnOyB9XG4gIGlmIChpc0luZGV4KG5hbWUsIHNldHRpbmdzLCBwYXRoKSkgeyByZXR1cm4gJ2luZGV4JzsgfVxuICBpZiAoaXNSZWxhdGl2ZVRvU2libGluZyhuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdzaWJsaW5nJzsgfVxuICByZXR1cm4gJ3Vua25vd24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTY29wZWRNb2R1bGUobmFtZSkge1xuICByZXR1cm4gbmFtZS5pbmRleE9mKCdAJykgPT09IDAgJiYgIW5hbWUuc3RhcnRzV2l0aCgnQC8nKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzb2x2ZUltcG9ydFR5cGUobmFtZSwgY29udGV4dCkge1xuICByZXR1cm4gdHlwZVRlc3QobmFtZSwgY29udGV4dCwgcmVzb2x2ZShuYW1lLCBjb250ZXh0KSk7XG59XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2ltcG9ydFR5cGUuanMiXSwibmFtZXMiOlsiaXNBYnNvbHV0ZSIsImlzQnVpbHRJbiIsImlzRXh0ZXJuYWxNb2R1bGUiLCJpc0V4dGVybmFsTW9kdWxlTWFpbiIsImlzU2NvcGVkIiwiaXNTY29wZWRNYWluIiwiaXNTY29wZWRNb2R1bGUiLCJyZXNvbHZlSW1wb3J0VHlwZSIsImJhc2VNb2R1bGUiLCJuYW1lIiwic3BsaXQiLCJzY29wZSIsInBrZyIsInNldHRpbmdzIiwicGF0aCIsImJhc2UiLCJleHRyYXMiLCJpbmRleE9mIiwiY29udGV4dCIsImFyZ3VtZW50cyIsImxlbmd0aCIsIlR5cGVFcnJvciIsImlzTW9kdWxlIiwiaXNFeHRlcm5hbFBhdGgiLCJpc01vZHVsZU1haW4iLCJwYWNrYWdlUGF0aCIsImludGVybmFsU2NvcGUiLCJSZWdFeHAiLCJ0ZXN0Iiwic3RhcnRzV2l0aCIsImZvbGRlcnMiLCJzb21lIiwiZm9sZGVyIiwiZm9sZGVyUGF0aCIsInJlbGF0aXZlUGF0aCIsIm1vZHVsZVJlZ0V4cCIsIm1vZHVsZU1haW5SZWdFeHAiLCJzY29wZWRSZWdFeHAiLCJzY29wZWRNYWluUmVnRXhwIiwiaXNSZWxhdGl2ZVRvUGFyZW50IiwiaW5kZXhGaWxlcyIsImlzSW5kZXgiLCJpc1JlbGF0aXZlVG9TaWJsaW5nIiwidHlwZVRlc3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQWVnQkEsVSxHQUFBQSxVOzs7OztBQUtBQyxTLEdBQUFBLFM7Ozs7Ozs7QUFPQUMsZ0IsR0FBQUEsZ0I7Ozs7Ozs7QUFPQUMsb0IsR0FBQUEsb0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlDQUMsUSxHQUFBQSxROzs7OztBQUtBQyxZLEdBQUFBLFk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQkFDLGMsR0FBQUEsYzs7OztBQUlRQyxpQixDQTNHeEIsNEJBQ0EsOEMsMkRBRUEsc0QsaURBQ0EsNEMs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UUFBZixFQUF5QkMsSUFBekIsS0FBa0NWLFNBQVNLLElBQVQsRUFBZUksUUFBZixFQUF5QkMsSUFBekIsQ0FBdEMsRUFBc0UsQ0FDcEUsSUFBTVcsY0FBYyx3Q0FBc0JQLE9BQXRCLENBQXBCLENBQ0EsT0FBT0ssZUFBZWQsSUFBZixFQUFxQkksUUFBckIsRUFBK0JDLElBQS9CLEVBQXFDVyxXQUFyQyxJQUFvRCxVQUFwRCxHQUFpRSxVQUF4RSxDQUNELENBQ0QsSUFBSWMsbUJBQW1COUIsSUFBbkIsRUFBeUJJLFFBQXpCLEVBQW1DQyxJQUFuQyxDQUFKLEVBQThDLENBQUUsT0FBTyxRQUFQLENBQWtCLENBQ2xFLElBQUkyQixRQUFRaEMsSUFBUixFQUFjSSxRQUFkLEVBQXdCQyxJQUF4QixDQUFKLEVBQW1DLENBQUUsT0FBTyxPQUFQLENBQWlCLENBQ3RELElBQUk0QixvQkFBb0JqQyxJQUFwQixFQUEwQkksUUFBMUIsRUFBb0NDLElBQXBDLENBQUosRUFBK0MsQ0FBRSxPQUFPLFNBQVAsQ0FBbUIsQ0FDcEUsT0FBTyxTQUFQLENBQ0QsQ0FFTSxTQUFTUixjQUFULENBQXdCRyxJQUF4QixFQUE4QixDQUNuQyxPQUFPQSxLQUFLUSxPQUFMLENBQWEsR0FBYixNQUFzQixDQUF0QixJQUEyQixDQUFDUixLQUFLb0IsVUFBTCxDQUFnQixJQUFoQixDQUFuQyxDQUNELENBRWMsU0FBU3RCLGlCQUFULENBQTJCRSxJQUEzQixFQUFpQ1MsT0FBakMsRUFBMEMsQ0FDdkQsT0FBT3lCLFNBQVNsQyxJQUFULEVBQWVTLE9BQWYsRUFBd0IsMEJBQVFULElBQVIsRUFBY1MsT0FBZCxDQUF4QixDQUFQO0FBQ0QiLCJmaWxlIjoiaW1wb3J0VHlwZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQWJzb2x1dGUgYXMgbm9kZUlzQWJzb2x1dGUsIHJlbGF0aXZlLCByZXNvbHZlIGFzIG5vZGVSZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgaXNDb3JlTW9kdWxlIGZyb20gJ2lzLWNvcmUtbW9kdWxlJztcblxuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCB7IGdldENvbnRleHRQYWNrYWdlUGF0aCB9IGZyb20gJy4vcGFja2FnZVBhdGgnO1xuXG5mdW5jdGlvbiBiYXNlTW9kdWxlKG5hbWUpIHtcbiAgaWYgKGlzU2NvcGVkKG5hbWUpKSB7XG4gICAgY29uc3QgW3Njb3BlLCBwa2ddID0gbmFtZS5zcGxpdCgnLycpO1xuICAgIHJldHVybiBgJHtzY29wZX0vJHtwa2d9YDtcbiAgfVxuICBjb25zdCBbcGtnXSA9IG5hbWUuc3BsaXQoJy8nKTtcbiAgcmV0dXJuIHBrZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQWJzb2x1dGUobmFtZSkge1xuICByZXR1cm4gbm9kZUlzQWJzb2x1dGUobmFtZSk7XG59XG5cbi8vIHBhdGggaXMgZGVmaW5lZCBvbmx5IHdoZW4gYSByZXNvbHZlciByZXNvbHZlcyB0byBhIG5vbi1zdGFuZGFyZCBwYXRoXG5leHBvcnQgZnVuY3Rpb24gaXNCdWlsdEluKG5hbWUsIHNldHRpbmdzLCBwYXRoKSB7XG4gIGlmIChwYXRoIHx8ICFuYW1lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGJhc2UgPSBiYXNlTW9kdWxlKG5hbWUpO1xuICBjb25zdCBleHRyYXMgPSAoc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9jb3JlLW1vZHVsZXMnXSkgfHwgW107XG4gIHJldHVybiBpc0NvcmVNb2R1bGUoYmFzZSkgfHwgZXh0cmFzLmluZGV4T2YoYmFzZSkgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRXh0ZXJuYWxNb2R1bGUobmFtZSwgc2V0dGluZ3MsIHBhdGgsIGNvbnRleHQpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCA0KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaXNFeHRlcm5hbE1vZHVsZTogbmFtZSwgc2V0dGluZ3MsIHBhdGgsIGFuZCBjb250ZXh0IGFyZSBhbGwgcmVxdWlyZWQnKTtcbiAgfVxuICByZXR1cm4gaXNNb2R1bGUobmFtZSkgJiYgaXNFeHRlcm5hbFBhdGgobmFtZSwgc2V0dGluZ3MsIHBhdGgsIGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0V4dGVybmFsTW9kdWxlTWFpbihuYW1lLCBzZXR0aW5ncywgcGF0aCwgY29udGV4dCkge1xuICByZXR1cm4gaXNNb2R1bGVNYWluKG5hbWUpICYmIGlzRXh0ZXJuYWxQYXRoKG5hbWUsIHNldHRpbmdzLCBwYXRoLCBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCkpO1xufVxuXG5mdW5jdGlvbiBpc0V4dGVybmFsUGF0aChuYW1lLCBzZXR0aW5ncywgcGF0aCwgcGFja2FnZVBhdGgpIHtcbiAgY29uc3QgaW50ZXJuYWxTY29wZSA9IChzZXR0aW5ncyAmJiBzZXR0aW5nc1snaW1wb3J0L2ludGVybmFsLXJlZ2V4J10pO1xuICBpZiAoaW50ZXJuYWxTY29wZSAmJiBuZXcgUmVnRXhwKGludGVybmFsU2NvcGUpLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXBhdGggfHwgcmVsYXRpdmUocGFja2FnZVBhdGgsIHBhdGgpLnN0YXJ0c1dpdGgoJy4uJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZvbGRlcnMgPSAoc2V0dGluZ3MgJiYgc2V0dGluZ3NbJ2ltcG9ydC9leHRlcm5hbC1tb2R1bGUtZm9sZGVycyddKSB8fCBbJ25vZGVfbW9kdWxlcyddO1xuICByZXR1cm4gZm9sZGVycy5zb21lKChmb2xkZXIpID0+IHtcbiAgICBjb25zdCBmb2xkZXJQYXRoID0gbm9kZVJlc29sdmUocGFja2FnZVBhdGgsIGZvbGRlcik7XG4gICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoZm9sZGVyUGF0aCwgcGF0aCk7XG4gICAgcmV0dXJuICFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLi4nKTtcbiAgfSk7XG59XG5cbmNvbnN0IG1vZHVsZVJlZ0V4cCA9IC9eXFx3LztcbmZ1bmN0aW9uIGlzTW9kdWxlKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgbW9kdWxlUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IG1vZHVsZU1haW5SZWdFeHAgPSAvXltcXHddKCg/IVxcLykuKSokLztcbmZ1bmN0aW9uIGlzTW9kdWxlTWFpbihuYW1lKSB7XG4gIHJldHVybiBuYW1lICYmIG1vZHVsZU1haW5SZWdFeHAudGVzdChuYW1lKTtcbn1cblxuY29uc3Qgc2NvcGVkUmVnRXhwID0gL15AW14vXStcXC8/W14vXSsvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUgJiYgc2NvcGVkUmVnRXhwLnRlc3QobmFtZSk7XG59XG5cbmNvbnN0IHNjb3BlZE1haW5SZWdFeHAgPSAvXkBbXi9dK1xcLz9bXi9dKyQvO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkTWFpbihuYW1lKSB7XG4gIHJldHVybiBuYW1lICYmIHNjb3BlZE1haW5SZWdFeHAudGVzdChuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvUGFyZW50KG5hbWUpIHtcbiAgcmV0dXJuIC9eXFwuXFwuJHxeXFwuXFwuW1xcXFwvXS8udGVzdChuYW1lKTtcbn1cblxuY29uc3QgaW5kZXhGaWxlcyA9IFsnLicsICcuLycsICcuL2luZGV4JywgJy4vaW5kZXguanMnXTtcbmZ1bmN0aW9uIGlzSW5kZXgobmFtZSkge1xuICByZXR1cm4gaW5kZXhGaWxlcy5pbmRleE9mKG5hbWUpICE9PSAtMTtcbn1cblxuZnVuY3Rpb24gaXNSZWxhdGl2ZVRvU2libGluZyhuYW1lKSB7XG4gIHJldHVybiAvXlxcLltcXFxcL10vLnRlc3QobmFtZSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHBhdGgpIHtcbiAgY29uc3QgeyBzZXR0aW5ncyB9ID0gY29udGV4dDtcbiAgaWYgKGlzQWJzb2x1dGUobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnYWJzb2x1dGUnOyB9XG4gIGlmIChpc0J1aWx0SW4obmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnYnVpbHRpbic7IH1cbiAgaWYgKGlzTW9kdWxlKG5hbWUsIHNldHRpbmdzLCBwYXRoKSB8fCBpc1Njb3BlZChuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHtcbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KTtcbiAgICByZXR1cm4gaXNFeHRlcm5hbFBhdGgobmFtZSwgc2V0dGluZ3MsIHBhdGgsIHBhY2thZ2VQYXRoKSA/ICdleHRlcm5hbCcgOiAnaW50ZXJuYWwnO1xuICB9XG4gIGlmIChpc1JlbGF0aXZlVG9QYXJlbnQobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAncGFyZW50JzsgfVxuICBpZiAoaXNJbmRleChuYW1lLCBzZXR0aW5ncywgcGF0aCkpIHsgcmV0dXJuICdpbmRleCc7IH1cbiAgaWYgKGlzUmVsYXRpdmVUb1NpYmxpbmcobmFtZSwgc2V0dGluZ3MsIHBhdGgpKSB7IHJldHVybiAnc2libGluZyc7IH1cbiAgcmV0dXJuICd1bmtub3duJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2NvcGVkTW9kdWxlKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUuaW5kZXhPZignQCcpID09PSAwICYmICFuYW1lLnN0YXJ0c1dpdGgoJ0AvJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc29sdmVJbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpIHtcbiAgcmV0dXJuIHR5cGVUZXN0KG5hbWUsIGNvbnRleHQsIHJlc29sdmUobmFtZSwgY29udGV4dCkpO1xufVxuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/core/packagePath.js b/node_modules/eslint-plugin-import/lib/core/packagePath.js
index 85236c7..e925772 100644
--- a/node_modules/eslint-plugin-import/lib/core/packagePath.js
+++ b/node_modules/eslint-plugin-import/lib/core/packagePath.js
@@ -12,12 +12,12 @@
-getFilePackageName = getFilePackageName;var _path = require('path');var _findUp = require('find-up');var _findUp2 = _interopRequireDefault(_findUp);var _readPkgUp = require('read-pkg-up');var _readPkgUp2 = _interopRequireDefault(_readPkgUp);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}function getContextPackagePath(context) {return getFilePackagePath(context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());}function getFilePackagePath(filePath) {var fp = _findUp2['default'].sync('package.json', { cwd: filePath });return (0, _path.dirname)(fp);}function getFilePackageName(filePath) {var _readPkgUp$sync =
- _readPkgUp2['default'].sync({ cwd: filePath, normalize: false }),pkg = _readPkgUp$sync.pkg,path = _readPkgUp$sync.path;
+getFilePackageName = getFilePackageName;var _path = require('path');var _pkgUp = require('eslint-module-utils/pkgUp');var _pkgUp2 = _interopRequireDefault(_pkgUp);var _readPkgUp2 = require('eslint-module-utils/readPkgUp');var _readPkgUp3 = _interopRequireDefault(_readPkgUp2);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}function getContextPackagePath(context) {return getFilePackagePath(context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());}function getFilePackagePath(filePath) {var fp = (0, _pkgUp2['default'])({ cwd: filePath });return (0, _path.dirname)(fp);}function getFilePackageName(filePath) {var _readPkgUp =
+ (0, _readPkgUp3['default'])({ cwd: filePath, normalize: false }),pkg = _readPkgUp.pkg,path = _readPkgUp.path;
if (pkg) {
// recursion in case of intermediate esm package.json without name found
return pkg.name || getFilePackageName((0, _path.dirname)((0, _path.dirname)(path)));
}
return null;
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImNvbnRleHQiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJmaWxlUGF0aCIsImZwIiwiZmluZFVwIiwic3luYyIsImN3ZCIsInJlYWRQa2dVcCIsIm5vcm1hbGl6ZSIsInBrZyIsInBhdGgiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtnQkEscUIsR0FBQUEscUI7Ozs7QUFJQUMsa0IsR0FBQUEsa0I7Ozs7O0FBS0FDLGtCLEdBQUFBLGtCLENBZGhCLDRCQUNBLGlDLCtDQUNBLHdDLG9KQUdPLFNBQVNGLHFCQUFULENBQStCRyxPQUEvQixFQUF3QyxDQUM3QyxPQUFPRixtQkFBbUJFLFFBQVFDLG1CQUFSLEdBQThCRCxRQUFRQyxtQkFBUixFQUE5QixHQUE4REQsUUFBUUUsV0FBUixFQUFqRixDQUFQLENBQ0QsQ0FFTSxTQUFTSixrQkFBVCxDQUE0QkssUUFBNUIsRUFBc0MsQ0FDM0MsSUFBTUMsS0FBS0Msb0JBQU9DLElBQVAsQ0FBWSxjQUFaLEVBQTRCLEVBQUVDLEtBQUtKLFFBQVAsRUFBNUIsQ0FBWCxDQUNBLE9BQU8sbUJBQVFDLEVBQVIsQ0FBUCxDQUNELENBRU0sU0FBU0wsa0JBQVQsQ0FBNEJJLFFBQTVCLEVBQXNDO0FBQ3JCSyx5QkFBVUYsSUFBVixDQUFlLEVBQUVDLEtBQUtKLFFBQVAsRUFBaUJNLFdBQVcsS0FBNUIsRUFBZixDQURxQixDQUNuQ0MsR0FEbUMsbUJBQ25DQSxHQURtQyxDQUM5QkMsSUFEOEIsbUJBQzlCQSxJQUQ4QjtBQUUzQyxNQUFJRCxHQUFKLEVBQVM7QUFDUDtBQUNBLFdBQU9BLElBQUlFLElBQUosSUFBWWIsbUJBQW1CLG1CQUFRLG1CQUFRWSxJQUFSLENBQVIsQ0FBbkIsQ0FBbkI7QUFDRDtBQUNELFNBQU8sSUFBUDtBQUNEIiwiZmlsZSI6InBhY2thZ2VQYXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZpbmRVcCBmcm9tICdmaW5kLXVwJztcbmltcG9ydCByZWFkUGtnVXAgZnJvbSAncmVhZC1wa2ctdXAnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250ZXh0UGFja2FnZVBhdGgoY29udGV4dCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VQYXRoKGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYWNrYWdlUGF0aChmaWxlUGF0aCkge1xuICBjb25zdCBmcCA9IGZpbmRVcC5zeW5jKCdwYWNrYWdlLmpzb24nLCB7IGN3ZDogZmlsZVBhdGggfSk7XG4gIHJldHVybiBkaXJuYW1lKGZwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVQYWNrYWdlTmFtZShmaWxlUGF0aCkge1xuICBjb25zdCB7IHBrZywgcGF0aCB9ID0gcmVhZFBrZ1VwLnN5bmMoeyBjd2Q6IGZpbGVQYXRoLCBub3JtYWxpemU6IGZhbHNlIH0pO1xuICBpZiAocGtnKSB7XG4gICAgLy8gcmVjdXJzaW9uIGluIGNhc2Ugb2YgaW50ZXJtZWRpYXRlIGVzbSBwYWNrYWdlLmpzb24gd2l0aG91dCBuYW1lIGZvdW5kXG4gICAgcmV0dXJuIHBrZy5uYW1lIHx8IGdldEZpbGVQYWNrYWdlTmFtZShkaXJuYW1lKGRpcm5hbWUocGF0aCkpKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3BhY2thZ2VQYXRoLmpzIl0sIm5hbWVzIjpbImdldENvbnRleHRQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlUGF0aCIsImdldEZpbGVQYWNrYWdlTmFtZSIsImNvbnRleHQiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJmaWxlUGF0aCIsImZwIiwiY3dkIiwibm9ybWFsaXplIiwicGtnIiwicGF0aCIsIm5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS2dCQSxxQixHQUFBQSxxQjs7OztBQUlBQyxrQixHQUFBQSxrQjs7Ozs7QUFLQUMsa0IsR0FBQUEsa0IsQ0FkaEIsNEJBQ0Esa0QsNkNBQ0EsMkQscUpBR08sU0FBU0YscUJBQVQsQ0FBK0JHLE9BQS9CLEVBQXdDLENBQzdDLE9BQU9GLG1CQUFtQkUsUUFBUUMsbUJBQVIsR0FBOEJELFFBQVFDLG1CQUFSLEVBQTlCLEdBQThERCxRQUFRRSxXQUFSLEVBQWpGLENBQVAsQ0FDRCxDQUVNLFNBQVNKLGtCQUFULENBQTRCSyxRQUE1QixFQUFzQyxDQUMzQyxJQUFNQyxLQUFLLHdCQUFNLEVBQUVDLEtBQUtGLFFBQVAsRUFBTixDQUFYLENBQ0EsT0FBTyxtQkFBUUMsRUFBUixDQUFQLENBQ0QsQ0FFTSxTQUFTTCxrQkFBVCxDQUE0QkksUUFBNUIsRUFBc0M7QUFDckIsOEJBQVUsRUFBRUUsS0FBS0YsUUFBUCxFQUFpQkcsV0FBVyxLQUE1QixFQUFWLENBRHFCLENBQ25DQyxHQURtQyxjQUNuQ0EsR0FEbUMsQ0FDOUJDLElBRDhCLGNBQzlCQSxJQUQ4QjtBQUUzQyxNQUFJRCxHQUFKLEVBQVM7QUFDUDtBQUNBLFdBQU9BLElBQUlFLElBQUosSUFBWVYsbUJBQW1CLG1CQUFRLG1CQUFRUyxJQUFSLENBQVIsQ0FBbkIsQ0FBbkI7QUFDRDtBQUNELFNBQU8sSUFBUDtBQUNEIiwiZmlsZSI6InBhY2thZ2VQYXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcGtnVXAnO1xuaW1wb3J0IHJlYWRQa2dVcCBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3JlYWRQa2dVcCc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRleHRQYWNrYWdlUGF0aChjb250ZXh0KSB7XG4gIHJldHVybiBnZXRGaWxlUGFja2FnZVBhdGgoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVBhY2thZ2VQYXRoKGZpbGVQYXRoKSB7XG4gIGNvbnN0IGZwID0gcGtnVXAoeyBjd2Q6IGZpbGVQYXRoIH0pO1xuICByZXR1cm4gZGlybmFtZShmcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUGFja2FnZU5hbWUoZmlsZVBhdGgpIHtcbiAgY29uc3QgeyBwa2csIHBhdGggfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZVBhdGgsIG5vcm1hbGl6ZTogZmFsc2UgfSk7XG4gIGlmIChwa2cpIHtcbiAgICAvLyByZWN1cnNpb24gaW4gY2FzZSBvZiBpbnRlcm1lZGlhdGUgZXNtIHBhY2thZ2UuanNvbiB3aXRob3V0IG5hbWUgZm91bmRcbiAgICByZXR1cm4gcGtnLm5hbWUgfHwgZ2V0RmlsZVBhY2thZ2VOYW1lKGRpcm5hbWUoZGlybmFtZShwYXRoKSkpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/default.js b/node_modules/eslint-plugin-import/lib/rules/default.js
index 588ebaf..517e57e 100644
--- a/node_modules/eslint-plugin-import/lib/rules/default.js
+++ b/node_modules/eslint-plugin-import/lib/rules/default.js
@@ -37,4 +37,4 @@
'ExportNamedDeclaration': checkDefault.bind(null, 'ExportDefaultSpecifier') };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwiY2hlY2tEZWZhdWx0Iiwic3BlY2lmaWVyVHlwZSIsIm5vZGUiLCJkZWZhdWx0U3BlY2lmaWVyIiwic3BlY2lmaWVycyIsImZpbmQiLCJzcGVjaWZpZXIiLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwibGVuZ3RoIiwicmVwb3J0RXJyb3JzIiwidW5kZWZpbmVkIiwicmVwb3J0IiwibWVzc2FnZSIsImJpbmQiXSwibWFwcGluZ3MiOiJhQUFBLHlDO0FBQ0EscUM7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLFNBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLHVCQUFRLGdCQUFVQyxPQUFWLEVBQW1COztBQUV6QixlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7O0FBRXpDLFlBQU1DLG1CQUFtQkQsS0FBS0UsVUFBTCxDQUFnQkMsSUFBaEI7QUFDdkIscUNBQWFDLFVBQVVaLElBQVYsS0FBbUJPLGFBQWhDLEVBRHVCLENBQXpCOzs7QUFJQSxZQUFJLENBQUNFLGdCQUFMLEVBQXVCO0FBQ3ZCLFlBQU1JLFVBQVVDLHVCQUFRQyxHQUFSLENBQVlQLEtBQUtRLE1BQUwsQ0FBWUMsS0FBeEIsRUFBK0JaLE9BQS9CLENBQWhCO0FBQ0EsWUFBSVEsV0FBVyxJQUFmLEVBQXFCOztBQUVyQixZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMLDZCQUFxQlgsYUFBYWtCLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0Isd0JBQXhCLENBRGhCO0FBRUwsa0NBQTBCbEIsYUFBYWtCLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0Isd0JBQXhCLENBRnJCLEVBQVA7O0FBSUQsS0ExQkQsaUJBVGUsRUFBakIiLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCdkZWZhdWx0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRGVmYXVsdChzcGVjaWZpZXJUeXBlLCBub2RlKSB7XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRTcGVjaWZpZXIgPSBub2RlLnNwZWNpZmllcnMuZmluZChcbiAgICAgICAgc3BlY2lmaWVyID0+IHNwZWNpZmllci50eXBlID09PSBzcGVjaWZpZXJUeXBlXG4gICAgICApO1xuXG4gICAgICBpZiAoIWRlZmF1bHRTcGVjaWZpZXIpIHJldHVybjtcbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGltcG9ydHMuZ2V0KCdkZWZhdWx0JykgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogZGVmYXVsdFNwZWNpZmllcixcbiAgICAgICAgICBtZXNzYWdlOiBgTm8gZGVmYXVsdCBleHBvcnQgZm91bmQgaW4gaW1wb3J0ZWQgbW9kdWxlIFwiJHtub2RlLnNvdXJjZS52YWx1ZX1cIi5gLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ0ltcG9ydERlY2xhcmF0aW9uJzogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInKSxcbiAgICAgICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJzogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ0V4cG9ydERlZmF1bHRTcGVjaWZpZXInKSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwiY2hlY2tEZWZhdWx0Iiwic3BlY2lmaWVyVHlwZSIsIm5vZGUiLCJkZWZhdWx0U3BlY2lmaWVyIiwic3BlY2lmaWVycyIsImZpbmQiLCJzcGVjaWZpZXIiLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwibGVuZ3RoIiwicmVwb3J0RXJyb3JzIiwidW5kZWZpbmVkIiwicmVwb3J0IiwibWVzc2FnZSIsImJpbmQiXSwibWFwcGluZ3MiOiJhQUFBLHlDO0FBQ0EscUM7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLFNBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLFFBVGUsK0JBU1JDLE9BVFEsRUFTQzs7QUFFZCxlQUFTQyxZQUFULENBQXNCQyxhQUF0QixFQUFxQ0MsSUFBckMsRUFBMkM7O0FBRXpDLFlBQU1DLG1CQUFtQkQsS0FBS0UsVUFBTCxDQUFnQkMsSUFBaEI7QUFDdkIscUNBQWFDLFVBQVVaLElBQVYsS0FBbUJPLGFBQWhDLEVBRHVCLENBQXpCOzs7QUFJQSxZQUFJLENBQUNFLGdCQUFMLEVBQXVCO0FBQ3ZCLFlBQU1JLFVBQVVDLHVCQUFRQyxHQUFSLENBQVlQLEtBQUtRLE1BQUwsQ0FBWUMsS0FBeEIsRUFBK0JaLE9BQS9CLENBQWhCO0FBQ0EsWUFBSVEsV0FBVyxJQUFmLEVBQXFCOztBQUVyQixZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmYsT0FBckIsRUFBOEJHLElBQTlCO0FBQ0QsU0FGRCxNQUVPLElBQUlLLFFBQVFFLEdBQVIsQ0FBWSxTQUFaLE1BQTJCTSxTQUEvQixFQUEwQztBQUMvQ2hCLGtCQUFRaUIsTUFBUixDQUFlO0FBQ2JkLGtCQUFNQyxnQkFETztBQUViYyw2RUFBd0RmLEtBQUtRLE1BQUwsQ0FBWUMsS0FBcEUsUUFGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRUQsYUFBTztBQUNMLDZCQUFxQlgsYUFBYWtCLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0Isd0JBQXhCLENBRGhCO0FBRUwsa0NBQTBCbEIsYUFBYWtCLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0Isd0JBQXhCLENBRnJCLEVBQVA7O0FBSUQsS0FuQ2MsbUJBQWpCIiwiZmlsZSI6ImRlZmF1bHQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnZGVmYXVsdCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuXG4gICAgZnVuY3Rpb24gY2hlY2tEZWZhdWx0KHNwZWNpZmllclR5cGUsIG5vZGUpIHtcblxuICAgICAgY29uc3QgZGVmYXVsdFNwZWNpZmllciA9IG5vZGUuc3BlY2lmaWVycy5maW5kKFxuICAgICAgICBzcGVjaWZpZXIgPT4gc3BlY2lmaWVyLnR5cGUgPT09IHNwZWNpZmllclR5cGVcbiAgICAgICk7XG5cbiAgICAgIGlmICghZGVmYXVsdFNwZWNpZmllcikgcmV0dXJuO1xuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHJldHVybjtcblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgIH0gZWxzZSBpZiAoaW1wb3J0cy5nZXQoJ2RlZmF1bHQnKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlOiBkZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgIG1lc3NhZ2U6IGBObyBkZWZhdWx0IGV4cG9ydCBmb3VuZCBpbiBpbXBvcnRlZCBtb2R1bGUgXCIke25vZGUuc291cmNlLnZhbHVlfVwiLmAsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnSW1wb3J0RGVjbGFyYXRpb24nOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgICAgJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcicpLFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/dynamic-import-chunkname.js b/node_modules/eslint-plugin-import/lib/rules/dynamic-import-chunkname.js
index e82a0f0..ccac92e 100644
--- a/node_modules/eslint-plugin-import/lib/rules/dynamic-import-chunkname.js
+++ b/node_modules/eslint-plugin-import/lib/rules/dynamic-import-chunkname.js
@@ -116,4 +116,4 @@
}return CallExpression;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJpbXBvcnRGdW5jdGlvbnMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwid2VicGFja0NodW5rbmFtZUZvcm1hdCIsImNyZWF0ZSIsImNvbnRleHQiLCJjb25maWciLCJvcHRpb25zIiwicGFkZGVkQ29tbWVudFJlZ2V4IiwiY29tbWVudFN0eWxlUmVnZXgiLCJjaHVua1N1YnN0ckZvcm1hdCIsImNodW5rU3Vic3RyUmVnZXgiLCJSZWdFeHAiLCJydW4iLCJub2RlIiwiYXJnIiwic291cmNlQ29kZSIsImdldFNvdXJjZUNvZGUiLCJsZWFkaW5nQ29tbWVudHMiLCJnZXRDb21tZW50c0JlZm9yZSIsImdldENvbW1lbnRzIiwibGVhZGluZyIsImxlbmd0aCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0NodW5rbmFtZVByZXNlbnQiLCJjb21tZW50IiwidGVzdCIsInZhbHVlIiwidm0iLCJydW5Jbk5ld0NvbnRleHQiLCJlcnJvciIsIkltcG9ydEV4cHJlc3Npb24iLCJzb3VyY2UiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImluZGV4T2YiLCJuYW1lIiwiYXJndW1lbnRzIl0sIm1hcHBpbmdzIjoiYUFBQSx3QjtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxZQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSwwQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsQ0FBQztBQUNQSCxZQUFNLFFBREM7QUFFUEksa0JBQVk7QUFDVkMseUJBQWlCO0FBQ2ZMLGdCQUFNLE9BRFM7QUFFZk0sdUJBQWEsSUFGRTtBQUdmQyxpQkFBTztBQUNMUCxrQkFBTSxRQURELEVBSFEsRUFEUDs7O0FBUVZR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Q0Q7O0FBRUR4QixnQkFBSUMsSUFBSixFQUFVQSxLQUFLd0IsU0FBTCxDQUFlLENBQWYsQ0FBVjtBQUNELFdBWEksMkJBQVA7O0FBYUQsS0EzRkQsaUJBdkJlLEVBQWpCIiwiZmlsZSI6ImR5bmFtaWMtaW1wb3J0LWNodW5rbmFtZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB2bSBmcm9tICd2bSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbXBvcnRGdW5jdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0OiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBjb25zdCBjb25maWcgPSBjb250ZXh0Lm9wdGlvbnNbMF07XG4gICAgY29uc3QgeyBpbXBvcnRGdW5jdGlvbnMgPSBbXSB9ID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbnN0IHsgd2VicGFja0NodW5rbmFtZUZvcm1hdCA9ICdbMC05YS16QS1aLV8vLl0rJyB9ID0gY29uZmlnIHx8IHt9O1xuXG4gICAgY29uc3QgcGFkZGVkQ29tbWVudFJlZ2V4ID0gL14gKFxcU1tcXHNcXFNdK1xcUykgJC87XG4gICAgY29uc3QgY29tbWVudFN0eWxlUmVnZXggPSAvXiggXFx3KzogKFtcIiddW15cIiddKltcIiddfFxcZCt8ZmFsc2V8dHJ1ZSksPykrICQvO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyRm9ybWF0ID0gYCB3ZWJwYWNrQ2h1bmtOYW1lOiBbXCInXSR7d2VicGFja0NodW5rbmFtZUZvcm1hdH1bXCInXSw/IGA7XG4gICAgY29uc3QgY2h1bmtTdWJzdHJSZWdleCA9IG5ldyBSZWdFeHAoY2h1bmtTdWJzdHJGb3JtYXQpO1xuXG4gICAgZnVuY3Rpb24gcnVuKG5vZGUsIGFyZykge1xuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgY29uc3QgbGVhZGluZ0NvbW1lbnRzID0gc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZVxuICAgICAgICA/IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUoYXJnKSAvLyBUaGlzIG1ldGhvZCBpcyBhdmFpbGFibGUgaW4gRVNMaW50ID49IDQuXG4gICAgICAgIDogc291cmNlQ29kZS5nZXRDb21tZW50cyhhcmcpLmxlYWRpbmc7IC8vIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gRVNMaW50IDcuXG5cbiAgICAgIGlmICghbGVhZGluZ0NvbW1lbnRzIHx8IGxlYWRpbmdDb21tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IHdpdGggdGhlIHdlYnBhY2sgY2h1bmtuYW1lJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGlzQ2h1bmtuYW1lUHJlc2VudCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgbGVhZGluZ0NvbW1lbnRzKSB7XG4gICAgICAgIGlmIChjb21tZW50LnR5cGUgIT09ICdCbG9jaycpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2R5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgLyogZm9vICovIHN0eWxlIGNvbW1lbnQsIG5vdCBhIC8vIGZvbyBjb21tZW50JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhZGRlZENvbW1lbnRSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIGJsb2NrIGNvbW1lbnQgcGFkZGVkIHdpdGggc3BhY2VzIC0gLyogZm9vICovYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIGp1c3QgbGlrZSB3ZWJwYWNrIGl0c2VsZiBkb2VzXG4gICAgICAgICAgdm0ucnVuSW5OZXdDb250ZXh0KGAoZnVuY3Rpb24oKSB7cmV0dXJuIHske2NvbW1lbnQudmFsdWV9fX0pKClgKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgXCJ3ZWJwYWNrXCIgY29tbWVudCB3aXRoIHZhbGlkIHN5bnRheGAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb21tZW50U3R5bGVSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIGxlYWRpbmcgY29tbWVudCBpbiB0aGUgZm9ybSAvKiR7Y2h1bmtTdWJzdHJGb3JtYXR9Ki9gLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaHVua1N1YnN0clJlZ2V4LnRlc3QoY29tbWVudC52YWx1ZSkpIHtcbiAgICAgICAgICBpc0NodW5rbmFtZVByZXNlbnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNDaHVua25hbWVQcmVzZW50KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgaW4gdGhlIGZvcm0gLyoke2NodW5rU3Vic3RyRm9ybWF0fSovYCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBydW4obm9kZSwgbm9kZS5zb3VyY2UpO1xuICAgICAgfSxcblxuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSAhPT0gJ0ltcG9ydCcgJiYgaW1wb3J0RnVuY3Rpb25zLmluZGV4T2Yobm9kZS5jYWxsZWUubmFtZSkgPCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuYXJndW1lbnRzWzBdKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9keW5hbWljLWltcG9ydC1jaHVua25hbWUuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJpbXBvcnRGdW5jdGlvbnMiLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwid2VicGFja0NodW5rbmFtZUZvcm1hdCIsImNyZWF0ZSIsImNvbnRleHQiLCJjb25maWciLCJvcHRpb25zIiwicGFkZGVkQ29tbWVudFJlZ2V4IiwiY29tbWVudFN0eWxlUmVnZXgiLCJjaHVua1N1YnN0ckZvcm1hdCIsImNodW5rU3Vic3RyUmVnZXgiLCJSZWdFeHAiLCJydW4iLCJub2RlIiwiYXJnIiwic291cmNlQ29kZSIsImdldFNvdXJjZUNvZGUiLCJsZWFkaW5nQ29tbWVudHMiLCJnZXRDb21tZW50c0JlZm9yZSIsImdldENvbW1lbnRzIiwibGVhZGluZyIsImxlbmd0aCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0NodW5rbmFtZVByZXNlbnQiLCJjb21tZW50IiwidGVzdCIsInZhbHVlIiwidm0iLCJydW5Jbk5ld0NvbnRleHQiLCJlcnJvciIsIkltcG9ydEV4cHJlc3Npb24iLCJzb3VyY2UiLCJDYWxsRXhwcmVzc2lvbiIsImNhbGxlZSIsImluZGV4T2YiLCJuYW1lIiwiYXJndW1lbnRzIl0sIm1hcHBpbmdzIjoiYUFBQSx3QjtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxZQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSwwQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsQ0FBQztBQUNQSCxZQUFNLFFBREM7QUFFUEksa0JBQVk7QUFDVkMseUJBQWlCO0FBQ2ZMLGdCQUFNLE9BRFM7QUFFZk0sdUJBQWEsSUFGRTtBQUdmQyxpQkFBTztBQUNMUCxrQkFBTSxRQURELEVBSFEsRUFEUDs7O0FBUVZR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RUR4QixnQkFBSUMsSUFBSixFQUFVQSxLQUFLd0IsU0FBTCxDQUFlLENBQWYsQ0FBVjtBQUNELFdBWEksMkJBQVA7O0FBYUQsS0FsSGMsbUJBQWpCIiwiZmlsZSI6ImR5bmFtaWMtaW1wb3J0LWNodW5rbmFtZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB2bSBmcm9tICd2bSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCdkeW5hbWljLWltcG9ydC1jaHVua25hbWUnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpbXBvcnRGdW5jdGlvbnM6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB3ZWJwYWNrQ2h1bmtuYW1lRm9ybWF0OiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gY29udGV4dC5vcHRpb25zWzBdO1xuICAgIGNvbnN0IHsgaW1wb3J0RnVuY3Rpb25zID0gW10gfSA9IGNvbmZpZyB8fCB7fTtcbiAgICBjb25zdCB7IHdlYnBhY2tDaHVua25hbWVGb3JtYXQgPSAnWzAtOWEtekEtWi1fLy5dKycgfSA9IGNvbmZpZyB8fCB7fTtcblxuICAgIGNvbnN0IHBhZGRlZENvbW1lbnRSZWdleCA9IC9eIChcXFNbXFxzXFxTXStcXFMpICQvO1xuICAgIGNvbnN0IGNvbW1lbnRTdHlsZVJlZ2V4ID0gL14oIFxcdys6IChbXCInXVteXCInXSpbXCInXXxcXGQrfGZhbHNlfHRydWUpLD8pKyAkLztcbiAgICBjb25zdCBjaHVua1N1YnN0ckZvcm1hdCA9IGAgd2VicGFja0NodW5rTmFtZTogW1wiJ10ke3dlYnBhY2tDaHVua25hbWVGb3JtYXR9W1wiJ10sPyBgO1xuICAgIGNvbnN0IGNodW5rU3Vic3RyUmVnZXggPSBuZXcgUmVnRXhwKGNodW5rU3Vic3RyRm9ybWF0KTtcblxuICAgIGZ1bmN0aW9uIHJ1bihub2RlLCBhcmcpIHtcbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgICAgIGNvbnN0IGxlYWRpbmdDb21tZW50cyA9IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmVcbiAgICAgICAgPyBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKGFyZykgLy8gVGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIGluIEVTTGludCA+PSA0LlxuICAgICAgICA6IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHMoYXJnKS5sZWFkaW5nOyAvLyBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIEVTTGludCA3LlxuXG4gICAgICBpZiAoIWxlYWRpbmdDb21tZW50cyB8fCBsZWFkaW5nQ29tbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6ICdkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIGxlYWRpbmcgY29tbWVudCB3aXRoIHRoZSB3ZWJwYWNrIGNodW5rbmFtZScsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBpc0NodW5rbmFtZVByZXNlbnQgPSBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBjb21tZW50IG9mIGxlYWRpbmdDb21tZW50cykge1xuICAgICAgICBpZiAoY29tbWVudC50eXBlICE9PSAnQmxvY2snKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIC8qIGZvbyAqLyBzdHlsZSBjb21tZW50LCBub3QgYSAvLyBmb28gY29tbWVudCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYWRkZWRDb21tZW50UmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBibG9jayBjb21tZW50IHBhZGRlZCB3aXRoIHNwYWNlcyAtIC8qIGZvbyAqL2AsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBqdXN0IGxpa2Ugd2VicGFjayBpdHNlbGYgZG9lc1xuICAgICAgICAgIHZtLnJ1bkluTmV3Q29udGV4dChgKGZ1bmN0aW9uKCkge3JldHVybiB7JHtjb21tZW50LnZhbHVlfX19KSgpYCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBkeW5hbWljIGltcG9ydHMgcmVxdWlyZSBhIFwid2VicGFja1wiIGNvbW1lbnQgd2l0aCB2YWxpZCBzeW50YXhgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29tbWVudFN0eWxlUmVnZXgudGVzdChjb21tZW50LnZhbHVlKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICBgZHluYW1pYyBpbXBvcnRzIHJlcXVpcmUgYSBsZWFkaW5nIGNvbW1lbnQgaW4gdGhlIGZvcm0gLyoke2NodW5rU3Vic3RyRm9ybWF0fSovYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2h1bmtTdWJzdHJSZWdleC50ZXN0KGNvbW1lbnQudmFsdWUpKSB7XG4gICAgICAgICAgaXNDaHVua25hbWVQcmVzZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQ2h1bmtuYW1lUHJlc2VudCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgYGR5bmFtaWMgaW1wb3J0cyByZXF1aXJlIGEgbGVhZGluZyBjb21tZW50IGluIHRoZSBmb3JtIC8qJHtjaHVua1N1YnN0ckZvcm1hdH0qL2AsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnRFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgcnVuKG5vZGUsIG5vZGUuc291cmNlKTtcbiAgICAgIH0sXG5cbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLnR5cGUgIT09ICdJbXBvcnQnICYmIGltcG9ydEZ1bmN0aW9ucy5pbmRleE9mKG5vZGUuY2FsbGVlLm5hbWUpIDwgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bihub2RlLCBub2RlLmFyZ3VtZW50c1swXSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/export.js b/node_modules/eslint-plugin-import/lib/rules/export.js
index 5f810ee..ebf3ea3 100644
--- a/node_modules/eslint-plugin-import/lib/rules/export.js
+++ b/node_modules/eslint-plugin-import/lib/rules/export.js
@@ -173,4 +173,4 @@
}return ProgramExit;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwidHlwZXMiLCJTZXQiLCJBcnJheSIsImZyb20iLCJub2RlIiwicGFyZW50IiwidHlwZSIsImhhcyIsInNpemUiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJuYW1lIiwiaXNUeXBlIiwic2V0IiwibmFtZWQiLCJnZXQiLCJrZXkiLCJhZGQiLCJnZXRQYXJlbnQiLCJleHBvcnRlZCIsImRlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImlkIiwiZGVjbGFyYXRpb25zIiwidiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXAiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImFueSIsImZvckVhY2giLCJyZXBvcnQiLCJyZXBsYWNlIl0sIm1hcHBpbmdzIjoicW9CQUFBLHlDO0FBQ0EscUM7QUFDQSwrQzs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFBZSxPQUFyQjs7QUFFQTs7Ozs7Ozs7OztBQVVBLFNBQVNDLDZCQUFULENBQXVDQyxLQUF2QyxFQUE4QztBQUM1QyxNQUFNQyxRQUFRLElBQUlDLEdBQUosQ0FBUUMsTUFBTUMsSUFBTixDQUFXSixLQUFYLEVBQWtCLHdCQUFRSyxLQUFLQyxNQUFMLENBQVlDLElBQXBCLEVBQWxCLENBQVIsQ0FBZDtBQUNBO0FBQ0VOLFVBQU1PLEdBQU4sQ0FBVSxtQkFBVjs7QUFFRVAsVUFBTVEsSUFBTixLQUFlLENBQWY7QUFDQ1IsVUFBTVEsSUFBTixLQUFlLENBQWYsSUFB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LE1BQUwsQ0FBWUcsS0FGbkQ7O0FBSUQ7QUFDRixXQTlCRCwrQkFuQ0s7O0FBbUVMLHFDQUFnQix1QkFBWTtBQUMxQixvQ0FBd0JyQixTQUF4QixtSUFBbUMsaUVBQXJCTSxLQUFxQjtBQUNqQyx3Q0FBNEJBLEtBQTVCLG1JQUFtQyxtRUFBdkJILElBQXVCLGdCQUFqQnJCLEtBQWlCO0FBQ2pDLHdCQUFJQSxNQUFNUyxJQUFOLElBQWMsQ0FBbEIsRUFBcUI7O0FBRXJCLHdCQUFJViw4QkFBOEJDLEtBQTlCLENBQUosRUFBMEMsU0FIVDs7QUFLakMsNENBQW1CQSxLQUFuQixtSUFBMEIsS0FBZkssSUFBZTtBQUN4Qiw0QkFBSWdCLFNBQVMsU0FBYixFQUF3QjtBQUN0Qkosa0NBQVE0QixNQUFSLENBQWV4QyxJQUFmLEVBQXFCLDJCQUFyQjtBQUNELHlCQUZELE1BRU87QUFDTFksa0NBQVE0QixNQUFSO0FBQ0V4Qyw4QkFERjtBQUUrQmdCLCtCQUFLeUIsT0FBTCxDQUFhaEQsWUFBYixFQUEyQixFQUEzQixDQUYvQjs7QUFJRDtBQUNGLHVCQWRnQztBQWVsQyxtQkFoQmdDO0FBaUJsQyxlQWxCeUI7QUFtQjNCLFdBbkJELHNCQW5FSyxFQUFQOztBQXdGRCxLQXRIRCxpQkFUZSxFQUFqQiIsImZpbGUiOiJleHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhwb3J0TWFwLCB7IHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlIH0gZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGluY2x1ZGVzIGZyb20gJ2FycmF5LWluY2x1ZGVzJztcblxuLypcbk5vdGVzIG9uIFR5cGVTY3JpcHQgbmFtZXNwYWNlcyBha2EgVFNNb2R1bGVEZWNsYXJhdGlvbjpcblxuVGhlcmUgYXJlIHR3byBmb3Jtczpcbi0gYWN0aXZlIG5hbWVzcGFjZXM6IG5hbWVzcGFjZSBGb28ge30gLyBtb2R1bGUgRm9vIHt9XG4tIGFtYmllbnQgbW9kdWxlczsgZGVjbGFyZSBtb2R1bGUgXCJlc2xpbnQtcGx1Z2luLWltcG9ydFwiIHt9XG5cbmFjdGl2ZSBuYW1lc3BhY2VzOlxuLSBjYW5ub3QgY29udGFpbiBhIGRlZmF1bHQgZXhwb3J0XG4tIGNhbm5vdCBjb250YWluIGFuIGV4cG9ydCBhbGxcbi0gY2Fubm90IGNvbnRhaW4gYSBtdWx0aSBuYW1lIGV4cG9ydCAoZXhwb3J0IHsgYSwgYiB9KVxuLSBjYW4gaGF2ZSBhY3RpdmUgbmFtZXNwYWNlcyBuZXN0ZWQgd2l0aGluIHRoZW1cblxuYW1iaWVudCBuYW1lc3BhY2VzOlxuLSBjYW4gb25seSBiZSBkZWZpbmVkIGluIC5kLnRzIGZpbGVzXG4tIGNhbm5vdCBiZSBuZXN0ZWQgd2l0aGluIGFjdGl2ZSBuYW1lc3BhY2VzXG4tIGhhdmUgbm8gb3RoZXIgcmVzdHJpY3Rpb25zXG4qL1xuXG5jb25zdCByb290UHJvZ3JhbSA9ICdyb290JztcbmNvbnN0IHRzVHlwZVByZWZpeCA9ICd0eXBlOic7XG5cbi8qKlxuICogRGV0ZWN0IGZ1bmN0aW9uIG92ZXJsb2FkcyBsaWtlOlxuICogYGBgdHNcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogc3RyaW5nKTtcbiAqIGV4cG9ydCBmdW5jdGlvbiBmb28oYTogbnVtYmVyfHN0cmluZykgeyByZXR1cm4gYTsgfVxuICogYGBgXG4gKiBAcGFyYW0ge1NldDxPYmplY3Q+fSBub2Rlc1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSB7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldChBcnJheS5mcm9tKG5vZGVzLCBub2RlID0+IG5vZGUucGFyZW50LnR5cGUpKTtcbiAgcmV0dXJuIChcbiAgICB0eXBlcy5oYXMoJ1RTRGVjbGFyZUZ1bmN0aW9uJykgJiZcbiAgICAoXG4gICAgICB0eXBlcy5zaXplID09PSAxIHx8XG4gICAgICAodHlwZXMuc2l6ZSA9PT0gMiAmJiB0eXBlcy5oYXMoJ0Z1bmN0aW9uRGVjbGFyYXRpb24nKSlcbiAgICApXG4gICk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnZXhwb3J0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBjb25zdCBuYW1lc3BhY2UgPSBuZXcgTWFwKFtbcm9vdFByb2dyYW0sIG5ldyBNYXAoKV1dKTtcblxuICAgIGZ1bmN0aW9uIGFkZE5hbWVkKG5hbWUsIG5vZGUsIHBhcmVudCwgaXNUeXBlKSB7XG4gICAgICBpZiAoIW5hbWVzcGFjZS5oYXMocGFyZW50KSkge1xuICAgICAgICBuYW1lc3BhY2Uuc2V0KHBhcmVudCwgbmV3IE1hcCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5hbWVkID0gbmFtZXNwYWNlLmdldChwYXJlbnQpO1xuXG4gICAgICBjb25zdCBrZXkgPSBpc1R5cGUgPyBgJHt0c1R5cGVQcmVmaXh9JHtuYW1lfWAgOiBuYW1lO1xuICAgICAgbGV0IG5vZGVzID0gbmFtZWQuZ2V0KGtleSk7XG5cbiAgICAgIGlmIChub2RlcyA9PSBudWxsKSB7XG4gICAgICAgIG5vZGVzID0gbmV3IFNldCgpO1xuICAgICAgICBuYW1lZC5zZXQoa2V5LCBub2Rlcyk7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzLmFkZChub2RlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJlbnQobm9kZSkge1xuICAgICAgaWYgKG5vZGUucGFyZW50ICYmIG5vZGUucGFyZW50LnR5cGUgPT09ICdUU01vZHVsZUJsb2NrJykge1xuICAgICAgICByZXR1cm4gbm9kZS5wYXJlbnQucGFyZW50O1xuICAgICAgfVxuXG4gICAgICAvLyBqdXN0IGluIGNhc2Ugc29tZWhvdyBhIG5vbi10cyBuYW1lc3BhY2UgZXhwb3J0IGRlY2xhcmF0aW9uIGlzbid0IGRpcmVjdGx5XG4gICAgICAvLyBwYXJlbnRlZCB0byB0aGUgcm9vdCBQcm9ncmFtIG5vZGVcbiAgICAgIHJldHVybiByb290UHJvZ3JhbTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbic6IChub2RlKSA9PiBhZGROYW1lZCgnZGVmYXVsdCcsIG5vZGUsIGdldFBhcmVudChub2RlKSksXG5cbiAgICAgICdFeHBvcnRTcGVjaWZpZXInOiAobm9kZSkgPT4gYWRkTmFtZWQoXG4gICAgICAgIG5vZGUuZXhwb3J0ZWQubmFtZSxcbiAgICAgICAgbm9kZS5leHBvcnRlZCxcbiAgICAgICAgZ2V0UGFyZW50KG5vZGUucGFyZW50KVxuICAgICAgKSxcblxuICAgICAgJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbiA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0UGFyZW50KG5vZGUpO1xuICAgICAgICAvLyBzdXBwb3J0IGZvciBvbGQgVHlwZVNjcmlwdCB2ZXJzaW9uc1xuICAgICAgICBjb25zdCBpc1R5cGVWYXJpYWJsZURlY2wgPSBub2RlLmRlY2xhcmF0aW9uLmtpbmQgPT09ICd0eXBlJztcblxuICAgICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgaWYgKGluY2x1ZGVzKFtcbiAgICAgICAgICAgICdUU1R5cGVBbGlhc0RlY2xhcmF0aW9uJyxcbiAgICAgICAgICAgICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJyxcbiAgICAgICAgICBdLCBub2RlLmRlY2xhcmF0aW9uLnR5cGUpKSB7XG4gICAgICAgICAgICBhZGROYW1lZChub2RlLmRlY2xhcmF0aW9uLmlkLm5hbWUsIG5vZGUuZGVjbGFyYXRpb24uaWQsIHBhcmVudCwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFkZE5hbWVkKG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZSwgbm9kZS5kZWNsYXJhdGlvbi5pZCwgcGFyZW50LCBpc1R5cGVWYXJpYWJsZURlY2wpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uLmRlY2xhcmF0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBub2RlLmRlY2xhcmF0aW9uLmRlY2xhcmF0aW9ucykge1xuICAgICAgICAgICAgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoZGVjbGFyYXRpb24uaWQsIHYgPT5cbiAgICAgICAgICAgICAgYWRkTmFtZWQodi5uYW1lLCB2LCBwYXJlbnQsIGlzVHlwZVZhcmlhYmxlRGVjbCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ0V4cG9ydEFsbERlY2xhcmF0aW9uJzogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuc291cmNlID09IG51bGwpIHJldHVybjsgLy8gbm90IHN1cmUgaWYgdGhpcyBpcyBldmVyIHRydWVcblxuICAgICAgICAvLyBgZXhwb3J0ICogYXMgWCBmcm9tICdwYXRoJ2AgZG9lcyBub3QgY29uZmxpY3RcbiAgICAgICAgaWYgKG5vZGUuZXhwb3J0ZWQgJiYgbm9kZS5leHBvcnRlZC5uYW1lKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVtb3RlRXhwb3J0cyA9IEV4cG9ydE1hcC5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cyA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgICAgaWYgKHJlbW90ZUV4cG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgIHJlbW90ZUV4cG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldFBhcmVudChub2RlKTtcblxuICAgICAgICBsZXQgYW55ID0gZmFsc2U7XG4gICAgICAgIHJlbW90ZUV4cG9ydHMuZm9yRWFjaCgodiwgbmFtZSkgPT4ge1xuICAgICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIGFueSA9IHRydWU7IC8vIHBvb3IgbWFuJ3MgZmlsdGVyXG4gICAgICAgICAgICBhZGROYW1lZChuYW1lLCBub2RlLCBwYXJlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFhbnkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgIG5vZGUuc291cmNlLFxuICAgICAgICAgICAgYE5vIG5hbWVkIGV4cG9ydHMgZm91bmQgaW4gbW9kdWxlICcke25vZGUuc291cmNlLnZhbHVlfScuYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoY29uc3QgWywgbmFtZWRdIG9mIG5hbWVzcGFjZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIG5vZGVzXSBvZiBuYW1lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGVzLnNpemUgPD0gMSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGlmIChpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2Fkcyhub2RlcykpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsICdNdWx0aXBsZSBkZWZhdWx0IGV4cG9ydHMuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgYE11bHRpcGxlIGV4cG9ydHMgb2YgbmFtZSAnJHtuYW1lLnJlcGxhY2UodHNUeXBlUHJlZml4LCAnJyl9Jy5gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnQuanMiXSwibmFtZXMiOlsicm9vdFByb2dyYW0iLCJ0c1R5cGVQcmVmaXgiLCJpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2FkcyIsIm5vZGVzIiwidHlwZXMiLCJTZXQiLCJBcnJheSIsImZyb20iLCJub2RlIiwicGFyZW50IiwidHlwZSIsImhhcyIsInNpemUiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwibmFtZXNwYWNlIiwiTWFwIiwiYWRkTmFtZWQiLCJuYW1lIiwiaXNUeXBlIiwic2V0IiwibmFtZWQiLCJnZXQiLCJrZXkiLCJhZGQiLCJnZXRQYXJlbnQiLCJleHBvcnRlZCIsImRlY2xhcmF0aW9uIiwiaXNUeXBlVmFyaWFibGVEZWNsIiwia2luZCIsImlkIiwiZGVjbGFyYXRpb25zIiwidiIsInNvdXJjZSIsInJlbW90ZUV4cG9ydHMiLCJFeHBvcnRNYXAiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImFueSIsImZvckVhY2giLCJyZXBvcnQiLCJyZXBsYWNlIl0sIm1hcHBpbmdzIjoicW9CQUFBLHlDO0FBQ0EscUM7QUFDQSwrQzs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNQSxjQUFjLE1BQXBCO0FBQ0EsSUFBTUMsZUFBZSxPQUFyQjs7QUFFQTs7Ozs7Ozs7OztBQVVBLFNBQVNDLDZCQUFULENBQXVDQyxLQUF2QyxFQUE4QztBQUM1QyxNQUFNQyxRQUFRLElBQUlDLEdBQUosQ0FBUUMsTUFBTUMsSUFBTixDQUFXSixLQUFYLEVBQWtCLHdCQUFRSyxLQUFLQyxNQUFMLENBQVlDLElBQXBCLEVBQWxCLENBQVIsQ0FBZDtBQUNBO0FBQ0VOLFVBQU1PLEdBQU4sQ0FBVSxtQkFBVjs7QUFFRVAsVUFBTVEsSUFBTixLQUFlLENBQWY7QUFDQ1IsVUFBTVEsSUFBTixLQUFlLENBQWYsSUFB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QUwsQ0FBWUcsS0FGbkQ7O0FBSUQ7QUFDRixXQTlCRCwrQkFuQ0s7O0FBbUVMLHFDQUFnQix1QkFBWTtBQUMxQixvQ0FBd0JyQixTQUF4QixtSUFBbUMsaUVBQXJCTSxLQUFxQjtBQUNqQyx3Q0FBNEJBLEtBQTVCLG1JQUFtQyxtRUFBdkJILElBQXVCLGdCQUFqQnJCLEtBQWlCO0FBQ2pDLHdCQUFJQSxNQUFNUyxJQUFOLElBQWMsQ0FBbEIsRUFBcUI7O0FBRXJCLHdCQUFJViw4QkFBOEJDLEtBQTlCLENBQUosRUFBMEMsU0FIVDs7QUFLakMsNENBQW1CQSxLQUFuQixtSUFBMEIsS0FBZkssSUFBZTtBQUN4Qiw0QkFBSWdCLFNBQVMsU0FBYixFQUF3QjtBQUN0Qkosa0NBQVE0QixNQUFSLENBQWV4QyxJQUFmLEVBQXFCLDJCQUFyQjtBQUNELHlCQUZELE1BRU87QUFDTFksa0NBQVE0QixNQUFSO0FBQ0V4Qyw4QkFERjtBQUUrQmdCLCtCQUFLeUIsT0FBTCxDQUFhaEQsWUFBYixFQUEyQixFQUEzQixDQUYvQjs7QUFJRDtBQUNGLHVCQWRnQztBQWVsQyxtQkFoQmdDO0FBaUJsQyxlQWxCeUI7QUFtQjNCLFdBbkJELHNCQW5FSyxFQUFQOztBQXdGRCxLQS9IYyxtQkFBakIiLCJmaWxlIjoiZXhwb3J0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4cG9ydE1hcCwgeyByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZSB9IGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5cbi8qXG5Ob3RlcyBvbiBUeXBlU2NyaXB0IG5hbWVzcGFjZXMgYWthIFRTTW9kdWxlRGVjbGFyYXRpb246XG5cblRoZXJlIGFyZSB0d28gZm9ybXM6XG4tIGFjdGl2ZSBuYW1lc3BhY2VzOiBuYW1lc3BhY2UgRm9vIHt9IC8gbW9kdWxlIEZvbyB7fVxuLSBhbWJpZW50IG1vZHVsZXM7IGRlY2xhcmUgbW9kdWxlIFwiZXNsaW50LXBsdWdpbi1pbXBvcnRcIiB7fVxuXG5hY3RpdmUgbmFtZXNwYWNlczpcbi0gY2Fubm90IGNvbnRhaW4gYSBkZWZhdWx0IGV4cG9ydFxuLSBjYW5ub3QgY29udGFpbiBhbiBleHBvcnQgYWxsXG4tIGNhbm5vdCBjb250YWluIGEgbXVsdGkgbmFtZSBleHBvcnQgKGV4cG9ydCB7IGEsIGIgfSlcbi0gY2FuIGhhdmUgYWN0aXZlIG5hbWVzcGFjZXMgbmVzdGVkIHdpdGhpbiB0aGVtXG5cbmFtYmllbnQgbmFtZXNwYWNlczpcbi0gY2FuIG9ubHkgYmUgZGVmaW5lZCBpbiAuZC50cyBmaWxlc1xuLSBjYW5ub3QgYmUgbmVzdGVkIHdpdGhpbiBhY3RpdmUgbmFtZXNwYWNlc1xuLSBoYXZlIG5vIG90aGVyIHJlc3RyaWN0aW9uc1xuKi9cblxuY29uc3Qgcm9vdFByb2dyYW0gPSAncm9vdCc7XG5jb25zdCB0c1R5cGVQcmVmaXggPSAndHlwZTonO1xuXG4vKipcbiAqIERldGVjdCBmdW5jdGlvbiBvdmVybG9hZHMgbGlrZTpcbiAqIGBgYHRzXG4gKiBleHBvcnQgZnVuY3Rpb24gZm9vKGE6IG51bWJlcik7XG4gKiBleHBvcnQgZnVuY3Rpb24gZm9vKGE6IHN0cmluZyk7XG4gKiBleHBvcnQgZnVuY3Rpb24gZm9vKGE6IG51bWJlcnxzdHJpbmcpIHsgcmV0dXJuIGE7IH1cbiAqIGBgYFxuICogQHBhcmFtIHtTZXQ8T2JqZWN0Pn0gbm9kZXNcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1R5cGVzY3JpcHRGdW5jdGlvbk92ZXJsb2Fkcyhub2Rlcykge1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQoQXJyYXkuZnJvbShub2Rlcywgbm9kZSA9PiBub2RlLnBhcmVudC50eXBlKSk7XG4gIHJldHVybiAoXG4gICAgdHlwZXMuaGFzKCdUU0RlY2xhcmVGdW5jdGlvbicpICYmXG4gICAgKFxuICAgICAgdHlwZXMuc2l6ZSA9PT0gMSB8fFxuICAgICAgKHR5cGVzLnNpemUgPT09IDIgJiYgdHlwZXMuaGFzKCdGdW5jdGlvbkRlY2xhcmF0aW9uJykpXG4gICAgKVxuICApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ2V4cG9ydCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG5hbWVzcGFjZSA9IG5ldyBNYXAoW1tyb290UHJvZ3JhbSwgbmV3IE1hcCgpXV0pO1xuXG4gICAgZnVuY3Rpb24gYWRkTmFtZWQobmFtZSwgbm9kZSwgcGFyZW50LCBpc1R5cGUpIHtcbiAgICAgIGlmICghbmFtZXNwYWNlLmhhcyhwYXJlbnQpKSB7XG4gICAgICAgIG5hbWVzcGFjZS5zZXQocGFyZW50LCBuZXcgTWFwKCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmFtZWQgPSBuYW1lc3BhY2UuZ2V0KHBhcmVudCk7XG5cbiAgICAgIGNvbnN0IGtleSA9IGlzVHlwZSA/IGAke3RzVHlwZVByZWZpeH0ke25hbWV9YCA6IG5hbWU7XG4gICAgICBsZXQgbm9kZXMgPSBuYW1lZC5nZXQoa2V5KTtcblxuICAgICAgaWYgKG5vZGVzID09IG51bGwpIHtcbiAgICAgICAgbm9kZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIG5hbWVkLnNldChrZXksIG5vZGVzKTtcbiAgICAgIH1cblxuICAgICAgbm9kZXMuYWRkKG5vZGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcmVudChub2RlKSB7XG4gICAgICBpZiAobm9kZS5wYXJlbnQgJiYgbm9kZS5wYXJlbnQudHlwZSA9PT0gJ1RTTW9kdWxlQmxvY2snKSB7XG4gICAgICAgIHJldHVybiBub2RlLnBhcmVudC5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGp1c3QgaW4gY2FzZSBzb21laG93IGEgbm9uLXRzIG5hbWVzcGFjZSBleHBvcnQgZGVjbGFyYXRpb24gaXNuJ3QgZGlyZWN0bHlcbiAgICAgIC8vIHBhcmVudGVkIHRvIHRoZSByb290IFByb2dyYW0gbm9kZVxuICAgICAgcmV0dXJuIHJvb3RQcm9ncmFtO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJzogKG5vZGUpID0+IGFkZE5hbWVkKCdkZWZhdWx0Jywgbm9kZSwgZ2V0UGFyZW50KG5vZGUpKSxcblxuICAgICAgJ0V4cG9ydFNwZWNpZmllcic6IChub2RlKSA9PiBhZGROYW1lZChcbiAgICAgICAgbm9kZS5leHBvcnRlZC5uYW1lLFxuICAgICAgICBub2RlLmV4cG9ydGVkLFxuICAgICAgICBnZXRQYXJlbnQobm9kZS5wYXJlbnQpXG4gICAgICApLFxuXG4gICAgICAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uID09IG51bGwpIHJldHVybjtcblxuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRQYXJlbnQobm9kZSk7XG4gICAgICAgIC8vIHN1cHBvcnQgZm9yIG9sZCBUeXBlU2NyaXB0IHZlcnNpb25zXG4gICAgICAgIGNvbnN0IGlzVHlwZVZhcmlhYmxlRGVjbCA9IG5vZGUuZGVjbGFyYXRpb24ua2luZCA9PT0gJ3R5cGUnO1xuXG4gICAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uLmlkICE9IG51bGwpIHtcbiAgICAgICAgICBpZiAoaW5jbHVkZXMoW1xuICAgICAgICAgICAgJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nLFxuICAgICAgICAgICAgJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nLFxuICAgICAgICAgIF0sIG5vZGUuZGVjbGFyYXRpb24udHlwZSkpIHtcbiAgICAgICAgICAgIGFkZE5hbWVkKG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZSwgbm9kZS5kZWNsYXJhdGlvbi5pZCwgcGFyZW50LCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWRkTmFtZWQobm9kZS5kZWNsYXJhdGlvbi5pZC5uYW1lLCBub2RlLmRlY2xhcmF0aW9uLmlkLCBwYXJlbnQsIGlzVHlwZVZhcmlhYmxlRGVjbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zICE9IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShkZWNsYXJhdGlvbi5pZCwgdiA9PlxuICAgICAgICAgICAgICBhZGROYW1lZCh2Lm5hbWUsIHYsIHBhcmVudCwgaXNUeXBlVmFyaWFibGVEZWNsKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAnRXhwb3J0QWxsRGVjbGFyYXRpb24nOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5zb3VyY2UgPT0gbnVsbCkgcmV0dXJuOyAvLyBub3Qgc3VyZSBpZiB0aGlzIGlzIGV2ZXIgdHJ1ZVxuXG4gICAgICAgIC8vIGBleHBvcnQgKiBhcyBYIGZyb20gJ3BhdGgnYCBkb2VzIG5vdCBjb25mbGljdFxuICAgICAgICBpZiAobm9kZS5leHBvcnRlZCAmJiBub2RlLmV4cG9ydGVkLm5hbWUpIHJldHVybjtcblxuICAgICAgICBjb25zdCByZW1vdGVFeHBvcnRzID0gRXhwb3J0TWFwLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZW1vdGVFeHBvcnRzID09IG51bGwpIHJldHVybjtcblxuICAgICAgICBpZiAocmVtb3RlRXhwb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVtb3RlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50ID0gZ2V0UGFyZW50KG5vZGUpO1xuXG4gICAgICAgIGxldCBhbnkgPSBmYWxzZTtcbiAgICAgICAgcmVtb3RlRXhwb3J0cy5mb3JFYWNoKCh2LCBuYW1lKSA9PiB7XG4gICAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgICAgYW55ID0gdHJ1ZTsgLy8gcG9vciBtYW4ncyBmaWx0ZXJcbiAgICAgICAgICAgIGFkZE5hbWVkKG5hbWUsIG5vZGUsIHBhcmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWFueSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbm9kZS5zb3VyY2UsXG4gICAgICAgICAgICBgTm8gbmFtZWQgZXhwb3J0cyBmb3VuZCBpbiBtb2R1bGUgJyR7bm9kZS5zb3VyY2UudmFsdWV9Jy5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChjb25zdCBbLCBuYW1lZF0gb2YgbmFtZXNwYWNlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgbm9kZXNdIG9mIG5hbWVkKSB7XG4gICAgICAgICAgICBpZiAobm9kZXMuc2l6ZSA8PSAxKSBjb250aW51ZTtcblxuICAgICAgICAgICAgaWYgKGlzVHlwZXNjcmlwdEZ1bmN0aW9uT3ZlcmxvYWRzKG5vZGVzKSkgY29udGludWU7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgJ011bHRpcGxlIGRlZmF1bHQgZXhwb3J0cy4nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydChcbiAgICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgICBgTXVsdGlwbGUgZXhwb3J0cyBvZiBuYW1lICcke25hbWUucmVwbGFjZSh0c1R5cGVQcmVmaXgsICcnKX0nLmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/exports-last.js b/node_modules/eslint-plugin-import/lib/rules/exports-last.js
index f63b9d2..92ee987 100644
--- a/node_modules/eslint-plugin-import/lib/rules/exports-last.js
+++ b/node_modules/eslint-plugin-import/lib/rules/exports-last.js
@@ -38,4 +38,4 @@
}return Program;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnRzLWxhc3QuanMiXSwibmFtZXMiOlsiaXNOb25FeHBvcnRTdGF0ZW1lbnQiLCJ0eXBlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsIlByb2dyYW0iLCJib2R5IiwibGFzdE5vbkV4cG9ydFN0YXRlbWVudEluZGV4IiwicmVkdWNlIiwiZmluZExhc3RJbmRleCIsImFjYyIsIml0ZW0iLCJpbmRleCIsInNsaWNlIiwiZm9yRWFjaCIsImNoZWNrTm9uRXhwb3J0Iiwibm9kZSIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJhQUFBLHFDOztBQUVBLFNBQVNBLG9CQUFULE9BQXdDLEtBQVJDLElBQVEsUUFBUkEsSUFBUTtBQUN0QyxTQUFPQSxTQUFTLDBCQUFUO0FBQ0xBLFdBQVMsd0JBREo7QUFFTEEsV0FBUyxzQkFGWDtBQUdEOztBQUVEQyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkgsVUFBTSxZQURGO0FBRUpJLFVBQU07QUFDSkMsV0FBSywwQkFBUSxjQUFSLENBREQsRUFGRjs7QUFLSkMsWUFBUSxFQUxKLEVBRFM7OztBQVNmQyx1QkFBUSxnQkFBVUMsT0FBVixFQUFtQjtBQUN6QixhQUFPO0FBQ0xDLDhCQUFTLHdCQUFvQixLQUFSQyxJQUFRLFNBQVJBLElBQVE7QUFDM0IsZ0JBQU1DLDhCQUE4QkQsS0FBS0UsTUFBTCxjQUFZLFNBQVNDLGFBQVQsQ0FBdUJDLEdBQXZCLEVBQTRCQyxJQUE1QixFQUFrQ0MsS0FBbEMsRUFBeUM7QUFDdkYsb0JBQUlqQixxQkFBcUJnQixJQUFyQixDQUFKLEVBQWdDO0FBQzlCLHlCQUFPQyxLQUFQO0FBQ0Q7QUFDRCx1QkFBT0YsR0FBUDtBQUNELGVBTG1DLE9BQXFCRCxhQUFyQixNQUtqQyxDQUFDLENBTGdDLENBQXBDOztBQU9BLGdCQUFJRixnQ0FBZ0MsQ0FBQyxDQUFyQyxFQUF3QztBQUN0Q0QsbUJBQUtPLEtBQUwsQ0FBVyxDQUFYLEVBQWNOLDJCQUFkLEVBQTJDTyxPQUEzQyxjQUFtRCxTQUFTQyxjQUFULENBQXdCQyxJQUF4QixFQUE4QjtBQUMvRSxzQkFBSSxDQUFDckIscUJBQXFCcUIsSUFBckIsQ0FBTCxFQUFpQztBQUMvQlosNEJBQVFhLE1BQVIsQ0FBZTtBQUNiRCxnQ0FEYTtBQUViRSwrQkFBUyx3REFGSSxFQUFmOztBQUlEO0FBQ0YsaUJBUEQsT0FBNERILGNBQTVEO0FBUUQ7QUFDRixXQWxCRCxrQkFESyxFQUFQOztBQXFCRCxLQXRCRCxpQkFUZSxFQUFqQiIsImZpbGUiOiJleHBvcnRzLWxhc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gaXNOb25FeHBvcnRTdGF0ZW1lbnQoeyB0eXBlIH0pIHtcbiAgcmV0dXJuIHR5cGUgIT09ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nICYmXG4gICAgdHlwZSAhPT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmXG4gICAgdHlwZSAhPT0gJ0V4cG9ydEFsbERlY2xhcmF0aW9uJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCdleHBvcnRzLWxhc3QnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtOiBmdW5jdGlvbiAoeyBib2R5IH0pIHtcbiAgICAgICAgY29uc3QgbGFzdE5vbkV4cG9ydFN0YXRlbWVudEluZGV4ID0gYm9keS5yZWR1Y2UoZnVuY3Rpb24gZmluZExhc3RJbmRleChhY2MsIGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgaWYgKGlzTm9uRXhwb3J0U3RhdGVtZW50KGl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIC0xKTtcblxuICAgICAgICBpZiAobGFzdE5vbkV4cG9ydFN0YXRlbWVudEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGJvZHkuc2xpY2UoMCwgbGFzdE5vbkV4cG9ydFN0YXRlbWVudEluZGV4KS5mb3JFYWNoKGZ1bmN0aW9uIGNoZWNrTm9uRXhwb3J0KG5vZGUpIHtcbiAgICAgICAgICAgIGlmICghaXNOb25FeHBvcnRTdGF0ZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0V4cG9ydCBzdGF0ZW1lbnRzIHNob3VsZCBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZScsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHBvcnRzLWxhc3QuanMiXSwibmFtZXMiOlsiaXNOb25FeHBvcnRTdGF0ZW1lbnQiLCJ0eXBlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsIlByb2dyYW0iLCJib2R5IiwibGFzdE5vbkV4cG9ydFN0YXRlbWVudEluZGV4IiwicmVkdWNlIiwiZmluZExhc3RJbmRleCIsImFjYyIsIml0ZW0iLCJpbmRleCIsInNsaWNlIiwiZm9yRWFjaCIsImNoZWNrTm9uRXhwb3J0Iiwibm9kZSIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiJhQUFBLHFDOztBQUVBLFNBQVNBLG9CQUFULE9BQXdDLEtBQVJDLElBQVEsUUFBUkEsSUFBUTtBQUN0QyxTQUFPQSxTQUFTLDBCQUFUO0FBQ0xBLFdBQVMsd0JBREo7QUFFTEEsV0FBUyxzQkFGWDtBQUdEOztBQUVEQyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkgsVUFBTSxZQURGO0FBRUpJLFVBQU07QUFDSkMsV0FBSywwQkFBUSxjQUFSLENBREQsRUFGRjs7QUFLSkMsWUFBUSxFQUxKLEVBRFM7OztBQVNmQyxRQVRlLCtCQVNSQyxPQVRRLEVBU0M7QUFDZCxhQUFPO0FBQ0xDLGVBREssdUNBQ2EsS0FBUkMsSUFBUSxTQUFSQSxJQUFRO0FBQ2hCLGdCQUFNQyw4QkFBOEJELEtBQUtFLE1BQUwsY0FBWSxTQUFTQyxhQUFULENBQXVCQyxHQUF2QixFQUE0QkMsSUFBNUIsRUFBa0NDLEtBQWxDLEVBQXlDO0FBQ3ZGLG9CQUFJakIscUJBQXFCZ0IsSUFBckIsQ0FBSixFQUFnQztBQUM5Qix5QkFBT0MsS0FBUDtBQUNEO0FBQ0QsdUJBQU9GLEdBQVA7QUFDRCxlQUxtQyxPQUFxQkQsYUFBckIsTUFLakMsQ0FBQyxDQUxnQyxDQUFwQzs7QUFPQSxnQkFBSUYsZ0NBQWdDLENBQUMsQ0FBckMsRUFBd0M7QUFDdENELG1CQUFLTyxLQUFMLENBQVcsQ0FBWCxFQUFjTiwyQkFBZCxFQUEyQ08sT0FBM0MsY0FBbUQsU0FBU0MsY0FBVCxDQUF3QkMsSUFBeEIsRUFBOEI7QUFDL0Usc0JBQUksQ0FBQ3JCLHFCQUFxQnFCLElBQXJCLENBQUwsRUFBaUM7QUFDL0JaLDRCQUFRYSxNQUFSLENBQWU7QUFDYkQsZ0NBRGE7QUFFYkUsK0JBQVMsd0RBRkksRUFBZjs7QUFJRDtBQUNGLGlCQVBELE9BQTRESCxjQUE1RDtBQVFEO0FBQ0YsV0FuQkksb0JBQVA7O0FBcUJELEtBL0JjLG1CQUFqQiIsImZpbGUiOiJleHBvcnRzLWxhc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gaXNOb25FeHBvcnRTdGF0ZW1lbnQoeyB0eXBlIH0pIHtcbiAgcmV0dXJuIHR5cGUgIT09ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nICYmXG4gICAgdHlwZSAhPT0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nICYmXG4gICAgdHlwZSAhPT0gJ0V4cG9ydEFsbERlY2xhcmF0aW9uJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCdleHBvcnRzLWxhc3QnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgUHJvZ3JhbSh7IGJvZHkgfSkge1xuICAgICAgICBjb25zdCBsYXN0Tm9uRXhwb3J0U3RhdGVtZW50SW5kZXggPSBib2R5LnJlZHVjZShmdW5jdGlvbiBmaW5kTGFzdEluZGV4KGFjYywgaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICBpZiAoaXNOb25FeHBvcnRTdGF0ZW1lbnQoaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgLTEpO1xuXG4gICAgICAgIGlmIChsYXN0Tm9uRXhwb3J0U3RhdGVtZW50SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgYm9keS5zbGljZSgwLCBsYXN0Tm9uRXhwb3J0U3RhdGVtZW50SW5kZXgpLmZvckVhY2goZnVuY3Rpb24gY2hlY2tOb25FeHBvcnQobm9kZSkge1xuICAgICAgICAgICAgaWYgKCFpc05vbkV4cG9ydFN0YXRlbWVudChub2RlKSkge1xuICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnRXhwb3J0IHN0YXRlbWVudHMgc2hvdWxkIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlJyxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/extensions.js b/node_modules/eslint-plugin-import/lib/rules/extensions.js
index f80fe90..bef3c35 100644
--- a/node_modules/eslint-plugin-import/lib/rules/extensions.js
+++ b/node_modules/eslint-plugin-import/lib/rules/extensions.js
@@ -186,4 +186,4 @@
return (0, _moduleVisitor2['default'])(checkFileExtension, { commonjs: true });
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHRlbnNpb25zLmpzIl0sIm5hbWVzIjpbImVudW1WYWx1ZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsInR5cGUiLCJwcm9wZXJ0aWVzIiwiYnVpbGRQcm9wZXJ0aWVzIiwiY29udGV4dCIsInJlc3VsdCIsImRlZmF1bHRDb25maWciLCJwYXR0ZXJuIiwiaWdub3JlUGFja2FnZXMiLCJvcHRpb25zIiwiZm9yRWFjaCIsIm9iaiIsInVuZGVmaW5lZCIsIk9iamVjdCIsImFzc2lnbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImFueU9mIiwiaXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJjcmVhdGUiLCJwcm9wcyIsImdldE1vZGlmaWVyIiwiZXh0ZW5zaW9uIiwiaXNVc2VPZkV4dGVuc2lvblJlcXVpcmVkIiwiaXNQYWNrYWdlIiwiaXNVc2VPZkV4dGVuc2lvbkZvcmJpZGRlbiIsImlzUmVzb2x2YWJsZVdpdGhvdXRFeHRlbnNpb24iLCJmaWxlIiwicGF0aCIsImV4dG5hbWUiLCJmaWxlV2l0aG91dEV4dGVuc2lvbiIsInNsaWNlIiwibGVuZ3RoIiwicmVzb2x2ZWRGaWxlV2l0aG91dEV4dGVuc2lvbiIsImlzRXh0ZXJuYWxSb290TW9kdWxlIiwic2xhc2hDb3VudCIsInNwbGl0IiwiY2hlY2tGaWxlRXh0ZW5zaW9uIiwic291cmNlIiwidmFsdWUiLCJpbXBvcnRQYXRoV2l0aFF1ZXJ5U3RyaW5nIiwic2V0dGluZ3MiLCJpbXBvcnRQYXRoIiwicmVwbGFjZSIsInJlc29sdmVkUGF0aCIsInN1YnN0cmluZyIsImVuZHNXaXRoIiwiZXh0ZW5zaW9uUmVxdWlyZWQiLCJleHRlbnNpb25Gb3JiaWRkZW4iLCJyZXBvcnQiLCJub2RlIiwibWVzc2FnZSIsImNvbW1vbmpzIl0sIm1hcHBpbmdzIjoiYUFBQSw0Qjs7QUFFQSxzRDtBQUNBO0FBQ0Esa0U7QUFDQSxxQzs7QUFFQSxJQUFNQSxhQUFh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dGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgeyBpc0J1aWx0SW4sIGlzRXh0ZXJuYWxNb2R1bGUsIGlzU2NvcGVkLCBpc1Njb3BlZE1vZHVsZSB9IGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmNvbnN0IGVudW1WYWx1ZXMgPSB7IGVudW06IFsgJ2Fsd2F5cycsICdpZ25vcmVQYWNrYWdlcycsICduZXZlcicgXSB9O1xuY29uc3QgcGF0dGVyblByb3BlcnRpZXMgPSB7XG4gIHR5cGU6ICdvYmplY3QnLFxuICBwYXR0ZXJuUHJvcGVydGllczogeyAnLionOiBlbnVtVmFsdWVzIH0sXG59O1xuY29uc3QgcHJvcGVydGllcyA9IHtcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICAncGF0dGVybic6IHBhdHRlcm5Qcm9wZXJ0aWVzLFxuICAgICdpZ25vcmVQYWNrYWdlcyc6IHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBidWlsZFByb3BlcnRpZXMoY29udGV4dCkge1xuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBkZWZhdWx0Q29uZmlnOiAnbmV2ZXInLFxuICAgIHBhdHRlcm46IHt9LFxuICAgIGlnbm9yZVBhY2thZ2VzOiBmYWxzZSxcbiAgfTtcblxuICBjb250ZXh0Lm9wdGlvbnMuZm9yRWFjaChvYmogPT4ge1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHN0cmluZywgc2V0IGRlZmF1bHRDb25maWcgdG8gaXRzIHZhbHVlXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHQuZGVmYXVsdENvbmZpZyA9IG9iajtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIG5vdCB0aGUgbmV3IHN0cnVjdHVyZSwgdHJhbnNmZXIgYWxsIHByb3BzIHRvIHJlc3VsdC5wYXR0ZXJuXG4gICAgaWYgKG9iai5wYXR0ZXJuID09PSB1bmRlZmluZWQgJiYgb2JqLmlnbm9yZVBhY2thZ2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LnBhdHRlcm4sIG9iaik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgcGF0dGVybiBpcyBwcm92aWRlZCwgdHJhbnNmZXIgYWxsIHByb3BzXG4gICAgaWYgKG9iai5wYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LnBhdHRlcm4sIG9iai5wYXR0ZXJuKTtcbiAgICB9XG5cbiAgICAvLyBJZiBpZ25vcmVQYWNrYWdlcyBpcyBwcm92aWRlZCwgdHJhbnNmZXIgaXQgdG8gcmVzdWx0XG4gICAgaWYgKG9iai5pZ25vcmVQYWNrYWdlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQuaWdub3JlUGFja2FnZXMgPSBvYmouaWdub3JlUGFja2FnZXM7XG4gICAgfVxuICB9KTtcblxuICBpZiAocmVzdWx0LmRlZmF1bHRDb25maWcgPT09ICdpZ25vcmVQYWNrYWdlcycpIHtcbiAgICByZXN1bHQuZGVmYXVsdENvbmZpZyA9ICdhbHdheXMnO1xuICAgIHJlc3VsdC5pZ25vcmVQYWNrYWdlcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ2V4dGVuc2lvbnMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiB7XG4gICAgICBhbnlPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczogW2VudW1WYWx1ZXNdLFxuICAgICAgICAgIGFkZGl0aW9uYWxJdGVtczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICBlbnVtVmFsdWVzLFxuICAgICAgICAgICAgcHJvcGVydGllcyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFkZGl0aW9uYWxJdGVtczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiBbcHJvcGVydGllc10sXG4gICAgICAgICAgYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IFtwYXR0ZXJuUHJvcGVydGllc10sXG4gICAgICAgICAgYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAgIGVudW1WYWx1ZXMsXG4gICAgICAgICAgICBwYXR0ZXJuUHJvcGVydGllcyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFkZGl0aW9uYWxJdGVtczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiAoY29udGV4dCkge1xuXG4gICAgY29uc3QgcHJvcHMgPSBidWlsZFByb3BlcnRpZXMoY29udGV4dCk7XG5cbiAgICBmdW5jdGlvbiBnZXRNb2RpZmllcihleHRlbnNpb24pIHtcbiAgICAgIHJldHVybiBwcm9wcy5wYXR0ZXJuW2V4dGVuc2lvbl0gfHwgcHJvcHMuZGVmYXVsdENvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VzZU9mRXh0ZW5zaW9uUmVxdWlyZWQoZXh0ZW5zaW9uLCBpc1BhY2thZ2UpIHtcbiAgICAgIHJldHVybiBnZXRNb2RpZmllcihleHRlbnNpb24pID09PSAnYWx3YXlzJyAmJiAoIXByb3BzLmlnbm9yZVBhY2thZ2VzIHx8ICFpc1BhY2thZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXNlT2ZFeHRlbnNpb25Gb3JiaWRkZW4oZXh0ZW5zaW9uKSB7XG4gICAgICByZXR1cm4gZ2V0TW9kaWZpZXIoZXh0ZW5zaW9uKSA9PT0gJ25ldmVyJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1Jlc29sdmFibGVXaXRob3V0RXh0ZW5zaW9uKGZpbGUpIHtcbiAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhdGguZXh0bmFtZShmaWxlKTtcbiAgICAgIGNvbnN0IGZpbGVXaXRob3V0RXh0ZW5zaW9uID0gZmlsZS5zbGljZSgwLCAtZXh0ZW5zaW9uLmxlbmd0aCk7XG4gICAgICBjb25zdCByZXNvbHZlZEZpbGVXaXRob3V0RXh0ZW5zaW9uID0gcmVzb2x2ZShmaWxlV2l0aG91dEV4dGVuc2lvbiwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiByZXNvbHZlZEZpbGVXaXRob3V0RXh0ZW5zaW9uID09PSByZXNvbHZlKGZpbGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRXh0ZXJuYWxSb290TW9kdWxlKGZpbGUpIHtcbiAgICAgIGNvbnN0IHNsYXNoQ291bnQgPSBmaWxlLnNwbGl0KCcvJykubGVuZ3RoIC0gMTtcblxuICAgICAgaWYgKHNsYXNoQ291bnQgPT09IDApICByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChpc1Njb3BlZE1vZHVsZShmaWxlKSAmJiBzbGFzaENvdW50IDw9IDEpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrRmlsZUV4dGVuc2lvbihzb3VyY2UpIHtcbiAgICAgIC8vIGJhaWwgaWYgdGhlIGRlY2xhcmF0aW9uIGRvZXNuJ3QgaGF2ZSBhIHNvdXJjZSwgZS5nLiBcImV4cG9ydCB7IGZvbyB9O1wiLCBvciBpZiBpdCdzIG9ubHkgcGFydGlhbGx5IHR5cGVkIGxpa2UgaW4gYW4gZWRpdG9yXG4gICAgICBpZiAoIXNvdXJjZSB8fCAhc291cmNlLnZhbHVlKSByZXR1cm47XG4gICAgICBcbiAgICAgIGNvbnN0IGltcG9ydFBhdGhXaXRoUXVlcnlTdHJpbmcgPSBzb3VyY2UudmFsdWU7XG5cbiAgICAgIC8vIGRvbid0IGVuZm9yY2UgYW55dGhpbmcgb24gYnVpbHRpbnNcbiAgICAgIGlmIChpc0J1aWx0SW4oaW1wb3J0UGF0aFdpdGhRdWVyeVN0cmluZywgY29udGV4dC5zZXR0aW5ncykpIHJldHVybjtcblxuICAgICAgY29uc3QgaW1wb3J0UGF0aCA9IGltcG9ydFBhdGhXaXRoUXVlcnlTdHJpbmcucmVwbGFjZSgvXFw/KC4qKSQvLCAnJyk7XG5cbiAgICAgIC8vIGRvbid0IGVuZm9yY2UgaW4gcm9vdCBleHRlcm5hbCBwYWNrYWdlcyBhcyB0aGV5IG1heSBoYXZlIG5hbWVzIHdpdGggYC5qc2AuXG4gICAgICAvLyBMaWtlIGBpbXBvcnQgRGVjaW1hbCBmcm9tIGRlY2ltYWwuanNgKVxuICAgICAgaWYgKGlzRXh0ZXJuYWxSb290TW9kdWxlKGltcG9ydFBhdGgpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoaW1wb3J0UGF0aCwgY29udGV4dCk7XG5cbiAgICAgIC8vIGdldCBleHRlbnNpb24gZnJvbSByZXNvbHZlZCBwYXRoLCBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIGZvciB1bnJlc29sdmVkLCB1c2Ugc291cmNlIHZhbHVlLlxuICAgICAgY29uc3QgZXh0ZW5zaW9uID0gcGF0aC5leHRuYW1lKHJlc29sdmVkUGF0aCB8fCBpbXBvcnRQYXRoKS5zdWJzdHJpbmcoMSk7XG5cbiAgICAgIC8vIGRldGVybWluZSBpZiB0aGlzIGlzIGEgbW9kdWxlXG4gICAgICBjb25zdCBpc1BhY2thZ2UgPSBpc0V4dGVybmFsTW9kdWxlKFxuICAgICAgICBpbXBvcnRQYXRoLFxuICAgICAgICBjb250ZXh0LnNldHRpbmdzLFxuICAgICAgICByZXNvbHZlKGltcG9ydFBhdGgsIGNvbnRleHQpLFxuICAgICAgICBjb250ZXh0XG4gICAgICApIHx8IGlzU2NvcGVkKGltcG9ydFBhdGgpO1xuXG4gICAgICBpZiAoIWV4dGVuc2lvbiB8fCAhaW1wb3J0UGF0aC5lbmRzV2l0aChgLiR7ZXh0ZW5zaW9ufWApKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvblJlcXVpcmVkID0gaXNVc2VPZkV4dGVuc2lvblJlcXVpcmVkKGV4dGVuc2lvbiwgaXNQYWNrYWdlKTtcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uRm9yYmlkZGVuID0gaXNVc2VPZkV4dGVuc2lvbkZvcmJpZGRlbihleHRlbnNpb24pO1xuICAgICAgICBpZiAoZXh0ZW5zaW9uUmVxdWlyZWQgJiYgIWV4dGVuc2lvbkZvcmJpZGRlbikge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHNvdXJjZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgIGBNaXNzaW5nIGZpbGUgZXh0ZW5zaW9uICR7ZXh0ZW5zaW9uID8gYFwiJHtleHRlbnNpb259XCIgYCA6ICcnfWZvciBcIiR7aW1wb3J0UGF0aFdpdGhRdWVyeVN0cmluZ31cImAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICAgIGlmIChpc1VzZU9mRXh0ZW5zaW9uRm9yYmlkZGVuKGV4dGVuc2lvbikgJiYgaXNSZXNvbHZhYmxlV2l0aG91dEV4dGVuc2lvbihpbXBvcnRQYXRoKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IHNvdXJjZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHVzZSBvZiBmaWxlIGV4dGVuc2lvbiBcIiR7ZXh0ZW5zaW9ufVwiIGZvciBcIiR7aW1wb3J0UGF0aFdpdGhRdWVyeVN0cmluZ31cImAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcihjaGVja0ZpbGVFeHRlbnNpb24sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9leHRlbnNpb25zLmpzIl0sIm5hbWVzIjpbImVudW1WYWx1ZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsInR5cGUiLCJwcm9wZXJ0aWVzIiwiYnVpbGRQcm9wZXJ0aWVzIiwiY29udGV4dCIsInJlc3VsdCIsImRlZmF1bHRDb25maWciLCJwYXR0ZXJuIiwiaWdub3JlUGFja2FnZXMiLCJvcHRpb25zIiwiZm9yRWFjaCIsIm9iaiIsInVuZGVmaW5lZCIsIk9iamVjdCIsImFzc2lnbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImFueU9mIiwiaXRlbXMiLCJhZGRpdGlvbmFsSXRlbXMiLCJjcmVhdGUiLCJwcm9wcyIsImdldE1vZGlmaWVyIiwiZXh0ZW5zaW9uIiwiaXNVc2VPZkV4dGVuc2lvblJlcXVpcmVkIiwiaXNQYWNrYWdlIiwiaXNVc2VPZkV4dGVuc2lvbkZvcmJpZGRlbiIsImlzUmVzb2x2YWJsZVdpdGhvdXRFeHRlbnNpb24iLCJmaWxlIiwicGF0aCIsImV4dG5hbWUiLCJmaWxlV2l0aG91dEV4dGVuc2lvbiIsInNsaWNlIiwibGVuZ3RoIiwicmVzb2x2ZWRGaWxlV2l0aG91dEV4dGVuc2lvbiIsImlzRXh0ZXJuYWxSb290TW9kdWxlIiwic2xhc2hDb3VudCIsInNwbGl0IiwiY2hlY2tGaWxlRXh0ZW5zaW9uIiwic291cmNlIiwidmFsdWUiLCJpbXBvcnRQYXRoV2l0aFF1ZXJ5U3RyaW5nIiwic2V0dGluZ3MiLCJpbXBvcnRQYXRoIiwicmVwbGFjZSIsInJlc29sdmVkUGF0aCIsInN1YnN0cmluZyIsImVuZHNXaXRoIiwiZXh0ZW5zaW9uUmVxdWlyZWQiLCJleHRlbnNpb25Gb3JiaWRkZW4iLCJyZXBvcnQiLCJub2RlIiwibWVzc2FnZSIsImNvbW1vbmpzIl0sIm1hcHBpbmdzIjoiYUFBQSw0Qjs7QUFFQSxzRDtBQUNBO0FBQ0Esa0U7QUFDQSxxQzs7QUFFQSxJQUFNQSxhQUFh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b20gJ3BhdGgnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IHsgaXNCdWlsdEluLCBpc0V4dGVybmFsTW9kdWxlLCBpc1Njb3BlZCwgaXNTY29wZWRNb2R1bGUgfSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBlbnVtVmFsdWVzID0geyBlbnVtOiBbICdhbHdheXMnLCAnaWdub3JlUGFja2FnZXMnLCAnbmV2ZXInIF0gfTtcbmNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzID0ge1xuICB0eXBlOiAnb2JqZWN0JyxcbiAgcGF0dGVyblByb3BlcnRpZXM6IHsgJy4qJzogZW51bVZhbHVlcyB9LFxufTtcbmNvbnN0IHByb3BlcnRpZXMgPSB7XG4gIHR5cGU6ICdvYmplY3QnLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgJ3BhdHRlcm4nOiBwYXR0ZXJuUHJvcGVydGllcyxcbiAgICAnaWdub3JlUGFja2FnZXMnOiB7IHR5cGU6ICdib29sZWFuJyB9LFxuICB9LFxufTtcblxuZnVuY3Rpb24gYnVpbGRQcm9wZXJ0aWVzKGNvbnRleHQpIHtcblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgZGVmYXVsdENvbmZpZzogJ25ldmVyJyxcbiAgICBwYXR0ZXJuOiB7fSxcbiAgICBpZ25vcmVQYWNrYWdlczogZmFsc2UsXG4gIH07XG5cbiAgY29udGV4dC5vcHRpb25zLmZvckVhY2gob2JqID0+IHtcblxuICAgIC8vIElmIHRoaXMgaXMgYSBzdHJpbmcsIHNldCBkZWZhdWx0Q29uZmlnIHRvIGl0cyB2YWx1ZVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgcmVzdWx0LmRlZmF1bHRDb25maWcgPSBvYmo7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIG5ldyBzdHJ1Y3R1cmUsIHRyYW5zZmVyIGFsbCBwcm9wcyB0byByZXN1bHQucGF0dGVyblxuICAgIGlmIChvYmoucGF0dGVybiA9PT0gdW5kZWZpbmVkICYmIG9iai5pZ25vcmVQYWNrYWdlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlc3VsdC5wYXR0ZXJuLCBvYmopO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHBhdHRlcm4gaXMgcHJvdmlkZWQsIHRyYW5zZmVyIGFsbCBwcm9wc1xuICAgIGlmIChvYmoucGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlc3VsdC5wYXR0ZXJuLCBvYmoucGF0dGVybik7XG4gICAgfVxuXG4gICAgLy8gSWYgaWdub3JlUGFja2FnZXMgaXMgcHJvdmlkZWQsIHRyYW5zZmVyIGl0IHRvIHJlc3VsdFxuICAgIGlmIChvYmouaWdub3JlUGFja2FnZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0Lmlnbm9yZVBhY2thZ2VzID0gb2JqLmlnbm9yZVBhY2thZ2VzO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHJlc3VsdC5kZWZhdWx0Q29uZmlnID09PSAnaWdub3JlUGFja2FnZXMnKSB7XG4gICAgcmVzdWx0LmRlZmF1bHRDb25maWcgPSAnYWx3YXlzJztcbiAgICByZXN1bHQuaWdub3JlUGFja2FnZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCdleHRlbnNpb25zJyksXG4gICAgfSxcblxuICAgIHNjaGVtYToge1xuICAgICAgYW55T2Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IFtlbnVtVmFsdWVzXSxcbiAgICAgICAgICBhZGRpdGlvbmFsSXRlbXM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczogW1xuICAgICAgICAgICAgZW51bVZhbHVlcyxcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhZGRpdGlvbmFsSXRlbXM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczogW3Byb3BlcnRpZXNdLFxuICAgICAgICAgIGFkZGl0aW9uYWxJdGVtczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiBbcGF0dGVyblByb3BlcnRpZXNdLFxuICAgICAgICAgIGFkZGl0aW9uYWxJdGVtczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgICBlbnVtVmFsdWVzLFxuICAgICAgICAgICAgcGF0dGVyblByb3BlcnRpZXMsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhZGRpdGlvbmFsSXRlbXM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG5cbiAgICBjb25zdCBwcm9wcyA9IGJ1aWxkUHJvcGVydGllcyhjb250ZXh0KTtcblxuICAgIGZ1bmN0aW9uIGdldE1vZGlmaWVyKGV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIHByb3BzLnBhdHRlcm5bZXh0ZW5zaW9uXSB8fCBwcm9wcy5kZWZhdWx0Q29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXNlT2ZFeHRlbnNpb25SZXF1aXJlZChleHRlbnNpb24sIGlzUGFja2FnZSkge1xuICAgICAgcmV0dXJuIGdldE1vZGlmaWVyKGV4dGVuc2lvbikgPT09ICdhbHdheXMnICYmICghcHJvcHMuaWdub3JlUGFja2FnZXMgfHwgIWlzUGFja2FnZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVc2VPZkV4dGVuc2lvbkZvcmJpZGRlbihleHRlbnNpb24pIHtcbiAgICAgIHJldHVybiBnZXRNb2RpZmllcihleHRlbnNpb24pID09PSAnbmV2ZXInO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzUmVzb2x2YWJsZVdpdGhvdXRFeHRlbnNpb24oZmlsZSkge1xuICAgICAgY29uc3QgZXh0ZW5zaW9uID0gcGF0aC5leHRuYW1lKGZpbGUpO1xuICAgICAgY29uc3QgZmlsZVdpdGhvdXRFeHRlbnNpb24gPSBmaWxlLnNsaWNlKDAsIC1leHRlbnNpb24ubGVuZ3RoKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkRmlsZVdpdGhvdXRFeHRlbnNpb24gPSByZXNvbHZlKGZpbGVXaXRob3V0RXh0ZW5zaW9uLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIHJlc29sdmVkRmlsZVdpdGhvdXRFeHRlbnNpb24gPT09IHJlc29sdmUoZmlsZSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNFeHRlcm5hbFJvb3RNb2R1bGUoZmlsZSkge1xuICAgICAgY29uc3Qgc2xhc2hDb3VudCA9IGZpbGUuc3BsaXQoJy8nKS5sZW5ndGggLSAxO1xuXG4gICAgICBpZiAoc2xhc2hDb3VudCA9PT0gMCkgIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGlzU2NvcGVkTW9kdWxlKGZpbGUpICYmIHNsYXNoQ291bnQgPD0gMSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tGaWxlRXh0ZW5zaW9uKHNvdXJjZSkge1xuICAgICAgLy8gYmFpbCBpZiB0aGUgZGVjbGFyYXRpb24gZG9lc24ndCBoYXZlIGEgc291cmNlLCBlLmcuIFwiZXhwb3J0IHsgZm9vIH07XCIsIG9yIGlmIGl0J3Mgb25seSBwYXJ0aWFsbHkgdHlwZWQgbGlrZSBpbiBhbiBlZGl0b3JcbiAgICAgIGlmICghc291cmNlIHx8ICFzb3VyY2UudmFsdWUpIHJldHVybjtcbiAgICAgIFxuICAgICAgY29uc3QgaW1wb3J0UGF0aFdpdGhRdWVyeVN0cmluZyA9IHNvdXJjZS52YWx1ZTtcblxuICAgICAgLy8gZG9uJ3QgZW5mb3JjZSBhbnl0aGluZyBvbiBidWlsdGluc1xuICAgICAgaWYgKGlzQnVpbHRJbihpbXBvcnRQYXRoV2l0aFF1ZXJ5U3RyaW5nLCBjb250ZXh0LnNldHRpbmdzKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpbXBvcnRQYXRoID0gaW1wb3J0UGF0aFdpdGhRdWVyeVN0cmluZy5yZXBsYWNlKC9cXD8oLiopJC8sICcnKTtcblxuICAgICAgLy8gZG9uJ3QgZW5mb3JjZSBpbiByb290IGV4dGVybmFsIHBhY2thZ2VzIGFzIHRoZXkgbWF5IGhhdmUgbmFtZXMgd2l0aCBgLmpzYC5cbiAgICAgIC8vIExpa2UgYGltcG9ydCBEZWNpbWFsIGZyb20gZGVjaW1hbC5qc2ApXG4gICAgICBpZiAoaXNFeHRlcm5hbFJvb3RNb2R1bGUoaW1wb3J0UGF0aCkpIHJldHVybjtcblxuICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShpbXBvcnRQYXRoLCBjb250ZXh0KTtcblxuICAgICAgLy8gZ2V0IGV4dGVuc2lvbiBmcm9tIHJlc29sdmVkIHBhdGgsIGlmIHBvc3NpYmxlLlxuICAgICAgLy8gZm9yIHVucmVzb2x2ZWQsIHVzZSBzb3VyY2UgdmFsdWUuXG4gICAgICBjb25zdCBleHRlbnNpb24gPSBwYXRoLmV4dG5hbWUocmVzb2x2ZWRQYXRoIHx8IGltcG9ydFBhdGgpLnN1YnN0cmluZygxKTtcblxuICAgICAgLy8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBtb2R1bGVcbiAgICAgIGNvbnN0IGlzUGFja2FnZSA9IGlzRXh0ZXJuYWxNb2R1bGUoXG4gICAgICAgIGltcG9ydFBhdGgsXG4gICAgICAgIGNvbnRleHQuc2V0dGluZ3MsXG4gICAgICAgIHJlc29sdmUoaW1wb3J0UGF0aCwgY29udGV4dCksXG4gICAgICAgIGNvbnRleHRcbiAgICAgICkgfHwgaXNTY29wZWQoaW1wb3J0UGF0aCk7XG5cbiAgICAgIGlmICghZXh0ZW5zaW9uIHx8ICFpbXBvcnRQYXRoLmVuZHNXaXRoKGAuJHtleHRlbnNpb259YCkpIHtcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uUmVxdWlyZWQgPSBpc1VzZU9mRXh0ZW5zaW9uUmVxdWlyZWQoZXh0ZW5zaW9uLCBpc1BhY2thZ2UpO1xuICAgICAgICBjb25zdCBleHRlbnNpb25Gb3JiaWRkZW4gPSBpc1VzZU9mRXh0ZW5zaW9uRm9yYmlkZGVuKGV4dGVuc2lvbik7XG4gICAgICAgIGlmIChleHRlbnNpb25SZXF1aXJlZCAmJiAhZXh0ZW5zaW9uRm9yYmlkZGVuKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZTogc291cmNlLFxuICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICAgYE1pc3NpbmcgZmlsZSBleHRlbnNpb24gJHtleHRlbnNpb24gPyBgXCIke2V4dGVuc2lvbn1cIiBgIDogJyd9Zm9yIFwiJHtpbXBvcnRQYXRoV2l0aFF1ZXJ5U3RyaW5nfVwiYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChleHRlbnNpb24pIHtcbiAgICAgICAgaWYgKGlzVXNlT2ZFeHRlbnNpb25Gb3JiaWRkZW4oZXh0ZW5zaW9uKSAmJiBpc1Jlc29sdmFibGVXaXRob3V0RXh0ZW5zaW9uKGltcG9ydFBhdGgpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZTogc291cmNlLFxuICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdXNlIG9mIGZpbGUgZXh0ZW5zaW9uIFwiJHtleHRlbnNpb259XCIgZm9yIFwiJHtpbXBvcnRQYXRoV2l0aFF1ZXJ5U3RyaW5nfVwiYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKGNoZWNrRmlsZUV4dGVuc2lvbiwgeyBjb21tb25qczogdHJ1ZSB9KTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/first.js b/node_modules/eslint-plugin-import/lib/rules/first.js
index 4a0469b..422e140 100644
--- a/node_modules/eslint-plugin-import/lib/rules/first.js
+++ b/node_modules/eslint-plugin-import/lib/rules/first.js
@@ -135,4 +135,4 @@
}return Program;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9maXJzdC5qcyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRWYWx1ZSIsIm5vZGUiLCJ0eXBlIiwic291cmNlIiwidmFsdWUiLCJtb2R1bGVSZWZlcmVuY2UiLCJleHByZXNzaW9uIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJpc1Bvc3NpYmxlRGlyZWN0aXZlIiwibiIsImJvZHkiLCJhYnNvbHV0ZUZpcnN0Iiwib3B0aW9ucyIsIm1lc3NhZ2UiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsIm9yaWdpblNvdXJjZUNvZGUiLCJnZXRUZXh0Iiwibm9uSW1wb3J0Q291bnQiLCJhbnlFeHByZXNzaW9ucyIsImFueVJlbGF0aXZlIiwibGFzdExlZ2FsSW1wIiwiZXJyb3JJbmZvcyIsInNob3VsZFNvcnQiLCJsYXN0U29ydE5vZGVzSW5kZXgiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0ZXN0IiwicmVwb3J0IiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJ2YXJpYWJsZSIsInJlZmVyZW5jZXMiLCJsZW5ndGgiLCJyZWZlcmVuY2UiLCJpZGVudGlmaWVyIiwicmFuZ2UiLCJwdXNoIiwiZXJyb3JJbmZvIiwiaW5mb3MiLCJmaXgiLCJmaXhlciIsImluc2VydFRleHRBZnRlciIsInNvcnROb2RlcyIsInNsaWNlIiwicmVtb3ZlRml4ZXJzIiwibWFwIiwiX2Vycm9ySW5mbyIsInJlbW92ZVJhbmdlIiwiaW5zZXJ0U291cmNlQ29kZSIsIm5vZGVTb3VyY2VDb2RlIiwiU3RyaW5nIiwicHJvdG90eXBlIiwiYXBwbHkiLCJqb2luIiwiaW5zZXJ0Rml4ZXIiLCJyZXBsYWNlU291cmNlQ29kZSIsInRyaW0iLCJtYXRjaCIsImluc2VydFRleHRCZWZvcmUiLCJmaXhlcnMiLCJjb25jYXQiLCJjb21wdXRlZEZpeGVyIiwiaSIsInRleHQiLCJyZXBsYWNlVGV4dFJhbmdlIl0sIm1hcHBpbmdzIjoiYUFBQSxxQzs7QUFFQSxTQUFTQSxjQUFULENBQXdCQyxJQUF4QixFQUE4QjtBQUM1QixTQUFPQSxLQUFLQyxJQUFMLEtBQWMsbUJBQWQ7QUFDSEQsT0FBS0UsTUFBTCxDQUFZQyxLQURUO0FBRUhILE9BQUtJLGVBQUwsQ0FBcUJDLFVBQXJCLENBQWdDRixLQUZwQztBQUdEOztBQUVERyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSlAsVUFBTSxZQURGO0FBRUpRLFVBQU07QUFDSkMsV0FBSywwQkFBUSxPQUFSLENBREQsRUFGRjs7QUFLSkMsYUFBUyxNQUxMO0FBTUpDLFlBQVE7QUFDTjtBQUNFWCxZQUFNLFFBRFI7QUFFRSxjQUFNLENBQUMsZ0JBQUQsRUFBbUIsd0JBQW5CLENBRlIsRUFETSxDQU5KLEVBRFM7Ozs7O0FBZWZZLHVCQUFRLGdCQUFVQyxPQUFWLEVBQW1CO0FBQ3pCLGVBQVNDLG1CQUFULENBQThCZixJQUE5QixFQUFvQztBQUNsQyxlQUFPQSxLQUFLQyxJQUFMLEtBQWMscUJBQWQ7QUFDTEQsYUFBS0ssVUFBTCxDQUFnQkosSUFBaEIsS0FBeUIsU0FEcEI7QUFFTCxlQUFPRCxLQUFLSyxVQUFMLENBQWdCRixLQUF2QixLQUFpQyxRQUZuQztBQUdEOztBQUVELGFBQU87QUFDTCxnQ0FBVyxpQkFBVWEsQ0FBVixFQUFhO0FBQ3RCLGdCQUFNQyxPQUFPRCxFQUFFQyxJQUFmO0FBQ0EsZ0JBQU1DLGdCQUFnQkosUUFBUUssT0FBUixDQUFnQixDQUFoQixNQUF1QixnQkFBN0M7QUFDQSxnQkFBTUMsVUFBVSwyQ0FBaEI7QUFDQSxnQkFBTUMsYUFBYVAsUUFBUVEsYUFBUixFQUFuQjtBQUNBLGdCQUFNQyxtQkFBbUJGLFdBQVdHLE9BQVgsRUFBekI7QUFDQSxnQkFBSUMsaUJBQWlCLENBQXJCO0FBQ0EsZ0JBQUlDLGlCQUFpQixLQUFyQjtBQUNBLGdCQUFJQyxjQUFjLEtBQWxCO0FBQ0EsZ0JBQUlDLGVBQWUsSUFBbkI7QUFDQSxnQkFBTUMsYUFBYSxFQUFuQjtBQUNBLGdCQUFJQyxhQUFhLElBQWpCO0FBQ0EsZ0JBQUlDLHFCQUFxQixDQUF6QjtBQUNBZCxpQkFBS2UsT0FBTCxDQUFhLFVBQVVoQyxJQUFWLEVBQWdCaUMsS0FBaEIsRUFBdUI7QUFDbEMsa0JBQUksQ0FBQ1AsY0FBRCxJQUFtQlgsb0JBQW9CZixJQUFwQixDQUF2QixFQUFrRDtBQUNoRDtBQUNEOztBQUVEMEIsK0JBQWlCLElBQWpCOztBQUVBLGtCQUFJMUIsS0FBS0MsSUFBTCxLQUFjLG1CQUFkLElBQXFDRCxLQUFLQyxJQUFMLEtBQWMsMkJBQXZELEVBQW9GO0FBQ2xGLG9CQUFJaUIsYUFBSixFQUFtQjtBQUNqQixzQkFBSSxNQUFNZ0IsSUFBTixDQUFXbkMsZUFBZUMsSUFBZixDQUFYLENBQUosRUFBc0M7QUFDcEMyQixrQ0FBYyxJQUFkO0FBQ0QsbUJBRkQsTUFFTyxJQUFJQSxXQUFKLEVBQWlCO0FBQ3RCYiw0QkFBUXFCLE1BQVIsQ0FBZTtBQUNibkMsNEJBQU1BLEtBQUtDLElBQUwsS0FBYyxtQkFBZCxHQUFvQ0QsS0FBS0UsTUFBekMsR0FBa0RGLEtBQUtJLGVBRGhEO0FBRWJnQiwrQkFBUyx1REFGSSxFQUFmOztBQUlEO0FBQ0Y7QUFDRCxvQkFBSUssaUJBQWlCLENBQXJCLEVBQXdCO0FBQ3RCLHlDQUF1QlgsUUFBUXNCLG9CQUFSLENBQTZCcEMsSUFBN0IsQ0FBdkIsOEhBQTJELEtBQWhEcUMsUUFBZ0Q7QUFDekQsMEJBQUksQ0FBQ1AsVUFBTCxFQUFpQjtBQUNqQiwwQkFBTVEsYUFBYUQsU0FBU0MsVUFBNUI7QUFDQSwwQkFBSUEsV0FBV0MsTUFBZixFQUF1QjtBQUNyQixnREFBd0JELFVBQXhCLG1JQUFvQyxLQUF6QkUsU0FBeUI7QUFDbEMsZ0NBQUlBLFVBQVVDLFVBQVYsQ0FBcUJDLEtBQXJCLENBQTJCLENBQTNCLElBQWdDMUMsS0FBSzBDLEtBQUwsQ0FBVyxDQUFYLENBQXBDLEVBQW1EO0FBQ2pEWiwyQ0FBYSxLQUFiO0FBQ0E7QUFDRDtBQUNGLDJCQU5vQjtBQU90QjtBQUNGLHFCQVpxQjtBQWF0QkEsaUNBQWVDLHFCQUFxQkYsV0FBV1UsTUFBL0M7QUFDQVYsNkJBQVdjLElBQVgsQ0FBZ0I7QUFDZDNDLDhCQURjO0FBRWQwQywyQkFBTyxDQUFDekIsS0FBS2dCLFFBQVEsQ0FBYixFQUFnQlMsS0FBaEIsQ0FBc0IsQ0FBdEIsQ0FBRCxFQUEyQjFDLEtBQUswQyxLQUFMLENBQVcsQ0FBWCxDQUEzQixDQUZPLEVBQWhCOztBQUlELGlCQWxCRCxNQWtCTztBQUNMZCxpQ0FBZTVCLElBQWY7QUFDRDtBQUNGLGVBaENELE1BZ0NPO0FBQ0x5QjtBQUNEO0FBQ0YsYUExQ0Q7QUEyQ0EsZ0JBQUksQ0FBQ0ksV0FBV1UsTUFBaEIsRUFBd0I7QUFDeEJWLHVCQUFXRyxPQUFYLENBQW1CLFVBQVVZLFNBQVYsRUFBcUJYLEtBQXJCLEVBQTRCO0FBQzdDLGtCQUFNakMsT0FBTzRDLFVBQVU1QyxJQUF2QjtBQUNBLGtCQUFNNkMsUUFBUTtBQUNaN0MsMEJBRFk7QUFFWm9CLGdDQUZZLEVBQWQ7O0FBSUEsa0JBQUlhLFFBQVFGLGtCQUFaLEVBQWdDO0FBQzlCYyxzQkFBTUMsR0FBTixHQUFZLFVBQVVDLEtBQVYsRUFBaUI7QUFDM0IseUJBQU9BLE1BQU1DLGVBQU4sQ0FBc0JoRCxJQUF0QixFQUE0QixFQUE1QixDQUFQO0FBQ0QsaUJBRkQ7QUFHRCxlQUpELE1BSU8sSUFBSWlDLFVBQVVGLGtCQUFkLEVBQWtDO0FBQ3ZDLG9CQUFNa0IsWUFBWXBCLFdBQVdxQixLQUFYLENBQWlCLENBQWpCLEVBQW9CbkIscUJBQXFCLENBQXpDLENBQWxCO0FBQ0FjLHNCQUFNQyxHQUFOLEdBQVksVUFBVUMsS0FBVixFQUFpQjtBQUMzQixzQkFBTUksZUFBZUYsVUFBVUcsR0FBVixDQUFjLFVBQVVDLFVBQVYsRUFBc0I7QUFDdkQsMkJBQU9OLE1BQU1PLFdBQU4sQ0FBa0JELFdBQVdYLEtBQTdCLENBQVA7QUFDRCxtQkFGb0IsQ0FBckI7QUFHQSxzQkFBTUEsUUFBUSxDQUFDLENBQUQsRUFBSVMsYUFBYUEsYUFBYVosTUFBYixHQUFzQixDQUFuQyxFQUFzQ0csS0FBdEMsQ0FBNEMsQ0FBNUMsQ0FBSixDQUFkO0FBQ0Esc0JBQUlhLG1CQUFtQk4sVUFBVUcsR0FBVixDQUFjLFVBQVVDLFVBQVYsRUFBc0I7QUFDekQsd0JBQU1HLGlCQUFpQkMsT0FBT0MsU0FBUCxDQUFpQlIsS0FBakIsQ0FBdUJTLEtBQXZCO0FBQ3JCcEMsb0NBRHFCLEVBQ0g4QixXQUFXWCxLQURSLENBQXZCOztBQUdBLHdCQUFJLEtBQUtSLElBQUwsQ0FBVXNCLGVBQWUsQ0FBZixDQUFWLENBQUosRUFBa0M7QUFDaEMsNkJBQU8sT0FBT0EsY0FBZDtBQUNEO0FBQ0QsMkJBQU9BLGNBQVA7QUFDRCxtQkFSc0IsRUFRcEJJLElBUm9CLENBUWYsRUFSZSxDQUF2QjtBQVNBLHNCQUFJQyxjQUFjLElBQWxCO0FBQ0Esc0JBQUlDLG9CQUFvQixFQUF4QjtBQUNBLHNCQUFJLENBQUNsQyxZQUFMLEVBQW1CO0FBQ2pCMkI7QUFDSUEscUNBQWlCUSxJQUFqQixLQUEwQlIsaUJBQWlCUyxLQUFqQixDQUF1QixRQUF2QixFQUFpQyxDQUFqQyxDQUQ5QjtBQUVEO0FBQ0RILGdDQUFjakM7QUFDWm1CLHdCQUFNQyxlQUFOLENBQXNCcEIsWUFBdEIsRUFBb0MyQixnQkFBcEMsQ0FEWTtBQUVaUix3QkFBTWtCLGdCQUFOLENBQXVCaEQsS0FBSyxDQUFMLENBQXZCLEVBQWdDc0MsZ0JBQWhDLENBRkY7QUFHQSxzQkFBTVcsU0FBUyxDQUFDTCxXQUFELEVBQWNNLE1BQWQsQ0FBcUJoQixZQUFyQixDQUFmO0FBQ0FlLHlCQUFPbEMsT0FBUCxDQUFlLFVBQVVvQyxhQUFWLEVBQXlCQyxDQUF6QixFQUE0QjtBQUN6Q1AseUNBQXNCdkMsaUJBQWlCMkIsS0FBakI7QUFDcEJnQiwyQkFBT0csSUFBSSxDQUFYLElBQWdCSCxPQUFPRyxJQUFJLENBQVgsRUFBYzNCLEtBQWQsQ0FBb0IsQ0FBcEIsQ0FBaEIsR0FBeUMsQ0FEckIsRUFDd0IwQixjQUFjMUIsS0FBZCxDQUFvQixDQUFwQixDQUR4QjtBQUVsQjBCLGtDQUFjRSxJQUZsQjtBQUdELG1CQUpEO0FBS0EseUJBQU92QixNQUFNd0IsZ0JBQU4sQ0FBdUI3QixLQUF2QixFQUE4Qm9CLGlCQUE5QixDQUFQO0FBQ0QsaUJBOUJEO0FBK0JEO0FBQ0RoRCxzQkFBUXFCLE1BQVIsQ0FBZVUsS0FBZjtBQUNELGFBN0NEO0FBOENELFdBdkdELGtCQURLLEVBQVA7O0FBMEdELEtBakhELGlCQWZlLEVBQWpCIiwiZmlsZSI6ImZpcnN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmZ1bmN0aW9uIGdldEltcG9ydFZhbHVlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0ltcG9ydERlY2xhcmF0aW9uJ1xuICAgID8gbm9kZS5zb3VyY2UudmFsdWVcbiAgICA6IG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb24udmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnZmlyc3QnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGVudW06IFsnYWJzb2x1dGUtZmlyc3QnLCAnZGlzYWJsZS1hYnNvbHV0ZS1maXJzdCddLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBpc1Bvc3NpYmxlRGlyZWN0aXZlIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS50eXBlID09PSAnRXhwcmVzc2lvblN0YXRlbWVudCcgJiZcbiAgICAgICAgbm9kZS5leHByZXNzaW9uLnR5cGUgPT09ICdMaXRlcmFsJyAmJlxuICAgICAgICB0eXBlb2Ygbm9kZS5leHByZXNzaW9uLnZhbHVlID09PSAnc3RyaW5nJztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW0nOiBmdW5jdGlvbiAobikge1xuICAgICAgICBjb25zdCBib2R5ID0gbi5ib2R5O1xuICAgICAgICBjb25zdCBhYnNvbHV0ZUZpcnN0ID0gY29udGV4dC5vcHRpb25zWzBdID09PSAnYWJzb2x1dGUtZmlyc3QnO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0ltcG9ydCBpbiBib2R5IG9mIG1vZHVsZTsgcmVvcmRlciB0byB0b3AuJztcbiAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpO1xuICAgICAgICBjb25zdCBvcmlnaW5Tb3VyY2VDb2RlID0gc291cmNlQ29kZS5nZXRUZXh0KCk7XG4gICAgICAgIGxldCBub25JbXBvcnRDb3VudCA9IDA7XG4gICAgICAgIGxldCBhbnlFeHByZXNzaW9ucyA9IGZhbHNlO1xuICAgICAgICBsZXQgYW55UmVsYXRpdmUgPSBmYWxzZTtcbiAgICAgICAgbGV0IGxhc3RMZWdhbEltcCA9IG51bGw7XG4gICAgICAgIGNvbnN0IGVycm9ySW5mb3MgPSBbXTtcbiAgICAgICAgbGV0IHNob3VsZFNvcnQgPSB0cnVlO1xuICAgICAgICBsZXQgbGFzdFNvcnROb2Rlc0luZGV4ID0gMDtcbiAgICAgICAgYm9keS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICAgIGlmICghYW55RXhwcmVzc2lvbnMgJiYgaXNQb3NzaWJsZURpcmVjdGl2ZShub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFueUV4cHJlc3Npb25zID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgfHwgbm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChhYnNvbHV0ZUZpcnN0KSB7XG4gICAgICAgICAgICAgIGlmICgvXlxcLi8udGVzdChnZXRJbXBvcnRWYWx1ZShub2RlKSkpIHtcbiAgICAgICAgICAgICAgICBhbnlSZWxhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW55UmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgICAgICBub2RlOiBub2RlLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgPyBub2RlLnNvdXJjZSA6IG5vZGUubW9kdWxlUmVmZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Fic29sdXRlIGltcG9ydHMgc2hvdWxkIGNvbWUgYmVmb3JlIHJlbGF0aXZlIGltcG9ydHMuJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vbkltcG9ydENvdW50ID4gMCkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIGNvbnRleHQuZ2V0RGVjbGFyZWRWYXJpYWJsZXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFNvcnQpIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB2YXJpYWJsZS5yZWZlcmVuY2VzO1xuICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCByZWZlcmVuY2Ugb2YgcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlLmlkZW50aWZpZXIucmFuZ2VbMF0gPCBub2RlLnJhbmdlWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2hvdWxkU29ydCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHNob3VsZFNvcnQgJiYgKGxhc3RTb3J0Tm9kZXNJbmRleCA9IGVycm9ySW5mb3MubGVuZ3RoKTtcbiAgICAgICAgICAgICAgZXJyb3JJbmZvcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgIHJhbmdlOiBbYm9keVtpbmRleCAtIDFdLnJhbmdlWzFdLCBub2RlLnJhbmdlWzFdXSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsYXN0TGVnYWxJbXAgPSBub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub25JbXBvcnRDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghZXJyb3JJbmZvcy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZXJyb3JJbmZvcy5mb3JFYWNoKGZ1bmN0aW9uIChlcnJvckluZm8sIGluZGV4KSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IGVycm9ySW5mby5ub2RlO1xuICAgICAgICAgIGNvbnN0IGluZm9zID0ge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoaW5kZXggPCBsYXN0U29ydE5vZGVzSW5kZXgpIHtcbiAgICAgICAgICAgIGluZm9zLmZpeCA9IGZ1bmN0aW9uIChmaXhlcikge1xuICAgICAgICAgICAgICByZXR1cm4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKG5vZGUsICcnKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gbGFzdFNvcnROb2Rlc0luZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBzb3J0Tm9kZXMgPSBlcnJvckluZm9zLnNsaWNlKDAsIGxhc3RTb3J0Tm9kZXNJbmRleCArIDEpO1xuICAgICAgICAgICAgaW5mb3MuZml4ID0gZnVuY3Rpb24gKGZpeGVyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUZpeGVycyA9IHNvcnROb2Rlcy5tYXAoZnVuY3Rpb24gKF9lcnJvckluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZml4ZXIucmVtb3ZlUmFuZ2UoX2Vycm9ySW5mby5yYW5nZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IFswLCByZW1vdmVGaXhlcnNbcmVtb3ZlRml4ZXJzLmxlbmd0aCAtIDFdLnJhbmdlWzFdXTtcbiAgICAgICAgICAgICAgbGV0IGluc2VydFNvdXJjZUNvZGUgPSBzb3J0Tm9kZXMubWFwKGZ1bmN0aW9uIChfZXJyb3JJbmZvKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZVNvdXJjZUNvZGUgPSBTdHJpbmcucHJvdG90eXBlLnNsaWNlLmFwcGx5KFxuICAgICAgICAgICAgICAgICAgb3JpZ2luU291cmNlQ29kZSwgX2Vycm9ySW5mby5yYW5nZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKC9cXFMvLnRlc3Qobm9kZVNvdXJjZUNvZGVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcbicgKyBub2RlU291cmNlQ29kZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVTb3VyY2VDb2RlO1xuICAgICAgICAgICAgICB9KS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgbGV0IGluc2VydEZpeGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgbGV0IHJlcGxhY2VTb3VyY2VDb2RlID0gJyc7XG4gICAgICAgICAgICAgIGlmICghbGFzdExlZ2FsSW1wKSB7XG4gICAgICAgICAgICAgICAgaW5zZXJ0U291cmNlQ29kZSA9XG4gICAgICAgICAgICAgICAgICAgIGluc2VydFNvdXJjZUNvZGUudHJpbSgpICsgaW5zZXJ0U291cmNlQ29kZS5tYXRjaCgvXihcXHMrKS8pWzBdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGluc2VydEZpeGVyID0gbGFzdExlZ2FsSW1wID9cbiAgICAgICAgICAgICAgICBmaXhlci5pbnNlcnRUZXh0QWZ0ZXIobGFzdExlZ2FsSW1wLCBpbnNlcnRTb3VyY2VDb2RlKSA6XG4gICAgICAgICAgICAgICAgZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShib2R5WzBdLCBpbnNlcnRTb3VyY2VDb2RlKTtcbiAgICAgICAgICAgICAgY29uc3QgZml4ZXJzID0gW2luc2VydEZpeGVyXS5jb25jYXQocmVtb3ZlRml4ZXJzKTtcbiAgICAgICAgICAgICAgZml4ZXJzLmZvckVhY2goZnVuY3Rpb24gKGNvbXB1dGVkRml4ZXIsIGkpIHtcbiAgICAgICAgICAgICAgICByZXBsYWNlU291cmNlQ29kZSArPSAob3JpZ2luU291cmNlQ29kZS5zbGljZShcbiAgICAgICAgICAgICAgICAgIGZpeGVyc1tpIC0gMV0gPyBmaXhlcnNbaSAtIDFdLnJhbmdlWzFdIDogMCwgY29tcHV0ZWRGaXhlci5yYW5nZVswXVxuICAgICAgICAgICAgICAgICkgKyBjb21wdXRlZEZpeGVyLnRleHQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UocmFuZ2UsIHJlcGxhY2VTb3VyY2VDb2RlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KGluZm9zKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9maXJzdC5qcyJdLCJuYW1lcyI6WyJnZXRJbXBvcnRWYWx1ZSIsIm5vZGUiLCJ0eXBlIiwic291cmNlIiwidmFsdWUiLCJtb2R1bGVSZWZlcmVuY2UiLCJleHByZXNzaW9uIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJpc1Bvc3NpYmxlRGlyZWN0aXZlIiwibiIsImJvZHkiLCJhYnNvbHV0ZUZpcnN0Iiwib3B0aW9ucyIsIm1lc3NhZ2UiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsIm9yaWdpblNvdXJjZUNvZGUiLCJnZXRUZXh0Iiwibm9uSW1wb3J0Q291bnQiLCJhbnlFeHByZXNzaW9ucyIsImFueVJlbGF0aXZlIiwibGFzdExlZ2FsSW1wIiwiZXJyb3JJbmZvcyIsInNob3VsZFNvcnQiLCJsYXN0U29ydE5vZGVzSW5kZXgiLCJmb3JFYWNoIiwiaW5kZXgiLCJ0ZXN0IiwicmVwb3J0IiwiZ2V0RGVjbGFyZWRWYXJpYWJsZXMiLCJ2YXJpYWJsZSIsInJlZmVyZW5jZXMiLCJsZW5ndGgiLCJyZWZlcmVuY2UiLCJpZGVudGlmaWVyIiwicmFuZ2UiLCJwdXNoIiwiZXJyb3JJbmZvIiwiaW5mb3MiLCJmaXgiLCJmaXhlciIsImluc2VydFRleHRBZnRlciIsInNvcnROb2RlcyIsInNsaWNlIiwicmVtb3ZlRml4ZXJzIiwibWFwIiwiX2Vycm9ySW5mbyIsInJlbW92ZVJhbmdlIiwiaW5zZXJ0U291cmNlQ29kZSIsIm5vZGVTb3VyY2VDb2RlIiwiU3RyaW5nIiwicHJvdG90eXBlIiwiYXBwbHkiLCJqb2luIiwiaW5zZXJ0Rml4ZXIiLCJyZXBsYWNlU291cmNlQ29kZSIsInRyaW0iLCJtYXRjaCIsImluc2VydFRleHRCZWZvcmUiLCJmaXhlcnMiLCJjb25jYXQiLCJjb21wdXRlZEZpeGVyIiwiaSIsInRleHQiLCJyZXBsYWNlVGV4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ZCxDQUFvQixDQUFwQixDQUR4QjtBQUVsQjBCLGtDQUFjRSxJQUZsQjtBQUdELG1CQUpEO0FBS0EseUJBQU92QixNQUFNd0IsZ0JBQU4sQ0FBdUI3QixLQUF2QixFQUE4Qm9CLGlCQUE5QixDQUFQO0FBQ0QsaUJBOUJEO0FBK0JEO0FBQ0RoRCxzQkFBUXFCLE1BQVIsQ0FBZVUsS0FBZjtBQUNELGFBN0NEO0FBOENELFdBdkdELGtCQURLLEVBQVA7O0FBMEdELEtBaEljLG1CQUFqQiIsImZpbGUiOiJmaXJzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBnZXRJbXBvcnRWYWx1ZShub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbidcbiAgICA/IG5vZGUuc291cmNlLnZhbHVlXG4gICAgOiBub2RlLm1vZHVsZVJlZmVyZW5jZS5leHByZXNzaW9uLnZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ2ZpcnN0JyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBlbnVtOiBbJ2Fic29sdXRlLWZpcnN0JywgJ2Rpc2FibGUtYWJzb2x1dGUtZmlyc3QnXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGZ1bmN0aW9uIGlzUG9zc2libGVEaXJlY3RpdmUobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0V4cHJlc3Npb25TdGF0ZW1lbnQnICYmXG4gICAgICAgIG5vZGUuZXhwcmVzc2lvbi50eXBlID09PSAnTGl0ZXJhbCcgJiZcbiAgICAgICAgdHlwZW9mIG5vZGUuZXhwcmVzc2lvbi52YWx1ZSA9PT0gJ3N0cmluZyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICdQcm9ncmFtJzogZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgY29uc3QgYm9keSA9IG4uYm9keTtcbiAgICAgICAgY29uc3QgYWJzb2x1dGVGaXJzdCA9IGNvbnRleHQub3B0aW9uc1swXSA9PT0gJ2Fic29sdXRlLWZpcnN0JztcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9ICdJbXBvcnQgaW4gYm9keSBvZiBtb2R1bGU7IHJlb3JkZXIgdG8gdG9wLic7XG4gICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luU291cmNlQ29kZSA9IHNvdXJjZUNvZGUuZ2V0VGV4dCgpO1xuICAgICAgICBsZXQgbm9uSW1wb3J0Q291bnQgPSAwO1xuICAgICAgICBsZXQgYW55RXhwcmVzc2lvbnMgPSBmYWxzZTtcbiAgICAgICAgbGV0IGFueVJlbGF0aXZlID0gZmFsc2U7XG4gICAgICAgIGxldCBsYXN0TGVnYWxJbXAgPSBudWxsO1xuICAgICAgICBjb25zdCBlcnJvckluZm9zID0gW107XG4gICAgICAgIGxldCBzaG91bGRTb3J0ID0gdHJ1ZTtcbiAgICAgICAgbGV0IGxhc3RTb3J0Tm9kZXNJbmRleCA9IDA7XG4gICAgICAgIGJvZHkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgICBpZiAoIWFueUV4cHJlc3Npb25zICYmIGlzUG9zc2libGVEaXJlY3RpdmUobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhbnlFeHByZXNzaW9ucyA9IHRydWU7XG5cbiAgICAgICAgICBpZiAobm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nIHx8IG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nKSB7XG4gICAgICAgICAgICBpZiAoYWJzb2x1dGVGaXJzdCkge1xuICAgICAgICAgICAgICBpZiAoL15cXC4vLnRlc3QoZ2V0SW1wb3J0VmFsdWUobm9kZSkpKSB7XG4gICAgICAgICAgICAgICAgYW55UmVsYXRpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFueVJlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZS50eXBlID09PSAnSW1wb3J0RGVjbGFyYXRpb24nID8gbm9kZS5zb3VyY2UgOiBub2RlLm1vZHVsZVJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdBYnNvbHV0ZSBpbXBvcnRzIHNob3VsZCBjb21lIGJlZm9yZSByZWxhdGl2ZSBpbXBvcnRzLicsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub25JbXBvcnRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiBjb250ZXh0LmdldERlY2xhcmVkVmFyaWFibGVzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzaG91bGRTb3J0KSBicmVhaztcbiAgICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gdmFyaWFibGUucmVmZXJlbmNlcztcbiAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5pZGVudGlmaWVyLnJhbmdlWzBdIDwgbm9kZS5yYW5nZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFNvcnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzaG91bGRTb3J0ICYmIChsYXN0U29ydE5vZGVzSW5kZXggPSBlcnJvckluZm9zLmxlbmd0aCk7XG4gICAgICAgICAgICAgIGVycm9ySW5mb3MucHVzaCh7XG4gICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICByYW5nZTogW2JvZHlbaW5kZXggLSAxXS5yYW5nZVsxXSwgbm9kZS5yYW5nZVsxXV0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGFzdExlZ2FsSW1wID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9uSW1wb3J0Q291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWVycm9ySW5mb3MubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGVycm9ySW5mb3MuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3JJbmZvLCBpbmRleCkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBlcnJvckluZm8ubm9kZTtcbiAgICAgICAgICBjb25zdCBpbmZvcyA9IHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGluZGV4IDwgbGFzdFNvcnROb2Rlc0luZGV4KSB7XG4gICAgICAgICAgICBpbmZvcy5maXggPSBmdW5jdGlvbiAoZml4ZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpeGVyLmluc2VydFRleHRBZnRlcihub2RlLCAnJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IGxhc3RTb3J0Tm9kZXNJbmRleCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydE5vZGVzID0gZXJyb3JJbmZvcy5zbGljZSgwLCBsYXN0U29ydE5vZGVzSW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZm9zLmZpeCA9IGZ1bmN0aW9uIChmaXhlcikge1xuICAgICAgICAgICAgICBjb25zdCByZW1vdmVGaXhlcnMgPSBzb3J0Tm9kZXMubWFwKGZ1bmN0aW9uIChfZXJyb3JJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpeGVyLnJlbW92ZVJhbmdlKF9lcnJvckluZm8ucmFuZ2UpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBbMCwgcmVtb3ZlRml4ZXJzW3JlbW92ZUZpeGVycy5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICAgIGxldCBpbnNlcnRTb3VyY2VDb2RlID0gc29ydE5vZGVzLm1hcChmdW5jdGlvbiAoX2Vycm9ySW5mbykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVTb3VyY2VDb2RlID0gU3RyaW5nLnByb3RvdHlwZS5zbGljZS5hcHBseShcbiAgICAgICAgICAgICAgICAgIG9yaWdpblNvdXJjZUNvZGUsIF9lcnJvckluZm8ucmFuZ2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICgvXFxTLy50ZXN0KG5vZGVTb3VyY2VDb2RlWzBdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXG4nICsgbm9kZVNvdXJjZUNvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBub2RlU291cmNlQ29kZTtcbiAgICAgICAgICAgICAgfSkuam9pbignJyk7XG4gICAgICAgICAgICAgIGxldCBpbnNlcnRGaXhlciA9IG51bGw7XG4gICAgICAgICAgICAgIGxldCByZXBsYWNlU291cmNlQ29kZSA9ICcnO1xuICAgICAgICAgICAgICBpZiAoIWxhc3RMZWdhbEltcCkge1xuICAgICAgICAgICAgICAgIGluc2VydFNvdXJjZUNvZGUgPVxuICAgICAgICAgICAgICAgICAgICBpbnNlcnRTb3VyY2VDb2RlLnRyaW0oKSArIGluc2VydFNvdXJjZUNvZGUubWF0Y2goL14oXFxzKykvKVswXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpbnNlcnRGaXhlciA9IGxhc3RMZWdhbEltcCA/XG4gICAgICAgICAgICAgICAgZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGxhc3RMZWdhbEltcCwgaW5zZXJ0U291cmNlQ29kZSkgOlxuICAgICAgICAgICAgICAgIGZpeGVyLmluc2VydFRleHRCZWZvcmUoYm9keVswXSwgaW5zZXJ0U291cmNlQ29kZSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZpeGVycyA9IFtpbnNlcnRGaXhlcl0uY29uY2F0KHJlbW92ZUZpeGVycyk7XG4gICAgICAgICAgICAgIGZpeGVycy5mb3JFYWNoKGZ1bmN0aW9uIChjb21wdXRlZEZpeGVyLCBpKSB7XG4gICAgICAgICAgICAgICAgcmVwbGFjZVNvdXJjZUNvZGUgKz0gKG9yaWdpblNvdXJjZUNvZGUuc2xpY2UoXG4gICAgICAgICAgICAgICAgICBmaXhlcnNbaSAtIDFdID8gZml4ZXJzW2kgLSAxXS5yYW5nZVsxXSA6IDAsIGNvbXB1dGVkRml4ZXIucmFuZ2VbMF1cbiAgICAgICAgICAgICAgICApICsgY29tcHV0ZWRGaXhlci50ZXh0KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dFJhbmdlKHJhbmdlLCByZXBsYWNlU291cmNlQ29kZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbmZvcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/named.js b/node_modules/eslint-plugin-import/lib/rules/named.js
index b48e3ef..c1e289f 100644
--- a/node_modules/eslint-plugin-import/lib/rules/named.js
+++ b/node_modules/eslint-plugin-import/lib/rules/named.js
@@ -135,4 +135,4 @@
VariableDeclarator: checkRequire };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb21tb25qcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsIm9wdGlvbnMiLCJjaGVja1NwZWNpZmllcnMiLCJrZXkiLCJub2RlIiwic291cmNlIiwiaW1wb3J0S2luZCIsImV4cG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwic29tZSIsImltIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImZvckVhY2giLCJkZWVwTG9va3VwIiwiaGFzRGVlcCIsIm5hbWUiLCJmb3VuZCIsImRlZXBQYXRoIiwibWFwIiwicmVsYXRpdmUiLCJkaXJuYW1lIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwiaSIsImpvaW4iLCJyZXBvcnQiLCJjaGVja1JlcXVpcmUiLCJpZCIsImluaXQiLCJjYWxsIiwiYXJndW1lbnRzIiwidmFyaWFibGVJbXBvcnRzIiwidmFyaWFibGVFeHBvcnRzIiwiY2FsbGVlIiwiSW1wb3J0RGVjbGFyYXRpb24iLCJiaW5kIiwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIsIlZhcmlhYmxlRGVjbGFyYXRvciJdLCJtYXBwaW5ncyI6InFvQkFBQSw0QixJQUFZQSxJO0FBQ1oseUM7QUFDQSxxQzs7QUFFQUMsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sU0FERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsT0FBUixDQURELEVBRkY7O0FBS0pDLFlBQVE7QUFDTjtBQUNFSCxZQUFNLFFBRFI7QUFFRUksa0JBQVk7QUFDVkMsa0JBQVU7QUFDUkwsZ0JBQU0sU0FERSxFQURBLEVBRmQ7OztBQU9FTSw0QkFB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UTRCLFdBQVIsRUFBYixDQUFkLEVBQW1EQyxFQUFFekMsSUFBckQsQ0FBTCxFQURVO0FBRWQwQyxrQkFGYyxDQUVULE1BRlMsQ0FBakI7O0FBSUE5QixzQkFBUStCLE1BQVIsQ0FBZXJCLEdBQUdQLEdBQWxCLFNBQTBCTyxHQUFHUCxHQUFILENBQU9rQixJQUFqQywrQkFBdURFLFFBQXZEO0FBQ0QsYUFORCxNQU1PO0FBQ0x2QixzQkFBUStCLE1BQVIsQ0FBZXJCLEdBQUdQLEdBQWxCLEVBQXVCTyxHQUFHUCxHQUFILENBQU9rQixJQUFQLEdBQWMsa0JBQWQsR0FBbUNoQixPQUFPUyxLQUExQyxHQUFrRCxJQUF6RTtBQUNEO0FBQ0Y7QUFDRixTQWxCRDtBQW1CRDs7QUFFRCxhQUFPO0FBQ0wwQiwyQkFBbUJ0QyxnQkFBZ0J1QyxJQUFoQixDQUFxQixJQUFyQixFQUEyQixVQUEzQixFQUF1QyxpQkFBdkMsQ0FEZDs7QUFHTEMsZ0NBQXdCeEMsZ0JBQWdCdUMsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsT0FBM0IsRUFBb0MsaUJBQXBDLENBSG5COztBQUtMRSw0QkFBb0JYLFlBTGYsRUFBUDs7QUFPRCxLQWpIRCxpQkFuQmUsRUFBakIiLCJmaWxlIjoibmFtZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25hbWVkJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb21tb25qczoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrU3BlY2lmaWVycyhrZXksIHR5cGUsIG5vZGUpIHtcbiAgICAgIC8vIGlnbm9yZSBsb2NhbCBleHBvcnRzIGFuZCB0eXBlIGltcG9ydHMvZXhwb3J0c1xuICAgICAgaWYgKFxuICAgICAgICBub2RlLnNvdXJjZSA9PSBudWxsXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGUnXG4gICAgICAgIHx8IG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGVvZidcbiAgICAgICAgfHwgbm9kZS5leHBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghbm9kZS5zcGVjaWZpZXJzLnNvbWUoKGltKSA9PiBpbS50eXBlID09PSB0eXBlKSkge1xuICAgICAgICByZXR1cm47IC8vIG5vIG5hbWVkIGltcG9ydHMvZXhwb3J0c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbXBvcnRzID0gRXhwb3J0cy5nZXQobm9kZS5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zcGVjaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKGltKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbS50eXBlICE9PSB0eXBlXG4gICAgICAgICAgLy8gaWdub3JlIHR5cGUgaW1wb3J0c1xuICAgICAgICAgIHx8IGltLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBpbS5pbXBvcnRLaW5kID09PSAndHlwZW9mJ1xuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gaW1wb3J0cy5oYXNEZWVwKGltW2tleV0ubmFtZSk7XG5cbiAgICAgICAgaWYgKCFkZWVwTG9va3VwLmZvdW5kKSB7XG4gICAgICAgICAgaWYgKGRlZXBMb29rdXAucGF0aC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwUGF0aCA9IGRlZXBMb29rdXAucGF0aFxuICAgICAgICAgICAgICAubWFwKGkgPT4gcGF0aC5yZWxhdGl2ZShwYXRoLmRpcm5hbWUoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbVtrZXldLCBgJHtpbVtrZXldLm5hbWV9IG5vdCBmb3VuZCB2aWEgJHtkZWVwUGF0aH1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW1ba2V5XSwgaW1ba2V5XS5uYW1lICsgJyBub3QgZm91bmQgaW4gXFwnJyArIG5vZGUuc291cmNlLnZhbHVlICsgJ1xcJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tSZXF1aXJlKG5vZGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIW9wdGlvbnMuY29tbW9uanNcbiAgICAgICAgfHwgbm9kZS50eXBlICE9PSAnVmFyaWFibGVEZWNsYXJhdG9yJ1xuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYW4gb2JqZWN0IGRlc3RydWN0dXJlIG9yIGl0J3MgYW4gZW1wdHkgb2JqZWN0IGRlc3RydWN0dXJlXG4gICAgICAgIHx8ICFub2RlLmlkIHx8IG5vZGUuaWQudHlwZSAhPT0gJ09iamVjdFBhdHRlcm4nIHx8IG5vZGUuaWQucHJvcGVydGllcy5sZW5ndGggPT09IDBcbiAgICAgICAgLy8gcmV0dXJuIGlmIHRoZXJlIGlzIG5vIGNhbGwgZXhwcmVzc2lvbiBvbiB0aGUgcmlnaHQgc2lkZVxuICAgICAgICB8fCAhbm9kZS5pbml0IHx8IG5vZGUuaW5pdC50eXBlICE9PSAnQ2FsbEV4cHJlc3Npb24nXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsID0gbm9kZS5pbml0O1xuICAgICAgY29uc3QgW3NvdXJjZV0gPSBjYWxsLmFyZ3VtZW50cztcbiAgICAgIGNvbnN0IHZhcmlhYmxlSW1wb3J0cyA9IG5vZGUuaWQucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHZhcmlhYmxlRXhwb3J0cyA9IEV4cG9ydHMuZ2V0KHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gcmV0dXJuIGlmIGl0J3Mgbm90IGEgY29tbW9uanMgcmVxdWlyZSBzdGF0ZW1lbnRcbiAgICAgICAgY2FsbC5jYWxsZWUudHlwZSAhPT0gJ0lkZW50aWZpZXInIHx8IGNhbGwuY2FsbGVlLm5hbWUgIT09ICdyZXF1aXJlJyB8fCBjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT09IDFcbiAgICAgICAgLy8gcmV0dXJuIGlmIGl0J3Mgbm90IGEgc3RyaW5nIHNvdXJjZVxuICAgICAgICB8fCBzb3VyY2UudHlwZSAhPT0gJ0xpdGVyYWwnXG4gICAgICAgIHx8IHZhcmlhYmxlRXhwb3J0cyA9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFyaWFibGVFeHBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgdmFyaWFibGVFeHBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXJpYWJsZUltcG9ydHMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgaWYgKGltLnR5cGUgIT09ICdQcm9wZXJ0eScgfHwgIWltLmtleSB8fCBpbS5rZXkudHlwZSAhPT0gJ0lkZW50aWZpZXInKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVlcExvb2t1cCA9IHZhcmlhYmxlRXhwb3J0cy5oYXNEZWVwKGltLmtleS5uYW1lKTtcblxuICAgICAgICBpZiAoIWRlZXBMb29rdXAuZm91bmQpIHtcbiAgICAgICAgICBpZiAoZGVlcExvb2t1cC5wYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBQYXRoID0gZGVlcExvb2t1cC5wYXRoXG4gICAgICAgICAgICAgIC5tYXAoaSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldEZpbGVuYW1lKCkpLCBpLnBhdGgpKVxuICAgICAgICAgICAgICAuam9pbignIC0+ICcpO1xuXG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbS5rZXksIGAke2ltLmtleS5uYW1lfSBub3QgZm91bmQgdmlhICR7ZGVlcFBhdGh9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltLmtleSwgaW0ua2V5Lm5hbWUgKyAnIG5vdCBmb3VuZCBpbiBcXCcnICsgc291cmNlLnZhbHVlICsgJ1xcJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBjaGVja1NwZWNpZmllcnMuYmluZChudWxsLCAnaW1wb3J0ZWQnLCAnSW1wb3J0U3BlY2lmaWVyJyksXG5cbiAgICAgIEV4cG9ydE5hbWVkRGVjbGFyYXRpb246IGNoZWNrU3BlY2lmaWVycy5iaW5kKG51bGwsICdsb2NhbCcsICdFeHBvcnRTcGVjaWZpZXInKSxcblxuICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiBjaGVja1JlcXVpcmUsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uYW1lZC5qcyJdLCJuYW1lcyI6WyJwYXRoIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb21tb25qcyIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiY3JlYXRlIiwiY29udGV4dCIsIm9wdGlvbnMiLCJjaGVja1NwZWNpZmllcnMiLCJrZXkiLCJub2RlIiwic291cmNlIiwiaW1wb3J0S2luZCIsImV4cG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwic29tZSIsImltIiwiaW1wb3J0cyIsIkV4cG9ydHMiLCJnZXQiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsImZvckVhY2giLCJkZWVwTG9va3VwIiwiaGFzRGVlcCIsIm5hbWUiLCJmb3VuZCIsImRlZXBQYXRoIiwibWFwIiwicmVsYXRpdmUiLCJkaXJuYW1lIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwiaSIsImpvaW4iLCJyZXBvcnQiLCJjaGVja1JlcXVpcmUiLCJpZCIsImluaXQiLCJjYWxsIiwiYXJndW1lbnRzIiwidmFyaWFibGVJbXBvcnRzIiwidmFyaWFibGVFeHBvcnRzIiwiY2FsbGVlIiwiSW1wb3J0RGVjbGFyYXRpb24iLCJiaW5kIiwiRXhwb3J0TmFtZWREZWNsYXJhdGlvbiIsIlZhcmlhYmxlRGVjbGFyYXRvciJdLCJtYXBwaW5ncyI6InFvQkFBQSw0QixJQUFZQSxJO0FBQ1oseUM7QUFDQSxxQzs7QUFFQUMsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sU0FERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsT0FBUixDQURELEVBRkY7O0FBS0pDLFlBQVE7QUFDTjtBQUNFSCxZQUFNLFFBRFI7QUFFRUksa0JBQVk7QUFDVkMsa0JBQVU7QUFDUkwsZ0JBQU0sU0FERSxFQURBLEVBRmQ7OztBQU9FTSw0QkFB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QVE0QixXQUFSLEVBQWIsQ0FBZCxFQUFtREMsRUFBRXpDLElBQXJELENBQUwsRUFEVTtBQUVkMEMsa0JBRmMsQ0FFVCxNQUZTLENBQWpCOztBQUlBOUIsc0JBQVErQixNQUFSLENBQWVyQixHQUFHUCxHQUFsQixTQUEwQk8sR0FBR1AsR0FBSCxDQUFPa0IsSUFBakMsK0JBQXVERSxRQUF2RDtBQUNELGFBTkQsTUFNTztBQUNMdkIsc0JBQVErQixNQUFSLENBQWVyQixHQUFHUCxHQUFsQixFQUF1Qk8sR0FBR1AsR0FBSCxDQUFPa0IsSUFBUCxHQUFjLGtCQUFkLEdBQW1DaEIsT0FBT1MsS0FBMUMsR0FBa0QsSUFBekU7QUFDRDtBQUNGO0FBQ0YsU0FsQkQ7QUFtQkQ7O0FBRUQsYUFBTztBQUNMMEIsMkJBQW1CdEMsZ0JBQWdCdUMsSUFBaEIsQ0FBcUIsSUFBckIsRUFBMkIsVUFBM0IsRUFBdUMsaUJBQXZDLENBRGQ7O0FBR0xDLGdDQUF3QnhDLGdCQUFnQnVDLElBQWhCLENBQXFCLElBQXJCLEVBQTJCLE9BQTNCLEVBQW9DLGlCQUFwQyxDQUhuQjs7QUFLTEUsNEJBQW9CWCxZQUxmLEVBQVA7O0FBT0QsS0FwSWMsbUJBQWpCIiwiZmlsZSI6Im5hbWVkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduYW1lZCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29tbW9uanM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuXG4gICAgZnVuY3Rpb24gY2hlY2tTcGVjaWZpZXJzKGtleSwgdHlwZSwgbm9kZSkge1xuICAgICAgLy8gaWdub3JlIGxvY2FsIGV4cG9ydHMgYW5kIHR5cGUgaW1wb3J0cy9leHBvcnRzXG4gICAgICBpZiAoXG4gICAgICAgIG5vZGUuc291cmNlID09IG51bGxcbiAgICAgICAgfHwgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZSdcbiAgICAgICAgfHwgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZW9mJ1xuICAgICAgICB8fCBub2RlLmV4cG9ydEtpbmQgPT09ICd0eXBlJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFub2RlLnNwZWNpZmllcnMuc29tZSgoaW0pID0+IGltLnR5cGUgPT09IHR5cGUpKSB7XG4gICAgICAgIHJldHVybjsgLy8gbm8gbmFtZWQgaW1wb3J0cy9leHBvcnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGltcG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICBpbXBvcnRzLnJlcG9ydEVycm9ycyhjb250ZXh0LCBub2RlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNwZWNpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoaW0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGltLnR5cGUgIT09IHR5cGVcbiAgICAgICAgICAvLyBpZ25vcmUgdHlwZSBpbXBvcnRzXG4gICAgICAgICAgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGUnIHx8IGltLmltcG9ydEtpbmQgPT09ICd0eXBlb2YnXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlZXBMb29rdXAgPSBpbXBvcnRzLmhhc0RlZXAoaW1ba2V5XS5uYW1lKTtcblxuICAgICAgICBpZiAoIWRlZXBMb29rdXAuZm91bmQpIHtcbiAgICAgICAgICBpZiAoZGVlcExvb2t1cC5wYXRoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBQYXRoID0gZGVlcExvb2t1cC5wYXRoXG4gICAgICAgICAgICAgIC5tYXAoaSA9PiBwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZShjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSksIGkucGF0aCkpXG4gICAgICAgICAgICAgIC5qb2luKCcgLT4gJyk7XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltW2tleV0sIGAke2ltW2tleV0ubmFtZX0gbm90IGZvdW5kIHZpYSAke2RlZXBQYXRofWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbVtrZXldLCBpbVtrZXldLm5hbWUgKyAnIG5vdCBmb3VuZCBpbiBcXCcnICsgbm9kZS5zb3VyY2UudmFsdWUgKyAnXFwnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1JlcXVpcmUobm9kZSkge1xuICAgICAgaWYgKFxuICAgICAgICAhb3B0aW9ucy5jb21tb25qc1xuICAgICAgICB8fCBub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0b3InXG4gICAgICAgIC8vIHJldHVybiBpZiBpdCdzIG5vdCBhbiBvYmplY3QgZGVzdHJ1Y3R1cmUgb3IgaXQncyBhbiBlbXB0eSBvYmplY3QgZGVzdHJ1Y3R1cmVcbiAgICAgICAgfHwgIW5vZGUuaWQgfHwgbm9kZS5pZC50eXBlICE9PSAnT2JqZWN0UGF0dGVybicgfHwgbm9kZS5pZC5wcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMFxuICAgICAgICAvLyByZXR1cm4gaWYgdGhlcmUgaXMgbm8gY2FsbCBleHByZXNzaW9uIG9uIHRoZSByaWdodCBzaWRlXG4gICAgICAgIHx8ICFub2RlLmluaXQgfHwgbm9kZS5pbml0LnR5cGUgIT09ICdDYWxsRXhwcmVzc2lvbidcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGwgPSBub2RlLmluaXQ7XG4gICAgICBjb25zdCBbc291cmNlXSA9IGNhbGwuYXJndW1lbnRzO1xuICAgICAgY29uc3QgdmFyaWFibGVJbXBvcnRzID0gbm9kZS5pZC5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgdmFyaWFibGVFeHBvcnRzID0gRXhwb3J0cy5nZXQoc291cmNlLnZhbHVlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKFxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBjb21tb25qcyByZXF1aXJlIHN0YXRlbWVudFxuICAgICAgICBjYWxsLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicgfHwgY2FsbC5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnIHx8IGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMVxuICAgICAgICAvLyByZXR1cm4gaWYgaXQncyBub3QgYSBzdHJpbmcgc291cmNlXG4gICAgICAgIHx8IHNvdXJjZS50eXBlICE9PSAnTGl0ZXJhbCdcbiAgICAgICAgfHwgdmFyaWFibGVFeHBvcnRzID09IG51bGxcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YXJpYWJsZUV4cG9ydHMuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICB2YXJpYWJsZUV4cG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhcmlhYmxlSW1wb3J0cy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBpZiAoaW0udHlwZSAhPT0gJ1Byb3BlcnR5JyB8fCAhaW0ua2V5IHx8IGltLmtleS50eXBlICE9PSAnSWRlbnRpZmllcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWVwTG9va3VwID0gdmFyaWFibGVFeHBvcnRzLmhhc0RlZXAoaW0ua2V5Lm5hbWUpO1xuXG4gICAgICAgIGlmICghZGVlcExvb2t1cC5mb3VuZCkge1xuICAgICAgICAgIGlmIChkZWVwTG9va3VwLnBhdGgubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgZGVlcFBhdGggPSBkZWVwTG9va3VwLnBhdGhcbiAgICAgICAgICAgICAgLm1hcChpID0+IHBhdGgucmVsYXRpdmUocGF0aC5kaXJuYW1lKGNvbnRleHQuZ2V0RmlsZW5hbWUoKSksIGkucGF0aCkpXG4gICAgICAgICAgICAgIC5qb2luKCcgLT4gJyk7XG5cbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KGltLmtleSwgYCR7aW0ua2V5Lm5hbWV9IG5vdCBmb3VuZCB2aWEgJHtkZWVwUGF0aH1gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoaW0ua2V5LCBpbS5rZXkubmFtZSArICcgbm90IGZvdW5kIGluIFxcJycgKyBzb3VyY2UudmFsdWUgKyAnXFwnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrU3BlY2lmaWVycy5iaW5kKG51bGwsICdpbXBvcnRlZCcsICdJbXBvcnRTcGVjaWZpZXInKSxcblxuICAgICAgRXhwb3J0TmFtZWREZWNsYXJhdGlvbjogY2hlY2tTcGVjaWZpZXJzLmJpbmQobnVsbCwgJ2xvY2FsJywgJ0V4cG9ydFNwZWNpZmllcicpLFxuXG4gICAgICBWYXJpYWJsZURlY2xhcmF0b3I6IGNoZWNrUmVxdWlyZSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/newline-after-import.js b/node_modules/eslint-plugin-import/lib/rules/newline-after-import.js
index dd9d465..685e9ae 100644
--- a/node_modules/eslint-plugin-import/lib/rules/newline-after-import.js
+++ b/node_modules/eslint-plugin-import/lib/rules/newline-after-import.js
@@ -181,4 +181,4 @@
'Decorator:exit': decrementLevel };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJmaXhhYmxlIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwiY2hlY2tGb3JOZXdMaW5lIiwiY2xhc3NOb2RlIiwib3B0aW9ucyIsImNvdW50IiwibGluZURpZmZlcmVuY2UiLCJFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UiLCJjb2x1bW4iLCJyZXBvcnQiLCJtZXNzYWdlIiwiZml4IiwiZml4ZXIiLCJpbnNlcnRUZXh0QWZ0ZXIiLCJyZXBlYXQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiaXNFeHBvcnQiLCJJbXBvcnREZWNsYXJhdGlvbiIsIlRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24iLCJDYWxsRXhwcmVzc2lvbiIsInB1c2giLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJzY29wZUJvZHkiLCJnZXRTY29wZSIsImZvckVhY2giLCJpbmRleCIsInN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCIsIm5leHRTdGF0ZW1lbnQiLCJuZXh0UmVxdWlyZUNhbGwiLCJGdW5jdGlvbkRlY2xhcmF0aW9uIiwiRnVuY3Rpb25FeHByZXNzaW9uIiwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iLCJCbG9ja1N0YXRlbWVudCIsIk9iamVjdEV4cHJlc3Npb24iLCJEZWNvcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esc0Q7QUFDQSxxQzs7QUFFQSw4QjtBQUNBLElBQU1BLE1BQU0sd0JBQU0saURBQU4sQ0FBWjs7QUFFQTtBQUNBO0FBQ0E7QUFiQTs7O0dBZUEsU0FBU0MsbUJBQVQsQ0FBNkJDLFNBQTdCLEVBQXdDQyxTQUF4QyxFQUFtRCxDQUNqRCxPQUFPRCxVQUFVRSxLQUFWLENBQWdCLENBQWhCLEtBQXNCRCxVQUFVQyxLQUFWLENBQWdCLENBQWhCLENBQXRCLElBQTRDRixVQUFVRSxLQUFWLENBQWdCLENBQWhCLEtBQXNCRCxVQUFVQyxLQUFWLENBQWdCLENBQWhCLENBQXpFLENBQ0Q7O0FBRUQsU0FBU0MsWUFBVCxDQUFzQkMsS0FBdEIsRUFBNkI7QUFDM0IsTUFBSUEsTUFBTUMsS0FBTixDQUFZQyxJQUFaLEtBQXFCLGlCQUF6QixFQUE0QztBQUMxQ1IsUUFBSSxzQ0FBSjtBQUNBLFdBQU8sSUFBUDtBQUNELEdBSjBCOztBQU1uQlMsTUFObUIsR0FNVkgsTUFBTUMsS0FOSSxDQU1uQkUsSUFObUI7QUFPM0IsTUFBSUEsUUFBUUEsS0FBS0QsSUFBTCxLQUFjLGdCQUExQixFQUE0QztBQUMxQyxXQUFPQyxLQUFLQSxJQUFaO0FBQ0Q7O0FBRUQsU0FBT0EsSUFBUDtBQUNEOztBQUVELFNBQVNDLHdCQUFULENBQWtDRCxJQUFsQyxFQUF3Q0UsVUFBeEMsRUFBb0Q7QUFDbEQsU0FBT0YsS0FBS0csU0FBTCxDQUFlLFVBQUNDLElBQUQsVUFBVVosb0JBQW9CWSxJQUFwQixFQUEwQkYsVUFBMUIsQ0FBVixFQUFmLENBQVA7QUFDRDs7QUFFRCxTQUFTRyxp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ci1pbXBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBlbmZvcmNlIG5ldyBsaW5lIGFmdGVyIGltcG9ydCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBpbXBvcnQuXG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuY29uc3QgbG9nID0gZGVidWcoJ2VzbGludC1wbHVnaW4taW1wb3J0OnJ1bGVzOm5ld2xpbmUtYWZ0ZXItaW1wb3J0Jyk7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZU9yRXF1YWwob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgcmV0dXJuIG91dGVyTm9kZS5yYW5nZVswXSA8PSBpbm5lck5vZGUucmFuZ2VbMF0gJiYgb3V0ZXJOb2RlLnJhbmdlWzFdID49IGlubmVyTm9kZS5yYW5nZVsxXTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NvcGVCb2R5KHNjb3BlKSB7XG4gIGlmIChzY29wZS5ibG9jay50eXBlID09PSAnU3dpdGNoU3RhdGVtZW50Jykge1xuICAgIGxvZygnU3dpdGNoU3RhdGVtZW50IHNjb3BlcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB7IGJvZHkgfSA9IHNjb3BlLmJsb2NrO1xuICBpZiAoYm9keSAmJiBib2R5LnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gYm9keS5ib2R5O1xuICB9XG5cbiAgcmV0dXJuIGJvZHk7XG59XG5cbmZ1bmN0aW9uIGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShib2R5LCBub2RlVG9GaW5kKSB7XG4gIHJldHVybiBib2R5LmZpbmRJbmRleCgobm9kZSkgPT4gY29udGFpbnNOb2RlT3JFcXVhbChub2RlLCBub2RlVG9GaW5kKSk7XG59XG5cbmZ1bmN0aW9uIGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKSB7XG4gIHJldHVybiBuZXh0Tm9kZS5sb2Muc3RhcnQubGluZSAtIG5vZGUubG9jLmVuZC5saW5lO1xufVxuXG5mdW5jdGlvbiBpc0NsYXNzV2l0aERlY29yYXRvcihub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJyAmJiBub2RlLmRlY29yYXRvcnMgJiYgbm9kZS5kZWNvcmF0b3JzLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnREZWZhdWx0Q2xhc3Mobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNFeHBvcnROYW1lQ2xhc3Mobm9kZSkge1xuXG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJyAmJiBub2RlLmRlY2xhcmF0aW9uICYmIG5vZGUuZGVjbGFyYXRpb24udHlwZSA9PT0gJ0NsYXNzRGVjbGFyYXRpb24nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdsYXlvdXQnLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbmV3bGluZS1hZnRlci1pbXBvcnQnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICd3aGl0ZXNwYWNlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgJ3R5cGUnOiAnb2JqZWN0JyxcbiAgICAgICAgJ3Byb3BlcnRpZXMnOiB7XG4gICAgICAgICAgJ2NvdW50Jzoge1xuICAgICAgICAgICAgJ3R5cGUnOiAnaW50ZWdlcicsXG4gICAgICAgICAgICAnbWluaW11bSc6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJzogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBsZXQgbGV2ZWwgPSAwO1xuICAgIGNvbnN0IHJlcXVpcmVDYWxscyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tGb3JOZXdMaW5lKG5vZGUsIG5leHROb2RlLCB0eXBlKSB7XG4gICAgICBpZiAoaXNFeHBvcnREZWZhdWx0Q2xhc3MobmV4dE5vZGUpIHx8IGlzRXhwb3J0TmFtZUNsYXNzKG5leHROb2RlKSkge1xuICAgICAgICBjb25zdCBjbGFzc05vZGUgPSBuZXh0Tm9kZS5kZWNsYXJhdGlvbjtcblxuICAgICAgICBpZiAoaXNDbGFzc1dpdGhEZWNvcmF0b3IoY2xhc3NOb2RlKSkge1xuICAgICAgICAgIG5leHROb2RlID0gY2xhc3NOb2RlLmRlY29yYXRvcnNbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDbGFzc1dpdGhEZWNvcmF0b3IobmV4dE5vZGUpKSB7XG4gICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUuZGVjb3JhdG9yc1swXTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7IGNvdW50OiAxIH07XG4gICAgICBjb25zdCBsaW5lRGlmZmVyZW5jZSA9IGdldExpbmVEaWZmZXJlbmNlKG5vZGUsIG5leHROb2RlKTtcbiAgICAgIGNvbnN0IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSA9IG9wdGlvbnMuY291bnQgKyAxO1xuXG4gICAgICBpZiAobGluZURpZmZlcmVuY2UgPCBFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UpIHtcbiAgICAgICAgbGV0IGNvbHVtbiA9IG5vZGUubG9jLnN0YXJ0LmNvbHVtbjtcblxuICAgICAgICBpZiAobm9kZS5sb2Muc3RhcnQubGluZSAhPT0gbm9kZS5sb2MuZW5kLmxpbmUpIHtcbiAgICAgICAgICBjb2x1bW4gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGxvYzoge1xuICAgICAgICAgICAgbGluZTogbm9kZS5sb2MuZW5kLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtvcHRpb25zLmNvdW50fSBlbXB0eSBsaW5lJHtvcHRpb25zLmNvdW50ID4gMSA/ICdzJyA6ICcnfSBcXFxuYWZ0ZXIgJHt0eXBlfSBzdGF0ZW1lbnQgbm90IGZvbGxvd2VkIGJ5IGFub3RoZXIgJHt0eXBlfS5gLFxuICAgICAgICAgIGZpeDogZml4ZXIgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICdcXG4nLnJlcGVhdChFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UgLSBsaW5lRGlmZmVyZW5jZSlcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmNyZW1lbnRMZXZlbCgpIHtcbiAgICAgIGxldmVsKys7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlY3JlbWVudExldmVsKCkge1xuICAgICAgbGV2ZWwtLTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja0ltcG9ydChub2RlKSB7XG4gICAgICBjb25zdCB7IHBhcmVudCB9ID0gbm9kZTtcbiAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IHBhcmVudC5ib2R5LmluZGV4T2Yobm9kZSk7XG4gICAgICBjb25zdCBuZXh0Tm9kZSA9IHBhcmVudC5ib2R5W25vZGVQb3NpdGlvbiArIDFdO1xuXG4gICAgICAvLyBza2lwIFwiZXhwb3J0IGltcG9ydFwic1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nICYmIG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV4dE5vZGUgJiYgbmV4dE5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJyAmJiAobmV4dE5vZGUudHlwZSAhPT0gJ1RTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24nIHx8IG5leHROb2RlLmlzRXhwb3J0KSkge1xuICAgICAgICBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsICdpbXBvcnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb246IGNoZWNrSW1wb3J0LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogY2hlY2tJbXBvcnQsXG4gICAgICBDYWxsRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBpZiAoaXNTdGF0aWNSZXF1aXJlKG5vZGUpICYmIGxldmVsID09PSAwKSB7XG4gICAgICAgICAgcmVxdWlyZUNhbGxzLnB1c2gobm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICBsb2coJ2V4aXQgcHJvY2Vzc2luZyBmb3InLCBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSk7XG4gICAgICAgIGNvbnN0IHNjb3BlQm9keSA9IGdldFNjb3BlQm9keShjb250ZXh0LmdldFNjb3BlKCkpO1xuICAgICAgICBsb2coJ2dvdCBzY29wZTonLCBzY29wZUJvZHkpO1xuXG4gICAgICAgIHJlcXVpcmVDYWxscy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICAgIGNvbnN0IG5vZGVQb3NpdGlvbiA9IGZpbmROb2RlSW5kZXhJblNjb3BlQm9keShzY29wZUJvZHksIG5vZGUpO1xuICAgICAgICAgIGxvZygnbm9kZSBwb3NpdGlvbiBpbiBzY29wZTonLCBub2RlUG9zaXRpb24pO1xuXG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsID0gc2NvcGVCb2R5W25vZGVQb3NpdGlvbl07XG4gICAgICAgICAgY29uc3QgbmV4dFN0YXRlbWVudCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb24gKyAxXTtcbiAgICAgICAgICBjb25zdCBuZXh0UmVxdWlyZUNhbGwgPSByZXF1aXJlQ2FsbHNbaW5kZXggKyAxXTtcblxuICAgICAgICAgIGlmIChuZXh0UmVxdWlyZUNhbGwgJiYgY29udGFpbnNOb2RlT3JFcXVhbChzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRSZXF1aXJlQ2FsbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV4dFN0YXRlbWVudCAmJlxuICAgICAgICAgICAgICghbmV4dFJlcXVpcmVDYWxsIHx8ICFjb250YWluc05vZGVPckVxdWFsKG5leHRTdGF0ZW1lbnQsIG5leHRSZXF1aXJlQ2FsbCkpKSB7XG5cbiAgICAgICAgICAgIGNoZWNrRm9yTmV3TGluZShzdGF0ZW1lbnRXaXRoUmVxdWlyZUNhbGwsIG5leHRTdGF0ZW1lbnQsICdyZXF1aXJlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBCbG9ja1N0YXRlbWVudDogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBPYmplY3RFeHByZXNzaW9uOiBpbmNyZW1lbnRMZXZlbCxcbiAgICAgIERlY29yYXRvcjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICAnRnVuY3Rpb25EZWNsYXJhdGlvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnRnVuY3Rpb25FeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnQmxvY2tTdGF0ZW1lbnQ6ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ09iamVjdEV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0RlY29yYXRvcjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uZXdsaW5lLWFmdGVyLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJsb2ciLCJjb250YWluc05vZGVPckVxdWFsIiwib3V0ZXJOb2RlIiwiaW5uZXJOb2RlIiwicmFuZ2UiLCJnZXRTY29wZUJvZHkiLCJzY29wZSIsImJsb2NrIiwidHlwZSIsImJvZHkiLCJmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkiLCJub2RlVG9GaW5kIiwiZmluZEluZGV4Iiwibm9kZSIsImdldExpbmVEaWZmZXJlbmNlIiwibmV4dE5vZGUiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJlbmQiLCJpc0NsYXNzV2l0aERlY29yYXRvciIsImRlY29yYXRvcnMiLCJsZW5ndGgiLCJpc0V4cG9ydERlZmF1bHRDbGFzcyIsImRlY2xhcmF0aW9uIiwiaXNFeHBvcnROYW1lQ2xhc3MiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJmaXhhYmxlIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImxldmVsIiwicmVxdWlyZUNhbGxzIiwiY2hlY2tGb3JOZXdMaW5lIiwiY2xhc3NOb2RlIiwib3B0aW9ucyIsImNvdW50IiwibGluZURpZmZlcmVuY2UiLCJFWFBFQ1RFRF9MSU5FX0RJRkZFUkVOQ0UiLCJjb2x1bW4iLCJyZXBvcnQiLCJtZXNzYWdlIiwiZml4IiwiZml4ZXIiLCJpbnNlcnRUZXh0QWZ0ZXIiLCJyZXBlYXQiLCJpbmNyZW1lbnRMZXZlbCIsImRlY3JlbWVudExldmVsIiwiY2hlY2tJbXBvcnQiLCJwYXJlbnQiLCJub2RlUG9zaXRpb24iLCJpbmRleE9mIiwiaXNFeHBvcnQiLCJJbXBvcnREZWNsYXJhdGlvbiIsIlRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb24iLCJDYWxsRXhwcmVzc2lvbiIsInB1c2giLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJzY29wZUJvZHkiLCJnZXRTY29wZSIsImZvckVhY2giLCJpbmRleCIsInN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCIsIm5leHRTdGF0ZW1lbnQiLCJuZXh0UmVxdWlyZUNhbGwiLCJGdW5jdGlvbkRlY2xhcmF0aW9uIiwiRnVuY3Rpb25FeHByZXNzaW9uIiwiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iLCJCbG9ja1N0YXRlbWVudCIsIk9iamVjdEV4cHJlc3Npb24iLCJEZWNvcmF0b3IiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esc0Q7QUFDQSxxQzs7QUFFQSw4QjtBQUNBLElBQU1BLE1BQU0sd0JBQU0saURBQU4sQ0FBWjs7QUFFQTtBQUNBO0FBQ0E7QUFiQTs7O0dBZUEsU0FBU0MsbUJBQVQsQ0FBNkJDLFNBQTdCLEVBQXdDQyxTQUF4QyxFQUFtRCxDQUNqRCxPQUFPRCxVQUFVRSxLQUFWLENBQWdCLENBQWhCLEtBQXNCRCxVQUFVQyxLQUFWLENBQWdCLENBQWhCLENBQXRCLElBQTRDRixVQUFVRSxLQUFWLENBQWdCLENBQWhCLEtBQXNCRCxVQUFVQyxLQUFWLENBQWdCLENBQWhCLENBQXpFLENBQ0Q7O0FBRUQsU0FBU0MsWUFBVCxDQUFzQkMsS0FBdEIsRUFBNkI7QUFDM0IsTUFBSUEsTUFBTUMsS0FBTixDQUFZQyxJQUFaLEtBQXFCLGlCQUF6QixFQUE0QztBQUMxQ1IsUUFBSSxzQ0FBSjtBQUNBLFdBQU8sSUFBUDtBQUNELEdBSjBCOztBQU1uQlMsTUFObUIsR0FNVkgsTUFBTUMsS0FOSSxDQU1uQkUsSUFObUI7QUFPM0IsTUFBSUEsUUFBUUEsS0FBS0QsSUFBTCxLQUFjLGdCQUExQixFQUE0QztBQUMxQyxXQUFPQyxLQUFLQSxJQUFaO0FBQ0Q7O0FBRUQsU0FBT0EsSUFBUDtBQUNEOztBQUVELFNBQVNDLHdCQUFULENBQWtDRCxJQUFsQyxFQUF3Q0UsVUFBeEMsRUFBb0Q7QUFDbEQsU0FBT0YsS0FBS0csU0FBTCxDQUFlLFVBQUNDLElBQUQsVUFBVVosb0JBQW9CWSxJQUFwQixFQUEwQkYsVUFBMUIsQ0FBVixFQUFmLENBQVA7QUFDRDs7QUFFRCxTQUFTRyxp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Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZW5mb3JjZSBuZXcgbGluZSBhZnRlciBpbXBvcnQgbm90IGZvbGxvd2VkIGJ5IGFub3RoZXIgaW1wb3J0LlxuICogQGF1dGhvciBSYWRlayBCZW5rZWxcbiAqL1xuXG5pbXBvcnQgaXNTdGF0aWNSZXF1aXJlIGZyb20gJy4uL2NvcmUvc3RhdGljUmVxdWlyZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmNvbnN0IGxvZyA9IGRlYnVnKCdlc2xpbnQtcGx1Z2luLWltcG9ydDpydWxlczpuZXdsaW5lLWFmdGVyLWltcG9ydCcpO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZSBEZWZpbml0aW9uXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBjb250YWluc05vZGVPckVxdWFsKG91dGVyTm9kZSwgaW5uZXJOb2RlKSB7XG4gIHJldHVybiBvdXRlck5vZGUucmFuZ2VbMF0gPD0gaW5uZXJOb2RlLnJhbmdlWzBdICYmIG91dGVyTm9kZS5yYW5nZVsxXSA+PSBpbm5lck5vZGUucmFuZ2VbMV07XG59XG5cbmZ1bmN0aW9uIGdldFNjb3BlQm9keShzY29wZSkge1xuICBpZiAoc2NvcGUuYmxvY2sudHlwZSA9PT0gJ1N3aXRjaFN0YXRlbWVudCcpIHtcbiAgICBsb2coJ1N3aXRjaFN0YXRlbWVudCBzY29wZXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgeyBib2R5IH0gPSBzY29wZS5ibG9jaztcbiAgaWYgKGJvZHkgJiYgYm9keS50eXBlID09PSAnQmxvY2tTdGF0ZW1lbnQnKSB7XG4gICAgcmV0dXJuIGJvZHkuYm9keTtcbiAgfVxuXG4gIHJldHVybiBib2R5O1xufVxuXG5mdW5jdGlvbiBmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkoYm9keSwgbm9kZVRvRmluZCkge1xuICByZXR1cm4gYm9keS5maW5kSW5kZXgoKG5vZGUpID0+IGNvbnRhaW5zTm9kZU9yRXF1YWwobm9kZSwgbm9kZVRvRmluZCkpO1xufVxuXG5mdW5jdGlvbiBnZXRMaW5lRGlmZmVyZW5jZShub2RlLCBuZXh0Tm9kZSkge1xuICByZXR1cm4gbmV4dE5vZGUubG9jLnN0YXJ0LmxpbmUgLSBub2RlLmxvYy5lbmQubGluZTtcbn1cblxuZnVuY3Rpb24gaXNDbGFzc1dpdGhEZWNvcmF0b3Iobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnQ2xhc3NEZWNsYXJhdGlvbicgJiYgbm9kZS5kZWNvcmF0b3JzICYmIG5vZGUuZGVjb3JhdG9ycy5sZW5ndGg7XG59XG5cbmZ1bmN0aW9uIGlzRXhwb3J0RGVmYXVsdENsYXNzKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbicgJiYgbm9kZS5kZWNsYXJhdGlvbi50eXBlID09PSAnQ2xhc3NEZWNsYXJhdGlvbic7XG59XG5cbmZ1bmN0aW9uIGlzRXhwb3J0TmFtZUNsYXNzKG5vZGUpIHtcblxuICByZXR1cm4gbm9kZS50eXBlID09PSAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicgJiYgbm9kZS5kZWNsYXJhdGlvbiAmJiBub2RlLmRlY2xhcmF0aW9uLnR5cGUgPT09ICdDbGFzc0RlY2xhcmF0aW9uJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnbGF5b3V0JyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25ld2xpbmUtYWZ0ZXItaW1wb3J0JyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnd2hpdGVzcGFjZScsXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgICd0eXBlJzogJ29iamVjdCcsXG4gICAgICAgICdwcm9wZXJ0aWVzJzoge1xuICAgICAgICAgICdjb3VudCc6IHtcbiAgICAgICAgICAgICd0eXBlJzogJ2ludGVnZXInLFxuICAgICAgICAgICAgJ21pbmltdW0nOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdhZGRpdGlvbmFsUHJvcGVydGllcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGxldCBsZXZlbCA9IDA7XG4gICAgY29uc3QgcmVxdWlyZUNhbGxzID0gW107XG5cbiAgICBmdW5jdGlvbiBjaGVja0Zvck5ld0xpbmUobm9kZSwgbmV4dE5vZGUsIHR5cGUpIHtcbiAgICAgIGlmIChpc0V4cG9ydERlZmF1bHRDbGFzcyhuZXh0Tm9kZSkgfHwgaXNFeHBvcnROYW1lQ2xhc3MobmV4dE5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTm9kZSA9IG5leHROb2RlLmRlY2xhcmF0aW9uO1xuXG4gICAgICAgIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihjbGFzc05vZGUpKSB7XG4gICAgICAgICAgbmV4dE5vZGUgPSBjbGFzc05vZGUuZGVjb3JhdG9yc1swXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0NsYXNzV2l0aERlY29yYXRvcihuZXh0Tm9kZSkpIHtcbiAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5kZWNvcmF0b3JzWzBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHsgY291bnQ6IDEgfTtcbiAgICAgIGNvbnN0IGxpbmVEaWZmZXJlbmNlID0gZ2V0TGluZURpZmZlcmVuY2Uobm9kZSwgbmV4dE5vZGUpO1xuICAgICAgY29uc3QgRVhQRUNURURfTElORV9ESUZGRVJFTkNFID0gb3B0aW9ucy5jb3VudCArIDE7XG5cbiAgICAgIGlmIChsaW5lRGlmZmVyZW5jZSA8IEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSkge1xuICAgICAgICBsZXQgY29sdW1uID0gbm9kZS5sb2Muc3RhcnQuY29sdW1uO1xuXG4gICAgICAgIGlmIChub2RlLmxvYy5zdGFydC5saW5lICE9PSBub2RlLmxvYy5lbmQubGluZSkge1xuICAgICAgICAgIGNvbHVtbiA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICBsaW5lOiBub2RlLmxvYy5lbmQubGluZSxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke29wdGlvbnMuY291bnR9IGVtcHR5IGxpbmUke29wdGlvbnMuY291bnQgPiAxID8gJ3MnIDogJyd9IFxcXG5hZnRlciAke3R5cGV9IHN0YXRlbWVudCBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciAke3R5cGV9LmAsXG4gICAgICAgICAgZml4OiBmaXhlciA9PiBmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgJ1xcbicucmVwZWF0KEVYUEVDVEVEX0xJTkVfRElGRkVSRU5DRSAtIGxpbmVEaWZmZXJlbmNlKVxuICAgICAgICAgICksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluY3JlbWVudExldmVsKCkge1xuICAgICAgbGV2ZWwrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVjcmVtZW50TGV2ZWwoKSB7XG4gICAgICBsZXZlbC0tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSW1wb3J0KG5vZGUpIHtcbiAgICAgIGNvbnN0IHsgcGFyZW50IH0gPSBub2RlO1xuICAgICAgY29uc3Qgbm9kZVBvc2l0aW9uID0gcGFyZW50LmJvZHkuaW5kZXhPZihub2RlKTtcbiAgICAgIGNvbnN0IG5leHROb2RlID0gcGFyZW50LmJvZHlbbm9kZVBvc2l0aW9uICsgMV07XG5cbiAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5pc0V4cG9ydCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChuZXh0Tm9kZSAmJiBuZXh0Tm9kZS50eXBlICE9PSAnSW1wb3J0RGVjbGFyYXRpb24nICYmIChuZXh0Tm9kZS50eXBlICE9PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgfHwgbmV4dE5vZGUuaXNFeHBvcnQpKSB7XG4gICAgICAgIGNoZWNrRm9yTmV3TGluZShub2RlLCBuZXh0Tm9kZSwgJ2ltcG9ydCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogY2hlY2tJbXBvcnQsXG4gICAgICBUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uOiBjaGVja0ltcG9ydCxcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKGlzU3RhdGljUmVxdWlyZShub2RlKSAmJiBsZXZlbCA9PT0gMCkge1xuICAgICAgICAgIHJlcXVpcmVDYWxscy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgJ1Byb2dyYW06ZXhpdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG9nKCdleGl0IHByb2Nlc3NpbmcgZm9yJywgY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xuICAgICAgICBjb25zdCBzY29wZUJvZHkgPSBnZXRTY29wZUJvZHkoY29udGV4dC5nZXRTY29wZSgpKTtcbiAgICAgICAgbG9nKCdnb3Qgc2NvcGU6Jywgc2NvcGVCb2R5KTtcblxuICAgICAgICByZXF1aXJlQ2FsbHMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSwgaW5kZXgpIHtcbiAgICAgICAgICBjb25zdCBub2RlUG9zaXRpb24gPSBmaW5kTm9kZUluZGV4SW5TY29wZUJvZHkoc2NvcGVCb2R5LCBub2RlKTtcbiAgICAgICAgICBsb2coJ25vZGUgcG9zaXRpb24gaW4gc2NvcGU6Jywgbm9kZVBvc2l0aW9uKTtcblxuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudFdpdGhSZXF1aXJlQ2FsbCA9IHNjb3BlQm9keVtub2RlUG9zaXRpb25dO1xuICAgICAgICAgIGNvbnN0IG5leHRTdGF0ZW1lbnQgPSBzY29wZUJvZHlbbm9kZVBvc2l0aW9uICsgMV07XG4gICAgICAgICAgY29uc3QgbmV4dFJlcXVpcmVDYWxsID0gcmVxdWlyZUNhbGxzW2luZGV4ICsgMV07XG5cbiAgICAgICAgICBpZiAobmV4dFJlcXVpcmVDYWxsICYmIGNvbnRhaW5zTm9kZU9yRXF1YWwoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0UmVxdWlyZUNhbGwpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG5leHRTdGF0ZW1lbnQgJiZcbiAgICAgICAgICAgICAoIW5leHRSZXF1aXJlQ2FsbCB8fCAhY29udGFpbnNOb2RlT3JFcXVhbChuZXh0U3RhdGVtZW50LCBuZXh0UmVxdWlyZUNhbGwpKSkge1xuXG4gICAgICAgICAgICBjaGVja0Zvck5ld0xpbmUoc3RhdGVtZW50V2l0aFJlcXVpcmVDYWxsLCBuZXh0U3RhdGVtZW50LCAncmVxdWlyZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IGluY3JlbWVudExldmVsLFxuICAgICAgQmxvY2tTdGF0ZW1lbnQ6IGluY3JlbWVudExldmVsLFxuICAgICAgT2JqZWN0RXhwcmVzc2lvbjogaW5jcmVtZW50TGV2ZWwsXG4gICAgICBEZWNvcmF0b3I6IGluY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRGVjbGFyYXRpb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Z1bmN0aW9uRXhwcmVzc2lvbjpleGl0JzogZGVjcmVtZW50TGV2ZWwsXG4gICAgICAnQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgICAgJ0Jsb2NrU3RhdGVtZW50OmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdPYmplY3RFeHByZXNzaW9uOmV4aXQnOiBkZWNyZW1lbnRMZXZlbCxcbiAgICAgICdEZWNvcmF0b3I6ZXhpdCc6IGRlY3JlbWVudExldmVsLFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-absolute-path.js b/node_modules/eslint-plugin-import/lib/rules/no-absolute-path.js
index c1bad1d..20f8838 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-absolute-path.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-absolute-path.js
@@ -21,4 +21,4 @@
var options = Object.assign({ esmodule: true, commonjs: true }, context.options[0]);
return (0, _moduleVisitor2['default'])(reportIfAbsolute, options);
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1hYnNvbHV0ZS1wYXRoLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwicmVwb3J0SWZBYnNvbHV0ZSIsInNvdXJjZSIsInZhbHVlIiwicmVwb3J0Iiwib3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsImVzbW9kdWxlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0E7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsa0JBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLENBQUUsdUNBQUYsQ0FMSixFQURTOzs7QUFTZkMsdUJBQVEsZ0JBQVVDLE9BQVYsRUFBbUI7QUFDekIsZUFBU0MsZ0JBQVQsQ0FBMEJDLE1BQTFCLEVBQWtDO0FBQ2hDLFlBQUksT0FBT0EsT0FBT0MsS0FBZCxLQUF3QixRQUF4QixJQUFvQyw0QkFBV0QsT0FBT0MsS0FBbEIsQ0FBeEMsRUFBa0U7QUFDaEVILGtCQUFRSSxNQUFSLENBQWVGLE1BQWYsRUFBdUIsOENBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxVQUFNRyxVQUFVQyxPQUFPQyxNQUFQLENBQWMsRUFBRUMsVUFBVSxJQUFaLEVBQWtCQyxVQUFVLElBQTVCLEVBQWQsRUFBa0RULFFBQVFLLE9BQVIsQ0FBZ0IsQ0FBaEIsQ0FBbEQsQ0FBaEI7QUFDQSxhQUFPLGdDQUFjSixnQkFBZCxFQUFnQ0ksT0FBaEMsQ0FBUDtBQUNELEtBVEQsaUJBVGUsRUFBakIiLCJmaWxlIjoibm8tYWJzb2x1dGUtcGF0aC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb2R1bGVWaXNpdG9yLCB7IG1ha2VPcHRpb25zU2NoZW1hIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCB7IGlzQWJzb2x1dGUgfSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tYWJzb2x1dGUtcGF0aCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbIG1ha2VPcHRpb25zU2NoZW1hKCkgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgZnVuY3Rpb24gcmVwb3J0SWZBYnNvbHV0ZShzb3VyY2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlLnZhbHVlID09PSAnc3RyaW5nJyAmJiBpc0Fic29sdXRlKHNvdXJjZS52YWx1ZSkpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoc291cmNlLCAnRG8gbm90IGltcG9ydCBtb2R1bGVzIHVzaW5nIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGVzbW9kdWxlOiB0cnVlLCBjb21tb25qczogdHJ1ZSB9LCBjb250ZXh0Lm9wdGlvbnNbMF0pO1xuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKHJlcG9ydElmQWJzb2x1dGUsIG9wdGlvbnMpO1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1hYnNvbHV0ZS1wYXRoLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwicmVwb3J0SWZBYnNvbHV0ZSIsInNvdXJjZSIsInZhbHVlIiwicmVwb3J0Iiwib3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsImVzbW9kdWxlIiwiY29tbW9uanMiXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0E7QUFDQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsa0JBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLENBQUUsdUNBQUYsQ0FMSixFQURTOzs7QUFTZkMsUUFUZSwrQkFTUkMsT0FUUSxFQVNDO0FBQ2QsZUFBU0MsZ0JBQVQsQ0FBMEJDLE1BQTFCLEVBQWtDO0FBQ2hDLFlBQUksT0FBT0EsT0FBT0MsS0FBZCxLQUF3QixRQUF4QixJQUFvQyw0QkFBV0QsT0FBT0MsS0FBbEIsQ0FBeEMsRUFBa0U7QUFDaEVILGtCQUFRSSxNQUFSLENBQWVGLE1BQWYsRUFBdUIsOENBQXZCO0FBQ0Q7QUFDRjs7QUFFRCxVQUFNRyxVQUFVQyxPQUFPQyxNQUFQLENBQWMsRUFBRUMsVUFBVSxJQUFaLEVBQWtCQyxVQUFVLElBQTVCLEVBQWQsRUFBa0RULFFBQVFLLE9BQVIsQ0FBZ0IsQ0FBaEIsQ0FBbEQsQ0FBaEI7QUFDQSxhQUFPLGdDQUFjSixnQkFBZCxFQUFnQ0ksT0FBaEMsQ0FBUDtBQUNELEtBbEJjLG1CQUFqQiIsImZpbGUiOiJuby1hYnNvbHV0ZS1wYXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZHVsZVZpc2l0b3IsIHsgbWFrZU9wdGlvbnNTY2hlbWEgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IHsgaXNBYnNvbHV0ZSB9IGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1hYnNvbHV0ZS1wYXRoJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFsgbWFrZU9wdGlvbnNTY2hlbWEoKSBdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgZnVuY3Rpb24gcmVwb3J0SWZBYnNvbHV0ZShzb3VyY2UpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlLnZhbHVlID09PSAnc3RyaW5nJyAmJiBpc0Fic29sdXRlKHNvdXJjZS52YWx1ZSkpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoc291cmNlLCAnRG8gbm90IGltcG9ydCBtb2R1bGVzIHVzaW5nIGFuIGFic29sdXRlIHBhdGgnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGVzbW9kdWxlOiB0cnVlLCBjb21tb25qczogdHJ1ZSB9LCBjb250ZXh0Lm9wdGlvbnNbMF0pO1xuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKHJlcG9ydElmQWJzb2x1dGUsIG9wdGlvbnMpO1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-amd.js b/node_modules/eslint-plugin-import/lib/rules/no-amd.js
index dbc08d8..3138f28 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-amd.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-amd.js
@@ -43,4 +43,4 @@
* @fileoverview Rule to prefer imports to AMD
* @author Jamund Ferguson
*/
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1hbWQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJub2RlIiwiZ2V0U2NvcGUiLCJjYWxsZWUiLCJuYW1lIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibW9kdWxlcyIsInJlcG9ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLFFBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLHVCQUFRLGdCQUFVQyxPQUFWLEVBQW1CO0FBQ3pCLGFBQU87QUFDTCx1Q0FBa0Isd0JBQVVDLElBQVYsRUFBZ0I7QUFDaEMsZ0JBQUlELFFBQVFFLFFBQVIsR0FBbUJQLElBQW5CLEtBQTRCLFFBQWhDLEVBQTBDOztBQUUxQyxnQkFBSU0sS0FBS0UsTUFBTCxDQUFZUixJQUFaLEtBQXFCLFlBQXpCLEVBQXVDO0FBQ3ZDLGdCQUFJTSxLQUFLRSxNQUFMLENBQVlDLElBQVosS0FBcUIsU0FBckI7QUFDQUgsaUJBQUtFLE1BQUwsQ0FBWUMsSUFBWixLQUFxQixRQUR6QixFQUNtQzs7QUFFbkM7QUFDQSxnQkFBSUgsS0FBS0ksU0FBTCxDQUFlQyxNQUFmLEtBQTBCLENBQTlCLEVBQWlDOztBQUVqQyxnQkFBTUMsVUFBVU4sS0FBS0ksU0FBTCxDQUFlLENBQWYsQ0FBaEI7QUFDQSxnQkFBSUUsUUFBUVosSUFBUixLQUFpQixpQkFBckIsRUFBd0M7O0FBRXhDOztBQUVBSyxvQkFBUVEsTUFBUixDQUFlUCxJQUFmLDhDQUF3REEsS0FBS0UsTUFBTCxDQUFZQyxJQUFwRTtBQUNELFdBaEJELHlCQURLLEVBQVA7OztBQW9CRCxLQXJCRCxpQkFUZSxFQUFqQixDLENBWEEiLCJmaWxlIjoibm8tYW1kLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gcHJlZmVyIGltcG9ydHMgdG8gQU1EXG4gKiBAYXV0aG9yIEphbXVuZCBGZXJndXNvblxuICovXG5cbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZSBEZWZpbml0aW9uXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWFtZCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdDYWxsRXhwcmVzc2lvbic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChjb250ZXh0LmdldFNjb3BlKCkudHlwZSAhPT0gJ21vZHVsZScpIHJldHVybjtcblxuICAgICAgICBpZiAobm9kZS5jYWxsZWUudHlwZSAhPT0gJ0lkZW50aWZpZXInKSByZXR1cm47XG4gICAgICAgIGlmIChub2RlLmNhbGxlZS5uYW1lICE9PSAncmVxdWlyZScgJiZcbiAgICAgICAgICAgIG5vZGUuY2FsbGVlLm5hbWUgIT09ICdkZWZpbmUnKSByZXR1cm47XG5cbiAgICAgICAgLy8gdG9kbzogY2FwdHVyZSBkZWZpbmUoKHJlcXVpcmUsIG1vZHVsZSwgZXhwb3J0cykgPT4ge30pIGZvcm0/XG4gICAgICAgIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDIpIHJldHVybjtcblxuICAgICAgICBjb25zdCBtb2R1bGVzID0gbm9kZS5hcmd1bWVudHNbMF07XG4gICAgICAgIGlmIChtb2R1bGVzLnR5cGUgIT09ICdBcnJheUV4cHJlc3Npb24nKSByZXR1cm47XG5cbiAgICAgICAgLy8gdG9kbzogY2hlY2sgc2Vjb25kIGFyZyB0eXBlPyAoaWRlbnRpZmllciBvciBjYWxsYmFjaylcblxuICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBgRXhwZWN0ZWQgaW1wb3J0cyBpbnN0ZWFkIG9mIEFNRCAke25vZGUuY2FsbGVlLm5hbWV9KCkuYCk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1hbWQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJub2RlIiwiZ2V0U2NvcGUiLCJjYWxsZWUiLCJuYW1lIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwibW9kdWxlcyIsInJlcG9ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLFFBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLFFBVGUsK0JBU1JDLE9BVFEsRUFTQztBQUNkLGFBQU87QUFDTCx1Q0FBa0Isd0JBQVVDLElBQVYsRUFBZ0I7QUFDaEMsZ0JBQUlELFFBQVFFLFFBQVIsR0FBbUJQLElBQW5CLEtBQTRCLFFBQWhDLEVBQTBDOztBQUUxQyxnQkFBSU0sS0FBS0UsTUFBTCxDQUFZUixJQUFaLEtBQXFCLFlBQXpCLEVBQXVDO0FBQ3ZDLGdCQUFJTSxLQUFLRSxNQUFMLENBQVlDLElBQVosS0FBcUIsU0FBckI7QUFDQUgsaUJBQUtFLE1BQUwsQ0FBWUMsSUFBWixLQUFxQixRQUR6QixFQUNtQzs7QUFFbkM7QUFDQSxnQkFBSUgsS0FBS0ksU0FBTCxDQUFlQyxNQUFmLEtBQTBCLENBQTlCLEVBQWlDOztBQUVqQyxnQkFBTUMsVUFBVU4sS0FBS0ksU0FBTCxDQUFlLENBQWYsQ0FBaEI7QUFDQSxnQkFBSUUsUUFBUVosSUFBUixLQUFpQixpQkFBckIsRUFBd0M7O0FBRXhDOztBQUVBSyxvQkFBUVEsTUFBUixDQUFlUCxJQUFmLDhDQUF3REEsS0FBS0UsTUFBTCxDQUFZQyxJQUFwRTtBQUNELFdBaEJELHlCQURLLEVBQVA7OztBQW9CRCxLQTlCYyxtQkFBakIsQyxDQVhBIiwiZmlsZSI6Im5vLWFtZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHByZWZlciBpbXBvcnRzIHRvIEFNRFxuICogQGF1dGhvciBKYW11bmQgRmVyZ3Vzb25cbiAqL1xuXG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1hbWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0NhbGxFeHByZXNzaW9uJzogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKGNvbnRleHQuZ2V0U2NvcGUoKS50eXBlICE9PSAnbW9kdWxlJykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChub2RlLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicpIHJldHVybjtcbiAgICAgICAgaWYgKG5vZGUuY2FsbGVlLm5hbWUgIT09ICdyZXF1aXJlJyAmJlxuICAgICAgICAgICAgbm9kZS5jYWxsZWUubmFtZSAhPT0gJ2RlZmluZScpIHJldHVybjtcblxuICAgICAgICAvLyB0b2RvOiBjYXB0dXJlIGRlZmluZSgocmVxdWlyZSwgbW9kdWxlLCBleHBvcnRzKSA9PiB7fSkgZm9ybT9cbiAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPT0gMikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBub2RlLmFyZ3VtZW50c1swXTtcbiAgICAgICAgaWYgKG1vZHVsZXMudHlwZSAhPT0gJ0FycmF5RXhwcmVzc2lvbicpIHJldHVybjtcblxuICAgICAgICAvLyB0b2RvOiBjaGVjayBzZWNvbmQgYXJnIHR5cGU/IChpZGVudGlmaWVyIG9yIGNhbGxiYWNrKVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGBFeHBlY3RlZCBpbXBvcnRzIGluc3RlYWQgb2YgQU1EICR7bm9kZS5jYWxsZWUubmFtZX0oKS5gKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-anonymous-default-export.js b/node_modules/eslint-plugin-import/lib/rules/no-anonymous-default-export.js
index d8cdce7..42e1f64 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-anonymous-default-export.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-anonymous-default-export.js
@@ -101,4 +101,4 @@
}return ExportDefaultDeclaration;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQuanMiXSwibmFtZXMiOlsiZGVmcyIsIkFycmF5RXhwcmVzc2lvbiIsIm9wdGlvbiIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiwiQ2FsbEV4cHJlc3Npb24iLCJDbGFzc0RlY2xhcmF0aW9uIiwiZm9yYmlkIiwibm9kZSIsImRlY2xhcmF0aW9uIiwiaWQiLCJGdW5jdGlvbkRlY2xhcmF0aW9uIiwiTGl0ZXJhbCIsIk9iamVjdEV4cHJlc3Npb24iLCJUZW1wbGF0ZUxpdGVyYWwiLCJzY2hlbWFQcm9wZXJ0aWVzIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsInJlZHVjZSIsImFjYyIsImRlZiIsInR5cGUiLCJkZWZhdWx0cyIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb250ZXh0Iiwib3B0aW9ucyIsImFzc2lnbiIsInJlcG9ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxxQztBQUNBLDBCLHlJQU5BOzs7c0tBUUEsSUFBTUEsT0FBTyxFQUNYQyxpQkFBaUI7QUFDZkMsWUFBUSxZQURPO0FBRWZDLGlCQUFhLG9EQUZFO0FBR2ZDLGFBQVMsK0RBSE0sRUFETjs7QUFNWEMsMkJBQXlCO0FBQ3ZCSCxZQUFRLG9CQURlO0FBRXZCQyxpQkFBYSw2REFGVTtBQUd2QkMsYUFBUyx3RUFIYyxFQU5kOztBQVdYRSxrQkFBZ0I7QUFDZEosWUFBUSxxQkFETTtBQUVkQyxpQkFBYSwyREFGQztBQUdkQyxhQUFTLHFFQUhLO0FBSWQsZUFBUyxJQUpLLEVBWEw7O0FBaUJYRyxvQkFBa0I7QUFDaEJMLFlBQVEscUJBRFE7QUFFaEJDLGlCQUFhLDhEQUZHO0FBR2hCQyxhQUFTLDhDQUhPO0FBSWhCSSx5QkFBUSxnQkFBQ0MsSUFBRCxVQUFVLENBQUNBLEtBQUtDLFdBQUwsQ0FBaUJDLEVBQTVCLEVBQVIsaUJBSmdCLEVBakJQOztBQXVCWEMsdUJBQXFCO0FBQ25CVixZQUFRLHdCQURXO0FBRW5CQyxpQkFBYSxpRUFGTTtBQUduQkMsYUFBUyxpREFIVTtBQUluQkkseUJBQVEsZ0JBQUNDLElBQUQsVUFBVSxDQUFDQSxLQUFLQyxXQUFMLENBQWlCQyxFQUE1QixFQUFSLGlCQUptQixFQXZCVjs7QUE2QlhFLFdBQVM7QUFDUFgsWUFBUSxjQUREO0FBRVBDLGlCQUFhLHFEQUZOO0FBR1BDLGFBQVMsaUVBSEYsRUE3QkU7O0FBa0NYVSxvQkFBa0I7QUFDaEJaLFlBQVEsYUFEUTtBQUVoQkMsaUJBQWEsZ0VBRkc7QUFHaEJDLGFBQVMsZ0VBSE8sRUFsQ1A7O0FBdUNYVyxtQkFBaUI7QUFDZmIsWUFBUSxjQURPO0FBRWZDLGlCQUFhLHFEQUZFO0FBR2ZDLGFBQVMsaUVBSE0sRUF2Q04sRUFBYjs7OztBQThDQSxJQUFNWSxtQkFBbUJDLE9BQU9DLElBQVAsQ0FBWWxCLElBQVo7QUFDdEJtQixHQURzQixDQUNsQixVQUFDQyxHQUFELFVBQVNwQixLQUFLb0IsR0FBTCxDQUFULEVBRGtCO0FBRXRCQyxNQUZzQixDQUVmLFVBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFjO0FBQ3BCRCxNQUFJQyxJQUFJckIsTUFBUixJQUFrQjtBQUNoQkMsaUJBQWFvQixJQUFJcEIsV0FERDtBQUVoQnFCLFVBQU0sU0FGVSxFQUFsQjs7O0FBS0EsU0FBT0YsR0FBUDtBQUNELENBVHNCLEVBU3BCLEVBVG9CLENBQXpCOztBQVdBLElBQU1HLFdBQVdSLE9BQU9DLElBQVAsQ0FBWWxCLElBQVo7QUFDZG1CLEdBRGMsQ0FDVixVQUFDQyxHQUFELFVBQVNwQixLQUFLb0IsR0FBTCxDQUFULEVBRFU7QUFFZEMsTUFGYyxDQUVQLFVBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFjO0FBQ3BCRCxNQUFJQyxJQUFJckIsTUFBUixJQUFrQixzQkFBSXFCLEdBQUosRUFBUyxTQUFULElBQXNCQSxjQUF0QixHQUFvQyxLQUF0RDtBQUNBLFNBQU9ELEdBQVA7QUFDRCxDQUxjLEVBS1osRUFMWSxDQUFqQjs7QUFPQUksT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pKLFVBQU0sWUFERjtBQUVKSyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsNkJBQVIsQ0FERCxFQUZGOzs7QUFNSkMsWUFBUTtBQUNOO0FBQ0VQLFlBQU0sUUFEUjtBQUVFUSxrQkFBWWhCLGdCQUZkO0FBR0UsOEJBQXdCLEtBSDFCLEVBRE0sQ0FOSixFQURTOzs7OztBQWdCZmlCLHVCQUFRLGdCQUFVQyxPQUFWLEVBQW1CO0FBQ3pCLFVBQU1DLFVBQVVsQixPQUFPbUIsTUFBUCxDQUFjLEVBQWQsRUFBa0JYLFFBQWxCLEVBQTRCUyxRQUFRQyxPQUFSLENBQWdCLENBQWhCLENBQTVCLENBQWhCOztBQUVBLGFBQU87QUFDTCxpREFBNEIsa0NBQUMxQixJQUFELEVBQVU7QUFDcEMsZ0JBQU1jLE1BQU12QixLQUFLUyxLQUFLQyxXQUFMLENBQWlCYyxJQUF0QixDQUFaOztBQUVBO0FBQ0E7QUFDQSxnQkFBSUQsT0FBTyxDQUFDWSxRQUFRWixJQUFJckIsTUFBWixDQUFSLEtBQWdDLENBQUNxQixJQUFJZixNQUFMLElBQWVlLElBQUlmLE1BQUosQ0FBV0MsSUFBWCxDQUEvQyxDQUFKLEVBQXNFO0FBQ3BFeUIsc0JBQVFHLE1BQVIsQ0FBZSxFQUFFNUIsVUFBRixFQUFRTCxTQUFTbUIsSUFBSW5CLE9BQXJCLEVBQWY7QUFDRDtBQUNGLFdBUkQsbUNBREssRUFBUDs7QUFXRCxLQWRELGlCQWhCZSxFQUFqQiIsImZpbGUiOiJuby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyBhbm9ueW1vdXMgZGVmYXVsdCBleHBvcnRzLlxuICogQGF1dGhvciBEdW5jYW4gQmVldmVyc1xuICovXG5cbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGhhcyBmcm9tICdoYXMnO1xuXG5jb25zdCBkZWZzID0ge1xuICBBcnJheUV4cHJlc3Npb246IHtcbiAgICBvcHRpb246ICdhbGxvd0FycmF5JyxcbiAgICBkZXNjcmlwdGlvbjogJ0lmIGBmYWxzZWAsIHdpbGwgcmVwb3J0IGRlZmF1bHQgZXhwb3J0IG9mIGFuIGFycmF5JyxcbiAgICBtZXNzYWdlOiAnQXNzaWduIGFycmF5IHRvIGEgdmFyaWFibGUgYmVmb3JlIGV4cG9ydGluZyBhcyBtb2R1bGUgZGVmYXVsdCcsXG4gIH0sXG4gIEFycm93RnVuY3Rpb25FeHByZXNzaW9uOiB7XG4gICAgb3B0aW9uOiAnYWxsb3dBcnJvd0Z1bmN0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0lmIGBmYWxzZWAsIHdpbGwgcmVwb3J0IGRlZmF1bHQgZXhwb3J0IG9mIGFuIGFycm93IGZ1bmN0aW9uJyxcbiAgICBtZXNzYWdlOiAnQXNzaWduIGFycm93IGZ1bmN0aW9uIHRvIGEgdmFyaWFibGUgYmVmb3JlIGV4cG9ydGluZyBhcyBtb2R1bGUgZGVmYXVsdCcsXG4gIH0sXG4gIENhbGxFeHByZXNzaW9uOiB7XG4gICAgb3B0aW9uOiAnYWxsb3dDYWxsRXhwcmVzc2lvbicsXG4gICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBkZWZhdWx0IGV4cG9ydCBvZiBhIGZ1bmN0aW9uIGNhbGwnLFxuICAgIG1lc3NhZ2U6ICdBc3NpZ24gY2FsbCByZXN1bHQgdG8gYSB2YXJpYWJsZSBiZWZvcmUgZXhwb3J0aW5nIGFzIG1vZHVsZSBkZWZhdWx0JyxcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBDbGFzc0RlY2xhcmF0aW9uOiB7XG4gICAgb3B0aW9uOiAnYWxsb3dBbm9ueW1vdXNDbGFzcycsXG4gICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBkZWZhdWx0IGV4cG9ydCBvZiBhbiBhbm9ueW1vdXMgY2xhc3MnLFxuICAgIG1lc3NhZ2U6ICdVbmV4cGVjdGVkIGRlZmF1bHQgZXhwb3J0IG9mIGFub255bW91cyBjbGFzcycsXG4gICAgZm9yYmlkOiAobm9kZSkgPT4gIW5vZGUuZGVjbGFyYXRpb24uaWQsXG4gIH0sXG4gIEZ1bmN0aW9uRGVjbGFyYXRpb246IHtcbiAgICBvcHRpb246ICdhbGxvd0Fub255bW91c0Z1bmN0aW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0lmIGBmYWxzZWAsIHdpbGwgcmVwb3J0IGRlZmF1bHQgZXhwb3J0IG9mIGFuIGFub255bW91cyBmdW5jdGlvbicsXG4gICAgbWVzc2FnZTogJ1VuZXhwZWN0ZWQgZGVmYXVsdCBleHBvcnQgb2YgYW5vbnltb3VzIGZ1bmN0aW9uJyxcbiAgICBmb3JiaWQ6IChub2RlKSA9PiAhbm9kZS5kZWNsYXJhdGlvbi5pZCxcbiAgfSxcbiAgTGl0ZXJhbDoge1xuICAgIG9wdGlvbjogJ2FsbG93TGl0ZXJhbCcsXG4gICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBkZWZhdWx0IGV4cG9ydCBvZiBhIGxpdGVyYWwnLFxuICAgIG1lc3NhZ2U6ICdBc3NpZ24gbGl0ZXJhbCB0byBhIHZhcmlhYmxlIGJlZm9yZSBleHBvcnRpbmcgYXMgbW9kdWxlIGRlZmF1bHQnLFxuICB9LFxuICBPYmplY3RFeHByZXNzaW9uOiB7XG4gICAgb3B0aW9uOiAnYWxsb3dPYmplY3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnSWYgYGZhbHNlYCwgd2lsbCByZXBvcnQgZGVmYXVsdCBleHBvcnQgb2YgYW4gb2JqZWN0IGV4cHJlc3Npb24nLFxuICAgIG1lc3NhZ2U6ICdBc3NpZ24gb2JqZWN0IHRvIGEgdmFyaWFibGUgYmVmb3JlIGV4cG9ydGluZyBhcyBtb2R1bGUgZGVmYXVsdCcsXG4gIH0sXG4gIFRlbXBsYXRlTGl0ZXJhbDoge1xuICAgIG9wdGlvbjogJ2FsbG93TGl0ZXJhbCcsXG4gICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBkZWZhdWx0IGV4cG9ydCBvZiBhIGxpdGVyYWwnLFxuICAgIG1lc3NhZ2U6ICdBc3NpZ24gbGl0ZXJhbCB0byBhIHZhcmlhYmxlIGJlZm9yZSBleHBvcnRpbmcgYXMgbW9kdWxlIGRlZmF1bHQnLFxuICB9LFxufTtcblxuY29uc3Qgc2NoZW1hUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGRlZnMpXG4gIC5tYXAoKGtleSkgPT4gZGVmc1trZXldKVxuICAucmVkdWNlKChhY2MsIGRlZikgPT4ge1xuICAgIGFjY1tkZWYub3B0aW9uXSA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWYuZGVzY3JpcHRpb24sXG4gICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgfTtcblxuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuY29uc3QgZGVmYXVsdHMgPSBPYmplY3Qua2V5cyhkZWZzKVxuICAubWFwKChrZXkpID0+IGRlZnNba2V5XSlcbiAgLnJlZHVjZSgoYWNjLCBkZWYpID0+IHtcbiAgICBhY2NbZGVmLm9wdGlvbl0gPSBoYXMoZGVmLCAnZGVmYXVsdCcpID8gZGVmLmRlZmF1bHQgOiBmYWxzZTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JyksXG4gICAgfSxcblxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczogc2NoZW1hUHJvcGVydGllcyxcbiAgICAgICAgJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJzogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgY29udGV4dC5vcHRpb25zWzBdKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJzogKG5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1tub2RlLmRlY2xhcmF0aW9uLnR5cGVdO1xuXG4gICAgICAgIC8vIFJlY29nbml6ZWQgbm9kZSB0eXBlIGFuZCBhbGxvd2VkIGJ5IGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIC8vICAgYW5kIGhhcyBubyBmb3JiaWQgY2hlY2ssIG9yIGZvcmJpZCBjaGVjayByZXR1cm4gdmFsdWUgaXMgdHJ1dGh5XG4gICAgICAgIGlmIChkZWYgJiYgIW9wdGlvbnNbZGVmLm9wdGlvbl0gJiYgKCFkZWYuZm9yYmlkIHx8IGRlZi5mb3JiaWQobm9kZSkpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlOiBkZWYubWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQuanMiXSwibmFtZXMiOlsiZGVmcyIsIkFycmF5RXhwcmVzc2lvbiIsIm9wdGlvbiIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsIkFycm93RnVuY3Rpb25FeHByZXNzaW9uIiwiQ2FsbEV4cHJlc3Npb24iLCJDbGFzc0RlY2xhcmF0aW9uIiwiZm9yYmlkIiwibm9kZSIsImRlY2xhcmF0aW9uIiwiaWQiLCJGdW5jdGlvbkRlY2xhcmF0aW9uIiwiTGl0ZXJhbCIsIk9iamVjdEV4cHJlc3Npb24iLCJUZW1wbGF0ZUxpdGVyYWwiLCJzY2hlbWFQcm9wZXJ0aWVzIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsInJlZHVjZSIsImFjYyIsImRlZiIsInR5cGUiLCJkZWZhdWx0cyIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwiZG9jcyIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb250ZXh0Iiwib3B0aW9ucyIsImFzc2lnbiIsInJlcG9ydCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxxQztBQUNBLDBCLHlJQU5BOzs7c0tBUUEsSUFBTUEsT0FBTyxFQUNYQyxpQkFBaUI7QUFDZkMsWUFBUSxZQURPO0FBRWZDLGlCQUFhLG9EQUZFO0FBR2ZDLGFBQVMsK0RBSE0sRUFETjs7QUFNWEMsMkJBQXlCO0FBQ3ZCSCxZQUFRLG9CQURlO0FBRXZCQyxpQkFBYSw2REFGVTtBQUd2QkMsYUFBUyx3RUFIYyxFQU5kOztBQVdYRSxrQkFBZ0I7QUFDZEosWUFBUSxxQkFETTtBQUVkQyxpQkFBYSwyREFGQztBQUdkQyxhQUFTLHFFQUhLO0FBSWQsZUFBUyxJQUpLLEVBWEw7O0FBaUJYRyxvQkFBa0I7QUFDaEJMLFlBQVEscUJBRFE7QUFFaEJDLGlCQUFhLDhEQUZHO0FBR2hCQyxhQUFTLDhDQUhPO0FBSWhCSSx5QkFBUSxnQkFBQ0MsSUFBRCxVQUFVLENBQUNBLEtBQUtDLFdBQUwsQ0FBaUJDLEVBQTVCLEVBQVIsaUJBSmdCLEVBakJQOztBQXVCWEMsdUJBQXFCO0FBQ25CVixZQUFRLHdCQURXO0FBRW5CQyxpQkFBYSxpRUFGTTtBQUduQkMsYUFBUyxpREFIVTtBQUluQkkseUJBQVEsZ0JBQUNDLElBQUQsVUFBVSxDQUFDQSxLQUFLQyxXQUFMLENBQWlCQyxFQUE1QixFQUFSLGlCQUptQixFQXZCVjs7QUE2QlhFLFdBQVM7QUFDUFgsWUFBUSxjQUREO0FBRVBDLGlCQUFhLHFEQUZOO0FBR1BDLGFBQVMsaUVBSEYsRUE3QkU7O0FBa0NYVSxvQkFBa0I7QUFDaEJaLFlBQVEsYUFEUTtBQUVoQkMsaUJBQWEsZ0VBRkc7QUFHaEJDLGFBQVMsZ0VBSE8sRUFsQ1A7O0FBdUNYVyxtQkFBaUI7QUFDZmIsWUFBUSxjQURPO0FBRWZDLGlCQUFhLHFEQUZFO0FBR2ZDLGFBQVMsaUVBSE0sRUF2Q04sRUFBYjs7OztBQThDQSxJQUFNWSxtQkFBbUJDLE9BQU9DLElBQVAsQ0FBWWxCLElBQVo7QUFDdEJtQixHQURzQixDQUNsQixVQUFDQyxHQUFELFVBQVNwQixLQUFLb0IsR0FBTCxDQUFULEVBRGtCO0FBRXRCQyxNQUZzQixDQUVmLFVBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFjO0FBQ3BCRCxNQUFJQyxJQUFJckIsTUFBUixJQUFrQjtBQUNoQkMsaUJBQWFvQixJQUFJcEIsV0FERDtBQUVoQnFCLFVBQU0sU0FGVSxFQUFsQjs7O0FBS0EsU0FBT0YsR0FBUDtBQUNELENBVHNCLEVBU3BCLEVBVG9CLENBQXpCOztBQVdBLElBQU1HLFdBQVdSLE9BQU9DLElBQVAsQ0FBWWxCLElBQVo7QUFDZG1CLEdBRGMsQ0FDVixVQUFDQyxHQUFELFVBQVNwQixLQUFLb0IsR0FBTCxDQUFULEVBRFU7QUFFZEMsTUFGYyxDQUVQLFVBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFjO0FBQ3BCRCxNQUFJQyxJQUFJckIsTUFBUixJQUFrQixzQkFBSXFCLEdBQUosRUFBUyxTQUFULElBQXNCQSxjQUF0QixHQUFvQyxLQUF0RDtBQUNBLFNBQU9ELEdBQVA7QUFDRCxDQUxjLEVBS1osRUFMWSxDQUFqQjs7QUFPQUksT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pKLFVBQU0sWUFERjtBQUVKSyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsNkJBQVIsQ0FERCxFQUZGOzs7QUFNSkMsWUFBUTtBQUNOO0FBQ0VQLFlBQU0sUUFEUjtBQUVFUSxrQkFBWWhCLGdCQUZkO0FBR0UsOEJBQXdCLEtBSDFCLEVBRE0sQ0FOSixFQURTOzs7OztBQWdCZmlCLFFBaEJlLCtCQWdCUkMsT0FoQlEsRUFnQkM7QUFDZCxVQUFNQyxVQUFVbEIsT0FBT21CLE1BQVAsQ0FBYyxFQUFkLEVBQWtCWCxRQUFsQixFQUE0QlMsUUFBUUMsT0FBUixDQUFnQixDQUFoQixDQUE1QixDQUFoQjs7QUFFQSxhQUFPO0FBQ0wsaURBQTRCLGtDQUFDMUIsSUFBRCxFQUFVO0FBQ3BDLGdCQUFNYyxNQUFNdkIsS0FBS1MsS0FBS0MsV0FBTCxDQUFpQmMsSUFBdEIsQ0FBWjs7QUFFQTtBQUNBO0FBQ0EsZ0JBQUlELE9BQU8sQ0FBQ1ksUUFBUVosSUFBSXJCLE1BQVosQ0FBUixLQUFnQyxDQUFDcUIsSUFBSWYsTUFBTCxJQUFlZSxJQUFJZixNQUFKLENBQVdDLElBQVgsQ0FBL0MsQ0FBSixFQUFzRTtBQUNwRXlCLHNCQUFRRyxNQUFSLENBQWUsRUFBRTVCLFVBQUYsRUFBUUwsU0FBU21CLElBQUluQixPQUFyQixFQUFmO0FBQ0Q7QUFDRixXQVJELG1DQURLLEVBQVA7O0FBV0QsS0E5QmMsbUJBQWpCIiwiZmlsZSI6Im5vLWFub255bW91cy1kZWZhdWx0LWV4cG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVvdmVydmlldyBSdWxlIHRvIGRpc2FsbG93IGFub255bW91cyBkZWZhdWx0IGV4cG9ydHMuXG4gKiBAYXV0aG9yIER1bmNhbiBCZWV2ZXJzXG4gKi9cblxuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5pbXBvcnQgaGFzIGZyb20gJ2hhcyc7XG5cbmNvbnN0IGRlZnMgPSB7XG4gIEFycmF5RXhwcmVzc2lvbjoge1xuICAgIG9wdGlvbjogJ2FsbG93QXJyYXknLFxuICAgIGRlc2NyaXB0aW9uOiAnSWYgYGZhbHNlYCwgd2lsbCByZXBvcnQgZGVmYXVsdCBleHBvcnQgb2YgYW4gYXJyYXknLFxuICAgIG1lc3NhZ2U6ICdBc3NpZ24gYXJyYXkgdG8gYSB2YXJpYWJsZSBiZWZvcmUgZXhwb3J0aW5nIGFzIG1vZHVsZSBkZWZhdWx0JyxcbiAgfSxcbiAgQXJyb3dGdW5jdGlvbkV4cHJlc3Npb246IHtcbiAgICBvcHRpb246ICdhbGxvd0Fycm93RnVuY3Rpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnSWYgYGZhbHNlYCwgd2lsbCByZXBvcnQgZGVmYXVsdCBleHBvcnQgb2YgYW4gYXJyb3cgZnVuY3Rpb24nLFxuICAgIG1lc3NhZ2U6ICdBc3NpZ24gYXJyb3cgZnVuY3Rpb24gdG8gYSB2YXJpYWJsZSBiZWZvcmUgZXhwb3J0aW5nIGFzIG1vZHVsZSBkZWZhdWx0JyxcbiAgfSxcbiAgQ2FsbEV4cHJlc3Npb246IHtcbiAgICBvcHRpb246ICdhbGxvd0NhbGxFeHByZXNzaW9uJyxcbiAgICBkZXNjcmlwdGlvbjogJ0lmIGBmYWxzZWAsIHdpbGwgcmVwb3J0IGRlZmF1bHQgZXhwb3J0IG9mIGEgZnVuY3Rpb24gY2FsbCcsXG4gICAgbWVzc2FnZTogJ0Fzc2lnbiBjYWxsIHJlc3VsdCB0byBhIHZhcmlhYmxlIGJlZm9yZSBleHBvcnRpbmcgYXMgbW9kdWxlIGRlZmF1bHQnLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIENsYXNzRGVjbGFyYXRpb246IHtcbiAgICBvcHRpb246ICdhbGxvd0Fub255bW91c0NsYXNzJyxcbiAgICBkZXNjcmlwdGlvbjogJ0lmIGBmYWxzZWAsIHdpbGwgcmVwb3J0IGRlZmF1bHQgZXhwb3J0IG9mIGFuIGFub255bW91cyBjbGFzcycsXG4gICAgbWVzc2FnZTogJ1VuZXhwZWN0ZWQgZGVmYXVsdCBleHBvcnQgb2YgYW5vbnltb3VzIGNsYXNzJyxcbiAgICBmb3JiaWQ6IChub2RlKSA9PiAhbm9kZS5kZWNsYXJhdGlvbi5pZCxcbiAgfSxcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbjoge1xuICAgIG9wdGlvbjogJ2FsbG93QW5vbnltb3VzRnVuY3Rpb24nLFxuICAgIGRlc2NyaXB0aW9uOiAnSWYgYGZhbHNlYCwgd2lsbCByZXBvcnQgZGVmYXVsdCBleHBvcnQgb2YgYW4gYW5vbnltb3VzIGZ1bmN0aW9uJyxcbiAgICBtZXNzYWdlOiAnVW5leHBlY3RlZCBkZWZhdWx0IGV4cG9ydCBvZiBhbm9ueW1vdXMgZnVuY3Rpb24nLFxuICAgIGZvcmJpZDogKG5vZGUpID0+ICFub2RlLmRlY2xhcmF0aW9uLmlkLFxuICB9LFxuICBMaXRlcmFsOiB7XG4gICAgb3B0aW9uOiAnYWxsb3dMaXRlcmFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ0lmIGBmYWxzZWAsIHdpbGwgcmVwb3J0IGRlZmF1bHQgZXhwb3J0IG9mIGEgbGl0ZXJhbCcsXG4gICAgbWVzc2FnZTogJ0Fzc2lnbiBsaXRlcmFsIHRvIGEgdmFyaWFibGUgYmVmb3JlIGV4cG9ydGluZyBhcyBtb2R1bGUgZGVmYXVsdCcsXG4gIH0sXG4gIE9iamVjdEV4cHJlc3Npb246IHtcbiAgICBvcHRpb246ICdhbGxvd09iamVjdCcsXG4gICAgZGVzY3JpcHRpb246ICdJZiBgZmFsc2VgLCB3aWxsIHJlcG9ydCBkZWZhdWx0IGV4cG9ydCBvZiBhbiBvYmplY3QgZXhwcmVzc2lvbicsXG4gICAgbWVzc2FnZTogJ0Fzc2lnbiBvYmplY3QgdG8gYSB2YXJpYWJsZSBiZWZvcmUgZXhwb3J0aW5nIGFzIG1vZHVsZSBkZWZhdWx0JyxcbiAgfSxcbiAgVGVtcGxhdGVMaXRlcmFsOiB7XG4gICAgb3B0aW9uOiAnYWxsb3dMaXRlcmFsJyxcbiAgICBkZXNjcmlwdGlvbjogJ0lmIGBmYWxzZWAsIHdpbGwgcmVwb3J0IGRlZmF1bHQgZXhwb3J0IG9mIGEgbGl0ZXJhbCcsXG4gICAgbWVzc2FnZTogJ0Fzc2lnbiBsaXRlcmFsIHRvIGEgdmFyaWFibGUgYmVmb3JlIGV4cG9ydGluZyBhcyBtb2R1bGUgZGVmYXVsdCcsXG4gIH0sXG59O1xuXG5jb25zdCBzY2hlbWFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZGVmcylcbiAgLm1hcCgoa2V5KSA9PiBkZWZzW2tleV0pXG4gIC5yZWR1Y2UoKGFjYywgZGVmKSA9PiB7XG4gICAgYWNjW2RlZi5vcHRpb25dID0ge1xuICAgICAgZGVzY3JpcHRpb246IGRlZi5kZXNjcmlwdGlvbixcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG5jb25zdCBkZWZhdWx0cyA9IE9iamVjdC5rZXlzKGRlZnMpXG4gIC5tYXAoKGtleSkgPT4gZGVmc1trZXldKVxuICAucmVkdWNlKChhY2MsIGRlZikgPT4ge1xuICAgIGFjY1tkZWYub3B0aW9uXSA9IGhhcyhkZWYsICdkZWZhdWx0JykgPyBkZWYuZGVmYXVsdCA6IGZhbHNlO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1hbm9ueW1vdXMtZGVmYXVsdC1leHBvcnQnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBzY2hlbWFQcm9wZXJ0aWVzLFxuICAgICAgICAnYWRkaXRpb25hbFByb3BlcnRpZXMnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cywgY29udGV4dC5vcHRpb25zWzBdKTtcblxuICAgIHJldHVybiB7XG4gICAgICAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJzogKG5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgZGVmID0gZGVmc1tub2RlLmRlY2xhcmF0aW9uLnR5cGVdO1xuXG4gICAgICAgIC8vIFJlY29nbml6ZWQgbm9kZSB0eXBlIGFuZCBhbGxvd2VkIGJ5IGNvbmZpZ3VyYXRpb24sXG4gICAgICAgIC8vICAgYW5kIGhhcyBubyBmb3JiaWQgY2hlY2ssIG9yIGZvcmJpZCBjaGVjayByZXR1cm4gdmFsdWUgaXMgdHJ1dGh5XG4gICAgICAgIGlmIChkZWYgJiYgIW9wdGlvbnNbZGVmLm9wdGlvbl0gJiYgKCFkZWYuZm9yYmlkIHx8IGRlZi5mb3JiaWQobm9kZSkpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlOiBkZWYubWVzc2FnZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-commonjs.js b/node_modules/eslint-plugin-import/lib/rules/no-commonjs.js
index 5cac916..a1174af 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-commonjs.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-commonjs.js
@@ -134,4 +134,4 @@
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jb21tb25qcy5qcyJdLCJuYW1lcyI6WyJFWFBPUlRfTUVTU0FHRSIsIklNUE9SVF9NRVNTQUdFIiwibm9ybWFsaXplTGVnYWN5T3B0aW9ucyIsIm9wdGlvbnMiLCJpbmRleE9mIiwiYWxsb3dQcmltaXRpdmVNb2R1bGVzIiwiYWxsb3dQcmltaXRpdmUiLCJub2RlIiwicGFyZW50IiwidHlwZSIsInJpZ2h0IiwiYWxsb3dSZXF1aXJlIiwiYWxsb3dDb25kaXRpb25hbFJlcXVpcmUiLCJ2YWxpZGF0ZVNjb3BlIiwic2NvcGUiLCJ2YXJpYWJsZVNjb3BlIiwiaXNDb25kaXRpb25hbCIsImlzTGl0ZXJhbFN0cmluZyIsInZhbHVlIiwiZXhwcmVzc2lvbnMiLCJsZW5ndGgiLCJzY2hlbWFTdHJpbmciLCJzY2hlbWFPYmplY3QiLCJwcm9wZXJ0aWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJhbnlPZiIsIml0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiY3JlYXRlIiwiY29udGV4dCIsIm9iamVjdCIsIm5hbWUiLCJwcm9wZXJ0eSIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0luU2NvcGUiLCJnZXRTY29wZSIsInZhcmlhYmxlcyIsInNvbWUiLCJ2YXJpYWJsZSIsImNhbGwiLCJjYWxsZWUiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0EscUM7O0FBRUEsSUFBTUEsaUJBQWlCLHVDQUF2QixDLENBUEE7OztpRUFRQSxJQUFNQyxpQkFBaUIsMENBQXZCLENBRUEsU0FBU0Msc0JBQVQsQ0FBZ0NDLE9BQWhDLEVBQXlDO0FBQ3ZDLE1BQUlBLFFBQVFDLE9BQVIsQ0FBZ0IseUJBQWhCLEtBQThDLENBQWxELEVBQXFEO0FBQ25ELFdBQU8sRUFBRUMsdUJBQXVCLElBQXpCLEVBQVA7QUFDRDtBQUNELFNBQU9GLFFBQVEsQ0FBUixLQUFj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QGZpbGVvdmVydmlldyBSdWxlIHRvIHByZWZlciBFUzYgdG8gQ0pTXG4gKiBAYXV0aG9yIEphbXVuZCBGZXJndXNvblxuICovXG5cbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBFWFBPUlRfTUVTU0FHRSA9ICdFeHBlY3RlZCBcImV4cG9ydFwiIG9yIFwiZXhwb3J0IGRlZmF1bHRcIic7XG5jb25zdCBJTVBPUlRfTUVTU0FHRSA9ICdFeHBlY3RlZCBcImltcG9ydFwiIGluc3RlYWQgb2YgXCJyZXF1aXJlKClcIic7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxlZ2FjeU9wdGlvbnMob3B0aW9ucykge1xuICBpZiAob3B0aW9ucy5pbmRleE9mKCdhbGxvdy1wcmltaXRpdmUtbW9kdWxlcycpID49IDApIHtcbiAgICByZXR1cm4geyBhbGxvd1ByaW1pdGl2ZU1vZHVsZXM6IHRydWUgfTtcbiAgfVxuICByZXR1cm4gb3B0aW9uc1swXSB8fCB7fTtcbn1cblxuZnVuY3Rpb24gYWxsb3dQcmltaXRpdmUobm9kZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMuYWxsb3dQcmltaXRpdmVNb2R1bGVzKSByZXR1cm4gZmFsc2U7XG4gIGlmIChub2RlLnBhcmVudC50eXBlICE9PSAnQXNzaWdubWVudEV4cHJlc3Npb24nKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAobm9kZS5wYXJlbnQucmlnaHQudHlwZSAhPT0gJ09iamVjdEV4cHJlc3Npb24nKTtcbn1cblxuZnVuY3Rpb24gYWxsb3dSZXF1aXJlKG5vZGUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuYWxsb3dSZXF1aXJlO1xufVxuXG5mdW5jdGlvbiBhbGxvd0NvbmRpdGlvbmFsUmVxdWlyZShub2RlLCBvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmFsbG93Q29uZGl0aW9uYWxSZXF1aXJlICE9PSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTY29wZShzY29wZSkge1xuICByZXR1cm4gc2NvcGUudmFyaWFibGVTY29wZS50eXBlID09PSAnbW9kdWxlJztcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzdHJlZS9lc3RyZWUvYmxvYi9IRUFEL2VzNS5tZFxuZnVuY3Rpb24gaXNDb25kaXRpb25hbChub2RlKSB7XG4gIGlmIChcbiAgICBub2RlLnR5cGUgPT09ICdJZlN0YXRlbWVudCdcbiAgICB8fCBub2RlLnR5cGUgPT09ICdUcnlTdGF0ZW1lbnQnXG4gICAgfHwgbm9kZS50eXBlID09PSAnTG9naWNhbEV4cHJlc3Npb24nXG4gICAgfHwgbm9kZS50eXBlID09PSAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJ1xuICApIHJldHVybiB0cnVlO1xuICBpZiAobm9kZS5wYXJlbnQpIHJldHVybiBpc0NvbmRpdGlvbmFsKG5vZGUucGFyZW50KTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0xpdGVyYWxTdHJpbmcobm9kZSkge1xuICByZXR1cm4gKG5vZGUudHlwZSA9PT0gJ0xpdGVyYWwnICYmIHR5cGVvZiBub2RlLnZhbHVlID09PSAnc3RyaW5nJykgfHxcbiAgICAobm9kZS50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJyAmJiBub2RlLmV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCk7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmNvbnN0IHNjaGVtYVN0cmluZyA9IHsgZW51bTogWydhbGxvdy1wcmltaXRpdmUtbW9kdWxlcyddIH07XG5jb25zdCBzY2hlbWFPYmplY3QgPSB7XG4gIHR5cGU6ICdvYmplY3QnLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgYWxsb3dQcmltaXRpdmVNb2R1bGVzOiB7ICd0eXBlJzogJ2Jvb2xlYW4nIH0sXG4gICAgYWxsb3dSZXF1aXJlOiB7ICd0eXBlJzogJ2Jvb2xlYW4nIH0sXG4gICAgYWxsb3dDb25kaXRpb25hbFJlcXVpcmU6IHsgJ3R5cGUnOiAnYm9vbGVhbicgfSxcbiAgfSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1jb21tb25qcycpLFxuICAgIH0sXG5cbiAgICBzY2hlbWE6IHtcbiAgICAgIGFueU9mOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiBbc2NoZW1hU3RyaW5nXSxcbiAgICAgICAgICBhZGRpdGlvbmFsSXRlbXM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczogW3NjaGVtYU9iamVjdF0sXG4gICAgICAgICAgYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IG5vcm1hbGl6ZUxlZ2FjeU9wdGlvbnMoY29udGV4dC5vcHRpb25zKTtcblxuICAgIHJldHVybiB7XG5cbiAgICAgICdNZW1iZXJFeHByZXNzaW9uJzogZnVuY3Rpb24gKG5vZGUpIHtcblxuICAgICAgICAvLyBtb2R1bGUuZXhwb3J0c1xuICAgICAgICBpZiAobm9kZS5vYmplY3QubmFtZSA9PT0gJ21vZHVsZScgJiYgbm9kZS5wcm9wZXJ0eS5uYW1lID09PSAnZXhwb3J0cycpIHtcbiAgICAgICAgICBpZiAoYWxsb3dQcmltaXRpdmUobm9kZSwgb3B0aW9ucykpIHJldHVybjtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGUsIG1lc3NhZ2U6IEVYUE9SVF9NRVNTQUdFIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXhwb3J0cy5cbiAgICAgICAgaWYgKG5vZGUub2JqZWN0Lm5hbWUgPT09ICdleHBvcnRzJykge1xuICAgICAgICAgIGNvbnN0IGlzSW5TY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKVxuICAgICAgICAgICAgLnZhcmlhYmxlc1xuICAgICAgICAgICAgLnNvbWUodmFyaWFibGUgPT4gdmFyaWFibGUubmFtZSA9PT0gJ2V4cG9ydHMnKTtcbiAgICAgICAgICBpZiAoISBpc0luU2NvcGUpIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZTogRVhQT1JUX01FU1NBR0UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0sXG4gICAgICAnQ2FsbEV4cHJlc3Npb24nOiBmdW5jdGlvbiAoY2FsbCkge1xuICAgICAgICBpZiAoIXZhbGlkYXRlU2NvcGUoY29udGV4dC5nZXRTY29wZSgpKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChjYWxsLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicpIHJldHVybjtcbiAgICAgICAgaWYgKGNhbGwuY2FsbGVlLm5hbWUgIT09ICdyZXF1aXJlJykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT09IDEpIHJldHVybjtcbiAgICAgICAgaWYgKCFpc0xpdGVyYWxTdHJpbmcoY2FsbC5hcmd1bWVudHNbMF0pKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGFsbG93UmVxdWlyZShjYWxsLCBvcHRpb25zKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChhbGxvd0NvbmRpdGlvbmFsUmVxdWlyZShjYWxsLCBvcHRpb25zKSAmJiBpc0NvbmRpdGlvbmFsKGNhbGwucGFyZW50KSkgcmV0dXJuO1xuXG4gICAgICAgIC8vIGtlZXBpbmcgaXQgc2ltcGxlOiBhbGwgMS1zdHJpbmctYXJnIGByZXF1aXJlYCBjYWxscyBhcmUgcmVwb3J0ZWRcbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIG5vZGU6IGNhbGwuY2FsbGVlLFxuICAgICAgICAgIG1lc3NhZ2U6IElNUE9SVF9NRVNTQUdFLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcblxuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jb21tb25qcy5qcyJdLCJuYW1lcyI6WyJFWFBPUlRfTUVTU0FHRSIsIklNUE9SVF9NRVNTQUdFIiwibm9ybWFsaXplTGVnYWN5T3B0aW9ucyIsIm9wdGlvbnMiLCJpbmRleE9mIiwiYWxsb3dQcmltaXRpdmVNb2R1bGVzIiwiYWxsb3dQcmltaXRpdmUiLCJub2RlIiwicGFyZW50IiwidHlwZSIsInJpZ2h0IiwiYWxsb3dSZXF1aXJlIiwiYWxsb3dDb25kaXRpb25hbFJlcXVpcmUiLCJ2YWxpZGF0ZVNjb3BlIiwic2NvcGUiLCJ2YXJpYWJsZVNjb3BlIiwiaXNDb25kaXRpb25hbCIsImlzTGl0ZXJhbFN0cmluZyIsInZhbHVlIiwiZXhwcmVzc2lvbnMiLCJsZW5ndGgiLCJzY2hlbWFTdHJpbmciLCJzY2hlbWFPYmplY3QiLCJwcm9wZXJ0aWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJhbnlPZiIsIml0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiY3JlYXRlIiwiY29udGV4dCIsIm9iamVjdCIsIm5hbWUiLCJwcm9wZXJ0eSIsInJlcG9ydCIsIm1lc3NhZ2UiLCJpc0luU2NvcGUiLCJnZXRTY29wZSIsInZhcmlhYmxlcyIsInNvbWUiLCJ2YXJpYWJsZSIsImNhbGwiLCJjYWxsZWUiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0EscUM7O0FBRUEsSUFBTUEsaUJBQWlCLHVDQUF2QixDLENBUEE7OztpRUFRQSxJQUFNQyxpQkFBaUIsMENBQXZCLENBRUEsU0FBU0Msc0JBQVQsQ0FBZ0NDLE9BQWhDLEVBQXlDO0FBQ3ZDLE1BQUlBLFFBQVFDLE9BQVIsQ0FBZ0IseUJBQWhCLEtBQThDLENBQWxELEVBQXFEO0FBQ25ELFdBQU8sRUFBRUMsdUJBQXVCLElBQXpCLEVBQVA7QUFDRDtBQUNELFNBQU9GLFFBQVEsQ0FBUixLQUFj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b3ZlcnZpZXcgUnVsZSB0byBwcmVmZXIgRVM2IHRvIENKU1xuICogQGF1dGhvciBKYW11bmQgRmVyZ3Vzb25cbiAqL1xuXG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgRVhQT1JUX01FU1NBR0UgPSAnRXhwZWN0ZWQgXCJleHBvcnRcIiBvciBcImV4cG9ydCBkZWZhdWx0XCInO1xuY29uc3QgSU1QT1JUX01FU1NBR0UgPSAnRXhwZWN0ZWQgXCJpbXBvcnRcIiBpbnN0ZWFkIG9mIFwicmVxdWlyZSgpXCInO1xuXG5mdW5jdGlvbiBub3JtYWxpemVMZWdhY3lPcHRpb25zKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuaW5kZXhPZignYWxsb3ctcHJpbWl0aXZlLW1vZHVsZXMnKSA+PSAwKSB7XG4gICAgcmV0dXJuIHsgYWxsb3dQcmltaXRpdmVNb2R1bGVzOiB0cnVlIH07XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnNbMF0gfHwge307XG59XG5cbmZ1bmN0aW9uIGFsbG93UHJpbWl0aXZlKG5vZGUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zLmFsbG93UHJpbWl0aXZlTW9kdWxlcykgcmV0dXJuIGZhbHNlO1xuICBpZiAobm9kZS5wYXJlbnQudHlwZSAhPT0gJ0Fzc2lnbm1lbnRFeHByZXNzaW9uJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKG5vZGUucGFyZW50LnJpZ2h0LnR5cGUgIT09ICdPYmplY3RFeHByZXNzaW9uJyk7XG59XG5cbmZ1bmN0aW9uIGFsbG93UmVxdWlyZShub2RlLCBvcHRpb25zKSB7XG4gIHJldHVybiBvcHRpb25zLmFsbG93UmVxdWlyZTtcbn1cblxuZnVuY3Rpb24gYWxsb3dDb25kaXRpb25hbFJlcXVpcmUobm9kZSwgb3B0aW9ucykge1xuICByZXR1cm4gb3B0aW9ucy5hbGxvd0NvbmRpdGlvbmFsUmVxdWlyZSAhPT0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2NvcGUoc2NvcGUpIHtcbiAgcmV0dXJuIHNjb3BlLnZhcmlhYmxlU2NvcGUudHlwZSA9PT0gJ21vZHVsZSc7XG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc3RyZWUvZXN0cmVlL2Jsb2IvSEVBRC9lczUubWRcbmZ1bmN0aW9uIGlzQ29uZGl0aW9uYWwobm9kZSkge1xuICBpZiAoXG4gICAgbm9kZS50eXBlID09PSAnSWZTdGF0ZW1lbnQnXG4gICAgfHwgbm9kZS50eXBlID09PSAnVHJ5U3RhdGVtZW50J1xuICAgIHx8IG5vZGUudHlwZSA9PT0gJ0xvZ2ljYWxFeHByZXNzaW9uJ1xuICAgIHx8IG5vZGUudHlwZSA9PT0gJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbidcbiAgKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKG5vZGUucGFyZW50KSByZXR1cm4gaXNDb25kaXRpb25hbChub2RlLnBhcmVudCk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNMaXRlcmFsU3RyaW5nKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLnR5cGUgPT09ICdMaXRlcmFsJyAmJiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycpIHx8XG4gICAgKG5vZGUudHlwZSA9PT0gJ1RlbXBsYXRlTGl0ZXJhbCcgJiYgbm9kZS5leHByZXNzaW9ucy5sZW5ndGggPT09IDApO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZSBEZWZpbml0aW9uXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBzY2hlbWFTdHJpbmcgPSB7IGVudW06IFsnYWxsb3ctcHJpbWl0aXZlLW1vZHVsZXMnXSB9O1xuY29uc3Qgc2NoZW1hT2JqZWN0ID0ge1xuICB0eXBlOiAnb2JqZWN0JyxcbiAgcHJvcGVydGllczoge1xuICAgIGFsbG93UHJpbWl0aXZlTW9kdWxlczogeyAndHlwZSc6ICdib29sZWFuJyB9LFxuICAgIGFsbG93UmVxdWlyZTogeyAndHlwZSc6ICdib29sZWFuJyB9LFxuICAgIGFsbG93Q29uZGl0aW9uYWxSZXF1aXJlOiB7ICd0eXBlJzogJ2Jvb2xlYW4nIH0sXG4gIH0sXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tY29tbW9uanMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiB7XG4gICAgICBhbnlPZjogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczogW3NjaGVtYVN0cmluZ10sXG4gICAgICAgICAgYWRkaXRpb25hbEl0ZW1zOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IFtzY2hlbWFPYmplY3RdLFxuICAgICAgICAgIGFkZGl0aW9uYWxJdGVtczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gbm9ybWFsaXplTGVnYWN5T3B0aW9ucyhjb250ZXh0Lm9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcblxuICAgICAgJ01lbWJlckV4cHJlc3Npb24nOiBmdW5jdGlvbiAobm9kZSkge1xuXG4gICAgICAgIC8vIG1vZHVsZS5leHBvcnRzXG4gICAgICAgIGlmIChub2RlLm9iamVjdC5uYW1lID09PSAnbW9kdWxlJyAmJiBub2RlLnByb3BlcnR5Lm5hbWUgPT09ICdleHBvcnRzJykge1xuICAgICAgICAgIGlmIChhbGxvd1ByaW1pdGl2ZShub2RlLCBvcHRpb25zKSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZTogRVhQT1JUX01FU1NBR0UgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBleHBvcnRzLlxuICAgICAgICBpZiAobm9kZS5vYmplY3QubmFtZSA9PT0gJ2V4cG9ydHMnKSB7XG4gICAgICAgICAgY29uc3QgaXNJblNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpXG4gICAgICAgICAgICAudmFyaWFibGVzXG4gICAgICAgICAgICAuc29tZSh2YXJpYWJsZSA9PiB2YXJpYWJsZS5uYW1lID09PSAnZXhwb3J0cycpO1xuICAgICAgICAgIGlmICghIGlzSW5TY29wZSkge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlLCBtZXNzYWdlOiBFWFBPUlRfTUVTU0FHRSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSxcbiAgICAgICdDYWxsRXhwcmVzc2lvbic6IGZ1bmN0aW9uIChjYWxsKSB7XG4gICAgICAgIGlmICghdmFsaWRhdGVTY29wZShjb250ZXh0LmdldFNjb3BlKCkpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGNhbGwuY2FsbGVlLnR5cGUgIT09ICdJZGVudGlmaWVyJykgcmV0dXJuO1xuICAgICAgICBpZiAoY2FsbC5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMSkgcmV0dXJuO1xuICAgICAgICBpZiAoIWlzTGl0ZXJhbFN0cmluZyhjYWxsLmFyZ3VtZW50c1swXSkpIHJldHVybjtcblxuICAgICAgICBpZiAoYWxsb3dSZXF1aXJlKGNhbGwsIG9wdGlvbnMpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGFsbG93Q29uZGl0aW9uYWxSZXF1aXJlKGNhbGwsIG9wdGlvbnMpICYmIGlzQ29uZGl0aW9uYWwoY2FsbC5wYXJlbnQpKSByZXR1cm47XG5cbiAgICAgICAgLy8ga2VlcGluZyBpdCBzaW1wbGU6IGFsbCAxLXN0cmluZy1hcmcgYHJlcXVpcmVgIGNhbGxzIGFyZSByZXBvcnRlZFxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogY2FsbC5jYWxsZWUsXG4gICAgICAgICAgbWVzc2FnZTogSU1QT1JUX01FU1NBR0UsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuXG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-cycle.js b/node_modules/eslint-plugin-import/lib/rules/no-cycle.js
index e78ba3a..6312b25 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-cycle.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-cycle.js
@@ -128,4 +128,4 @@
function routeString(route) {
return route.map(function (s) {return String(s.value) + ':' + String(s.loc.start.line);}).join('=>');
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwibWF4RGVwdGgiLCJvbmVPZiIsImRlc2NyaXB0aW9uIiwibWluaW11bSIsImlnbm9yZUV4dGVybmFsIiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJzZXR0aW5ncyIsImNoZWNrU291cmNlVmFsdWUiLCJzb3VyY2VOb2RlIiwiaW1wb3J0ZXIiLCJ2YWx1ZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJpbXBvcnRlZCIsIkV4cG9ydHMiLCJnZXQiLCJwYXRoIiwidW50cmF2ZXJzZWQiLCJtZ2V0Iiwicm91dGUiLCJ0cmF2ZXJzZWQiLCJTZXQiLCJkZXRlY3RDeWNsZSIsIm0iLCJoYXMiLCJhZGQiLCJpbXBvcnRzIiwiZ2V0dGVyIiwiZGVjbGFyYXRpb25zIiwidG9UcmF2ZXJzZSIsImZpbHRlciIsInNvdXJjZSIsImlzT25seUltcG9ydGluZ1R5cGVzIiwibGVuZ3RoIiwicHVzaCIsImNvbmNhdCIsIm5leHQiLCJzaGlmdCIsIm1lc3NhZ2UiLCJyb3V0ZVN0cmluZyIsInJlcG9ydCIsIm1hcCIsInMiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJqb2luIl0sIm1hcHBpbmdzIjoic29CQUFBOzs7OztBQUtBLHNEO0FBQ0EseUM7QUFDQTtBQUNBLGtFO0FBQ0EscUM7O0FBRUE7QUFDQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNLEVBQUVDLEtBQUssMEJBQVEsVUFBUixDQUFQLEVBRkY7QUFHSkMsWUFBUSxDQUFDLHNDQUFrQjtBQUN6QkMsZ0JBQVU7QUFDUkMsZUFBTztB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OiJuby1jeWNsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbm8gaW1wb3J0ZWQgbW9kdWxlIGltcG9ydHMgdGhlIGxpbnRlZCBtb2R1bGUuXG4gKiBAYXV0aG9yIEJlbiBNb3NoZXJcbiAqL1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCB7IGlzRXh0ZXJuYWxNb2R1bGUgfSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IsIHsgbWFrZU9wdGlvbnNTY2hlbWEgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8vIHRvZG86IGNhY2hlIGN5Y2xlcyAvIGRlZXAgcmVsYXRpb25zaGlwcyBmb3IgZmFzdGVyIHJlcGVhdCBldmFsdWF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7IHVybDogZG9jc1VybCgnbm8tY3ljbGUnKSB9LFxuICAgIHNjaGVtYTogW21ha2VPcHRpb25zU2NoZW1hKHtcbiAgICAgIG1heERlcHRoOiB7XG4gICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXhpbXVtIGRlcGVuZGVuY3kgZGVwdGggdG8gdHJhdmVyc2UnLFxuICAgICAgICAgICAgdHlwZTogJ2ludGVnZXInLFxuICAgICAgICAgICAgbWluaW11bTogMSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudW06IFsn4oieJ10sXG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGlnbm9yZUV4dGVybmFsOiB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnaWdub3JlIGV4dGVybmFsIG1vZHVsZXMnLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KV0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIGNvbnN0IG15UGF0aCA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuICAgIGlmIChteVBhdGggPT09ICc8dGV4dD4nKSByZXR1cm4ge307IC8vIGNhbid0IGN5Y2xlLWNoZWNrIGEgbm9uLWZpbGVcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgbWF4RGVwdGggPSB0eXBlb2Ygb3B0aW9ucy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRpb25zLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgY29uc3QgaWdub3JlTW9kdWxlID0gKG5hbWUpID0+IG9wdGlvbnMuaWdub3JlRXh0ZXJuYWwgJiYgaXNFeHRlcm5hbE1vZHVsZShcbiAgICAgIG5hbWUsXG4gICAgICBjb250ZXh0LnNldHRpbmdzLFxuICAgICAgcmVzb2x2ZShuYW1lLCBjb250ZXh0KSxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tTb3VyY2VWYWx1ZShzb3VyY2VOb2RlLCBpbXBvcnRlcikge1xuICAgICAgaWYgKGlnbm9yZU1vZHVsZShzb3VyY2VOb2RlLnZhbHVlKSkge1xuICAgICAgICByZXR1cm47IC8vIGlnbm9yZSBleHRlcm5hbCBtb2R1bGVzXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaW1wb3J0ZXIudHlwZSA9PT0gJ0ltcG9ydERlY2xhcmF0aW9uJyAmJiAoXG4gICAgICAgICAgLy8gaW1wb3J0IHR5cGUgeyBGb28gfSAoVFMgYW5kIEZsb3cpXG4gICAgICAgICAgaW1wb3J0ZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGUnIHx8XG4gICAgICAgICAgLy8gaW1wb3J0IHsgdHlwZSBGb28gfSAoRmxvdylcbiAgICAgICAgICBpbXBvcnRlci5zcGVjaWZpZXJzLmV2ZXJ5KCh7IGltcG9ydEtpbmQgfSkgPT4gaW1wb3J0S2luZCA9PT0gJ3R5cGUnKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuOyAvLyBpZ25vcmUgdHlwZSBpbXBvcnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltcG9ydGVkID0gRXhwb3J0cy5nZXQoc291cmNlTm9kZS52YWx1ZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXVucmVzb2x2ZWQgdGVycml0b3J5XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRlZC5wYXRoID09PSBteVBhdGgpIHtcbiAgICAgICAgcmV0dXJuOyAgLy8gbm8tc2VsZi1pbXBvcnQgdGVycml0b3J5XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVudHJhdmVyc2VkID0gW3sgbWdldDogKCkgPT4gaW1wb3J0ZWQsIHJvdXRlOltdIH1dO1xuICAgICAgY29uc3QgdHJhdmVyc2VkID0gbmV3IFNldCgpO1xuICAgICAgZnVuY3Rpb24gZGV0ZWN0Q3ljbGUoeyBtZ2V0LCByb3V0ZSB9KSB7XG4gICAgICAgIGNvbnN0IG0gPSBtZ2V0KCk7XG4gICAgICAgIGlmIChtID09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMobS5wYXRoKSkgcmV0dXJuO1xuICAgICAgICB0cmF2ZXJzZWQuYWRkKG0ucGF0aCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbcGF0aCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9ucyB9XSBvZiBtLmltcG9ydHMpIHtcbiAgICAgICAgICBpZiAodHJhdmVyc2VkLmhhcyhwYXRoKSkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi5kZWNsYXJhdGlvbnNdLmZpbHRlcigoeyBzb3VyY2UsIGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+XG4gICAgICAgICAgICAhaWdub3JlTW9kdWxlKHNvdXJjZS52YWx1ZSkgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBvbmx5IHR5cGUgaW1wb3J0c1xuICAgICAgICAgICAgIWlzT25seUltcG9ydGluZ1R5cGVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgIE9ubHkgcmVwb3J0IGFzIGEgY3ljbGUgaWYgdGhlcmUgYXJlIGFueSBpbXBvcnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlIGNvbnNpZGVyZWQgYnlcbiAgICAgICAgICB0aGUgcnVsZS4gRm9yIGV4YW1wbGU6XG5cbiAgICAgICAgICBhLnRzOlxuICAgICAgICAgIGltcG9ydCB7IGZvbyB9IGZyb20gJy4vYicgLy8gc2hvdWxkIG5vdCBiZSByZXBvcnRlZCBhcyBhIGN5Y2xlXG5cbiAgICAgICAgICBiLnRzOlxuICAgICAgICAgIGltcG9ydCB0eXBlIHsgQmFyIH0gZnJvbSAnLi9hJ1xuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHBhdGggPT09IG15UGF0aCAmJiB0b1RyYXZlcnNlLmxlbmd0aCA+IDApIHJldHVybiB0cnVlO1xuICAgICAgICAgIGlmIChyb3V0ZS5sZW5ndGggKyAxIDwgbWF4RGVwdGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBzb3VyY2UgfSBvZiB0b1RyYXZlcnNlKSB7XG4gICAgICAgICAgICAgIHVudHJhdmVyc2VkLnB1c2goeyBtZ2V0OiBnZXR0ZXIsIHJvdXRlOiByb3V0ZS5jb25jYXQoc291cmNlKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHVudHJhdmVyc2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHVudHJhdmVyc2VkLnNoaWZ0KCk7IC8vIGJmcyFcbiAgICAgICAgaWYgKGRldGVjdEN5Y2xlKG5leHQpKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IChuZXh0LnJvdXRlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gYERlcGVuZGVuY3kgY3ljbGUgdmlhICR7cm91dGVTdHJpbmcobmV4dC5yb3V0ZSl9YFxuICAgICAgICAgICAgOiAnRGVwZW5kZW5jeSBjeWNsZSBkZXRlY3RlZC4nKTtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbXBvcnRlciwgbWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoY2hlY2tTb3VyY2VWYWx1ZSwgY29udGV4dC5vcHRpb25zWzBdKTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAocyA9PiBgJHtzLnZhbHVlfToke3MubG9jLnN0YXJ0LmxpbmV9YCkuam9pbignPT4nKTtcbn1cbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1jeWNsZS5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwibWF4RGVwdGgiLCJvbmVPZiIsImRlc2NyaXB0aW9uIiwibWluaW11bSIsImlnbm9yZUV4dGVybmFsIiwiY3JlYXRlIiwiY29udGV4dCIsIm15UGF0aCIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm9wdGlvbnMiLCJJbmZpbml0eSIsImlnbm9yZU1vZHVsZSIsIm5hbWUiLCJzZXR0aW5ncyIsImNoZWNrU291cmNlVmFsdWUiLCJzb3VyY2VOb2RlIiwiaW1wb3J0ZXIiLCJ2YWx1ZSIsImltcG9ydEtpbmQiLCJzcGVjaWZpZXJzIiwiZXZlcnkiLCJpbXBvcnRlZCIsIkV4cG9ydHMiLCJnZXQiLCJwYXRoIiwidW50cmF2ZXJzZWQiLCJtZ2V0Iiwicm91dGUiLCJ0cmF2ZXJzZWQiLCJTZXQiLCJkZXRlY3RDeWNsZSIsIm0iLCJoYXMiLCJhZGQiLCJpbXBvcnRzIiwiZ2V0dGVyIiwiZGVjbGFyYXRpb25zIiwidG9UcmF2ZXJzZSIsImZpbHRlciIsInNvdXJjZSIsImlzT25seUltcG9ydGluZ1R5cGVzIiwibGVuZ3RoIiwicHVzaCIsImNvbmNhdCIsIm5leHQiLCJzaGlmdCIsIm1lc3NhZ2UiLCJyb3V0ZVN0cmluZyIsInJlcG9ydCIsIm1hcCIsInMiLCJsb2MiLCJzdGFydCIsImxpbmUiLCJqb2luIl0sIm1hcHBpbmdzIjoic29CQUFBOzs7OztBQUtBLHNEO0FBQ0EseUM7QUFDQTtBQUNBLGtFO0FBQ0EscUM7O0FBRUE7QUFDQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNLEVBQUVDLEtBQUssMEJBQVEsVUFBUixDQUFQLEVBRkY7QUFHSkMsWUFBUSxDQUFDLHNDQUFrQjtBQUN6QkMsZ0JBQVU7QUFDUkMsZUFBTztB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LWN5Y2xlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IEVuc3VyZXMgdGhhdCBubyBpbXBvcnRlZCBtb2R1bGUgaW1wb3J0cyB0aGUgbGludGVkIG1vZHVsZS5cbiAqIEBhdXRob3IgQmVuIE1vc2hlclxuICovXG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgRXhwb3J0cyBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IHsgaXNFeHRlcm5hbE1vZHVsZSB9IGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciwgeyBtYWtlT3B0aW9uc1NjaGVtYSB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvbW9kdWxlVmlzaXRvcic7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLy8gdG9kbzogY2FjaGUgY3ljbGVzIC8gZGVlcCByZWxhdGlvbnNoaXBzIGZvciBmYXN0ZXIgcmVwZWF0IGV2YWx1YXRpb25cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHsgdXJsOiBkb2NzVXJsKCduby1jeWNsZScpIH0sXG4gICAgc2NoZW1hOiBbbWFrZU9wdGlvbnNTY2hlbWEoe1xuICAgICAgbWF4RGVwdGg6IHtcbiAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJ21heGltdW0gZGVwZW5kZW5jeSBkZXB0aCB0byB0cmF2ZXJzZScsXG4gICAgICAgICAgICB0eXBlOiAnaW50ZWdlcicsXG4gICAgICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW51bTogWyfiiJ4nXSxcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgaWdub3JlRXh0ZXJuYWw6IHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdpZ25vcmUgZXh0ZXJuYWwgbW9kdWxlcycsXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG15UGF0aCA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuICAgIGlmIChteVBhdGggPT09ICc8dGV4dD4nKSByZXR1cm4ge307IC8vIGNhbid0IGN5Y2xlLWNoZWNrIGEgbm9uLWZpbGVcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgbWF4RGVwdGggPSB0eXBlb2Ygb3B0aW9ucy5tYXhEZXB0aCA9PT0gJ251bWJlcicgPyBvcHRpb25zLm1heERlcHRoIDogSW5maW5pdHk7XG4gICAgY29uc3QgaWdub3JlTW9kdWxlID0gKG5hbWUpID0+IG9wdGlvbnMuaWdub3JlRXh0ZXJuYWwgJiYgaXNFeHRlcm5hbE1vZHVsZShcbiAgICAgIG5hbWUsXG4gICAgICBjb250ZXh0LnNldHRpbmdzLFxuICAgICAgcmVzb2x2ZShuYW1lLCBjb250ZXh0KSxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tTb3VyY2VWYWx1ZShzb3VyY2VOb2RlLCBpbXBvcnRlcikge1xuICAgICAgaWYgKGlnbm9yZU1vZHVsZShzb3VyY2VOb2RlLnZhbHVlKSkge1xuICAgICAgICByZXR1cm47IC8vIGlnbm9yZSBleHRlcm5hbCBtb2R1bGVzXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgaW1wb3J0ZXIudHlwZSA9PT0gJ0ltcG9ydERlY2xhcmF0aW9uJyAmJiAoXG4gICAgICAgICAgLy8gaW1wb3J0IHR5cGUgeyBGb28gfSAoVFMgYW5kIEZsb3cpXG4gICAgICAgICAgaW1wb3J0ZXIuaW1wb3J0S2luZCA9PT0gJ3R5cGUnIHx8XG4gICAgICAgICAgLy8gaW1wb3J0IHsgdHlwZSBGb28gfSAoRmxvdylcbiAgICAgICAgICBpbXBvcnRlci5zcGVjaWZpZXJzLmV2ZXJ5KCh7IGltcG9ydEtpbmQgfSkgPT4gaW1wb3J0S2luZCA9PT0gJ3R5cGUnKVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuOyAvLyBpZ25vcmUgdHlwZSBpbXBvcnRzXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGltcG9ydGVkID0gRXhwb3J0cy5nZXQoc291cmNlTm9kZS52YWx1ZSwgY29udGV4dCk7XG5cbiAgICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjsgIC8vIG5vLXVucmVzb2x2ZWQgdGVycml0b3J5XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRlZC5wYXRoID09PSBteVBhdGgpIHtcbiAgICAgICAgcmV0dXJuOyAgLy8gbm8tc2VsZi1pbXBvcnQgdGVycml0b3J5XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVudHJhdmVyc2VkID0gW3sgbWdldDogKCkgPT4gaW1wb3J0ZWQsIHJvdXRlOltdIH1dO1xuICAgICAgY29uc3QgdHJhdmVyc2VkID0gbmV3IFNldCgpO1xuICAgICAgZnVuY3Rpb24gZGV0ZWN0Q3ljbGUoeyBtZ2V0LCByb3V0ZSB9KSB7XG4gICAgICAgIGNvbnN0IG0gPSBtZ2V0KCk7XG4gICAgICAgIGlmIChtID09IG51bGwpIHJldHVybjtcbiAgICAgICAgaWYgKHRyYXZlcnNlZC5oYXMobS5wYXRoKSkgcmV0dXJuO1xuICAgICAgICB0cmF2ZXJzZWQuYWRkKG0ucGF0aCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBbcGF0aCwgeyBnZXR0ZXIsIGRlY2xhcmF0aW9ucyB9XSBvZiBtLmltcG9ydHMpIHtcbiAgICAgICAgICBpZiAodHJhdmVyc2VkLmhhcyhwYXRoKSkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgdG9UcmF2ZXJzZSA9IFsuLi5kZWNsYXJhdGlvbnNdLmZpbHRlcigoeyBzb3VyY2UsIGlzT25seUltcG9ydGluZ1R5cGVzIH0pID0+XG4gICAgICAgICAgICAhaWdub3JlTW9kdWxlKHNvdXJjZS52YWx1ZSkgJiZcbiAgICAgICAgICAgIC8vIElnbm9yZSBvbmx5IHR5cGUgaW1wb3J0c1xuICAgICAgICAgICAgIWlzT25seUltcG9ydGluZ1R5cGVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvKlxuICAgICAgICAgIE9ubHkgcmVwb3J0IGFzIGEgY3ljbGUgaWYgdGhlcmUgYXJlIGFueSBpbXBvcnQgZGVjbGFyYXRpb25zIHRoYXQgYXJlIGNvbnNpZGVyZWQgYnlcbiAgICAgICAgICB0aGUgcnVsZS4gRm9yIGV4YW1wbGU6XG5cbiAgICAgICAgICBhLnRzOlxuICAgICAgICAgIGltcG9ydCB7IGZvbyB9IGZyb20gJy4vYicgLy8gc2hvdWxkIG5vdCBiZSByZXBvcnRlZCBhcyBhIGN5Y2xlXG5cbiAgICAgICAgICBiLnRzOlxuICAgICAgICAgIGltcG9ydCB0eXBlIHsgQmFyIH0gZnJvbSAnLi9hJ1xuICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHBhdGggPT09IG15UGF0aCAmJiB0b1RyYXZlcnNlLmxlbmd0aCA+IDApIHJldHVybiB0cnVlO1xuICAgICAgICAgIGlmIChyb3V0ZS5sZW5ndGggKyAxIDwgbWF4RGVwdGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBzb3VyY2UgfSBvZiB0b1RyYXZlcnNlKSB7XG4gICAgICAgICAgICAgIHVudHJhdmVyc2VkLnB1c2goeyBtZ2V0OiBnZXR0ZXIsIHJvdXRlOiByb3V0ZS5jb25jYXQoc291cmNlKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHVudHJhdmVyc2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbmV4dCA9IHVudHJhdmVyc2VkLnNoaWZ0KCk7IC8vIGJmcyFcbiAgICAgICAgaWYgKGRldGVjdEN5Y2xlKG5leHQpKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IChuZXh0LnJvdXRlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gYERlcGVuZGVuY3kgY3ljbGUgdmlhICR7cm91dGVTdHJpbmcobmV4dC5yb3V0ZSl9YFxuICAgICAgICAgICAgOiAnRGVwZW5kZW5jeSBjeWNsZSBkZXRlY3RlZC4nKTtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChpbXBvcnRlciwgbWVzc2FnZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoY2hlY2tTb3VyY2VWYWx1ZSwgY29udGV4dC5vcHRpb25zWzBdKTtcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIHJvdXRlU3RyaW5nKHJvdXRlKSB7XG4gIHJldHVybiByb3V0ZS5tYXAocyA9PiBgJHtzLnZhbHVlfToke3MubG9jLnN0YXJ0LmxpbmV9YCkuam9pbignPT4nKTtcbn1cbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js b/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js
index ac75b54..71f84c5 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-deprecated.js
@@ -136,4 +136,4 @@
}return MemberExpression;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJkZXByZWNhdGVkIiwiTWFwIiwibmFtZXNwYWNlcyIsImNoZWNrU3BlY2lmaWVycyIsIm5vZGUiLCJzb3VyY2UiLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInZhbHVlIiwibW9kdWxlRGVwcmVjYXRpb24iLCJyZXBvcnQiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJzcGVjaWZpZXJzIiwiZm9yRWFjaCIsImltIiwiaW1wb3J0ZWQiLCJsb2NhbCIsInNpemUiLCJzZXQiLCJuYW1lIiwiZXhwb3J0ZWQiLCJuYW1lc3BhY2UiLCJib2R5IiwicGFyZW50IiwicHJvcGVydHkiLCJzbGljZSIsImhhcyIsImRlcmVmZXJlbmNlIiwib2JqZWN0IiwibmFtZXBhdGgiLCJjb21wdXRlZCIsInB1c2giXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EseUM7QUFDQSxxQzs7QUFFQSxTQUFTQSxPQUFULENBQWlCQyxXQUFqQixFQUE4QjtBQUM1QixTQUFPLGdCQUFnQkEsWUFBWUMsV0FBWixHQUEwQixPQUFPRCxZQUFZQyxXQUE3QyxHQUEyRCxHQUEzRSxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QkMsUUFBeEIsRUFBa0M7QUFDaEMsTUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQ0EsU0FBU0MsR0FBM0IsRUFBZ0M7O0FBRWhDLFNBQU9ELFNBQVNDLEdBQVQsQ0FBYUMsSUFBYixDQUFrQkMsSUFBbEIsQ0FBdUIscUJBQUtDLEVBQUVDLEtBQUYsS0FBWSxZ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aEQsV0FBV3VDLFVBQVVoQixHQUFWLENBQWNzQixZQUFZSCxRQUFaLENBQXFCTCxJQUFuQyxDQUFqQjs7QUFFQSxrQkFBSSxDQUFDckMsUUFBTCxFQUFlO0FBQ2Ysa0JBQU1ILGNBQWNFLGVBQWVDLFFBQWYsQ0FBcEI7O0FBRUEsa0JBQUlILFdBQUosRUFBaUI7QUFDZmlCLHdCQUFRWSxNQUFSLENBQWUsRUFBRVAsTUFBTTBCLFlBQVlILFFBQXBCLEVBQThCOUMsU0FBU0EsUUFBUUMsV0FBUixDQUF2QyxFQUFmO0FBQ0Q7O0FBRUQ7QUFDQWtELHVCQUFTRSxJQUFULENBQWNKLFlBQVlILFFBQVosQ0FBcUJMLElBQW5DO0FBQ0FFLDBCQUFZdkMsU0FBU3VDLFNBQXJCO0FBQ0FNLDRCQUFjQSxZQUFZSixNQUExQjtBQUNEO0FBQ0YsV0E5QkQsMkJBcEJLLEVBQVA7O0FBb0RELEtBbEhELGlCQVRlLEVBQWpCIiwiZmlsZSI6Im5vLWRlcHJlY2F0ZWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGVjbGFyZWRTY29wZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2RlY2xhcmVkU2NvcGUnO1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBtZXNzYWdlKGRlcHJlY2F0aW9uKSB7XG4gIHJldHVybiAnRGVwcmVjYXRlZCcgKyAoZGVwcmVjYXRpb24uZGVzY3JpcHRpb24gPyAnOiAnICsgZGVwcmVjYXRpb24uZGVzY3JpcHRpb24gOiAnLicpO1xufVxuXG5mdW5jdGlvbiBnZXREZXByZWNhdGlvbihtZXRhZGF0YSkge1xuICBpZiAoIW1ldGFkYXRhIHx8ICFtZXRhZGF0YS5kb2MpIHJldHVybjtcblxuICByZXR1cm4gbWV0YWRhdGEuZG9jLnRhZ3MuZmluZCh0ID0+IHQudGl0bGUgPT09ICdkZXByZWNhdGVkJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZGVwcmVjYXRlZCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgY29uc3QgZGVwcmVjYXRlZCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbmV3IE1hcCgpO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tTcGVjaWZpZXJzKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLnR5cGUgIT09ICdJbXBvcnREZWNsYXJhdGlvbicpIHJldHVybjtcbiAgICAgIGlmIChub2RlLnNvdXJjZSA9PSBudWxsKSByZXR1cm47IC8vIGxvY2FsIGV4cG9ydCwgaWdub3JlXG5cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChub2RlLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG1vZHVsZURlcHJlY2F0aW9uID0gaW1wb3J0cy5kb2MgJiYgaW1wb3J0cy5kb2MudGFncy5maW5kKHQgPT4gdC50aXRsZSA9PT0gJ2RlcHJlY2F0ZWQnKTtcbiAgICAgIGlmIChtb2R1bGVEZXByZWNhdGlvbikge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGUsIG1lc3NhZ2U6IG1lc3NhZ2UobW9kdWxlRGVwcmVjYXRpb24pIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICBsZXQgaW1wb3J0ZWQ7IGxldCBsb2NhbDtcbiAgICAgICAgc3dpdGNoIChpbS50eXBlKSB7XG5cblxuICAgICAgICBjYXNlICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInOntcbiAgICAgICAgICBpZiAoIWltcG9ydHMuc2l6ZSkgcmV0dXJuO1xuICAgICAgICAgIG5hbWVzcGFjZXMuc2V0KGltLmxvY2FsLm5hbWUsIGltcG9ydHMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOlxuICAgICAgICAgIGltcG9ydGVkID0gJ2RlZmF1bHQnO1xuICAgICAgICAgIGxvY2FsID0gaW0ubG9jYWwubmFtZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdJbXBvcnRTcGVjaWZpZXInOlxuICAgICAgICAgIGltcG9ydGVkID0gaW0uaW1wb3J0ZWQubmFtZTtcbiAgICAgICAgICBsb2NhbCA9IGltLmxvY2FsLm5hbWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDogcmV0dXJuOyAvLyBjYW4ndCBoYW5kbGUgdGhpcyBvbmVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVua25vd24gdGhpbmcgY2FuJ3QgYmUgZGVwcmVjYXRlZFxuICAgICAgICBjb25zdCBleHBvcnRlZCA9IGltcG9ydHMuZ2V0KGltcG9ydGVkKTtcbiAgICAgICAgaWYgKGV4cG9ydGVkID09IG51bGwpIHJldHVybjtcblxuICAgICAgICAvLyBjYXB0dXJlIGltcG9ydCBvZiBkZWVwIG5hbWVzcGFjZVxuICAgICAgICBpZiAoZXhwb3J0ZWQubmFtZXNwYWNlKSBuYW1lc3BhY2VzLnNldChsb2NhbCwgZXhwb3J0ZWQubmFtZXNwYWNlKTtcblxuICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKGltcG9ydHMuZ2V0KGltcG9ydGVkKSk7XG4gICAgICAgIGlmICghZGVwcmVjYXRpb24pIHJldHVybjtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGU6IGltLCBtZXNzYWdlOiBtZXNzYWdlKGRlcHJlY2F0aW9uKSB9KTtcblxuICAgICAgICBkZXByZWNhdGVkLnNldChsb2NhbCwgZGVwcmVjYXRpb24pO1xuXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ1Byb2dyYW0nOiAoeyBib2R5IH0pID0+IGJvZHkuZm9yRWFjaChjaGVja1NwZWNpZmllcnMpLFxuXG4gICAgICAnSWRlbnRpZmllcic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgbm9kZS5wYXJlbnQucHJvcGVydHkgPT09IG5vZGUpIHtcbiAgICAgICAgICByZXR1cm47IC8vIGhhbmRsZWQgYnkgTWVtYmVyRXhwcmVzc2lvblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWdub3JlIHNwZWNpZmllciBpZGVudGlmaWVyc1xuICAgICAgICBpZiAobm9kZS5wYXJlbnQudHlwZS5zbGljZSgwLCA2KSA9PT0gJ0ltcG9ydCcpIHJldHVybjtcblxuICAgICAgICBpZiAoIWRlcHJlY2F0ZWQuaGFzKG5vZGUubmFtZSkpIHJldHVybjtcblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBub2RlLm5hbWUpICE9PSAnbW9kdWxlJykgcmV0dXJuO1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlKGRlcHJlY2F0ZWQuZ2V0KG5vZGUubmFtZSkpLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG5cbiAgICAgICdNZW1iZXJFeHByZXNzaW9uJzogZnVuY3Rpb24gKGRlcmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChkZXJlZmVyZW5jZS5vYmplY3QudHlwZSAhPT0gJ0lkZW50aWZpZXInKSByZXR1cm47XG4gICAgICAgIGlmICghbmFtZXNwYWNlcy5oYXMoZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpKSByZXR1cm47XG5cbiAgICAgICAgaWYgKGRlY2xhcmVkU2NvcGUoY29udGV4dCwgZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpICE9PSAnbW9kdWxlJykgcmV0dXJuO1xuXG4gICAgICAgIC8vIGdvIGRlZXBcbiAgICAgICAgbGV0IG5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuZ2V0KGRlcmVmZXJlbmNlLm9iamVjdC5uYW1lKTtcbiAgICAgICAgY29uc3QgbmFtZXBhdGggPSBbZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWVdO1xuICAgICAgICAvLyB3aGlsZSBwcm9wZXJ0eSBpcyBuYW1lc3BhY2UgYW5kIHBhcmVudCBpcyBtZW1iZXIgZXhwcmVzc2lvbiwga2VlcCB2YWxpZGF0aW5nXG4gICAgICAgIHdoaWxlIChuYW1lc3BhY2UgaW5zdGFuY2VvZiBFeHBvcnRzICYmXG4gICAgICAgICAgICAgICBkZXJlZmVyZW5jZS50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcblxuICAgICAgICAgIC8vIGlnbm9yZSBjb21wdXRlZCBwYXJ0cyBmb3Igbm93XG4gICAgICAgICAgaWYgKGRlcmVmZXJlbmNlLmNvbXB1dGVkKSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IG5hbWVzcGFjZS5nZXQoZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG5cbiAgICAgICAgICBpZiAoIW1ldGFkYXRhKSBicmVhaztcbiAgICAgICAgICBjb25zdCBkZXByZWNhdGlvbiA9IGdldERlcHJlY2F0aW9uKG1ldGFkYXRhKTtcblxuICAgICAgICAgIGlmIChkZXByZWNhdGlvbikge1xuICAgICAgICAgICAgY29udGV4dC5yZXBvcnQoeyBub2RlOiBkZXJlZmVyZW5jZS5wcm9wZXJ0eSwgbWVzc2FnZTogbWVzc2FnZShkZXByZWNhdGlvbikgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3Rhc2ggYW5kIHBvcFxuICAgICAgICAgIG5hbWVwYXRoLnB1c2goZGVyZWZlcmVuY2UucHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgbmFtZXNwYWNlID0gbWV0YWRhdGEubmFtZXNwYWNlO1xuICAgICAgICAgIGRlcmVmZXJlbmNlID0gZGVyZWZlcmVuY2UucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kZXByZWNhdGVkLmpzIl0sIm5hbWVzIjpbIm1lc3NhZ2UiLCJkZXByZWNhdGlvbiIsImRlc2NyaXB0aW9uIiwiZ2V0RGVwcmVjYXRpb24iLCJtZXRhZGF0YSIsImRvYyIsInRhZ3MiLCJmaW5kIiwidCIsInRpdGxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJkZXByZWNhdGVkIiwiTWFwIiwibmFtZXNwYWNlcyIsImNoZWNrU3BlY2lmaWVycyIsIm5vZGUiLCJzb3VyY2UiLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInZhbHVlIiwibW9kdWxlRGVwcmVjYXRpb24iLCJyZXBvcnQiLCJlcnJvcnMiLCJsZW5ndGgiLCJyZXBvcnRFcnJvcnMiLCJzcGVjaWZpZXJzIiwiZm9yRWFjaCIsImltIiwiaW1wb3J0ZWQiLCJsb2NhbCIsInNpemUiLCJzZXQiLCJuYW1lIiwiZXhwb3J0ZWQiLCJuYW1lc3BhY2UiLCJib2R5IiwicGFyZW50IiwicHJvcGVydHkiLCJzbGljZSIsImhhcyIsImRlcmVmZXJlbmNlIiwib2JqZWN0IiwibmFtZXBhdGgiLCJjb21wdXRlZCIsInB1c2giXSwibWFwcGluZ3MiOiJhQUFBLGtFO0FBQ0EseUM7QUFDQSxxQzs7QUFFQSxTQUFTQSxPQUFULENBQWlCQyxXQUFqQixFQUE4QjtBQUM1QixTQUFPLGdCQUFnQkEsWUFBWUMsV0FBWixHQUEwQixPQUFPRCxZQUFZQyxXQUE3QyxHQUEyRCxHQUEzRSxDQUFQO0FBQ0Q7O0FBRUQsU0FBU0MsY0FBVCxDQUF3QkMsUUFBeEIsRUFBa0M7QUFDaEMsTUFBSSxDQUFDQSxRQUFELElBQWEsQ0FBQ0EsU0FBU0MsR0FBM0IsRUFBZ0M7O0FBRWhDLFNBQU9ELFNBQVNDLEdBQVQsQ0FBYUMsSUFBYixDQUFrQkMsSUFBbEIsQ0FBdUIscUJBQUtDLEVBQUVDLEtBQUYsS0FBWSxZ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V0FBV3VDLFVBQVVoQixHQUFWLENBQWNzQixZQUFZSCxRQUFaLENBQXFCTCxJQUFuQyxDQUFqQjs7QUFFQSxrQkFBSSxDQUFDckMsUUFBTCxFQUFlO0FBQ2Ysa0JBQU1ILGNBQWNFLGVBQWVDLFFBQWYsQ0FBcEI7O0FBRUEsa0JBQUlILFdBQUosRUFBaUI7QUFDZmlCLHdCQUFRWSxNQUFSLENBQWUsRUFBRVAsTUFBTTBCLFlBQVlILFFBQXBCLEVBQThCOUMsU0FBU0EsUUFBUUMsV0FBUixDQUF2QyxFQUFmO0FBQ0Q7O0FBRUQ7QUFDQWtELHVCQUFTRSxJQUFULENBQWNKLFlBQVlILFFBQVosQ0FBcUJMLElBQW5DO0FBQ0FFLDBCQUFZdkMsU0FBU3VDLFNBQXJCO0FBQ0FNLDRCQUFjQSxZQUFZSixNQUExQjtBQUNEO0FBQ0YsV0E5QkQsMkJBcEJLLEVBQVA7O0FBb0RELEtBM0hjLG1CQUFqQiIsImZpbGUiOiJuby1kZXByZWNhdGVkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlY2xhcmVkU2NvcGUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9kZWNsYXJlZFNjb3BlJztcbmltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gbWVzc2FnZShkZXByZWNhdGlvbikge1xuICByZXR1cm4gJ0RlcHJlY2F0ZWQnICsgKGRlcHJlY2F0aW9uLmRlc2NyaXB0aW9uID8gJzogJyArIGRlcHJlY2F0aW9uLmRlc2NyaXB0aW9uIDogJy4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwcmVjYXRpb24obWV0YWRhdGEpIHtcbiAgaWYgKCFtZXRhZGF0YSB8fCAhbWV0YWRhdGEuZG9jKSByZXR1cm47XG5cbiAgcmV0dXJuIG1ldGFkYXRhLmRvYy50YWdzLmZpbmQodCA9PiB0LnRpdGxlID09PSAnZGVwcmVjYXRlZCcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWRlcHJlY2F0ZWQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBkZXByZWNhdGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG5hbWVzcGFjZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBjaGVja1NwZWNpZmllcnMobm9kZSkge1xuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gJ0ltcG9ydERlY2xhcmF0aW9uJykgcmV0dXJuO1xuICAgICAgaWYgKG5vZGUuc291cmNlID09IG51bGwpIHJldHVybjsgLy8gbG9jYWwgZXhwb3J0LCBpZ25vcmVcblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChpbXBvcnRzID09IG51bGwpIHJldHVybjtcblxuICAgICAgY29uc3QgbW9kdWxlRGVwcmVjYXRpb24gPSBpbXBvcnRzLmRvYyAmJiBpbXBvcnRzLmRvYy50YWdzLmZpbmQodCA9PiB0LnRpdGxlID09PSAnZGVwcmVjYXRlZCcpO1xuICAgICAgaWYgKG1vZHVsZURlcHJlY2F0aW9uKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZSwgbWVzc2FnZTogbWVzc2FnZShtb2R1bGVEZXByZWNhdGlvbikgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zcGVjaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKGltKSB7XG4gICAgICAgIGxldCBpbXBvcnRlZDsgbGV0IGxvY2FsO1xuICAgICAgICBzd2l0Y2ggKGltLnR5cGUpIHtcblxuXG4gICAgICAgIGNhc2UgJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcic6e1xuICAgICAgICAgIGlmICghaW1wb3J0cy5zaXplKSByZXR1cm47XG4gICAgICAgICAgbmFtZXNwYWNlcy5zZXQoaW0ubG9jYWwubmFtZSwgaW1wb3J0cyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic6XG4gICAgICAgICAgaW1wb3J0ZWQgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgbG9jYWwgPSBpbS5sb2NhbC5uYW1lO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ0ltcG9ydFNwZWNpZmllcic6XG4gICAgICAgICAgaW1wb3J0ZWQgPSBpbS5pbXBvcnRlZC5uYW1lO1xuICAgICAgICAgIGxvY2FsID0gaW0ubG9jYWwubmFtZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OiByZXR1cm47IC8vIGNhbid0IGhhbmRsZSB0aGlzIG9uZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5rbm93biB0aGluZyBjYW4ndCBiZSBkZXByZWNhdGVkXG4gICAgICAgIGNvbnN0IGV4cG9ydGVkID0gaW1wb3J0cy5nZXQoaW1wb3J0ZWQpO1xuICAgICAgICBpZiAoZXhwb3J0ZWQgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIGNhcHR1cmUgaW1wb3J0IG9mIGRlZXAgbmFtZXNwYWNlXG4gICAgICAgIGlmIChleHBvcnRlZC5uYW1lc3BhY2UpIG5hbWVzcGFjZXMuc2V0KGxvY2FsLCBleHBvcnRlZC5uYW1lc3BhY2UpO1xuXG4gICAgICAgIGNvbnN0IGRlcHJlY2F0aW9uID0gZ2V0RGVwcmVjYXRpb24oaW1wb3J0cy5nZXQoaW1wb3J0ZWQpKTtcbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHsgbm9kZTogaW0sIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRpb24pIH0pO1xuXG4gICAgICAgIGRlcHJlY2F0ZWQuc2V0KGxvY2FsLCBkZXByZWNhdGlvbik7XG5cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnUHJvZ3JhbSc6ICh7IGJvZHkgfSkgPT4gYm9keS5mb3JFYWNoKGNoZWNrU3BlY2lmaWVycyksXG5cbiAgICAgICdJZGVudGlmaWVyJzogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJiBub2RlLnBhcmVudC5wcm9wZXJ0eSA9PT0gbm9kZSkge1xuICAgICAgICAgIHJldHVybjsgLy8gaGFuZGxlZCBieSBNZW1iZXJFeHByZXNzaW9uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZ25vcmUgc3BlY2lmaWVyIGlkZW50aWZpZXJzXG4gICAgICAgIGlmIChub2RlLnBhcmVudC50eXBlLnNsaWNlKDAsIDYpID09PSAnSW1wb3J0JykgcmV0dXJuO1xuXG4gICAgICAgIGlmICghZGVwcmVjYXRlZC5oYXMobm9kZS5uYW1lKSkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChkZWNsYXJlZFNjb3BlKGNvbnRleHQsIG5vZGUubmFtZSkgIT09ICdtb2R1bGUnKSByZXR1cm47XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UoZGVwcmVjYXRlZC5nZXQobm9kZS5uYW1lKSksXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgJ01lbWJlckV4cHJlc3Npb24nOiBmdW5jdGlvbiAoZGVyZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKGRlcmVmZXJlbmNlLm9iamVjdC50eXBlICE9PSAnSWRlbnRpZmllcicpIHJldHVybjtcbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzLmhhcyhkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkpIHJldHVybjtcblxuICAgICAgICBpZiAoZGVjbGFyZWRTY29wZShjb250ZXh0LCBkZXJlZmVyZW5jZS5vYmplY3QubmFtZSkgIT09ICdtb2R1bGUnKSByZXR1cm47XG5cbiAgICAgICAgLy8gZ28gZGVlcFxuICAgICAgICBsZXQgbmFtZXNwYWNlID0gbmFtZXNwYWNlcy5nZXQoZGVyZWZlcmVuY2Uub2JqZWN0Lm5hbWUpO1xuICAgICAgICBjb25zdCBuYW1lcGF0aCA9IFtkZXJlZmVyZW5jZS5vYmplY3QubmFtZV07XG4gICAgICAgIC8vIHdoaWxlIHByb3BlcnR5IGlzIG5hbWVzcGFjZSBhbmQgcGFyZW50IGlzIG1lbWJlciBleHByZXNzaW9uLCBrZWVwIHZhbGlkYXRpbmdcbiAgICAgICAgd2hpbGUgKG5hbWVzcGFjZSBpbnN0YW5jZW9mIEV4cG9ydHMgJiZcbiAgICAgICAgICAgICAgIGRlcmVmZXJlbmNlLnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuXG4gICAgICAgICAgLy8gaWdub3JlIGNvbXB1dGVkIHBhcnRzIGZvciBub3dcbiAgICAgICAgICBpZiAoZGVyZWZlcmVuY2UuY29tcHV0ZWQpIHJldHVybjtcblxuICAgICAgICAgIGNvbnN0IG1ldGFkYXRhID0gbmFtZXNwYWNlLmdldChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcblxuICAgICAgICAgIGlmICghbWV0YWRhdGEpIGJyZWFrO1xuICAgICAgICAgIGNvbnN0IGRlcHJlY2F0aW9uID0gZ2V0RGVwcmVjYXRpb24obWV0YWRhdGEpO1xuXG4gICAgICAgICAgaWYgKGRlcHJlY2F0aW9uKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7IG5vZGU6IGRlcmVmZXJlbmNlLnByb3BlcnR5LCBtZXNzYWdlOiBtZXNzYWdlKGRlcHJlY2F0aW9uKSB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzdGFzaCBhbmQgcG9wXG4gICAgICAgICAgbmFtZXBhdGgucHVzaChkZXJlZmVyZW5jZS5wcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICBuYW1lc3BhY2UgPSBtZXRhZGF0YS5uYW1lc3BhY2U7XG4gICAgICAgICAgZGVyZWZlcmVuY2UgPSBkZXJlZmVyZW5jZS5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js b/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js
index 41712c2..b093602 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-duplicates.js
@@ -308,4 +308,4 @@
}return ProgramExit;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbImNoZWNrSW1wb3J0cyIsImltcG9ydGVkIiwiY29udGV4dCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsImxlbmd0aCIsIm1lc3NhZ2UiLCJmaXJzdCIsInJlc3QiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsImZpeCIsImdldEZpeCIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJnZXRDb21tZW50c0JlZm9yZSIsInVuZGVmaW5lZCIsImhhc1Byb2JsZW1hdGljQ29tbWVudHMiLCJoYXNOYW1lc3BhY2UiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJtYXAiLCJnZXREZWZhdWx0SW1wb3J0TmFtZSIsImZpbHRlciIsIkJvb2xlYW4iLCJzaXplIiwicmVzdFdpdGhvdXRDb21tZW50cyIsInNwZWNpZmllcnMiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2UiLCJmaW5kIiwiaXNQdW5jdHVhdG9yIiwidG9rZW4iLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsInRleHQiLCJzbGljZSIsInJhbmdlIiwiaGFzVHJhaWxpbmdDb21tYSIsImdldFRva2VuQmVmb3JlIiwiaXNFbXB0eSIsImhhc1NwZWNpZmllcnMiLCJ1bm5lY2Vzc2FyeUltcG9ydHMiLCJzb21lIiwic3BlY2lmaWVyIiwic2hvdWxkQWRkRGVmYXVsdCIsInNob3VsZEFkZFNwZWNpZmllcnMiLCJzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSIsImZpcnN0VG9rZW4iLCJnZXRGaXJzdFRva2VuIiwiZGVmYXVsdEltcG9ydE5hbWUiLCJmaXJzdEhhc1RyYWlsaW5nQ29tbWEiLCJmaXJzdElzRW1wdHkiLCJyZWR1Y2UiLCJyZXN1bHQiLCJuZWVkc0NvbW1hIiwic3BlY2lmaWVyc1RleHQiLCJmaXhlcyIsInB1c2giLCJmaXhlciIsImluc2VydFRleHRBZnRlciIsImluc2VydFRleHRCZWZvcmUiLCJyZW1vdmUiLCJjaGFyQWZ0ZXJJbXBvcnRSYW5nZSIsImNoYXJBZnRlckltcG9ydCIsInN1YnN0cmluZyIsInJlbW92ZVJhbmdlIiwidmFsdWUiLCJ0eXBlIiwiZGVmYXVsdFNwZWNpZmllciIsImxvY2FsIiwibmFtZSIsImhhc0NvbW1lbnRCZWZvcmUiLCJoYXNDb21tZW50QWZ0ZXIiLCJoYXNDb21tZW50SW5zaWRlTm9uU3BlY2lmaWVycyIsImNvbW1lbnQiLCJsb2MiLCJlbmQiLCJsaW5lIiwic3RhcnQiLCJnZXRDb21tZW50c0FmdGVyIiwib3BlbkJyYWNlSW5kZXgiLCJmaW5kSW5kZXgiLCJjbG9zZUJyYWNlSW5kZXgiLCJzb21lVG9rZW5zIiwiY29uY2F0IiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb25zaWRlclF1ZXJ5U3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uIiwib3B0aW9ucyIsImRlZmF1bHRSZXNvbHZlciIsInNvdXJjZVBhdGgiLCJyZXNvbHZlciIsInBhcnRzIiwibWF0Y2giLCJNYXAiLCJuc0ltcG9ydGVkIiwiZGVmYXVsdFR5cGVzSW1wb3J0ZWQiLCJuYW1lZFR5cGVzSW1wb3J0ZWQiLCJnZXRJbXBvcnRNYXAiLCJuIiwiaW1wb3J0S2luZCIsIkltcG9ydERlY2xhcmF0aW9uIiwicmVzb2x2ZWRQYXRoIiwiaW1wb3J0TWFwIiwiaGFzIiwiZ2V0Iiwic2V0Il0sIm1hcHBpbmdzIjoicW9CQUFBLHNEO0FBQ0EscUM7O0FBRUEsU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLE9BQWhDLEVBQXlDO0FBQ3ZDLHlCQUE4QkQsU0FBU0UsT0FBVCxFQUE5Qiw4SEFBa0QsZ0VBQXRDQyxPQUFzQyxnQkFBOUJDLEtBQThCO0FBQ2hELFVBQUlBLE1BQU1DLE1BQU4sR0FBZSxDQUFuQixFQUFzQjtBQUNwQixZQUFNQyx3QkFBY0gsT0FB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QUFhQyxRQUFiLEVBQXVCQyxPQUF2QjtBQUNBRix5QkFBYTJHLFVBQWIsRUFBeUJ6RyxPQUF6QjtBQUNBRix5QkFBYTRHLG9CQUFiLEVBQW1DMUcsT0FBbkM7QUFDQUYseUJBQWE2RyxrQkFBYixFQUFpQzNHLE9BQWpDO0FBQ0QsV0FsQkksd0JBQVA7O0FBb0JELEtBOUNELGlCQXBCZSxFQUFqQiIsImZpbGUiOiJuby1kdXBsaWNhdGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBjaGVja0ltcG9ydHMoaW1wb3J0ZWQsIGNvbnRleHQpIHtcbiAgZm9yIChjb25zdCBbbW9kdWxlLCBub2Rlc10gb2YgaW1wb3J0ZWQuZW50cmllcygpKSB7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgJyR7bW9kdWxlfScgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMuYDtcbiAgICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBub2RlcztcbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgICAgIGNvbnN0IGZpeCA9IGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSk7XG5cbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZTogZmlyc3Quc291cmNlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBmaXgsIC8vIEF0dGFjaCB0aGUgYXV0b2ZpeCAoaWYgYW55KSB0byB0aGUgZmlyc3QgaW1wb3J0LlxuICAgICAgfSk7XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZXN0KSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlOiBub2RlLnNvdXJjZSxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Rml4KGZpcnN0LCByZXN0LCBzb3VyY2VDb2RlKSB7XG4gIC8vIFNvcnJ5IEVTTGludCA8PSAzIHVzZXJzLCBubyBhdXRvZml4IGZvciB5b3UuIEF1dG9maXhpbmcgZHVwbGljYXRlIGltcG9ydHNcbiAgLy8gcmVxdWlyZXMgbXVsdGlwbGUgYGZpeGVyLndoYXRldmVyKClgIGNhbGxzIGluIHRoZSBgZml4YDogV2UgYm90aCBuZWVkIHRvXG4gIC8vIHVwZGF0ZSB0aGUgZmlyc3Qgb25lLCBhbmQgcmVtb3ZlIHRoZSByZXN0LiBTdXBwb3J0IGZvciBtdWx0aXBsZVxuICAvLyBgZml4ZXIud2hhdGV2ZXIoKWAgaW4gYSBzaW5nbGUgYGZpeGAgd2FzIGFkZGVkIGluIEVTTGludCA0LjEuXG4gIC8vIGBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlYCB3YXMgYWRkZWQgaW4gNC4wLCBzbyB0aGF0J3MgYW4gZWFzeSB0aGluZyB0b1xuICAvLyBjaGVjayBmb3IuXG4gIGlmICh0eXBlb2Ygc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBBZGp1c3RpbmcgdGhlIGZpcnN0IGltcG9ydCBtaWdodCBtYWtlIGl0IG11bHRpbGluZSwgd2hpY2ggY291bGQgYnJlYWtcbiAgLy8gYGVzbGludC1kaXNhYmxlLW5leHQtbGluZWAgY29tbWVudHMgYW5kIHNpbWlsYXIsIHNvIGJhaWwgaWYgdGhlIGZpcnN0XG4gIC8vIGltcG9ydCBoYXMgY29tbWVudHMuIEFsc28sIGlmIHRoZSBmaXJzdCBpbXBvcnQgaXMgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby5cbiAgaWYgKGhhc1Byb2JsZW1hdGljQ29tbWVudHMoZmlyc3QsIHNvdXJjZUNvZGUpIHx8IGhhc05hbWVzcGFjZShmaXJzdCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdEltcG9ydE5hbWVzID0gbmV3IFNldChcbiAgICBbZmlyc3QsIC4uLnJlc3RdLm1hcChnZXREZWZhdWx0SW1wb3J0TmFtZSkuZmlsdGVyKEJvb2xlYW4pXG4gICk7XG5cbiAgLy8gQmFpbCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZGlmZmVyZW50IGRlZmF1bHQgaW1wb3J0IG5hbWVzIOKAkyBpdCdzIHVwIHRvIHRoZVxuICAvLyB1c2VyIHRvIGNob29zZSB3aGljaCBvbmUgdG8ga2VlcC5cbiAgaWYgKGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID4gMSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyBMZWF2ZSBpdCB0byB0aGUgdXNlciB0byBoYW5kbGUgY29tbWVudHMuIEFsc28gc2tpcCBgaW1wb3J0ICogYXMgbnMgZnJvbVxuICAvLyAnLi9mb28nYCBpbXBvcnRzLCBzaW5jZSB0aGV5IGNhbm5vdCBiZSBtZXJnZWQgaW50byBhbm90aGVyIGltcG9ydC5cbiAgY29uc3QgcmVzdFdpdGhvdXRDb21tZW50cyA9IHJlc3QuZmlsdGVyKG5vZGUgPT4gIShcbiAgICBoYXNQcm9ibGVtYXRpY0NvbW1lbnRzKG5vZGUsIHNvdXJjZUNvZGUpIHx8XG4gICAgaGFzTmFtZXNwYWNlKG5vZGUpXG4gICkpO1xuXG4gIGNvbnN0IHNwZWNpZmllcnMgPSByZXN0V2l0aG91dENvbW1lbnRzXG4gICAgLm1hcChub2RlID0+IHtcbiAgICAgIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICAgICAgY29uc3Qgb3BlbkJyYWNlID0gdG9rZW5zLmZpbmQodG9rZW4gPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAneycpKTtcbiAgICAgIGNvbnN0IGNsb3NlQnJhY2UgPSB0b2tlbnMuZmluZCh0b2tlbiA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd9JykpO1xuXG4gICAgICBpZiAob3BlbkJyYWNlID09IG51bGwgfHwgY2xvc2VCcmFjZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGltcG9ydE5vZGU6IG5vZGUsXG4gICAgICAgIHRleHQ6IHNvdXJjZUNvZGUudGV4dC5zbGljZShvcGVuQnJhY2UucmFuZ2VbMV0sIGNsb3NlQnJhY2UucmFuZ2VbMF0pLFxuICAgICAgICBoYXNUcmFpbGluZ0NvbW1hOiBpc1B1bmN0dWF0b3Ioc291cmNlQ29kZS5nZXRUb2tlbkJlZm9yZShjbG9zZUJyYWNlKSwgJywnKSxcbiAgICAgICAgaXNFbXB0eTogIWhhc1NwZWNpZmllcnMobm9kZSksXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcblxuICBjb25zdCB1bm5lY2Vzc2FyeUltcG9ydHMgPSByZXN0V2l0aG91dENvbW1lbnRzLmZpbHRlcihub2RlID0+XG4gICAgIWhhc1NwZWNpZmllcnMobm9kZSkgJiZcbiAgICAhaGFzTmFtZXNwYWNlKG5vZGUpICYmXG4gICAgIXNwZWNpZmllcnMuc29tZShzcGVjaWZpZXIgPT4gc3BlY2lmaWVyLmltcG9ydE5vZGUgPT09IG5vZGUpXG4gICk7XG5cbiAgY29uc3Qgc2hvdWxkQWRkRGVmYXVsdCA9IGdldERlZmF1bHRJbXBvcnROYW1lKGZpcnN0KSA9PSBudWxsICYmIGRlZmF1bHRJbXBvcnROYW1lcy5zaXplID09PSAxO1xuICBjb25zdCBzaG91bGRBZGRTcGVjaWZpZXJzID0gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xuICBjb25zdCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSA9IHVubmVjZXNzYXJ5SW1wb3J0cy5sZW5ndGggPiAwO1xuXG4gIGlmICghKHNob3VsZEFkZERlZmF1bHQgfHwgc2hvdWxkQWRkU3BlY2lmaWVycyB8fCBzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGZpeGVyID0+IHtcbiAgICBjb25zdCB0b2tlbnMgPSBzb3VyY2VDb2RlLmdldFRva2VucyhmaXJzdCk7XG4gICAgY29uc3Qgb3BlbkJyYWNlID0gdG9rZW5zLmZpbmQodG9rZW4gPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAneycpKTtcbiAgICBjb25zdCBjbG9zZUJyYWNlID0gdG9rZW5zLmZpbmQodG9rZW4gPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcbiAgICBjb25zdCBmaXJzdFRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKGZpcnN0KTtcbiAgICBjb25zdCBbZGVmYXVsdEltcG9ydE5hbWVdID0gZGVmYXVsdEltcG9ydE5hbWVzO1xuXG4gICAgY29uc3QgZmlyc3RIYXNUcmFpbGluZ0NvbW1hID1cbiAgICAgIGNsb3NlQnJhY2UgIT0gbnVsbCAmJlxuICAgICAgaXNQdW5jdHVhdG9yKHNvdXJjZUNvZGUuZ2V0VG9rZW5CZWZvcmUoY2xvc2VCcmFjZSksICcsJyk7XG4gICAgY29uc3QgZmlyc3RJc0VtcHR5ID0gIWhhc1NwZWNpZmllcnMoZmlyc3QpO1xuXG4gICAgY29uc3QgW3NwZWNpZmllcnNUZXh0XSA9IHNwZWNpZmllcnMucmVkdWNlKFxuICAgICAgKFtyZXN1bHQsIG5lZWRzQ29tbWFdLCBzcGVjaWZpZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBuZWVkc0NvbW1hICYmICFzcGVjaWZpZXIuaXNFbXB0eVxuICAgICAgICAgICAgPyBgJHtyZXN1bHR9LCR7c3BlY2lmaWVyLnRleHR9YFxuICAgICAgICAgICAgOiBgJHtyZXN1bHR9JHtzcGVjaWZpZXIudGV4dH1gLFxuICAgICAgICAgIHNwZWNpZmllci5pc0VtcHR5ID8gbmVlZHNDb21tYSA6IHRydWUsXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgICAgWycnLCAhZmlyc3RIYXNUcmFpbGluZ0NvbW1hICYmICFmaXJzdElzRW1wdHldXG4gICAgKTtcblxuICAgIGNvbnN0IGZpeGVzID0gW107XG5cbiAgICBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiBzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICAvLyBgaW1wb3J0ICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChcbiAgICAgICAgZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgJHtkZWZhdWx0SW1wb3J0TmFtZX0sIHske3NwZWNpZmllcnNUZXh0fX0gZnJvbWApXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiAhc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYFxuICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3RUb2tlbiwgYCAke2RlZmF1bHRJbXBvcnROYW1lfSBmcm9tYCkpO1xuICAgIH0gZWxzZSBpZiAoc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgIT0gbnVsbCAmJiBjbG9zZUJyYWNlICE9IG51bGwpIHtcbiAgICAgIC8vIGBpbXBvcnQgey4uLn0gZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgJHtkZWZhdWx0SW1wb3J0TmFtZX0sYCkpO1xuICAgICAgaWYgKHNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QmVmb3JlKGNsb3NlQnJhY2UsIHNwZWNpZmllcnNUZXh0KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgPT0gbnVsbCAmJiBzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICBpZiAoZmlyc3Quc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgeyR7c3BlY2lmaWVyc1RleHR9fSBmcm9tYCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYGltcG9ydCBkZWYgZnJvbSAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgICAgZml4ZXMucHVzaChmaXhlci5pbnNlcnRUZXh0QWZ0ZXIoZmlyc3Quc3BlY2lmaWVyc1swXSwgYCwgeyR7c3BlY2lmaWVyc1RleHR9fWApKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFzaG91bGRBZGREZWZhdWx0ICYmIG9wZW5CcmFjZSAhPSBudWxsICYmIGNsb3NlQnJhY2UgIT0gbnVsbCkge1xuICAgICAgLy8gYGltcG9ydCB7Li4ufSAnLi9mb28nYCDihpIgYGltcG9ydCB7Li4uLCAuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShjbG9zZUJyYWNlLCBzcGVjaWZpZXJzVGV4dCkpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBpbXBvcnRzIHdob3NlIHNwZWNpZmllcnMgaGF2ZSBiZWVuIG1vdmVkIGludG8gdGhlIGZpcnN0IGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBzcGVjaWZpZXJzKSB7XG4gICAgICBjb25zdCBpbXBvcnROb2RlID0gc3BlY2lmaWVyLmltcG9ydE5vZGU7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShpbXBvcnROb2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW2ltcG9ydE5vZGUucmFuZ2VbMV0sIGltcG9ydE5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaW1wb3J0cyB3aG9zZSBkZWZhdWx0IGltcG9ydCBoYXMgYmVlbiBtb3ZlZCB0byB0aGUgZmlyc3QgaW1wb3J0LFxuICAgIC8vIGFuZCBzaWRlLWVmZmVjdC1vbmx5IGltcG9ydHMgdGhhdCBhcmUgdW5uZWNlc3NhcnkgZHVlIHRvIHRoZSBmaXJzdFxuICAgIC8vIGltcG9ydC5cbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdW5uZWNlc3NhcnlJbXBvcnRzKSB7XG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZShub2RlKSk7XG5cbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydFJhbmdlID0gW25vZGUucmFuZ2VbMV0sIG5vZGUucmFuZ2VbMV0gKyAxXTtcbiAgICAgIGNvbnN0IGNoYXJBZnRlckltcG9ydCA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoY2hhckFmdGVySW1wb3J0UmFuZ2VbMF0sIGNoYXJBZnRlckltcG9ydFJhbmdlWzFdKTtcbiAgICAgIGlmIChjaGFyQWZ0ZXJJbXBvcnQgPT09ICdcXG4nKSB7XG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVtb3ZlUmFuZ2UoY2hhckFmdGVySW1wb3J0UmFuZ2UpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZml4ZXM7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzUHVuY3R1YXRvcihub2RlLCB2YWx1ZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnUHVuY3R1YXRvcicgJiYgbm9kZS52YWx1ZSA9PT0gdmFsdWU7XG59XG5cbi8vIEdldCB0aGUgbmFtZSBvZiB0aGUgZGVmYXVsdCBpbXBvcnQgb2YgYG5vZGVgLCBpZiBhbnkuXG5mdW5jdGlvbiBnZXREZWZhdWx0SW1wb3J0TmFtZShub2RlKSB7XG4gIGNvbnN0IGRlZmF1bHRTcGVjaWZpZXIgPSBub2RlLnNwZWNpZmllcnNcbiAgICAuZmluZChzcGVjaWZpZXIgPT4gc3BlY2lmaWVyLnR5cGUgPT09ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJyk7XG4gIHJldHVybiBkZWZhdWx0U3BlY2lmaWVyICE9IG51bGwgPyBkZWZhdWx0U3BlY2lmaWVyLmxvY2FsLm5hbWUgOiB1bmRlZmluZWQ7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBuYW1lc3BhY2UgaW1wb3J0LlxuZnVuY3Rpb24gaGFzTmFtZXNwYWNlKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoc3BlY2lmaWVyID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJyk7XG4gIHJldHVybiBzcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYW55IG5vbi1kZWZhdWx0IHNwZWNpZmllcnMuXG5mdW5jdGlvbiBoYXNTcGVjaWZpZXJzKG5vZGUpIHtcbiAgY29uc3Qgc3BlY2lmaWVycyA9IG5vZGUuc3BlY2lmaWVyc1xuICAgIC5maWx0ZXIoc3BlY2lmaWVyID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJyk7XG4gIHJldHVybiBzcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbi8vIEl0J3Mgbm90IG9idmlvdXMgd2hhdCB0aGUgdXNlciB3YW50cyB0byBkbyB3aXRoIGNvbW1lbnRzIGFzc29jaWF0ZWQgd2l0aFxuLy8gZHVwbGljYXRlIGltcG9ydHMsIHNvIHNraXAgaW1wb3J0cyB3aXRoIGNvbW1lbnRzIHdoZW4gYXV0b2ZpeGluZy5cbmZ1bmN0aW9uIGhhc1Byb2JsZW1hdGljQ29tbWVudHMobm9kZSwgc291cmNlQ29kZSkge1xuICByZXR1cm4gKFxuICAgIGhhc0NvbW1lbnRCZWZvcmUobm9kZSwgc291cmNlQ29kZSkgfHxcbiAgICBoYXNDb21tZW50QWZ0ZXIobm9kZSwgc291cmNlQ29kZSkgfHxcbiAgICBoYXNDb21tZW50SW5zaWRlTm9uU3BlY2lmaWVycyhub2RlLCBzb3VyY2VDb2RlKVxuICApO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgY29tbWVudCAodGhhdCBlbmRzKSBvbiB0aGUgcHJldmlvdXMgbGluZSBvciBvblxuLy8gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWAgKHN0YXJ0cykuXG5mdW5jdGlvbiBoYXNDb21tZW50QmVmb3JlKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgcmV0dXJuIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUobm9kZSlcbiAgICAuc29tZShjb21tZW50ID0+IGNvbW1lbnQubG9jLmVuZC5saW5lID49IG5vZGUubG9jLnN0YXJ0LmxpbmUgLSAxKTtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhIGNvbW1lbnQgKHRoYXQgc3RhcnRzKSBvbiB0aGUgc2FtZSBsaW5lIGFzIGBub2RlYFxuLy8gKGVuZHMpLlxuZnVuY3Rpb24gaGFzQ29tbWVudEFmdGVyKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgcmV0dXJuIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNBZnRlcihub2RlKVxuICAgIC5zb21lKGNvbW1lbnQgPT4gY29tbWVudC5sb2Muc3RhcnQubGluZSA9PT0gbm9kZS5sb2MuZW5kLmxpbmUpO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGFueSBjb21tZW50cyBfaW5zaWRlLF8gZXhjZXB0IGluc2lkZSB0aGUgYHsuLi59YFxuLy8gcGFydCAoaWYgYW55KS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRJbnNpZGVOb25TcGVjaWZpZXJzKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgY29uc3QgdG9rZW5zID0gc291cmNlQ29kZS5nZXRUb2tlbnMobm9kZSk7XG4gIGNvbnN0IG9wZW5CcmFjZUluZGV4ID0gdG9rZW5zLmZpbmRJbmRleCh0b2tlbiA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd7JykpO1xuICBjb25zdCBjbG9zZUJyYWNlSW5kZXggPSB0b2tlbnMuZmluZEluZGV4KHRva2VuID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ30nKSk7XG4gIC8vIFNsaWNlIGF3YXkgdGhlIGZpcnN0IHRva2VuLCBzaW5jZSB3ZSdyZSBubyBsb29raW5nIGZvciBjb21tZW50cyBfYmVmb3JlX1xuICAvLyBgbm9kZWAgKG9ubHkgaW5zaWRlKS4gSWYgdGhlcmUncyBhIGB7Li4ufWAgcGFydCwgbG9vayBmb3IgY29tbWVudHMgYmVmb3JlXG4gIC8vIHRoZSBge2AsIGJ1dCBub3QgYmVmb3JlIHRoZSBgfWAgKGhlbmNlIHRoZSBgKzFgcykuXG4gIGNvbnN0IHNvbWVUb2tlbnMgPSBvcGVuQnJhY2VJbmRleCA+PSAwICYmIGNsb3NlQnJhY2VJbmRleCA+PSAwXG4gICAgPyB0b2tlbnMuc2xpY2UoMSwgb3BlbkJyYWNlSW5kZXggKyAxKS5jb25jYXQodG9rZW5zLnNsaWNlKGNsb3NlQnJhY2VJbmRleCArIDEpKVxuICAgIDogdG9rZW5zLnNsaWNlKDEpO1xuICByZXR1cm4gc29tZVRva2Vucy5zb21lKHRva2VuID0+IHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUodG9rZW4pLmxlbmd0aCA+IDApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR1cGxpY2F0ZXMnKSxcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBjb25zaWRlclF1ZXJ5U3RyaW5nOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAvLyBQcmVwYXJlIHRoZSByZXNvbHZlciBmcm9tIG9wdGlvbnMuXG4gICAgY29uc3QgY29uc2lkZXJRdWVyeVN0cmluZ09wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXSAmJlxuICAgICAgY29udGV4dC5vcHRpb25zWzBdWydjb25zaWRlclF1ZXJ5U3RyaW5nJ107XG4gICAgY29uc3QgZGVmYXVsdFJlc29sdmVyID0gc291cmNlUGF0aCA9PiByZXNvbHZlKHNvdXJjZVBhdGgsIGNvbnRleHQpIHx8IHNvdXJjZVBhdGg7XG4gICAgY29uc3QgcmVzb2x2ZXIgPSBjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uID8gKHNvdXJjZVBhdGggPT4ge1xuICAgICAgY29uc3QgcGFydHMgPSBzb3VyY2VQYXRoLm1hdGNoKC9eKFteP10qKVxcPyguKikkLyk7XG4gICAgICBpZiAoIXBhcnRzKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIoc291cmNlUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmYXVsdFJlc29sdmVyKHBhcnRzWzFdKSArICc/JyArIHBhcnRzWzJdO1xuICAgIH0pIDogZGVmYXVsdFJlc29sdmVyO1xuXG4gICAgY29uc3QgaW1wb3J0ZWQgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgbnNJbXBvcnRlZCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBkZWZhdWx0VHlwZXNJbXBvcnRlZCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBuYW1lZFR5cGVzSW1wb3J0ZWQgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBnZXRJbXBvcnRNYXAobikge1xuICAgICAgaWYgKG4uaW1wb3J0S2luZCA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIHJldHVybiBuLnNwZWNpZmllcnMubGVuZ3RoID4gMCAmJiBuLnNwZWNpZmllcnNbMF0udHlwZSA9PT0gJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInID8gZGVmYXVsdFR5cGVzSW1wb3J0ZWQgOiBuYW1lZFR5cGVzSW1wb3J0ZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoYXNOYW1lc3BhY2UobikgPyBuc0ltcG9ydGVkIDogaW1wb3J0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG4pIHtcbiAgICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlcihuLnNvdXJjZS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGltcG9ydE1hcCA9IGdldEltcG9ydE1hcChuKTtcblxuICAgICAgICBpZiAoaW1wb3J0TWFwLmhhcyhyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgaW1wb3J0TWFwLmdldChyZXNvbHZlZFBhdGgpLnB1c2gobik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1wb3J0TWFwLnNldChyZXNvbHZlZFBhdGgsIFtuXSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgICdQcm9ncmFtOmV4aXQnKCkge1xuICAgICAgICBjaGVja0ltcG9ydHMoaW1wb3J0ZWQsIGNvbnRleHQpO1xuICAgICAgICBjaGVja0ltcG9ydHMobnNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIGNoZWNrSW1wb3J0cyhkZWZhdWx0VHlwZXNJbXBvcnRlZCwgY29udGV4dCk7XG4gICAgICAgIGNoZWNrSW1wb3J0cyhuYW1lZFR5cGVzSW1wb3J0ZWQsIGNvbnRleHQpO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1kdXBsaWNhdGVzLmpzIl0sIm5hbWVzIjpbImNoZWNrSW1wb3J0cyIsImltcG9ydGVkIiwiY29udGV4dCIsImVudHJpZXMiLCJtb2R1bGUiLCJub2RlcyIsImxlbmd0aCIsIm1lc3NhZ2UiLCJmaXJzdCIsInJlc3QiLCJzb3VyY2VDb2RlIiwiZ2V0U291cmNlQ29kZSIsImZpeCIsImdldEZpeCIsInJlcG9ydCIsIm5vZGUiLCJzb3VyY2UiLCJnZXRDb21tZW50c0JlZm9yZSIsInVuZGVmaW5lZCIsImhhc1Byb2JsZW1hdGljQ29tbWVudHMiLCJoYXNOYW1lc3BhY2UiLCJkZWZhdWx0SW1wb3J0TmFtZXMiLCJTZXQiLCJtYXAiLCJnZXREZWZhdWx0SW1wb3J0TmFtZSIsImZpbHRlciIsIkJvb2xlYW4iLCJzaXplIiwicmVzdFdpdGhvdXRDb21tZW50cyIsInNwZWNpZmllcnMiLCJ0b2tlbnMiLCJnZXRUb2tlbnMiLCJvcGVuQnJhY2UiLCJmaW5kIiwiaXNQdW5jdHVhdG9yIiwidG9rZW4iLCJjbG9zZUJyYWNlIiwiaW1wb3J0Tm9kZSIsInRleHQiLCJzbGljZSIsInJhbmdlIiwiaGFzVHJhaWxpbmdDb21tYSIsImdldFRva2VuQmVmb3JlIiwiaXNFbXB0eSIsImhhc1NwZWNpZmllcnMiLCJ1bm5lY2Vzc2FyeUltcG9ydHMiLCJzb21lIiwic3BlY2lmaWVyIiwic2hvdWxkQWRkRGVmYXVsdCIsInNob3VsZEFkZFNwZWNpZmllcnMiLCJzaG91bGRSZW1vdmVVbm5lY2Vzc2FyeSIsImZpcnN0VG9rZW4iLCJnZXRGaXJzdFRva2VuIiwiZGVmYXVsdEltcG9ydE5hbWUiLCJmaXJzdEhhc1RyYWlsaW5nQ29tbWEiLCJmaXJzdElzRW1wdHkiLCJyZWR1Y2UiLCJyZXN1bHQiLCJuZWVkc0NvbW1hIiwic3BlY2lmaWVyc1RleHQiLCJmaXhlcyIsInB1c2giLCJmaXhlciIsImluc2VydFRleHRBZnRlciIsImluc2VydFRleHRCZWZvcmUiLCJyZW1vdmUiLCJjaGFyQWZ0ZXJJbXBvcnRSYW5nZSIsImNoYXJBZnRlckltcG9ydCIsInN1YnN0cmluZyIsInJlbW92ZVJhbmdlIiwidmFsdWUiLCJ0eXBlIiwiZGVmYXVsdFNwZWNpZmllciIsImxvY2FsIiwibmFtZSIsImhhc0NvbW1lbnRCZWZvcmUiLCJoYXNDb21tZW50QWZ0ZXIiLCJoYXNDb21tZW50SW5zaWRlTm9uU3BlY2lmaWVycyIsImNvbW1lbnQiLCJsb2MiLCJlbmQiLCJsaW5lIiwic3RhcnQiLCJnZXRDb21tZW50c0FmdGVyIiwib3BlbkJyYWNlSW5kZXgiLCJmaW5kSW5kZXgiLCJjbG9zZUJyYWNlSW5kZXgiLCJzb21lVG9rZW5zIiwiY29uY2F0IiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJjb25zaWRlclF1ZXJ5U3RyaW5nIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uIiwib3B0aW9ucyIsImRlZmF1bHRSZXNvbHZlciIsInNvdXJjZVBhdGgiLCJyZXNvbHZlciIsInBhcnRzIiwibWF0Y2giLCJNYXAiLCJuc0ltcG9ydGVkIiwiZGVmYXVsdFR5cGVzSW1wb3J0ZWQiLCJuYW1lZFR5cGVzSW1wb3J0ZWQiLCJnZXRJbXBvcnRNYXAiLCJuIiwiaW1wb3J0S2luZCIsIkltcG9ydERlY2xhcmF0aW9uIiwicmVzb2x2ZWRQYXRoIiwiaW1wb3J0TWFwIiwiaGFzIiwiZ2V0Iiwic2V0Il0sIm1hcHBpbmdzIjoicW9CQUFBLHNEO0FBQ0EscUM7O0FBRUEsU0FBU0EsWUFBVCxDQUFzQkMsUUFBdEIsRUFBZ0NDLE9BQWhDLEVBQXlDO0FBQ3ZDLHlCQUE4QkQsU0FBU0UsT0FBVCxFQUE5Qiw4SEFBa0QsZ0VBQXRDQyxPQUFzQyxnQkFBOUJDLEtBQThCO0FBQ2hELFVBQUlBLE1BQU1DLE1BQU4sR0FBZSxDQUFuQixFQUFzQjtBQUNwQixZQUFNQyx3QkFBY0gsT0FB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LHlCQUFhQyxRQUFiLEVBQXVCQyxPQUF2QjtBQUNBRix5QkFBYTJHLFVBQWIsRUFBeUJ6RyxPQUF6QjtBQUNBRix5QkFBYTRHLG9CQUFiLEVBQW1DMUcsT0FBbkM7QUFDQUYseUJBQWE2RyxrQkFBYixFQUFpQzNHLE9BQWpDO0FBQ0QsV0FMRCxzQkFiSyxFQUFQOztBQW9CRCxLQWxFYyxtQkFBakIiLCJmaWxlIjoibm8tZHVwbGljYXRlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gY2hlY2tJbXBvcnRzKGltcG9ydGVkLCBjb250ZXh0KSB7XG4gIGZvciAoY29uc3QgW21vZHVsZSwgbm9kZXNdIG9mIGltcG9ydGVkLmVudHJpZXMoKSkge1xuICAgIGlmIChub2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYCcke21vZHVsZX0nIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzLmA7XG4gICAgICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gbm9kZXM7XG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCk7XG4gICAgICBjb25zdCBmaXggPSBnZXRGaXgoZmlyc3QsIHJlc3QsIHNvdXJjZUNvZGUpO1xuXG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGU6IGZpcnN0LnNvdXJjZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZml4LCAvLyBBdHRhY2ggdGhlIGF1dG9maXggKGlmIGFueSkgdG8gdGhlIGZpcnN0IGltcG9ydC5cbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcmVzdCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogbm9kZS5zb3VyY2UsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEZpeChmaXJzdCwgcmVzdCwgc291cmNlQ29kZSkge1xuICAvLyBTb3JyeSBFU0xpbnQgPD0gMyB1c2Vycywgbm8gYXV0b2ZpeCBmb3IgeW91LiBBdXRvZml4aW5nIGR1cGxpY2F0ZSBpbXBvcnRzXG4gIC8vIHJlcXVpcmVzIG11bHRpcGxlIGBmaXhlci53aGF0ZXZlcigpYCBjYWxscyBpbiB0aGUgYGZpeGA6IFdlIGJvdGggbmVlZCB0b1xuICAvLyB1cGRhdGUgdGhlIGZpcnN0IG9uZSwgYW5kIHJlbW92ZSB0aGUgcmVzdC4gU3VwcG9ydCBmb3IgbXVsdGlwbGVcbiAgLy8gYGZpeGVyLndoYXRldmVyKClgIGluIGEgc2luZ2xlIGBmaXhgIHdhcyBhZGRlZCBpbiBFU0xpbnQgNC4xLlxuICAvLyBgc291cmNlQ29kZS5nZXRDb21tZW50c0JlZm9yZWAgd2FzIGFkZGVkIGluIDQuMCwgc28gdGhhdCdzIGFuIGVhc3kgdGhpbmcgdG9cbiAgLy8gY2hlY2sgZm9yLlxuICBpZiAodHlwZW9mIHNvdXJjZUNvZGUuZ2V0Q29tbWVudHNCZWZvcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQWRqdXN0aW5nIHRoZSBmaXJzdCBpbXBvcnQgbWlnaHQgbWFrZSBpdCBtdWx0aWxpbmUsIHdoaWNoIGNvdWxkIGJyZWFrXG4gIC8vIGBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVgIGNvbW1lbnRzIGFuZCBzaW1pbGFyLCBzbyBiYWlsIGlmIHRoZSBmaXJzdFxuICAvLyBpbXBvcnQgaGFzIGNvbW1lbnRzLiBBbHNvLCBpZiB0aGUgZmlyc3QgaW1wb3J0IGlzIGBpbXBvcnQgKiBhcyBucyBmcm9tXG4gIC8vICcuL2ZvbydgIHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uXG4gIGlmIChoYXNQcm9ibGVtYXRpY0NvbW1lbnRzKGZpcnN0LCBzb3VyY2VDb2RlKSB8fCBoYXNOYW1lc3BhY2UoZmlyc3QpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRJbXBvcnROYW1lcyA9IG5ldyBTZXQoXG4gICAgW2ZpcnN0LCAuLi5yZXN0XS5tYXAoZ2V0RGVmYXVsdEltcG9ydE5hbWUpLmZpbHRlcihCb29sZWFuKVxuICApO1xuXG4gIC8vIEJhaWwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGRpZmZlcmVudCBkZWZhdWx0IGltcG9ydCBuYW1lcyDigJMgaXQncyB1cCB0byB0aGVcbiAgLy8gdXNlciB0byBjaG9vc2Ugd2hpY2ggb25lIHRvIGtlZXAuXG4gIGlmIChkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA+IDEpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gTGVhdmUgaXQgdG8gdGhlIHVzZXIgdG8gaGFuZGxlIGNvbW1lbnRzLiBBbHNvIHNraXAgYGltcG9ydCAqIGFzIG5zIGZyb21cbiAgLy8gJy4vZm9vJ2AgaW1wb3J0cywgc2luY2UgdGhleSBjYW5ub3QgYmUgbWVyZ2VkIGludG8gYW5vdGhlciBpbXBvcnQuXG4gIGNvbnN0IHJlc3RXaXRob3V0Q29tbWVudHMgPSByZXN0LmZpbHRlcihub2RlID0+ICEoXG4gICAgaGFzUHJvYmxlbWF0aWNDb21tZW50cyhub2RlLCBzb3VyY2VDb2RlKSB8fFxuICAgIGhhc05hbWVzcGFjZShub2RlKVxuICApKTtcblxuICBjb25zdCBzcGVjaWZpZXJzID0gcmVzdFdpdGhvdXRDb21tZW50c1xuICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICBjb25zdCB0b2tlbnMgPSBzb3VyY2VDb2RlLmdldFRva2Vucyhub2RlKTtcbiAgICAgIGNvbnN0IG9wZW5CcmFjZSA9IHRva2Vucy5maW5kKHRva2VuID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgICBjb25zdCBjbG9zZUJyYWNlID0gdG9rZW5zLmZpbmQodG9rZW4gPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAnfScpKTtcblxuICAgICAgaWYgKG9wZW5CcmFjZSA9PSBudWxsIHx8IGNsb3NlQnJhY2UgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbXBvcnROb2RlOiBub2RlLFxuICAgICAgICB0ZXh0OiBzb3VyY2VDb2RlLnRleHQuc2xpY2Uob3BlbkJyYWNlLnJhbmdlWzFdLCBjbG9zZUJyYWNlLnJhbmdlWzBdKSxcbiAgICAgICAgaGFzVHJhaWxpbmdDb21tYTogaXNQdW5jdHVhdG9yKHNvdXJjZUNvZGUuZ2V0VG9rZW5CZWZvcmUoY2xvc2VCcmFjZSksICcsJyksXG4gICAgICAgIGlzRW1wdHk6ICFoYXNTcGVjaWZpZXJzKG5vZGUpLFxuICAgICAgfTtcbiAgICB9KVxuICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgY29uc3QgdW5uZWNlc3NhcnlJbXBvcnRzID0gcmVzdFdpdGhvdXRDb21tZW50cy5maWx0ZXIobm9kZSA9PlxuICAgICFoYXNTcGVjaWZpZXJzKG5vZGUpICYmXG4gICAgIWhhc05hbWVzcGFjZShub2RlKSAmJlxuICAgICFzcGVjaWZpZXJzLnNvbWUoc3BlY2lmaWVyID0+IHNwZWNpZmllci5pbXBvcnROb2RlID09PSBub2RlKVxuICApO1xuXG4gIGNvbnN0IHNob3VsZEFkZERlZmF1bHQgPSBnZXREZWZhdWx0SW1wb3J0TmFtZShmaXJzdCkgPT0gbnVsbCAmJiBkZWZhdWx0SW1wb3J0TmFtZXMuc2l6ZSA9PT0gMTtcbiAgY29uc3Qgc2hvdWxkQWRkU3BlY2lmaWVycyA9IHNwZWNpZmllcnMubGVuZ3RoID4gMDtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkgPSB1bm5lY2Vzc2FyeUltcG9ydHMubGVuZ3RoID4gMDtcblxuICBpZiAoIShzaG91bGRBZGREZWZhdWx0IHx8IHNob3VsZEFkZFNwZWNpZmllcnMgfHwgc2hvdWxkUmVtb3ZlVW5uZWNlc3NhcnkpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBmaXhlciA9PiB7XG4gICAgY29uc3QgdG9rZW5zID0gc291cmNlQ29kZS5nZXRUb2tlbnMoZmlyc3QpO1xuICAgIGNvbnN0IG9wZW5CcmFjZSA9IHRva2Vucy5maW5kKHRva2VuID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ3snKSk7XG4gICAgY29uc3QgY2xvc2VCcmFjZSA9IHRva2Vucy5maW5kKHRva2VuID0+IGlzUHVuY3R1YXRvcih0b2tlbiwgJ30nKSk7XG4gICAgY29uc3QgZmlyc3RUb2tlbiA9IHNvdXJjZUNvZGUuZ2V0Rmlyc3RUb2tlbihmaXJzdCk7XG4gICAgY29uc3QgW2RlZmF1bHRJbXBvcnROYW1lXSA9IGRlZmF1bHRJbXBvcnROYW1lcztcblxuICAgIGNvbnN0IGZpcnN0SGFzVHJhaWxpbmdDb21tYSA9XG4gICAgICBjbG9zZUJyYWNlICE9IG51bGwgJiZcbiAgICAgIGlzUHVuY3R1YXRvcihzb3VyY2VDb2RlLmdldFRva2VuQmVmb3JlKGNsb3NlQnJhY2UpLCAnLCcpO1xuICAgIGNvbnN0IGZpcnN0SXNFbXB0eSA9ICFoYXNTcGVjaWZpZXJzKGZpcnN0KTtcblxuICAgIGNvbnN0IFtzcGVjaWZpZXJzVGV4dF0gPSBzcGVjaWZpZXJzLnJlZHVjZShcbiAgICAgIChbcmVzdWx0LCBuZWVkc0NvbW1hXSwgc3BlY2lmaWVyKSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgbmVlZHNDb21tYSAmJiAhc3BlY2lmaWVyLmlzRW1wdHlcbiAgICAgICAgICAgID8gYCR7cmVzdWx0fSwke3NwZWNpZmllci50ZXh0fWBcbiAgICAgICAgICAgIDogYCR7cmVzdWx0fSR7c3BlY2lmaWVyLnRleHR9YCxcbiAgICAgICAgICBzcGVjaWZpZXIuaXNFbXB0eSA/IG5lZWRzQ29tbWEgOiB0cnVlLFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFsnJywgIWZpcnN0SGFzVHJhaWxpbmdDb21tYSAmJiAhZmlyc3RJc0VtcHR5XVxuICAgICk7XG5cbiAgICBjb25zdCBmaXhlcyA9IFtdO1xuXG4gICAgaWYgKHNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlID09IG51bGwgJiYgc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgLy8gYGltcG9ydCAnLi9mb28nYCDihpIgYGltcG9ydCBkZWYsIHsuLi59IGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goXG4gICAgICAgIGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9LCB7JHtzcGVjaWZpZXJzVGV4dH19IGZyb21gKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlID09IG51bGwgJiYgIXNob3VsZEFkZFNwZWNpZmllcnMpIHtcbiAgICAgIC8vIGBpbXBvcnQgJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmIGZyb20gJy4vZm9vJ2BcbiAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0VG9rZW4sIGAgJHtkZWZhdWx0SW1wb3J0TmFtZX0gZnJvbWApKTtcbiAgICB9IGVsc2UgaWYgKHNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlICE9IG51bGwgJiYgY2xvc2VCcmFjZSAhPSBudWxsKSB7XG4gICAgICAvLyBgaW1wb3J0IHsuLi59IGZyb20gJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgICR7ZGVmYXVsdEltcG9ydE5hbWV9LGApKTtcbiAgICAgIGlmIChzaG91bGRBZGRTcGVjaWZpZXJzKSB7XG4gICAgICAgIC8vIGBpbXBvcnQgZGVmLCB7Li4ufSBmcm9tICcuL2ZvbydgIOKGkiBgaW1wb3J0IGRlZiwgey4uLiwgLi4ufSBmcm9tICcuL2ZvbydgXG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZShjbG9zZUJyYWNlLCBzcGVjaWZpZXJzVGV4dCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXNob3VsZEFkZERlZmF1bHQgJiYgb3BlbkJyYWNlID09IG51bGwgJiYgc2hvdWxkQWRkU3BlY2lmaWVycykge1xuICAgICAgaWYgKGZpcnN0LnNwZWNpZmllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGBpbXBvcnQgJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgey4uLn0gZnJvbSAnLi9mb28nYFxuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRBZnRlcihmaXJzdFRva2VuLCBgIHske3NwZWNpZmllcnNUZXh0fX0gZnJvbWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGBpbXBvcnQgZGVmIGZyb20gJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgZGVmLCB7Li4ufSBmcm9tICcuL2ZvbydgXG4gICAgICAgIGZpeGVzLnB1c2goZml4ZXIuaW5zZXJ0VGV4dEFmdGVyKGZpcnN0LnNwZWNpZmllcnNbMF0sIGAsIHske3NwZWNpZmllcnNUZXh0fX1gKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghc2hvdWxkQWRkRGVmYXVsdCAmJiBvcGVuQnJhY2UgIT0gbnVsbCAmJiBjbG9zZUJyYWNlICE9IG51bGwpIHtcbiAgICAgIC8vIGBpbXBvcnQgey4uLn0gJy4vZm9vJ2Ag4oaSIGBpbXBvcnQgey4uLiwgLi4ufSBmcm9tICcuL2ZvbydgXG4gICAgICBmaXhlcy5wdXNoKGZpeGVyLmluc2VydFRleHRCZWZvcmUoY2xvc2VCcmFjZSwgc3BlY2lmaWVyc1RleHQpKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgaW1wb3J0cyB3aG9zZSBzcGVjaWZpZXJzIGhhdmUgYmVlbiBtb3ZlZCBpbnRvIHRoZSBmaXJzdCBpbXBvcnQuXG4gICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2Ygc3BlY2lmaWVycykge1xuICAgICAgY29uc3QgaW1wb3J0Tm9kZSA9IHNwZWNpZmllci5pbXBvcnROb2RlO1xuICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmUoaW1wb3J0Tm9kZSkpO1xuXG4gICAgICBjb25zdCBjaGFyQWZ0ZXJJbXBvcnRSYW5nZSA9IFtpbXBvcnROb2RlLnJhbmdlWzFdLCBpbXBvcnROb2RlLnJhbmdlWzFdICsgMV07XG4gICAgICBjb25zdCBjaGFyQWZ0ZXJJbXBvcnQgPSBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKGNoYXJBZnRlckltcG9ydFJhbmdlWzBdLCBjaGFyQWZ0ZXJJbXBvcnRSYW5nZVsxXSk7XG4gICAgICBpZiAoY2hhckFmdGVySW1wb3J0ID09PSAnXFxuJykge1xuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZVJhbmdlKGNoYXJBZnRlckltcG9ydFJhbmdlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGltcG9ydHMgd2hvc2UgZGVmYXVsdCBpbXBvcnQgaGFzIGJlZW4gbW92ZWQgdG8gdGhlIGZpcnN0IGltcG9ydCxcbiAgICAvLyBhbmQgc2lkZS1lZmZlY3Qtb25seSBpbXBvcnRzIHRoYXQgYXJlIHVubmVjZXNzYXJ5IGR1ZSB0byB0aGUgZmlyc3RcbiAgICAvLyBpbXBvcnQuXG4gICAgZm9yIChjb25zdCBub2RlIG9mIHVubmVjZXNzYXJ5SW1wb3J0cykge1xuICAgICAgZml4ZXMucHVzaChmaXhlci5yZW1vdmUobm9kZSkpO1xuXG4gICAgICBjb25zdCBjaGFyQWZ0ZXJJbXBvcnRSYW5nZSA9IFtub2RlLnJhbmdlWzFdLCBub2RlLnJhbmdlWzFdICsgMV07XG4gICAgICBjb25zdCBjaGFyQWZ0ZXJJbXBvcnQgPSBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKGNoYXJBZnRlckltcG9ydFJhbmdlWzBdLCBjaGFyQWZ0ZXJJbXBvcnRSYW5nZVsxXSk7XG4gICAgICBpZiAoY2hhckFmdGVySW1wb3J0ID09PSAnXFxuJykge1xuICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlbW92ZVJhbmdlKGNoYXJBZnRlckltcG9ydFJhbmdlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpeGVzO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc1B1bmN0dWF0b3Iobm9kZSwgdmFsdWUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ1B1bmN0dWF0b3InICYmIG5vZGUudmFsdWUgPT09IHZhbHVlO1xufVxuXG4vLyBHZXQgdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgaW1wb3J0IG9mIGBub2RlYCwgaWYgYW55LlxuZnVuY3Rpb24gZ2V0RGVmYXVsdEltcG9ydE5hbWUobm9kZSkge1xuICBjb25zdCBkZWZhdWx0U3BlY2lmaWVyID0gbm9kZS5zcGVjaWZpZXJzXG4gICAgLmZpbmQoc3BlY2lmaWVyID0+IHNwZWNpZmllci50eXBlID09PSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicpO1xuICByZXR1cm4gZGVmYXVsdFNwZWNpZmllciAhPSBudWxsID8gZGVmYXVsdFNwZWNpZmllci5sb2NhbC5uYW1lIDogdW5kZWZpbmVkO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGEgbmFtZXNwYWNlIGltcG9ydC5cbmZ1bmN0aW9uIGhhc05hbWVzcGFjZShub2RlKSB7XG4gIGNvbnN0IHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnNcbiAgICAuZmlsdGVyKHNwZWNpZmllciA9PiBzcGVjaWZpZXIudHlwZSA9PT0gJ0ltcG9ydE5hbWVzcGFjZVNwZWNpZmllcicpO1xuICByZXR1cm4gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG4vLyBDaGVja3Mgd2hldGhlciBgbm9kZWAgaGFzIGFueSBub24tZGVmYXVsdCBzcGVjaWZpZXJzLlxuZnVuY3Rpb24gaGFzU3BlY2lmaWVycyhub2RlKSB7XG4gIGNvbnN0IHNwZWNpZmllcnMgPSBub2RlLnNwZWNpZmllcnNcbiAgICAuZmlsdGVyKHNwZWNpZmllciA9PiBzcGVjaWZpZXIudHlwZSA9PT0gJ0ltcG9ydFNwZWNpZmllcicpO1xuICByZXR1cm4gc3BlY2lmaWVycy5sZW5ndGggPiAwO1xufVxuXG4vLyBJdCdzIG5vdCBvYnZpb3VzIHdoYXQgdGhlIHVzZXIgd2FudHMgdG8gZG8gd2l0aCBjb21tZW50cyBhc3NvY2lhdGVkIHdpdGhcbi8vIGR1cGxpY2F0ZSBpbXBvcnRzLCBzbyBza2lwIGltcG9ydHMgd2l0aCBjb21tZW50cyB3aGVuIGF1dG9maXhpbmcuXG5mdW5jdGlvbiBoYXNQcm9ibGVtYXRpY0NvbW1lbnRzKG5vZGUsIHNvdXJjZUNvZGUpIHtcbiAgcmV0dXJuIChcbiAgICBoYXNDb21tZW50QmVmb3JlKG5vZGUsIHNvdXJjZUNvZGUpIHx8XG4gICAgaGFzQ29tbWVudEFmdGVyKG5vZGUsIHNvdXJjZUNvZGUpIHx8XG4gICAgaGFzQ29tbWVudEluc2lkZU5vblNwZWNpZmllcnMobm9kZSwgc291cmNlQ29kZSlcbiAgKTtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhIGNvbW1lbnQgKHRoYXQgZW5kcykgb24gdGhlIHByZXZpb3VzIGxpbmUgb3Igb25cbi8vIHRoZSBzYW1lIGxpbmUgYXMgYG5vZGVgIChzdGFydHMpLlxuZnVuY3Rpb24gaGFzQ29tbWVudEJlZm9yZShub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKG5vZGUpXG4gICAgLnNvbWUoY29tbWVudCA9PiBjb21tZW50LmxvYy5lbmQubGluZSA+PSBub2RlLmxvYy5zdGFydC5saW5lIC0gMSk7XG59XG5cbi8vIENoZWNrcyB3aGV0aGVyIGBub2RlYCBoYXMgYSBjb21tZW50ICh0aGF0IHN0YXJ0cykgb24gdGhlIHNhbWUgbGluZSBhcyBgbm9kZWBcbi8vIChlbmRzKS5cbmZ1bmN0aW9uIGhhc0NvbW1lbnRBZnRlcihub2RlLCBzb3VyY2VDb2RlKSB7XG4gIHJldHVybiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQWZ0ZXIobm9kZSlcbiAgICAuc29tZShjb21tZW50ID0+IGNvbW1lbnQubG9jLnN0YXJ0LmxpbmUgPT09IG5vZGUubG9jLmVuZC5saW5lKTtcbn1cblxuLy8gQ2hlY2tzIHdoZXRoZXIgYG5vZGVgIGhhcyBhbnkgY29tbWVudHMgX2luc2lkZSxfIGV4Y2VwdCBpbnNpZGUgdGhlIGB7Li4ufWBcbi8vIHBhcnQgKGlmIGFueSkuXG5mdW5jdGlvbiBoYXNDb21tZW50SW5zaWRlTm9uU3BlY2lmaWVycyhub2RlLCBzb3VyY2VDb2RlKSB7XG4gIGNvbnN0IHRva2VucyA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5zKG5vZGUpO1xuICBjb25zdCBvcGVuQnJhY2VJbmRleCA9IHRva2Vucy5maW5kSW5kZXgodG9rZW4gPT4gaXNQdW5jdHVhdG9yKHRva2VuLCAneycpKTtcbiAgY29uc3QgY2xvc2VCcmFjZUluZGV4ID0gdG9rZW5zLmZpbmRJbmRleCh0b2tlbiA9PiBpc1B1bmN0dWF0b3IodG9rZW4sICd9JykpO1xuICAvLyBTbGljZSBhd2F5IHRoZSBmaXJzdCB0b2tlbiwgc2luY2Ugd2UncmUgbm8gbG9va2luZyBmb3IgY29tbWVudHMgX2JlZm9yZV9cbiAgLy8gYG5vZGVgIChvbmx5IGluc2lkZSkuIElmIHRoZXJlJ3MgYSBgey4uLn1gIHBhcnQsIGxvb2sgZm9yIGNvbW1lbnRzIGJlZm9yZVxuICAvLyB0aGUgYHtgLCBidXQgbm90IGJlZm9yZSB0aGUgYH1gIChoZW5jZSB0aGUgYCsxYHMpLlxuICBjb25zdCBzb21lVG9rZW5zID0gb3BlbkJyYWNlSW5kZXggPj0gMCAmJiBjbG9zZUJyYWNlSW5kZXggPj0gMFxuICAgID8gdG9rZW5zLnNsaWNlKDEsIG9wZW5CcmFjZUluZGV4ICsgMSkuY29uY2F0KHRva2Vucy5zbGljZShjbG9zZUJyYWNlSW5kZXggKyAxKSlcbiAgICA6IHRva2Vucy5zbGljZSgxKTtcbiAgcmV0dXJuIHNvbWVUb2tlbnMuc29tZSh0b2tlbiA9PiBzb3VyY2VDb2RlLmdldENvbW1lbnRzQmVmb3JlKHRva2VuKS5sZW5ndGggPiAwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1kdXBsaWNhdGVzJyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgY29uc2lkZXJRdWVyeVN0cmluZzoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIC8vIFByZXBhcmUgdGhlIHJlc29sdmVyIGZyb20gb3B0aW9ucy5cbiAgICBjb25zdCBjb25zaWRlclF1ZXJ5U3RyaW5nT3B0aW9uID0gY29udGV4dC5vcHRpb25zWzBdICYmXG4gICAgICBjb250ZXh0Lm9wdGlvbnNbMF1bJ2NvbnNpZGVyUXVlcnlTdHJpbmcnXTtcbiAgICBjb25zdCBkZWZhdWx0UmVzb2x2ZXIgPSBzb3VyY2VQYXRoID0+IHJlc29sdmUoc291cmNlUGF0aCwgY29udGV4dCkgfHwgc291cmNlUGF0aDtcbiAgICBjb25zdCByZXNvbHZlciA9IGNvbnNpZGVyUXVlcnlTdHJpbmdPcHRpb24gPyAoc291cmNlUGF0aCA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHNvdXJjZVBhdGgubWF0Y2goL14oW14/XSopXFw/KC4qKSQvKTtcbiAgICAgIGlmICghcGFydHMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRSZXNvbHZlcihzb3VyY2VQYXRoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkZWZhdWx0UmVzb2x2ZXIocGFydHNbMV0pICsgJz8nICsgcGFydHNbMl07XG4gICAgfSkgOiBkZWZhdWx0UmVzb2x2ZXI7XG5cbiAgICBjb25zdCBpbXBvcnRlZCA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBuc0ltcG9ydGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGRlZmF1bHRUeXBlc0ltcG9ydGVkID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG5hbWVkVHlwZXNJbXBvcnRlZCA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGdldEltcG9ydE1hcChuKSB7XG4gICAgICBpZiAobi5pbXBvcnRLaW5kID09PSAndHlwZScpIHtcbiAgICAgICAgcmV0dXJuIG4uc3BlY2lmaWVycy5sZW5ndGggPiAwICYmIG4uc3BlY2lmaWVyc1swXS50eXBlID09PSAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcicgPyBkZWZhdWx0VHlwZXNJbXBvcnRlZCA6IG5hbWVkVHlwZXNJbXBvcnRlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhhc05hbWVzcGFjZShuKSA/IG5zSW1wb3J0ZWQgOiBpbXBvcnRlZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgSW1wb3J0RGVjbGFyYXRpb24obikge1xuICAgICAgICAvLyByZXNvbHZlZCBwYXRoIHdpbGwgY292ZXIgYWxpYXNlZCBkdXBsaWNhdGVzXG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVyKG4uc291cmNlLnZhbHVlKTtcbiAgICAgICAgY29uc3QgaW1wb3J0TWFwID0gZ2V0SW1wb3J0TWFwKG4pO1xuXG4gICAgICAgIGlmIChpbXBvcnRNYXAuaGFzKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgICBpbXBvcnRNYXAuZ2V0KHJlc29sdmVkUGF0aCkucHVzaChuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbXBvcnRNYXAuc2V0KHJlc29sdmVkUGF0aCwgW25dKTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ1Byb2dyYW06ZXhpdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2hlY2tJbXBvcnRzKGltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgICAgY2hlY2tJbXBvcnRzKG5zSW1wb3J0ZWQsIGNvbnRleHQpO1xuICAgICAgICBjaGVja0ltcG9ydHMoZGVmYXVsdFR5cGVzSW1wb3J0ZWQsIGNvbnRleHQpO1xuICAgICAgICBjaGVja0ltcG9ydHMobmFtZWRUeXBlc0ltcG9ydGVkLCBjb250ZXh0KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-dynamic-require.js b/node_modules/eslint-plugin-import/lib/rules/no-dynamic-require.js
index 51758a2..39617ee 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-dynamic-require.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-dynamic-require.js
@@ -61,4 +61,4 @@
}return CallExpression;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1keW5hbWljLXJlcXVpcmUuanMiXSwibmFtZXMiOlsiaXNSZXF1aXJlIiwibm9kZSIsImNhbGxlZSIsInR5cGUiLCJuYW1lIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiaXNEeW5hbWljSW1wb3J0IiwiaXNTdGF0aWNWYWx1ZSIsImFyZyIsImV4cHJlc3Npb25zIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsImVzbW9kdWxlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb250ZXh0Iiwib3B0aW9ucyIsIkNhbGxFeHByZXNzaW9uIiwicmVwb3J0IiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6ImFBQUEscUM7O0FBRUEsU0FBU0EsU0FBVCxDQUFtQkMsSUFBbkIsRUFBeUI7QUFDdkIsU0FBT0E7QUFDTEEsT0FBS0MsTUFEQTtBQUVMRCxPQUFLQyxNQUFMLENBQVlDLElBQVosS0FBcUIsWUFGaEI7QUFHTEYsT0FBS0MsTUFBTCxDQUFZRSxJQUFaLEtBQXFCLFNBSGhCO0FBSUxILE9BQUtJLFNBQUwsQ0FBZUMsTUFBZixJQUF5QixDQUozQjtBQUtEOztBQUVELFNBQVNDLGVBQVQsQ0FBeUJOLElBQXpCLEVBQStCO0FBQzdCLFNBQU9BO0FBQ0xBLE9BQUtDLE1BREE7QUFFTEQsT0FBS0MsTUFBTCxDQUFZQyxJQUFaLEtBQXFCLFFBRnZCO0FBR0Q7O0FBRUQsU0FBU0ssYUFBVCxDQUF1QkMsR0FBdkIsRUFBNEI7QUFDMUIsU0FBT0EsSUFBSU4sSUFBSixLQUFhLFNBQWI7QUFDSk0sTUFBSU4sSUFBSixLQUFhLGlCQUFiLElBQWtDTSxJQUFJQyxXQUFKLENBQWdCSixNQUFoQixLQUEyQixDQURoRTtBQUVEOztBQUVESyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSlYsVUFBTSxZQURGO0FBRUpXLFVBQU07QUFDSkMsV0FBSywwQkFBUSxvQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVE7QUFDTjtBQUNFYixZQUFNLFFBRFI7QUFFRWMsa0JBQVk7QUFDVkMsa0JBQVU7QUFDUmYsZ0JBQU0sU0FERSxFQURBLEVBRmQ7OztBQU9FZ0IsNEJBQXNCLEtBUHhCLEVBRE0sQ0FMSixFQURTOzs7OztBQW1CZkMsdUJBQVEsZ0JBQVVDLE9BQVYsRUFBbUI7QUFDekIsVUFBTUMsVUFBVUQsUUFBUUMsT0FBUixDQUFnQixDQUFoQixLQUFzQixFQUF0Qzs7QUFFQSxhQUFPO0FBQ0xDLHNCQURLLHVDQUNVdEIsSUFEVixFQUNnQjtBQUNuQixnQkFBSSxDQUFDQSxLQUFLSSxTQUFMLENBQWUsQ0FBZixDQUFELElBQXNCRyxjQUFjUCxLQUFLSSxTQUFMLENBQWUsQ0FBZixDQUFkLENBQTFCLEVBQTREO0FBQzFEO0FBQ0Q7QUFDRCxnQkFBSUwsVUFBVUMsSUFBVixDQUFKLEVBQXFCO0FBQ25CLHFCQUFPb0IsUUFBUUcsTUFBUixDQUFlO0FBQ3BCdkIsMEJBRG9CO0FBRXBCd0IseUJBQVMsK0NBRlcsRUFBZixDQUFQOztBQUlEO0FBQ0QsZ0JBQUlILFFBQVFKLFFBQVIsSUFBb0JYLGdCQUFnQk4sSUFBaEIsQ0FBeEIsRUFBK0M7QUFDN0MscUJBQU9vQixRQUFRRyxNQUFSLENBQWU7QUFDcEJ2QiwwQkFEb0I7QUFFcEJ3Qix5QkFBUyw4Q0FGVyxFQUFmLENBQVA7O0FBSUQ7QUFDRixXQWpCSSwyQkFBUDs7QUFtQkQsS0F0QkQsaUJBbkJlLEVBQWpCIiwiZmlsZSI6Im5vLWR5bmFtaWMtcmVxdWlyZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBpc1JlcXVpcmUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJlxuICAgIG5vZGUuY2FsbGVlICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gJ0lkZW50aWZpZXInICYmXG4gICAgbm9kZS5jYWxsZWUubmFtZSA9PT0gJ3JlcXVpcmUnICYmXG4gICAgbm9kZS5hcmd1bWVudHMubGVuZ3RoID49IDE7XG59XG5cbmZ1bmN0aW9uIGlzRHluYW1pY0ltcG9ydChub2RlKSB7XG4gIHJldHVybiBub2RlICYmXG4gICAgbm9kZS5jYWxsZWUgJiZcbiAgICBub2RlLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jztcbn1cblxuZnVuY3Rpb24gaXNTdGF0aWNWYWx1ZShhcmcpIHtcbiAgcmV0dXJuIGFyZy50eXBlID09PSAnTGl0ZXJhbCcgfHxcbiAgICAoYXJnLnR5cGUgPT09ICdUZW1wbGF0ZUxpdGVyYWwnICYmIGFyZy5leHByZXNzaW9ucy5sZW5ndGggPT09IDApO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLWR5bmFtaWMtcmVxdWlyZScpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZXNtb2R1bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUuYXJndW1lbnRzWzBdIHx8IGlzU3RhdGljVmFsdWUobm9kZS5hcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JlcXVpcmUobm9kZSkpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdDYWxscyB0byByZXF1aXJlKCkgc2hvdWxkIHVzZSBzdHJpbmcgbGl0ZXJhbHMnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmVzbW9kdWxlICYmIGlzRHluYW1pY0ltcG9ydChub2RlKSkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0NhbGxzIHRvIGltcG9ydCgpIHNob3VsZCB1c2Ugc3RyaW5nIGxpdGVyYWxzJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1keW5hbWljLXJlcXVpcmUuanMiXSwibmFtZXMiOlsiaXNSZXF1aXJlIiwibm9kZSIsImNhbGxlZSIsInR5cGUiLCJuYW1lIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiaXNEeW5hbWljSW1wb3J0IiwiaXNTdGF0aWNWYWx1ZSIsImFyZyIsImV4cHJlc3Npb25zIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsImVzbW9kdWxlIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJjb250ZXh0Iiwib3B0aW9ucyIsIkNhbGxFeHByZXNzaW9uIiwicmVwb3J0IiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6ImFBQUEscUM7O0FBRUEsU0FBU0EsU0FBVCxDQUFtQkMsSUFBbkIsRUFBeUI7QUFDdkIsU0FBT0E7QUFDTEEsT0FBS0MsTUFEQTtBQUVMRCxPQUFLQyxNQUFMLENBQVlDLElBQVosS0FBcUIsWUFGaEI7QUFHTEYsT0FBS0MsTUFBTCxDQUFZRSxJQUFaLEtBQXFCLFNBSGhCO0FBSUxILE9BQUtJLFNBQUwsQ0FBZUMsTUFBZixJQUF5QixDQUozQjtBQUtEOztBQUVELFNBQVNDLGVBQVQsQ0FBeUJOLElBQXpCLEVBQStCO0FBQzdCLFNBQU9BO0FBQ0xBLE9BQUtDLE1BREE7QUFFTEQsT0FBS0MsTUFBTCxDQUFZQyxJQUFaLEtBQXFCLFFBRnZCO0FBR0Q7O0FBRUQsU0FBU0ssYUFBVCxDQUF1QkMsR0FBdkIsRUFBNEI7QUFDMUIsU0FBT0EsSUFBSU4sSUFBSixLQUFhLFNBQWI7QUFDSk0sTUFBSU4sSUFBSixLQUFhLGlCQUFiLElBQWtDTSxJQUFJQyxXQUFKLENBQWdCSixNQUFoQixLQUEyQixDQURoRTtBQUVEOztBQUVESyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSlYsVUFBTSxZQURGO0FBRUpXLFVBQU07QUFDSkMsV0FBSywwQkFBUSxvQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVE7QUFDTjtBQUNFYixZQUFNLFFBRFI7QUFFRWMsa0JBQVk7QUFDVkMsa0JBQVU7QUFDUmYsZ0JBQU0sU0FERSxFQURBLEVBRmQ7OztBQU9FZ0IsNEJBQXNCLEtBUHhCLEVBRE0sQ0FMSixFQURTOzs7OztBQW1CZkMsUUFuQmUsK0JBbUJSQyxPQW5CUSxFQW1CQztBQUNkLFVBQU1DLFVBQVVELFFBQVFDLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFBdEM7O0FBRUEsYUFBTztBQUNMQyxzQkFESyx1Q0FDVXRCLElBRFYsRUFDZ0I7QUFDbkIsZ0JBQUksQ0FBQ0EsS0FBS0ksU0FBTCxDQUFlLENBQWYsQ0FBRCxJQUFzQkcsY0FBY1AsS0FBS0ksU0FBTCxDQUFlLENBQWYsQ0FBZCxDQUExQixFQUE0RDtBQUMxRDtBQUNEO0FBQ0QsZ0JBQUlMLFVBQVVDLElBQVYsQ0FBSixFQUFxQjtBQUNuQixxQkFBT29CLFFBQVFHLE1BQVIsQ0FBZTtBQUNwQnZCLDBCQURvQjtBQUVwQndCLHlCQUFTLCtDQUZXLEVBQWYsQ0FBUDs7QUFJRDtBQUNELGdCQUFJSCxRQUFRSixRQUFSLElBQW9CWCxnQkFBZ0JOLElBQWhCLENBQXhCLEVBQStDO0FBQzdDLHFCQUFPb0IsUUFBUUcsTUFBUixDQUFlO0FBQ3BCdkIsMEJBRG9CO0FBRXBCd0IseUJBQVMsOENBRlcsRUFBZixDQUFQOztBQUlEO0FBQ0YsV0FqQkksMkJBQVA7O0FBbUJELEtBekNjLG1CQUFqQiIsImZpbGUiOiJuby1keW5hbWljLXJlcXVpcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gaXNSZXF1aXJlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiZcbiAgICBub2RlLmNhbGxlZSAmJlxuICAgIG5vZGUuY2FsbGVlLnR5cGUgPT09ICdJZGVudGlmaWVyJyAmJlxuICAgIG5vZGUuY2FsbGVlLm5hbWUgPT09ICdyZXF1aXJlJyAmJlxuICAgIG5vZGUuYXJndW1lbnRzLmxlbmd0aCA+PSAxO1xufVxuXG5mdW5jdGlvbiBpc0R5bmFtaWNJbXBvcnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJlxuICAgIG5vZGUuY2FsbGVlICYmXG4gICAgbm9kZS5jYWxsZWUudHlwZSA9PT0gJ0ltcG9ydCc7XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljVmFsdWUoYXJnKSB7XG4gIHJldHVybiBhcmcudHlwZSA9PT0gJ0xpdGVyYWwnIHx8XG4gICAgKGFyZy50eXBlID09PSAnVGVtcGxhdGVMaXRlcmFsJyAmJiBhcmcuZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1keW5hbWljLXJlcXVpcmUnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGVzbW9kdWxlOiB7XG4gICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIHJldHVybiB7XG4gICAgICBDYWxsRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmICghbm9kZS5hcmd1bWVudHNbMF0gfHwgaXNTdGF0aWNWYWx1ZShub2RlLmFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVxdWlyZShub2RlKSkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0NhbGxzIHRvIHJlcXVpcmUoKSBzaG91bGQgdXNlIHN0cmluZyBsaXRlcmFscycsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZXNtb2R1bGUgJiYgaXNEeW5hbWljSW1wb3J0KG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAnQ2FsbHMgdG8gaW1wb3J0KCkgc2hvdWxkIHVzZSBzdHJpbmcgbGl0ZXJhbHMnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-extraneous-dependencies.js b/node_modules/eslint-plugin-import/lib/rules/no-extraneous-dependencies.js
index 697e6af..8fa56e9 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-extraneous-dependencies.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-extraneous-dependencies.js
@@ -1,6 +1,6 @@
'use strict';var _slicedToArray = function () {function sliceIterator(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _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"]) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}return function (arr, i) {if (Array.isArray(arr)) {return arr;} else if (Symbol.iterator in Object(arr)) {return sliceIterator(arr, i);} else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}();var _path = require('path');var _path2 = _interopRequireDefault(_path);
var _fs = require('fs');var _fs2 = _interopRequireDefault(_fs);
-var _readPkgUp = require('read-pkg-up');var _readPkgUp2 = _interopRequireDefault(_readPkgUp);
+var _readPkgUp = require('eslint-module-utils/readPkgUp');var _readPkgUp2 = _interopRequireDefault(_readPkgUp);
var _minimatch = require('minimatch');var _minimatch2 = _interopRequireDefault(_minimatch);
var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);
var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor);
@@ -69,7 +69,7 @@
Object.assign(
packageContent,
extractDepFields(
- _readPkgUp2['default'].sync({ cwd: context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(), normalize: false }).pkg));
+ (0, _readPkgUp2['default'])({ cwd: context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename(), normalize: false }).pkg));
}
@@ -162,7 +162,6 @@
// Do not report when importing types
if (
node.importKind === 'type' ||
- node.parent && node.parent.importKind === 'type' ||
node.importKind === 'typeof')
{
return;
@@ -268,4 +267,4 @@
reportIfMissing(context, deps, depsOptions, node, source.value);
}, { commonjs: true });
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJleHRyYWN0RGVwRmllbGRzIiwicGtnIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwZW5kZW5jaWVzIiwib3B0aW9uYWxEZXBlbmRlbmNpZXMiLCJwZWVyRGVwZW5kZW5jaWVzIiwiYnVuZGxlZERlcGVuZGVuY2llcyIsImJ1bmRsZURlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImNvbnRleHQiLCJwYWNrYWdlRGlyIiwicGF0aHMiLCJwYWNrYWdlQ29udGVudCIsInBhdGgiLCJyZXNvbHZlIiwibWFwIiwiZGlyIiwiZm9yRWFjaCIsInBhY2thZ2VKc29uUGF0aCIsImpvaW4iLCJoYXMiLCJkZXBGaWVsZHMiLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsInNldCIsIl9wYWNrYWdlQ29udGVudCIsImdldCIsImFzc2lnbiIsImRlcHNLZXkiLCJyZWFkUGtnVXAiLCJzeW5jIiwiY3dkIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwibm9ybWFsaXplIiwic29tZSIsImUiLCJjb2RlIiwicmVwb3J0IiwibWVzc2FnZSIsImxvYyIsImxpbmUiLCJjb2x1bW4iLCJuYW1lIiwiU3ludGF4RXJyb3IiLCJtaXNzaW5nRXJyb3JNZXNzYWdlIiwicGFja2FnZU5hbWUiLCJkZXZEZXBFcnJvck1lc3NhZ2UiLCJvcHREZXBFcnJvck1lc3NhZ2UiLCJnZXRNb2R1bGVPcmlnaW5hbE5hbWUiLCJzcGxpdCIsImZpcnN0Iiwic2Vjb25kIiwic3RhcnRzV2l0aCIsImdldE1vZHVsZVJlYWxOYW1lIiwicmVzb2x2ZWQiLCJjaGVja0RlcGVuZGVuY3lEZWNsYXJhdGlvbiIsImRlcHMiLCJkZWNsYXJhdGlvblN0YXR1cyIsIm5ld0RlY2xhcmF0aW9uU3RhdHVzIiwiaXNJbkRlcHMiLCJpc0luRGV2RGVwcyIsImlzSW5PcHREZXBzIiwiaXNJblBlZXJEZXBzIiwiaXNJbkJ1bmRsZWREZXBzIiwicGFja2FnZUhpZXJhcmNoeSIsInBhY2thZ2VOYW1lUGFydHMiLCJuYW1lUGFydCIsImluZGV4IiwiYW5jZXN0b3IiLCJzbGljZSIsInB1c2giLCJyZWR1Y2UiLCJyZXN1bHQiLCJhbmNlc3Rvck5hbWUiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwicmVwb3J0SWZNaXNzaW5nIiwiZGVwc09wdGlvbnMiLCJub2RlIiwiaW1wb3J0S2luZCIsInBhcmVudCIsImltcG9ydFBhY2thZ2VOYW1lIiwiYWxsb3dEZXZEZXBzIiwiYWxsb3dQZWVyRGVwcyIsImFsbG93T3B0RGVwcyIsImFsbG93QnVuZGxlZERlcHMiLCJyZWFsUGFja2FnZU5hbWUiLCJ0ZXN0Q29uZmlnIiwiY29uZmlnIiwiZmlsZW5hbWUiLCJjIiwicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJvcHRpb25zIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyJdLCJtYXBwaW5ncyI6InFvQkFBQSw0QjtBQUNBLHdCO0FBQ0Esd0M7QUFDQSxzQztBQUNBLHNEO0FBQ0Esa0U7QUFDQSxnRDtBQUNBO0FBQ0EscUM7O0FBRUEsSUFBTUEsZ0JBQWdCLElBQUlDLEdBQUosRUFBdEI7O0FBRUEsU0FBU0MsT0FBVCxHQUEyQixLQUFWQyxHQUFVLHVFQUFKLEVBQUk7QUFDekIsU0FBT0MsT0FBT0MsSUFBUCxDQUFZRixHQUFaLEVBQWlCRyxNQUFqQixHQUEwQixDQUFqQztBQUNEOztBQUVELFNBQVNDLFdBQVQsQ0FBcUJDLGFBQXJCLEVBQW9DO0FBQ2xDLFNBQU9DLE1BQU1DLE9BQU4sQ0FBY0YsYUFBZCxJQUErQkEs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RCxFQUFTdkIsSUFBVCxFQUFrQjtBQUNyQ0Ysd0JBQWdCdEUsT0FBaEIsRUFBeUJrRCxJQUF6QixFQUErQnFCLFdBQS9CLEVBQTRDQyxJQUE1QyxFQUFrRHVCLE9BQU9DLEtBQXpEO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQWZELGlCQXRCZSxFQUFqQiIsImZpbGUiOiJuby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCByZWFkUGtnVXAgZnJvbSAncmVhZC1wa2ctdXAnO1xuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvbW9kdWxlVmlzaXRvcic7XG5pbXBvcnQgaW1wb3J0VHlwZSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IHsgZ2V0RmlsZVBhY2thZ2VOYW1lIH0gZnJvbSAnLi4vY29yZS9wYWNrYWdlUGF0aCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVwRmllbGRDYWNoZSA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gaGFzS2V5cyhvYmogPSB7fSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPiAwO1xufVxuXG5mdW5jdGlvbiBhcnJheU9yS2V5cyhhcnJheU9yT2JqZWN0KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGFycmF5T3JPYmplY3QpID8gYXJyYXlPck9iamVjdCA6IE9iamVjdC5rZXlzKGFycmF5T3JPYmplY3QpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVwRmllbGRzKHBrZykge1xuICByZXR1cm4ge1xuICAgIGRlcGVuZGVuY2llczogcGtnLmRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBkZXZEZXBlbmRlbmNpZXM6IHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHBrZy5vcHRpb25hbERlcGVuZGVuY2llcyB8fCB7fSxcbiAgICBwZWVyRGVwZW5kZW5jaWVzOiBwa2cucGVlckRlcGVuZGVuY2llcyB8fCB7fSxcbiAgICAvLyBCdW5kbGVkRGVwcyBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYW4gYXJyYXksIGJ1dCBvYmplY3Qgbm90YXRpb24gaXMgYWxzbyBzdXBwb3J0ZWQgYnlcbiAgICAvLyBgbnBtYCwgc28gd2UgY29udmVydCBpdCB0byBhbiBhcnJheSBpZiBpdCBpcyBhbiBvYmplY3RcbiAgICBidW5kbGVkRGVwZW5kZW5jaWVzOiBhcnJheU9yS2V5cyhwa2cuYnVuZGxlRGVwZW5kZW5jaWVzIHx8IHBrZy5idW5kbGVkRGVwZW5kZW5jaWVzIHx8IFtdKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIHBhY2thZ2VEaXIpIHtcbiAgbGV0IHBhdGhzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcGFja2FnZUNvbnRlbnQgPSB7XG4gICAgICBkZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIHBlZXJEZXBlbmRlbmNpZXM6IHt9LFxuICAgICAgYnVuZGxlZERlcGVuZGVuY2llczogW10sXG4gICAgfTtcblxuICAgIGlmIChwYWNrYWdlRGlyICYmIHBhY2thZ2VEaXIubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBhY2thZ2VEaXIpKSB7XG4gICAgICAgIHBhdGhzID0gW3BhdGgucmVzb2x2ZShwYWNrYWdlRGlyKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXRocyA9IHBhY2thZ2VEaXIubWFwKGRpciA9PiBwYXRoLnJlc29sdmUoZGlyKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhdGhzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHVzZSBydWxlIGNvbmZpZyB0byBmaW5kIHBhY2thZ2UuanNvblxuICAgICAgcGF0aHMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oZGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgICAgIGlmICghZGVwRmllbGRDYWNoZS5oYXMocGFja2FnZUpzb25QYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGRlcEZpZWxkcyA9IGV4dHJhY3REZXBGaWVsZHMoXG4gICAgICAgICAgICBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBkZXBGaWVsZENhY2hlLnNldChwYWNrYWdlSnNvblBhdGgsIGRlcEZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX3BhY2thZ2VDb250ZW50ID0gZGVwRmllbGRDYWNoZS5nZXQocGFja2FnZUpzb25QYXRoKTtcbiAgICAgICAgT2JqZWN0LmtleXMocGFja2FnZUNvbnRlbnQpLmZvckVhY2goZGVwc0tleSA9PlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24ocGFja2FnZUNvbnRlbnRbZGVwc0tleV0sIF9wYWNrYWdlQ29udGVudFtkZXBzS2V5XSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgY2xvc2VzdCBwYWNrYWdlLmpzb25cbiAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHBhY2thZ2VDb250ZW50LFxuICAgICAgICBleHRyYWN0RGVwRmllbGRzKFxuICAgICAgICAgIHJlYWRQa2dVcC5zeW5jKHsgY3dkOiBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKSwgbm9ybWFsaXplOiBmYWxzZSB9KS5wa2dcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIVtcbiAgICAgIHBhY2thZ2VDb250ZW50LmRlcGVuZGVuY2llcyxcbiAgICAgIHBhY2thZ2VDb250ZW50LmRldkRlcGVuZGVuY2llcyxcbiAgICAgIHBhY2thZ2VDb250ZW50Lm9wdGlvbmFsRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQucGVlckRlcGVuZGVuY2llcyxcbiAgICAgIHBhY2thZ2VDb250ZW50LmJ1bmRsZWREZXBlbmRlbmNpZXMsXG4gICAgXS5zb21lKGhhc0tleXMpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZUNvbnRlbnQ7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocGF0aHMubGVuZ3RoID4gMCAmJiBlLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG1lc3NhZ2U6ICdUaGUgcGFja2FnZS5qc29uIGZpbGUgY291bGQgbm90IGJlIGZvdW5kLicsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZS5uYW1lID09PSAnSlNPTkVycm9yJyB8fCBlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgcGFyc2VkOiAnICsgZS5tZXNzYWdlLFxuICAgICAgICBsb2M6IHsgbGluZTogMCwgY29sdW1uOiAwIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtaXNzaW5nRXJyb3JNZXNzYWdlKHBhY2thZ2VOYW1lKSB7XG4gIHJldHVybiBgJyR7cGFja2FnZU5hbWV9JyBzaG91bGQgYmUgbGlzdGVkIGluIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzLiBgICtcbiAgICBgUnVuICducG0gaSAtUyAke3BhY2thZ2VOYW1lfScgdG8gYWRkIGl0YDtcbn1cblxuZnVuY3Rpb24gZGV2RGVwRXJyb3JNZXNzYWdlKHBhY2thZ2VOYW1lKSB7XG4gIHJldHVybiBgJyR7cGFja2FnZU5hbWV9JyBzaG91bGQgYmUgbGlzdGVkIGluIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzLCBub3QgZGV2RGVwZW5kZW5jaWVzLmA7XG59XG5cbmZ1bmN0aW9uIG9wdERlcEVycm9yTWVzc2FnZShwYWNrYWdlTmFtZSkge1xuICByZXR1cm4gYCcke3BhY2thZ2VOYW1lfScgc2hvdWxkIGJlIGxpc3RlZCBpbiB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcywgYCArXG4gICAgYG5vdCBvcHRpb25hbERlcGVuZGVuY2llcy5gO1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVPcmlnaW5hbE5hbWUobmFtZSkge1xuICBjb25zdCBbZmlyc3QsIHNlY29uZF0gPSBuYW1lLnNwbGl0KCcvJyk7XG4gIHJldHVybiBmaXJzdC5zdGFydHNXaXRoKCdAJykgPyBgJHtmaXJzdH0vJHtzZWNvbmR9YCA6IGZpcnN0O1xufVxuXG5mdW5jdGlvbiBnZXRNb2R1bGVSZWFsTmFtZShyZXNvbHZlZCkge1xuICByZXR1cm4gZ2V0RmlsZVBhY2thZ2VOYW1lKHJlc29sdmVkKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgcGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKSB7XG4gIGNvbnN0IG5ld0RlY2xhcmF0aW9uU3RhdHVzID0gZGVjbGFyYXRpb25TdGF0dXMgfHwge1xuICAgIGlzSW5EZXBzOiBmYWxzZSxcbiAgICBpc0luRGV2RGVwczogZmFsc2UsXG4gICAgaXNJbk9wdERlcHM6IGZhbHNlLFxuICAgIGlzSW5QZWVyRGVwczogZmFsc2UsXG4gICAgaXNJbkJ1bmRsZWREZXBzOiBmYWxzZSxcbiAgfTtcblxuICAvLyBpbiBjYXNlIG9mIHN1YiBwYWNrYWdlLmpzb24gaW5zaWRlIGEgbW9kdWxlXG4gIC8vIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgb24gYWxsIGhpZXJhcmNoeVxuICBjb25zdCBwYWNrYWdlSGllcmFyY2h5ID0gW107XG4gIGNvbnN0IHBhY2thZ2VOYW1lUGFydHMgPSBwYWNrYWdlTmFtZSA/IHBhY2thZ2VOYW1lLnNwbGl0KCcvJykgOiBbXTtcbiAgcGFja2FnZU5hbWVQYXJ0cy5mb3JFYWNoKChuYW1lUGFydCwgaW5kZXgpID0+IHtcbiAgICBpZiAoIW5hbWVQYXJ0LnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgY29uc3QgYW5jZXN0b3IgPSBwYWNrYWdlTmFtZVBhcnRzLnNsaWNlKDAsIGluZGV4ICsgMSkuam9pbignLycpO1xuICAgICAgcGFja2FnZUhpZXJhcmNoeS5wdXNoKGFuY2VzdG9yKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYWNrYWdlSGllcmFyY2h5LnJlZHVjZSgocmVzdWx0LCBhbmNlc3Rvck5hbWUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNJbkRlcHM6IHJlc3VsdC5pc0luRGVwcyB8fCBkZXBzLmRlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgICBpc0luRGV2RGVwczogcmVzdWx0LmlzSW5EZXZEZXBzIHx8IGRlcHMuZGV2RGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICAgIGlzSW5PcHREZXBzOiByZXN1bHQuaXNJbk9wdERlcHMgfHwgZGVwcy5vcHRpb25hbERlcGVuZGVuY2llc1thbmNlc3Rvck5hbWVdICE9PSB1bmRlZmluZWQsXG4gICAgICBpc0luUGVlckRlcHM6IHJlc3VsdC5pc0luUGVlckRlcHMgfHwgZGVwcy5wZWVyRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICAgIGlzSW5CdW5kbGVkRGVwczpcbiAgICAgICAgcmVzdWx0LmlzSW5CdW5kbGVkRGVwcyB8fCBkZXBzLmJ1bmRsZWREZXBlbmRlbmNpZXMuaW5kZXhPZihhbmNlc3Rvck5hbWUpICE9PSAtMSxcbiAgICB9O1xuICB9LCBuZXdEZWNsYXJhdGlvblN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIHJlcG9ydElmTWlzc2luZyhjb250ZXh0LCBkZXBzLCBkZXBzT3B0aW9ucywgbm9kZSwgbmFtZSkge1xuICAvLyBEbyBub3QgcmVwb3J0IHdoZW4gaW1wb3J0aW5nIHR5cGVzXG4gIGlmIChcbiAgICBub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fFxuICAgIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC5pbXBvcnRLaW5kID09PSAndHlwZScpIHx8XG4gICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZW9mJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSAhPT0gJ2V4dGVybmFsJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwcyB8fFxuICAgIChkZXBzT3B0aW9ucy5hbGxvd0RldkRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJbkRldkRlcHMpIHx8XG4gICAgKGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzKSB8fFxuICAgIChkZXBzT3B0aW9ucy5hbGxvd09wdERlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJbk9wdERlcHMpIHx8XG4gICAgKGRlcHNPcHRpb25zLmFsbG93QnVuZGxlZERlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJbkJ1bmRsZWREZXBzKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB0ZXN0IHRoZSByZWFsIG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgcGFja2FnZS5qc29uXG4gIC8vIGlmIG5vdCBhbGlhc2VkIGltcG9ydHMgKGFsaWFzL3JlYWN0IGZvciBleGFtcGxlKSwgaW1wb3J0UGFja2FnZU5hbWUgY2FuIGJlIG1pc2ludGVycHJldGVkXG4gIGNvbnN0IHJlYWxQYWNrYWdlTmFtZSA9IGdldE1vZHVsZVJlYWxOYW1lKHJlc29sdmVkKTtcbiAgaWYgKHJlYWxQYWNrYWdlTmFtZSAmJiByZWFsUGFja2FnZU5hbWUgIT09IGltcG9ydFBhY2thZ2VOYW1lKSB7XG4gICAgZGVjbGFyYXRpb25TdGF0dXMgPSBjaGVja0RlcGVuZGVuY3lEZWNsYXJhdGlvbihkZXBzLCByZWFsUGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKTtcblxuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXBzIHx8XG4gICAgICAoZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzKSB8fFxuICAgICAgKGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzKSB8fFxuICAgICAgKGRlcHNPcHRpb25zLmFsbG93T3B0RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcykgfHxcbiAgICAgIChkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVjbGFyYXRpb25TdGF0dXMuaXNJbkRldkRlcHMgJiYgIWRlcHNPcHRpb25zLmFsbG93RGV2RGVwcykge1xuICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGRldkRlcEVycm9yTWVzc2FnZShyZWFsUGFja2FnZU5hbWUgfHwgaW1wb3J0UGFja2FnZU5hbWUpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGVjbGFyYXRpb25TdGF0dXMuaXNJbk9wdERlcHMgJiYgIWRlcHNPcHRpb25zLmFsbG93T3B0RGVwcykge1xuICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG9wdERlcEVycm9yTWVzc2FnZShyZWFsUGFja2FnZU5hbWUgfHwgaW1wb3J0UGFja2FnZU5hbWUpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydChub2RlLCBtaXNzaW5nRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xufVxuXG5mdW5jdGlvbiB0ZXN0Q29uZmlnKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgLy8gU2ltcGxlc3QgY29uZmlndXJhdGlvbiBmaXJzdCwgZWl0aGVyIGEgYm9vbGVhbiBvciBub3RoaW5nLlxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBjb25maWcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICAvLyBBcnJheSBvZiBnbG9icy5cbiAgcmV0dXJuIGNvbmZpZy5zb21lKGMgPT4gKFxuICAgIG1pbmltYXRjaChmaWxlbmFtZSwgYykgfHxcbiAgICBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSlcbiAgKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgICd0eXBlJzogJ29iamVjdCcsXG4gICAgICAgICdwcm9wZXJ0aWVzJzoge1xuICAgICAgICAgICdkZXZEZXBlbmRlbmNpZXMnOiB7ICd0eXBlJzogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICAnb3B0aW9uYWxEZXBlbmRlbmNpZXMnOiB7ICd0eXBlJzogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICAncGVlckRlcGVuZGVuY2llcyc6IHsgJ3R5cGUnOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgICdidW5kbGVkRGVwZW5kZW5jaWVzJzogeyAndHlwZSc6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgJ3BhY2thZ2VEaXInOiB7ICd0eXBlJzogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICB9LFxuICAgICAgICAnYWRkaXRpb25hbFByb3BlcnRpZXMnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuICAgIGNvbnN0IGRlcHMgPSBnZXREZXBlbmRlbmNpZXMoY29udGV4dCwgb3B0aW9ucy5wYWNrYWdlRGlyKSB8fCBleHRyYWN0RGVwRmllbGRzKHt9KTtcblxuICAgIGNvbnN0IGRlcHNPcHRpb25zID0ge1xuICAgICAgYWxsb3dEZXZEZXBzOiB0ZXN0Q29uZmlnKG9wdGlvbnMuZGV2RGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dPcHREZXBzOiB0ZXN0Q29uZmlnKG9wdGlvbnMub3B0aW9uYWxEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd1BlZXJEZXBzOiB0ZXN0Q29uZmlnKG9wdGlvbnMucGVlckRlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93QnVuZGxlZERlcHM6IHRlc3RDb25maWcob3B0aW9ucy5idW5kbGVkRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgIH07XG5cbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlLCBub2RlKSA9PiB7XG4gICAgICByZXBvcnRJZk1pc3NpbmcoY29udGV4dCwgZGVwcywgZGVwc09wdGlvbnMsIG5vZGUsIHNvdXJjZS52YWx1ZSk7XG4gICAgfSwgeyBjb21tb25qczogdHJ1ZSB9KTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcy5qcyJdLCJuYW1lcyI6WyJkZXBGaWVsZENhY2hlIiwiTWFwIiwiaGFzS2V5cyIsIm9iaiIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhcnJheU9yS2V5cyIsImFycmF5T3JPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJleHRyYWN0RGVwRmllbGRzIiwicGtnIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwZW5kZW5jaWVzIiwib3B0aW9uYWxEZXBlbmRlbmNpZXMiLCJwZWVyRGVwZW5kZW5jaWVzIiwiYnVuZGxlZERlcGVuZGVuY2llcyIsImJ1bmRsZURlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImNvbnRleHQiLCJwYWNrYWdlRGlyIiwicGF0aHMiLCJwYWNrYWdlQ29udGVudCIsInBhdGgiLCJyZXNvbHZlIiwibWFwIiwiZGlyIiwiZm9yRWFjaCIsInBhY2thZ2VKc29uUGF0aCIsImpvaW4iLCJoYXMiLCJkZXBGaWVsZHMiLCJKU09OIiwicGFyc2UiLCJmcyIsInJlYWRGaWxlU3luYyIsInNldCIsIl9wYWNrYWdlQ29udGVudCIsImdldCIsImFzc2lnbiIsImRlcHNLZXkiLCJjd2QiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJub3JtYWxpemUiLCJzb21lIiwiZSIsImNvZGUiLCJyZXBvcnQiLCJtZXNzYWdlIiwibG9jIiwibGluZSIsImNvbHVtbiIsIm5hbWUiLCJTeW50YXhFcnJvciIsIm1pc3NpbmdFcnJvck1lc3NhZ2UiLCJwYWNrYWdlTmFtZSIsImRldkRlcEVycm9yTWVzc2FnZSIsIm9wdERlcEVycm9yTWVzc2FnZSIsImdldE1vZHVsZU9yaWdpbmFsTmFtZSIsInNwbGl0IiwiZmlyc3QiLCJzZWNvbmQiLCJzdGFydHNXaXRoIiwiZ2V0TW9kdWxlUmVhbE5hbWUiLCJyZXNvbHZlZCIsImNoZWNrRGVwZW5kZW5jeURlY2xhcmF0aW9uIiwiZGVwcyIsImRlY2xhcmF0aW9uU3RhdHVzIiwibmV3RGVjbGFyYXRpb25TdGF0dXMiLCJpc0luRGVwcyIsImlzSW5EZXZEZXBzIiwiaXNJbk9wdERlcHMiLCJpc0luUGVlckRlcHMiLCJpc0luQnVuZGxlZERlcHMiLCJwYWNrYWdlSGllcmFyY2h5IiwicGFja2FnZU5hbWVQYXJ0cyIsIm5hbWVQYXJ0IiwiaW5kZXgiLCJhbmNlc3RvciIsInNsaWNlIiwicHVzaCIsInJlZHVjZSIsInJlc3VsdCIsImFuY2VzdG9yTmFtZSIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJyZXBvcnRJZk1pc3NpbmciLCJkZXBzT3B0aW9ucyIsIm5vZGUiLCJpbXBvcnRLaW5kIiwiaW1wb3J0UGFja2FnZU5hbWUiLCJhbGxvd0RldkRlcHMiLCJhbGxvd1BlZXJEZXBzIiwiYWxsb3dPcHREZXBzIiwiYWxsb3dCdW5kbGVkRGVwcyIsInJlYWxQYWNrYWdlTmFtZSIsInRlc3RDb25maWciLCJjb25maWciLCJmaWxlbmFtZSIsImMiLCJwcm9jZXNzIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsIm9wdGlvbnMiLCJzb3VyY2UiLCJ2YWx1ZSIsImNvbW1vbmpzIl0sIm1hcHBpbmdzIjoicW9CQUFBLDRCO0FBQ0Esd0I7QUFDQSwwRDtBQUNBLHNDO0FBQ0Esc0Q7QUFDQSxrRTtBQUNBLGdEO0FBQ0E7QUFDQSxxQzs7QUFFQSxJQUFNQSxnQkFBZ0IsSUFBSUMsR0FBSixFQUF0Qjs7QUFFQSxTQUFTQyxPQUFULEdBQTJCLEtBQVZDLEdBQVUsdUVBQUosRUFBSTtBQUN6QixTQUFPQyxPQUFPQyxJQUFQLENBQVlGLEdBQVosRUFBaUJHLE1BQWpCLEdBQTBCLENBQWpDO0FBQ0Q7O0FBRUQsU0FBU0MsV0FBVCxDQUFxQkMsYUFBckIsRUFBb0M7QUFDbEMsU0FBT0MsTUFBTUMsT0FBTixDQUFjRixhQUFkLElBQStCQSxhQUEvQixHQUErQ0osT0FBT0MsSUFBUCxDQUFZ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LEtBQXpEO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQXJDYyxtQkFBakIiLCJmaWxlIjoibm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVhZFBrZ1VwJztcbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCB7IGdldEZpbGVQYWNrYWdlTmFtZSB9IGZyb20gJy4uL2NvcmUvcGFja2FnZVBhdGgnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmNvbnN0IGRlcEZpZWxkQ2FjaGUgPSBuZXcgTWFwKCk7XG5cbmZ1bmN0aW9uIGhhc0tleXMob2JqID0ge30pIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID4gMDtcbn1cblxuZnVuY3Rpb24gYXJyYXlPcktleXMoYXJyYXlPck9iamVjdCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnJheU9yT2JqZWN0KSA/IGFycmF5T3JPYmplY3QgOiBPYmplY3Qua2V5cyhhcnJheU9yT2JqZWN0KTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdERlcEZpZWxkcyhwa2cpIHtcbiAgcmV0dXJuIHtcbiAgICBkZXBlbmRlbmNpZXM6IHBrZy5kZXBlbmRlbmNpZXMgfHwge30sXG4gICAgZGV2RGVwZW5kZW5jaWVzOiBwa2cuZGV2RGVwZW5kZW5jaWVzIHx8IHt9LFxuICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiBwa2cub3B0aW9uYWxEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgcGVlckRlcGVuZGVuY2llczogcGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30sXG4gICAgLy8gQnVuZGxlZERlcHMgc2hvdWxkIGJlIGluIHRoZSBmb3JtIG9mIGFuIGFycmF5LCBidXQgb2JqZWN0IG5vdGF0aW9uIGlzIGFsc28gc3VwcG9ydGVkIGJ5XG4gICAgLy8gYG5wbWAsIHNvIHdlIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXkgaWYgaXQgaXMgYW4gb2JqZWN0XG4gICAgYnVuZGxlZERlcGVuZGVuY2llczogYXJyYXlPcktleXMocGtnLmJ1bmRsZURlcGVuZGVuY2llcyB8fCBwa2cuYnVuZGxlZERlcGVuZGVuY2llcyB8fCBbXSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhjb250ZXh0LCBwYWNrYWdlRGlyKSB7XG4gIGxldCBwYXRocyA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VDb250ZW50ID0ge1xuICAgICAgZGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIGRldkRlcGVuZGVuY2llczoge30sXG4gICAgICBvcHRpb25hbERlcGVuZGVuY2llczoge30sXG4gICAgICBwZWVyRGVwZW5kZW5jaWVzOiB7fSxcbiAgICAgIGJ1bmRsZWREZXBlbmRlbmNpZXM6IFtdLFxuICAgIH07XG5cbiAgICBpZiAocGFja2FnZURpciAmJiBwYWNrYWdlRGlyLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYWNrYWdlRGlyKSkge1xuICAgICAgICBwYXRocyA9IFtwYXRoLnJlc29sdmUocGFja2FnZURpcildO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0aHMgPSBwYWNrYWdlRGlyLm1hcChkaXIgPT4gcGF0aC5yZXNvbHZlKGRpcikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwYXRocy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB1c2UgcnVsZSBjb25maWcgdG8gZmluZCBwYWNrYWdlLmpzb25cbiAgICAgIHBhdGhzLmZvckVhY2goZGlyID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKGRpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgICAgICBpZiAoIWRlcEZpZWxkQ2FjaGUuaGFzKHBhY2thZ2VKc29uUGF0aCkpIHtcbiAgICAgICAgICBjb25zdCBkZXBGaWVsZHMgPSBleHRyYWN0RGVwRmllbGRzKFxuICAgICAgICAgICAgSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVwRmllbGRDYWNoZS5zZXQocGFja2FnZUpzb25QYXRoLCBkZXBGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9wYWNrYWdlQ29udGVudCA9IGRlcEZpZWxkQ2FjaGUuZ2V0KHBhY2thZ2VKc29uUGF0aCk7XG4gICAgICAgIE9iamVjdC5rZXlzKHBhY2thZ2VDb250ZW50KS5mb3JFYWNoKGRlcHNLZXkgPT5cbiAgICAgICAgICBPYmplY3QuYXNzaWduKHBhY2thZ2VDb250ZW50W2RlcHNLZXldLCBfcGFja2FnZUNvbnRlbnRbZGVwc0tleV0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXNlIGNsb3Nlc3QgcGFja2FnZS5qc29uXG4gICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICBwYWNrYWdlQ29udGVudCxcbiAgICAgICAgZXh0cmFjdERlcEZpZWxkcyhcbiAgICAgICAgICByZWFkUGtnVXAoeyBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpLCBub3JtYWxpemU6IGZhbHNlIH0pLnBrZ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghW1xuICAgICAgcGFja2FnZUNvbnRlbnQuZGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQub3B0aW9uYWxEZXBlbmRlbmNpZXMsXG4gICAgICBwYWNrYWdlQ29udGVudC5wZWVyRGVwZW5kZW5jaWVzLFxuICAgICAgcGFja2FnZUNvbnRlbnQuYnVuZGxlZERlcGVuZGVuY2llcyxcbiAgICBdLnNvbWUoaGFzS2V5cykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlQ29udGVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChwYXRocy5sZW5ndGggPiAwICYmIGUuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwYWNrYWdlLmpzb24gZmlsZSBjb3VsZCBub3QgYmUgZm91bmQuJyxcbiAgICAgICAgbG9jOiB7IGxpbmU6IDAsIGNvbHVtbjogMCB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChlLm5hbWUgPT09ICdKU09ORXJyb3InIHx8IGUgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBtZXNzYWdlOiAnVGhlIHBhY2thZ2UuanNvbiBmaWxlIGNvdWxkIG5vdCBiZSBwYXJzZWQ6ICcgKyBlLm1lc3NhZ2UsXG4gICAgICAgIGxvYzogeyBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1pc3NpbmdFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuIGAgK1xuICAgIGBSdW4gJ25wbSBpIC1TICR7cGFja2FnZU5hbWV9JyB0byBhZGQgaXRgO1xufVxuXG5mdW5jdGlvbiBkZXZEZXBFcnJvck1lc3NhZ2UocGFja2FnZU5hbWUpIHtcbiAgcmV0dXJuIGAnJHtwYWNrYWdlTmFtZX0nIHNob3VsZCBiZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMsIG5vdCBkZXZEZXBlbmRlbmNpZXMuYDtcbn1cblxuZnVuY3Rpb24gb3B0RGVwRXJyb3JNZXNzYWdlKHBhY2thZ2VOYW1lKSB7XG4gIHJldHVybiBgJyR7cGFja2FnZU5hbWV9JyBzaG91bGQgYmUgbGlzdGVkIGluIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzLCBgICtcbiAgICBgbm90IG9wdGlvbmFsRGVwZW5kZW5jaWVzLmA7XG59XG5cbmZ1bmN0aW9uIGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKSB7XG4gIGNvbnN0IFtmaXJzdCwgc2Vjb25kXSA9IG5hbWUuc3BsaXQoJy8nKTtcbiAgcmV0dXJuIGZpcnN0LnN0YXJ0c1dpdGgoJ0AnKSA/IGAke2ZpcnN0fS8ke3NlY29uZH1gIDogZmlyc3Q7XG59XG5cbmZ1bmN0aW9uIGdldE1vZHVsZVJlYWxOYW1lKHJlc29sdmVkKSB7XG4gIHJldHVybiBnZXRGaWxlUGFja2FnZU5hbWUocmVzb2x2ZWQpO1xufVxuXG5mdW5jdGlvbiBjaGVja0RlcGVuZGVuY3lEZWNsYXJhdGlvbihkZXBzLCBwYWNrYWdlTmFtZSwgZGVjbGFyYXRpb25TdGF0dXMpIHtcbiAgY29uc3QgbmV3RGVjbGFyYXRpb25TdGF0dXMgPSBkZWNsYXJhdGlvblN0YXR1cyB8fCB7XG4gICAgaXNJbkRlcHM6IGZhbHNlLFxuICAgIGlzSW5EZXZEZXBzOiBmYWxzZSxcbiAgICBpc0luT3B0RGVwczogZmFsc2UsXG4gICAgaXNJblBlZXJEZXBzOiBmYWxzZSxcbiAgICBpc0luQnVuZGxlZERlcHM6IGZhbHNlLFxuICB9O1xuXG4gIC8vIGluIGNhc2Ugb2Ygc3ViIHBhY2thZ2UuanNvbiBpbnNpZGUgYSBtb2R1bGVcbiAgLy8gY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvbiBhbGwgaGllcmFyY2h5XG4gIGNvbnN0IHBhY2thZ2VIaWVyYXJjaHkgPSBbXTtcbiAgY29uc3QgcGFja2FnZU5hbWVQYXJ0cyA9IHBhY2thZ2VOYW1lID8gcGFja2FnZU5hbWUuc3BsaXQoJy8nKSA6IFtdO1xuICBwYWNrYWdlTmFtZVBhcnRzLmZvckVhY2goKG5hbWVQYXJ0LCBpbmRleCkgPT4ge1xuICAgIGlmICghbmFtZVBhcnQuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICBjb25zdCBhbmNlc3RvciA9IHBhY2thZ2VOYW1lUGFydHMuc2xpY2UoMCwgaW5kZXggKyAxKS5qb2luKCcvJyk7XG4gICAgICBwYWNrYWdlSGllcmFyY2h5LnB1c2goYW5jZXN0b3IpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhY2thZ2VIaWVyYXJjaHkucmVkdWNlKChyZXN1bHQsIGFuY2VzdG9yTmFtZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBpc0luRGVwczogcmVzdWx0LmlzSW5EZXBzIHx8IGRlcHMuZGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICAgIGlzSW5EZXZEZXBzOiByZXN1bHQuaXNJbkRldkRlcHMgfHwgZGVwcy5kZXZEZXBlbmRlbmNpZXNbYW5jZXN0b3JOYW1lXSAhPT0gdW5kZWZpbmVkLFxuICAgICAgaXNJbk9wdERlcHM6IHJlc3VsdC5pc0luT3B0RGVwcyB8fCBkZXBzLm9wdGlvbmFsRGVwZW5kZW5jaWVzW2FuY2VzdG9yTmFtZV0gIT09IHVuZGVmaW5lZCxcbiAgICAgIGlzSW5QZWVyRGVwczogcmVzdWx0LmlzSW5QZWVyRGVwcyB8fCBkZXBzLnBlZXJEZXBlbmRlbmNpZXNbYW5jZXN0b3JOYW1lXSAhPT0gdW5kZWZpbmVkLFxuICAgICAgaXNJbkJ1bmRsZWREZXBzOlxuICAgICAgICByZXN1bHQuaXNJbkJ1bmRsZWREZXBzIHx8IGRlcHMuYnVuZGxlZERlcGVuZGVuY2llcy5pbmRleE9mKGFuY2VzdG9yTmFtZSkgIT09IC0xLFxuICAgIH07XG4gIH0sIG5ld0RlY2xhcmF0aW9uU3RhdHVzKTtcbn1cblxuZnVuY3Rpb24gcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBuYW1lKSB7XG4gIC8vIERvIG5vdCByZXBvcnQgd2hlbiBpbXBvcnRpbmcgdHlwZXNcbiAgaWYgKFxuICAgIG5vZGUuaW1wb3J0S2luZCA9PT0gJ3R5cGUnIHx8XG4gICAgbm9kZS5pbXBvcnRLaW5kID09PSAndHlwZW9mJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSAhPT0gJ2V4dGVybmFsJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShuYW1lLCBjb250ZXh0KTtcbiAgaWYgKCFyZXNvbHZlZCkgeyByZXR1cm47IH1cblxuICBjb25zdCBpbXBvcnRQYWNrYWdlTmFtZSA9IGdldE1vZHVsZU9yaWdpbmFsTmFtZShuYW1lKTtcbiAgbGV0IGRlY2xhcmF0aW9uU3RhdHVzID0gY2hlY2tEZXBlbmRlbmN5RGVjbGFyYXRpb24oZGVwcywgaW1wb3J0UGFja2FnZU5hbWUpO1xuXG4gIGlmIChcbiAgICBkZWNsYXJhdGlvblN0YXR1cy5pc0luRGVwcyB8fFxuICAgIChkZXBzT3B0aW9ucy5hbGxvd0RldkRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJbkRldkRlcHMpIHx8XG4gICAgKGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzKSB8fFxuICAgIChkZXBzT3B0aW9ucy5hbGxvd09wdERlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJbk9wdERlcHMpIHx8XG4gICAgKGRlcHNPcHRpb25zLmFsbG93QnVuZGxlZERlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJbkJ1bmRsZWREZXBzKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyB0ZXN0IHRoZSByZWFsIG5hbWUgZnJvbSB0aGUgcmVzb2x2ZWQgcGFja2FnZS5qc29uXG4gIC8vIGlmIG5vdCBhbGlhc2VkIGltcG9ydHMgKGFsaWFzL3JlYWN0IGZvciBleGFtcGxlKSwgaW1wb3J0UGFja2FnZU5hbWUgY2FuIGJlIG1pc2ludGVycHJldGVkXG4gIGNvbnN0IHJlYWxQYWNrYWdlTmFtZSA9IGdldE1vZHVsZVJlYWxOYW1lKHJlc29sdmVkKTtcbiAgaWYgKHJlYWxQYWNrYWdlTmFtZSAmJiByZWFsUGFja2FnZU5hbWUgIT09IGltcG9ydFBhY2thZ2VOYW1lKSB7XG4gICAgZGVjbGFyYXRpb25TdGF0dXMgPSBjaGVja0RlcGVuZGVuY3lEZWNsYXJhdGlvbihkZXBzLCByZWFsUGFja2FnZU5hbWUsIGRlY2xhcmF0aW9uU3RhdHVzKTtcblxuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXBzIHx8XG4gICAgICAoZGVwc09wdGlvbnMuYWxsb3dEZXZEZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5EZXZEZXBzKSB8fFxuICAgICAgKGRlcHNPcHRpb25zLmFsbG93UGVlckRlcHMgJiYgZGVjbGFyYXRpb25TdGF0dXMuaXNJblBlZXJEZXBzKSB8fFxuICAgICAgKGRlcHNPcHRpb25zLmFsbG93T3B0RGVwcyAmJiBkZWNsYXJhdGlvblN0YXR1cy5pc0luT3B0RGVwcykgfHxcbiAgICAgIChkZXBzT3B0aW9ucy5hbGxvd0J1bmRsZWREZXBzICYmIGRlY2xhcmF0aW9uU3RhdHVzLmlzSW5CdW5kbGVkRGVwcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoZGVjbGFyYXRpb25TdGF0dXMuaXNJbkRldkRlcHMgJiYgIWRlcHNPcHRpb25zLmFsbG93RGV2RGVwcykge1xuICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIGRldkRlcEVycm9yTWVzc2FnZShyZWFsUGFja2FnZU5hbWUgfHwgaW1wb3J0UGFja2FnZU5hbWUpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGVjbGFyYXRpb25TdGF0dXMuaXNJbk9wdERlcHMgJiYgIWRlcHNPcHRpb25zLmFsbG93T3B0RGVwcykge1xuICAgIGNvbnRleHQucmVwb3J0KG5vZGUsIG9wdERlcEVycm9yTWVzc2FnZShyZWFsUGFja2FnZU5hbWUgfHwgaW1wb3J0UGFja2FnZU5hbWUpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydChub2RlLCBtaXNzaW5nRXJyb3JNZXNzYWdlKHJlYWxQYWNrYWdlTmFtZSB8fCBpbXBvcnRQYWNrYWdlTmFtZSkpO1xufVxuXG5mdW5jdGlvbiB0ZXN0Q29uZmlnKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgLy8gU2ltcGxlc3QgY29uZmlndXJhdGlvbiBmaXJzdCwgZWl0aGVyIGEgYm9vbGVhbiBvciBub3RoaW5nLlxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBjb25maWcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICAvLyBBcnJheSBvZiBnbG9icy5cbiAgcmV0dXJuIGNvbmZpZy5zb21lKGMgPT4gKFxuICAgIG1pbmltYXRjaChmaWxlbmFtZSwgYykgfHxcbiAgICBtaW5pbWF0Y2goZmlsZW5hbWUsIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjKSlcbiAgKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgICd0eXBlJzogJ29iamVjdCcsXG4gICAgICAgICdwcm9wZXJ0aWVzJzoge1xuICAgICAgICAgICdkZXZEZXBlbmRlbmNpZXMnOiB7ICd0eXBlJzogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICAnb3B0aW9uYWxEZXBlbmRlbmNpZXMnOiB7ICd0eXBlJzogWydib29sZWFuJywgJ2FycmF5J10gfSxcbiAgICAgICAgICAncGVlckRlcGVuZGVuY2llcyc6IHsgJ3R5cGUnOiBbJ2Jvb2xlYW4nLCAnYXJyYXknXSB9LFxuICAgICAgICAgICdidW5kbGVkRGVwZW5kZW5jaWVzJzogeyAndHlwZSc6IFsnYm9vbGVhbicsICdhcnJheSddIH0sXG4gICAgICAgICAgJ3BhY2thZ2VEaXInOiB7ICd0eXBlJzogWydzdHJpbmcnLCAnYXJyYXknXSB9LFxuICAgICAgICB9LFxuICAgICAgICAnYWRkaXRpb25hbFByb3BlcnRpZXMnOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgZmlsZW5hbWUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcbiAgICBjb25zdCBkZXBzID0gZ2V0RGVwZW5kZW5jaWVzKGNvbnRleHQsIG9wdGlvbnMucGFja2FnZURpcikgfHwgZXh0cmFjdERlcEZpZWxkcyh7fSk7XG5cbiAgICBjb25zdCBkZXBzT3B0aW9ucyA9IHtcbiAgICAgIGFsbG93RGV2RGVwczogdGVzdENvbmZpZyhvcHRpb25zLmRldkRlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICAgIGFsbG93T3B0RGVwczogdGVzdENvbmZpZyhvcHRpb25zLm9wdGlvbmFsRGVwZW5kZW5jaWVzLCBmaWxlbmFtZSkgIT09IGZhbHNlLFxuICAgICAgYWxsb3dQZWVyRGVwczogdGVzdENvbmZpZyhvcHRpb25zLnBlZXJEZXBlbmRlbmNpZXMsIGZpbGVuYW1lKSAhPT0gZmFsc2UsXG4gICAgICBhbGxvd0J1bmRsZWREZXBzOiB0ZXN0Q29uZmlnKG9wdGlvbnMuYnVuZGxlZERlcGVuZGVuY2llcywgZmlsZW5hbWUpICE9PSBmYWxzZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIGRlcHMsIGRlcHNPcHRpb25zLCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-import-module-exports.js b/node_modules/eslint-plugin-import/lib/rules/no-import-module-exports.js
index a0d7350..3c550ed 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-import-module-exports.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-import-module-exports.js
@@ -1,9 +1,9 @@
'use strict';var _minimatch = require('minimatch');var _minimatch2 = _interopRequireDefault(_minimatch);
var _path = require('path');var _path2 = _interopRequireDefault(_path);
-var _pkgUp = require('pkg-up');var _pkgUp2 = _interopRequireDefault(_pkgUp);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
+var _pkgUp = require('eslint-module-utils/pkgUp');var _pkgUp2 = _interopRequireDefault(_pkgUp);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
function getEntryPoint(context) {
- var pkgPath = _pkgUp2['default'].sync(context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename());
+ var pkgPath = (0, _pkgUp2['default'])({ cwd: context.getPhysicalFilename ? context.getPhysicalFilename() : context.getFilename() });
try {
return require.resolve(_path2['default'].dirname(pkgPath));
} catch (error) {
@@ -69,4 +69,4 @@
}return MemberExpression;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMuanMiXSwibmFtZXMiOlsiZ2V0RW50cnlQb2ludCIsImNvbnRleHQiLCJwa2dQYXRoIiwicGtnVXAiLCJzeW5jIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwicmVxdWlyZSIsInJlc29sdmUiLCJwYXRoIiwiZGlybmFtZSIsImVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImRlc2NyaXB0aW9uIiwiY2F0ZWdvcnkiLCJyZWNvbW1lbmRlZCIsImZpeGFibGUiLCJzY2hlbWEiLCJjcmVhdGUiLCJpbXBvcnREZWNsYXJhdGlvbnMiLCJlbnRyeVBvaW50Iiwib3B0aW9ucyIsImFscmVhZHlSZXBvcnRlZCIsInJlcG9ydCIsIm5vZGUiLCJmaWxlTmFtZSIsImlzRW50cnlQb2ludCIsImlzSWRlbnRpZmllciIsIm9iamVjdCIsImhhc0tleXdvcmRzIiwidGVzdCIsIm5hbWUiLCJpc0V4Y2VwdGlvbiIsImV4Y2VwdGlvbnMiLCJzb21lIiwiZ2xvYiIsImZvckVhY2giLCJpbXBvcnREZWNsYXJhdGlvbiIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsInB1c2giLCJNZW1iZXJFeHByZXNzaW9uIl0sIm1hcHBpbmdzIjoiYUFBQSxzQztBQUNBLDRCO0FBQ0EsK0I7O0FBRUEsU0FBU0EsYUFBVCxDQUF1QkMsT0FBdkIsRUFBZ0M7QUFDOUIsTUFBTUMsVUFBVUMsbUJBQU1DLElBQU4sQ0FBV0gsUUFBUUksbUJBQVIsR0FBOEJKLFFBQVFJLG1CQUFSLEVBQTlCLEdBQThESixRQUFRSyxXQUFSLEVBQXpFLENBQWhCO0FBQ0EsTUFBSTtBQUNGLFdBQU9DLFFBQVFDLE9BQVIsQ0FBZ0JDLGtCQUFLQyxPQUFMLENBQWFSLE9BQWIsQ0FBaEIsQ0FBUDtBQUNELEdBRkQsQ0FFRSxPQUFPUyxLQUFQLEVBQWM7QUFDZDtBQUNBO0FBQ0EsV0FBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFFREMsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sU0FERjtBQUVKQyxVQUFNO0FBQ0pDLG1CQUFhLGdEQURUO0FBRUpDLGdCQUFVLGdCQUZOO0FBR0pDLG1CQUFhLElBSFQsRUFGRjs7QUFPSkMsYUFBUyxNQVBMO0FBUUpDLFlBQVE7QUFDTjtBQUNFLGNBQVEsUUFEVjtBQUVFLG9CQUFjO0FBQ1osc0JBQWMsRUFBRSxRQUFRLE9BQVYsRUFERixFQUZoQjs7QUFLRSw4QkFBd0IsS0FMMUIsRUFETSxDQVJKLEVBRFM7Ozs7QUFtQmZDLFFBbkJlLCtCQW1CUnJCLE9BbkJRLEVBbUJDO0FBQ2QsVUFBTXNCLHFCQUFxQixFQUEzQjtBQUNBLFVBQU1DLGFBQWF4QixjQUFjQyxPQUFkLENBQW5CO0FBQ0EsVUFBTXdCLFVBQVV4QixRQUFRd0IsT0FBUixDQUFnQixDQUFoQixLQUFzQixFQUF0QztBQUNBLFVBQUlDLGtCQUFrQixLQUF0Qjs7QUFFQSxlQUFTQyxNQUFULENBQWdCQyxJQUFoQixFQUFzQjtBQUNwQixZQUFNQyxXQUFXNUIsUUFBUUksbUJBQVIsR0FBOEJKLFFBQVFJLG1CQUFSLEVBQTlCLEdBQThESixRQUFRSyxXQUFSLEVBQS9FO0FBQ0EsWUFBTXdCLGVBQWVOLGVBQWVLLFFBQXBDO0FBQ0EsWUFBTUUsZUFBZUgsS0FBS0ksTUFBTCxDQUFZakIsSUFBWixLQUFxQixZQUExQztBQUNBLFlBQU1rQixjQUFlLG9CQUFELENBQXVCQyxJQUF2QixDQUE0Qk4sS0FBS0ksTUFBTCxDQUFZRyxJQUF4QyxDQUFwQjtBQUNBLFlBQU1DLGNBQWNYLFFBQVFZLFVBQVI7QUFDbEJaLGdCQUFRWSxVQUFSLENBQW1CQyxJQUFuQixDQUF3Qix3QkFBUSw0QkFBVVQsUUFBVixFQUFvQlUsSUFBcEIsQ0FBUixFQUF4QixDQURGOztBQUdBLFlBQUlSLGdCQUFnQkUsV0FBaEIsSUFBK0IsQ0FBQ0gsWUFBaEMsSUFBZ0QsQ0FBQ00sV0FBckQsRUFBa0U7QUFDaEViLDZCQUFtQmlCLE9BQW5CLENBQTJCLDZCQUFxQjtBQUM5Q3ZDLG9CQUFRMEIsTUFBUixDQUFlO0FBQ2JDLG9CQUFNYSxpQkFETztBQUViQyx1QkFBUyw4SEFGSSxFQUFmOzs7QUFLRCxXQU5EO0FBT0FoQiw0QkFBa0IsSUFBbEI7QUFDRDtBQUNGOztBQUVELGFBQU87QUFDTGlCLHlCQURLLDBDQUNhZixJQURiLEVBQ21CO0FBQ3RCTCwrQkFBbUJxQixJQUFuQixDQUF3QmhCLElBQXhCO0FBQ0QsV0FISTtBQUlMaUIsd0JBSksseUNBSVlqQixJQUpaLEVBSWtCO0FBQ3JCLGdCQUFJLENBQUNGLGVBQUwsRUFBc0I7QUFDcEJDLHFCQUFPQyxJQUFQO0FBQ0Q7QUFDRixXQVJJLDZCQUFQOztBQVVELEtBdkRjLG1CQUFqQiIsImZpbGUiOiJuby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBwa2dVcCBmcm9tICdwa2ctdXAnO1xuXG5mdW5jdGlvbiBnZXRFbnRyeVBvaW50KGNvbnRleHQpIHtcbiAgY29uc3QgcGtnUGF0aCA9IHBrZ1VwLnN5bmMoY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCkpO1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUocGF0aC5kaXJuYW1lKHBrZ1BhdGgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBBc3N1bWUgdGhlIHBhY2thZ2UgaGFzIG5vIGVudHJ5cG9pbnQgKGUuZy4gQ0xJIHBhY2thZ2VzKVxuICAgIC8vIGluIHdoaWNoIGNhc2UgcmVxdWlyZS5yZXNvbHZlIHdvdWxkIHRocm93LlxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgaW1wb3J0IHN0YXRlbWVudHMgd2l0aCBtb2R1bGUuZXhwb3J0cycsXG4gICAgICBjYXRlZ29yeTogJ0Jlc3QgUHJhY3RpY2VzJyxcbiAgICAgIHJlY29tbWVuZGVkOiB0cnVlLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICAndHlwZSc6ICdvYmplY3QnLFxuICAgICAgICAncHJvcGVydGllcyc6IHtcbiAgICAgICAgICAnZXhjZXB0aW9ucyc6IHsgJ3R5cGUnOiAnYXJyYXknIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdhZGRpdGlvbmFsUHJvcGVydGllcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGltcG9ydERlY2xhcmF0aW9ucyA9IFtdO1xuICAgIGNvbnN0IGVudHJ5UG9pbnQgPSBnZXRFbnRyeVBvaW50KGNvbnRleHQpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgbGV0IGFscmVhZHlSZXBvcnRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgICBjb25zdCBpc0VudHJ5UG9pbnQgPSBlbnRyeVBvaW50ID09PSBmaWxlTmFtZTtcbiAgICAgIGNvbnN0IGlzSWRlbnRpZmllciA9IG5vZGUub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJztcbiAgICAgIGNvbnN0IGhhc0tleXdvcmRzID0gKC9eKG1vZHVsZXxleHBvcnRzKSQvKS50ZXN0KG5vZGUub2JqZWN0Lm5hbWUpO1xuICAgICAgY29uc3QgaXNFeGNlcHRpb24gPSBvcHRpb25zLmV4Y2VwdGlvbnMgJiZcbiAgICAgICAgb3B0aW9ucy5leGNlcHRpb25zLnNvbWUoZ2xvYiA9PiBtaW5pbWF0Y2goZmlsZU5hbWUsIGdsb2IpKTtcblxuICAgICAgaWYgKGlzSWRlbnRpZmllciAmJiBoYXNLZXl3b3JkcyAmJiAhaXNFbnRyeVBvaW50ICYmICFpc0V4Y2VwdGlvbikge1xuICAgICAgICBpbXBvcnREZWNsYXJhdGlvbnMuZm9yRWFjaChpbXBvcnREZWNsYXJhdGlvbiA9PiB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZTogaW1wb3J0RGVjbGFyYXRpb24sXG4gICAgICAgICAgICBtZXNzYWdlOiBgQ2Fubm90IHVzZSBpbXBvcnQgZGVjbGFyYXRpb25zIGluIG1vZHVsZXMgdGhhdCBleHBvcnQgdXNpbmcgYCArXG4gICAgICAgICAgICAgIGBDb21tb25KUyAobW9kdWxlLmV4cG9ydHMgPSAnZm9vJyBvciBleHBvcnRzLmJhciA9ICdoaScpYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFscmVhZHlSZXBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgaW1wb3J0RGVjbGFyYXRpb25zLnB1c2gobm9kZSk7XG4gICAgICB9LFxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmICghYWxyZWFkeVJlcG9ydGVkKSB7XG4gICAgICAgICAgcmVwb3J0KG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1pbXBvcnQtbW9kdWxlLWV4cG9ydHMuanMiXSwibmFtZXMiOlsiZ2V0RW50cnlQb2ludCIsImNvbnRleHQiLCJwa2dQYXRoIiwiY3dkIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwicmVxdWlyZSIsInJlc29sdmUiLCJwYXRoIiwiZGlybmFtZSIsImVycm9yIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImRlc2NyaXB0aW9uIiwiY2F0ZWdvcnkiLCJyZWNvbW1lbmRlZCIsImZpeGFibGUiLCJzY2hlbWEiLCJjcmVhdGUiLCJpbXBvcnREZWNsYXJhdGlvbnMiLCJlbnRyeVBvaW50Iiwib3B0aW9ucyIsImFscmVhZHlSZXBvcnRlZCIsInJlcG9ydCIsIm5vZGUiLCJmaWxlTmFtZSIsImlzRW50cnlQb2ludCIsImlzSWRlbnRpZmllciIsIm9iamVjdCIsImhhc0tleXdvcmRzIiwidGVzdCIsIm5hbWUiLCJpc0V4Y2VwdGlvbiIsImV4Y2VwdGlvbnMiLCJzb21lIiwiZ2xvYiIsImZvckVhY2giLCJpbXBvcnREZWNsYXJhdGlvbiIsIm1lc3NhZ2UiLCJJbXBvcnREZWNsYXJhdGlvbiIsInB1c2giLCJNZW1iZXJFeHByZXNzaW9uIl0sIm1hcHBpbmdzIjoiYUFBQSxzQztBQUNBLDRCO0FBQ0Esa0Q7O0FBRUEsU0FBU0EsYUFBVCxDQUF1QkMsT0FBdkIsRUFBZ0M7QUFDOUIsTUFBTUMsVUFBVSx3QkFBTSxFQUFFQyxLQUFLRixRQUFRRyxtQkFBUixHQUE4QkgsUUFBUUcsbUJBQVIsRUFBOUIsR0FBOERILFFBQVFJLFdBQVIsRUFBckUsRUFBTixDQUFoQjtBQUNBLE1BQUk7QUFDRixXQUFPQyxRQUFRQyxPQUFSLENBQWdCQyxrQkFBS0MsT0FBTCxDQUFhUCxPQUFiLENBQWhCLENBQVA7QUFDRCxHQUZELENBRUUsT0FBT1EsS0FBUCxFQUFjO0FBQ2Q7QUFDQTtBQUNBLFdBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBRURDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxtQkFBYSxnREFEVDtBQUVKQyxnQkFBVSxnQkFGTjtBQUdKQyxtQkFBYSxJQUhULEVBRkY7O0FBT0pDLGFBQVMsTUFQTDtBQVFKQyxZQUFRO0FBQ047QUFDRSxjQUFRLFFBRFY7QUFFRSxvQkFBYztBQUNaLHNCQUFjLEVBQUUsUUFBUSxPQUFWLEVBREYsRUFGaEI7O0FBS0UsOEJBQXdCLEtBTDFCLEVBRE0sQ0FSSixFQURTOzs7O0FBbUJmQyxRQW5CZSwrQkFtQlJwQixPQW5CUSxFQW1CQztBQUNkLFVBQU1xQixxQkFBcUIsRUFBM0I7QUFDQSxVQUFNQyxhQUFhdkIsY0FBY0MsT0FBZCxDQUFuQjtBQUNBLFVBQU11QixVQUFVdkIsUUFBUXVCLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFBdEM7QUFDQSxVQUFJQyxrQkFBa0IsS0FBdEI7O0FBRUEsZUFBU0MsTUFBVCxDQUFnQkMsSUFBaEIsRUFBc0I7QUFDcEIsWUFBTUMsV0FBVzNCLFFBQVFHLG1CQUFSLEdBQThCSCxRQUFRRyxtQkFBUixFQUE5QixHQUE4REgsUUFBUUksV0FBUixFQUEvRTtBQUNBLFlBQU13QixlQUFlTixlQUFlSyxRQUFwQztBQUNBLFlBQU1FLGVBQWVILEtBQUtJLE1BQUwsQ0FBWWpCLElBQVosS0FBcUIsWUFBMUM7QUFDQSxZQUFNa0IsY0FBZSxvQkFBRCxDQUF1QkMsSUFBdkIsQ0FBNEJOLEtBQUtJLE1BQUwsQ0FBWUcsSUFBeEMsQ0FBcEI7QUFDQSxZQUFNQyxjQUFjWCxRQUFRWSxVQUFSO0FBQ2xCWixnQkFBUVksVUFBUixDQUFtQkMsSUFBbkIsQ0FBd0Isd0JBQVEsNEJBQVVULFFBQVYsRUFBb0JVLElBQXBCLENBQVIsRUFBeEIsQ0FERjs7QUFHQSxZQUFJUixnQkFBZ0JFLFdBQWhCLElBQStCLENBQUNILFlBQWhDLElBQWdELENBQUNNLFdBQXJELEVBQWtFO0FBQ2hFYiw2QkFBbUJpQixPQUFuQixDQUEyQiw2QkFBcUI7QUFDOUN0QyxvQkFBUXlCLE1BQVIsQ0FBZTtBQUNiQyxvQkFBTWEsaUJBRE87QUFFYkMsdUJBQVMsOEhBRkksRUFBZjs7O0FBS0QsV0FORDtBQU9BaEIsNEJBQWtCLElBQWxCO0FBQ0Q7QUFDRjs7QUFFRCxhQUFPO0FBQ0xpQix5QkFESywwQ0FDYWYsSUFEYixFQUNtQjtBQUN0QkwsK0JBQW1CcUIsSUFBbkIsQ0FBd0JoQixJQUF4QjtBQUNELFdBSEk7QUFJTGlCLHdCQUpLLHlDQUlZakIsSUFKWixFQUlrQjtBQUNyQixnQkFBSSxDQUFDRixlQUFMLEVBQXNCO0FBQ3BCQyxxQkFBT0MsSUFBUDtBQUNEO0FBQ0YsV0FSSSw2QkFBUDs7QUFVRCxLQXZEYyxtQkFBakIiLCJmaWxlIjoibm8taW1wb3J0LW1vZHVsZS1leHBvcnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgcGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9wa2dVcCc7XG5cbmZ1bmN0aW9uIGdldEVudHJ5UG9pbnQoY29udGV4dCkge1xuICBjb25zdCBwa2dQYXRoID0gcGtnVXAoeyBjd2Q6IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpIH0pO1xuICB0cnkge1xuICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUocGF0aC5kaXJuYW1lKHBrZ1BhdGgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBBc3N1bWUgdGhlIHBhY2thZ2UgaGFzIG5vIGVudHJ5cG9pbnQgKGUuZy4gQ0xJIHBhY2thZ2VzKVxuICAgIC8vIGluIHdoaWNoIGNhc2UgcmVxdWlyZS5yZXNvbHZlIHdvdWxkIHRocm93LlxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGlzYWxsb3cgaW1wb3J0IHN0YXRlbWVudHMgd2l0aCBtb2R1bGUuZXhwb3J0cycsXG4gICAgICBjYXRlZ29yeTogJ0Jlc3QgUHJhY3RpY2VzJyxcbiAgICAgIHJlY29tbWVuZGVkOiB0cnVlLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICAndHlwZSc6ICdvYmplY3QnLFxuICAgICAgICAncHJvcGVydGllcyc6IHtcbiAgICAgICAgICAnZXhjZXB0aW9ucyc6IHsgJ3R5cGUnOiAnYXJyYXknIH0sXG4gICAgICAgIH0sXG4gICAgICAgICdhZGRpdGlvbmFsUHJvcGVydGllcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGltcG9ydERlY2xhcmF0aW9ucyA9IFtdO1xuICAgIGNvbnN0IGVudHJ5UG9pbnQgPSBnZXRFbnRyeVBvaW50KGNvbnRleHQpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgbGV0IGFscmVhZHlSZXBvcnRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gcmVwb3J0KG5vZGUpIHtcbiAgICAgIGNvbnN0IGZpbGVOYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgICBjb25zdCBpc0VudHJ5UG9pbnQgPSBlbnRyeVBvaW50ID09PSBmaWxlTmFtZTtcbiAgICAgIGNvbnN0IGlzSWRlbnRpZmllciA9IG5vZGUub2JqZWN0LnR5cGUgPT09ICdJZGVudGlmaWVyJztcbiAgICAgIGNvbnN0IGhhc0tleXdvcmRzID0gKC9eKG1vZHVsZXxleHBvcnRzKSQvKS50ZXN0KG5vZGUub2JqZWN0Lm5hbWUpO1xuICAgICAgY29uc3QgaXNFeGNlcHRpb24gPSBvcHRpb25zLmV4Y2VwdGlvbnMgJiZcbiAgICAgICAgb3B0aW9ucy5leGNlcHRpb25zLnNvbWUoZ2xvYiA9PiBtaW5pbWF0Y2goZmlsZU5hbWUsIGdsb2IpKTtcblxuICAgICAgaWYgKGlzSWRlbnRpZmllciAmJiBoYXNLZXl3b3JkcyAmJiAhaXNFbnRyeVBvaW50ICYmICFpc0V4Y2VwdGlvbikge1xuICAgICAgICBpbXBvcnREZWNsYXJhdGlvbnMuZm9yRWFjaChpbXBvcnREZWNsYXJhdGlvbiA9PiB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZTogaW1wb3J0RGVjbGFyYXRpb24sXG4gICAgICAgICAgICBtZXNzYWdlOiBgQ2Fubm90IHVzZSBpbXBvcnQgZGVjbGFyYXRpb25zIGluIG1vZHVsZXMgdGhhdCBleHBvcnQgdXNpbmcgYCArXG4gICAgICAgICAgICAgIGBDb21tb25KUyAobW9kdWxlLmV4cG9ydHMgPSAnZm9vJyBvciBleHBvcnRzLmJhciA9ICdoaScpYCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFscmVhZHlSZXBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgaW1wb3J0RGVjbGFyYXRpb25zLnB1c2gobm9kZSk7XG4gICAgICB9LFxuICAgICAgTWVtYmVyRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIGlmICghYWxyZWFkeVJlcG9ydGVkKSB7XG4gICAgICAgICAgcmVwb3J0KG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-mutable-exports.js b/node_modules/eslint-plugin-import/lib/rules/no-mutable-exports.js
index 504d8ab..33f70f0 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-mutable-exports.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-mutable-exports.js
@@ -54,4 +54,4 @@
'ExportNamedDeclaration': handleExportNamed };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1tdXRhYmxlLWV4cG9ydHMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJjaGVja0RlY2xhcmF0aW9uIiwibm9kZSIsImtpbmQiLCJyZXBvcnQiLCJjaGVja0RlY2xhcmF0aW9uc0luU2NvcGUiLCJuYW1lIiwidmFyaWFibGVzIiwidmFyaWFibGUiLCJkZWZzIiwiZGVmIiwicGFyZW50IiwiaGFuZGxlRXhwb3J0RGVmYXVsdCIsInNjb3BlIiwiZ2V0U2NvcGUiLCJkZWNsYXJhdGlvbiIsImhhbmRsZUV4cG9ydE5hbWVkIiwic291cmNlIiwic3BlY2lmaWVycyIsInNwZWNpZmllciIsImxvY2FsIl0sIm1hcHBpbmdzIjoiYUFBQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsb0JBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLHVCQUFRLGdCQUFVQyxPQUFWLEVBQW1CO0FBQ3pCLGVBQVNDLGdCQUFULENBQTBCQyxJQUExQixFQUFnQztBQUN0QkMsWUFEc0IsR0FDYkQsSUFEYSxDQUN0QkMsSUFEc0I7QUFFOUIsWUFBSUEsU0FBUyxLQUFULElBQWtCQSxTQUFTLEtBQS9CLEVBQXNDO0FBQ3BDSCxrQkFBUUksTUFBUixDQUFlRixJQUFmLGtDQUEyQ0MsSUFBM0M7QUFDRDtBQUNGOztBQUVELGVBQVNFLHdCQUFULE9BQWlEQyxJQUFqRCxFQUF1RCxLQUFuQkMsU0FBbUIsUUFBbkJBLFNBQW1CO0FBQ3JELCtCQUF1QkEsU0FBdkIsOEhBQWtDLEtBQXZCQyxRQUF1QjtBQUNoQyxnQkFBSUEsU0FBU0YsSUFBVCxLQUFrQkEsSUFBdEIsRUFBNEI7QUFDMUIsc0NBQWtCRSxTQUFTQyxJQUEzQixtSUFBaUMsS0FBdEJDLEdBQXNCO0FBQy9CLHNCQUFJQSxJQUFJZixJQUFKLEtBQWEsVUFBYixJQUEyQmUsSUFBSUMsTUFBbkMsRUFBMkM7QUFDekNWLHFDQUFpQlMsSUFBSUMsTUFBckI7QUFDRDtBQUNGLGlCQUx5QjtBQU0zQjtBQUNGLFdBVG9EO0FBVXREOztBQUVELGVBQVNDLG1CQUFULENBQTZCVixJQUE3QixFQUFtQztBQUNqQyxZQUFNVyxRQUFRYixRQUFRYyxRQUFSLEVBQWQ7O0FBRUEsWUFBSVosS0FBS2EsV0FBTCxDQUFpQlQsSUFBckIsRUFBMkI7QUFDekJELG1DQUF5QlEsS0FBekIsRUFBZ0NYLEtBQUthLFdBQUwsQ0FBaUJULElBQWpEO0FBQ0Q7QUFDRjs7QUFFRCxlQUFTVSxpQkFBVCxDQUEyQmQsSUFBM0IsRUFBaUM7QUFDL0IsWUFBTVcsUUFBUWIsUUFBUWMsUUFBUixFQUFkOztBQUVBLFlBQUlaLEtBQUthLFdBQVQsRUFBdUI7QUFDckJkLDJCQUFpQkMsS0FBS2EsV0FBdEI7QUFDRCxTQUZELE1BRU8sSUFBSSxDQUFDYixLQUFLZSxNQUFWLEVBQWtCO0FBQ3ZCLGtDQUF3QmYsS0FBS2dCLFVBQTdCLG1JQUF5QyxLQUE5QkMsU0FBOEI7QUFDdkNkLHVDQUF5QlEsS0FBekIsRUFBZ0NNLFVBQVVDLEtBQVYsQ0FBZ0JkLElBQWhEO0FBQ0QsYUFIc0I7QUFJeEI7QUFDRjs7QUFFRCxhQUFPO0FBQ0wsb0NBQTRCTSxtQkFEdkI7QUFFTCxrQ0FBMEJJLGlCQUZyQixFQUFQOztBQUlELEtBNUNELGlCQVRlLEVBQWpCIiwiZmlsZSI6Im5vLW11dGFibGUtZXhwb3J0cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW11dGFibGUtZXhwb3J0cycpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgZnVuY3Rpb24gY2hlY2tEZWNsYXJhdGlvbihub2RlKSB7XG4gICAgICBjb25zdCB7IGtpbmQgfSA9IG5vZGU7XG4gICAgICBpZiAoa2luZCA9PT0gJ3ZhcicgfHwga2luZCA9PT0gJ2xldCcpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgYEV4cG9ydGluZyBtdXRhYmxlICcke2tpbmR9JyBiaW5kaW5nLCB1c2UgJ2NvbnN0JyBpbnN0ZWFkLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrRGVjbGFyYXRpb25zSW5TY29wZSh7IHZhcmlhYmxlcyB9LCBuYW1lKSB7XG4gICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZGVmIG9mIHZhcmlhYmxlLmRlZnMpIHtcbiAgICAgICAgICAgIGlmIChkZWYudHlwZSA9PT0gJ1ZhcmlhYmxlJyAmJiBkZWYucGFyZW50KSB7XG4gICAgICAgICAgICAgIGNoZWNrRGVjbGFyYXRpb24oZGVmLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlRXhwb3J0RGVmYXVsdChub2RlKSB7XG4gICAgICBjb25zdCBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTtcblxuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24ubmFtZSkge1xuICAgICAgICBjaGVja0RlY2xhcmF0aW9uc0luU2NvcGUoc2NvcGUsIG5vZGUuZGVjbGFyYXRpb24ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlRXhwb3J0TmFtZWQobm9kZSkge1xuICAgICAgY29uc3Qgc2NvcGUgPSBjb250ZXh0LmdldFNjb3BlKCk7XG5cbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSAge1xuICAgICAgICBjaGVja0RlY2xhcmF0aW9uKG5vZGUuZGVjbGFyYXRpb24pO1xuICAgICAgfSBlbHNlIGlmICghbm9kZS5zb3VyY2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBzcGVjaWZpZXIgb2Ygbm9kZS5zcGVjaWZpZXJzKSB7XG4gICAgICAgICAgY2hlY2tEZWNsYXJhdGlvbnNJblNjb3BlKHNjb3BlLCBzcGVjaWZpZXIubG9jYWwubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbic6IGhhbmRsZUV4cG9ydERlZmF1bHQsXG4gICAgICAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbic6IGhhbmRsZUV4cG9ydE5hbWVkLFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1tdXRhYmxlLWV4cG9ydHMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJjaGVja0RlY2xhcmF0aW9uIiwibm9kZSIsImtpbmQiLCJyZXBvcnQiLCJjaGVja0RlY2xhcmF0aW9uc0luU2NvcGUiLCJuYW1lIiwidmFyaWFibGVzIiwidmFyaWFibGUiLCJkZWZzIiwiZGVmIiwicGFyZW50IiwiaGFuZGxlRXhwb3J0RGVmYXVsdCIsInNjb3BlIiwiZ2V0U2NvcGUiLCJkZWNsYXJhdGlvbiIsImhhbmRsZUV4cG9ydE5hbWVkIiwic291cmNlIiwic3BlY2lmaWVycyIsInNwZWNpZmllciIsImxvY2FsIl0sIm1hcHBpbmdzIjoiYUFBQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsb0JBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLFFBVGUsK0JBU1JDLE9BVFEsRUFTQztBQUNkLGVBQVNDLGdCQUFULENBQTBCQyxJQUExQixFQUFnQztBQUN0QkMsWUFEc0IsR0FDYkQsSUFEYSxDQUN0QkMsSUFEc0I7QUFFOUIsWUFBSUEsU0FBUyxLQUFULElBQWtCQSxTQUFTLEtBQS9CLEVBQXNDO0FBQ3BDSCxrQkFBUUksTUFBUixDQUFlRixJQUFmLGtDQUEyQ0MsSUFBM0M7QUFDRDtBQUNGOztBQUVELGVBQVNFLHdCQUFULE9BQWlEQyxJQUFqRCxFQUF1RCxLQUFuQkMsU0FBbUIsUUFBbkJBLFNBQW1CO0FBQ3JELCtCQUF1QkEsU0FBdkIsOEhBQWtDLEtBQXZCQyxRQUF1QjtBQUNoQyxnQkFBSUEsU0FBU0YsSUFBVCxLQUFrQkEsSUFBdEIsRUFBNEI7QUFDMUIsc0NBQWtCRSxTQUFTQyxJQUEzQixtSUFBaUMsS0FBdEJDLEdBQXNCO0FBQy9CLHNCQUFJQSxJQUFJZixJQUFKLEtBQWEsVUFBYixJQUEyQmUsSUFBSUMsTUFBbkMsRUFBMkM7QUFDekNWLHFDQUFpQlMsSUFBSUMsTUFBckI7QUFDRDtBQUNGLGlCQUx5QjtBQU0zQjtBQUNGLFdBVG9EO0FBVXREOztBQUVELGVBQVNDLG1CQUFULENBQTZCVixJQUE3QixFQUFtQztBQUNqQyxZQUFNVyxRQUFRYixRQUFRYyxRQUFSLEVBQWQ7O0FBRUEsWUFBSVosS0FBS2EsV0FBTCxDQUFpQlQsSUFBckIsRUFBMkI7QUFDekJELG1DQUF5QlEsS0FBekIsRUFBZ0NYLEtBQUthLFdBQUwsQ0FBaUJULElBQWpEO0FBQ0Q7QUFDRjs7QUFFRCxlQUFTVSxpQkFBVCxDQUEyQmQsSUFBM0IsRUFBaUM7QUFDL0IsWUFBTVcsUUFBUWIsUUFBUWMsUUFBUixFQUFkOztBQUVBLFlBQUlaLEtBQUthLFdBQVQsRUFBdUI7QUFDckJkLDJCQUFpQkMsS0FBS2EsV0FBdEI7QUFDRCxTQUZELE1BRU8sSUFBSSxDQUFDYixLQUFLZSxNQUFWLEVBQWtCO0FBQ3ZCLGtDQUF3QmYsS0FBS2dCLFVBQTdCLG1JQUF5QyxLQUE5QkMsU0FBOEI7QUFDdkNkLHVDQUF5QlEsS0FBekIsRUFBZ0NNLFVBQVVDLEtBQVYsQ0FBZ0JkLElBQWhEO0FBQ0QsYUFIc0I7QUFJeEI7QUFDRjs7QUFFRCxhQUFPO0FBQ0wsb0NBQTRCTSxtQkFEdkI7QUFFTCxrQ0FBMEJJLGlCQUZyQixFQUFQOztBQUlELEtBckRjLG1CQUFqQiIsImZpbGUiOiJuby1tdXRhYmxlLWV4cG9ydHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1tdXRhYmxlLWV4cG9ydHMnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgIGNvbnN0IHsga2luZCB9ID0gbm9kZTtcbiAgICAgIGlmIChraW5kID09PSAndmFyJyB8fCBraW5kID09PSAnbGV0Jykge1xuICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBgRXhwb3J0aW5nIG11dGFibGUgJyR7a2luZH0nIGJpbmRpbmcsIHVzZSAnY29uc3QnIGluc3RlYWQuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tEZWNsYXJhdGlvbnNJblNjb3BlKHsgdmFyaWFibGVzIH0sIG5hbWUpIHtcbiAgICAgIGZvciAoY29uc3QgdmFyaWFibGUgb2YgdmFyaWFibGVzKSB7XG4gICAgICAgIGlmICh2YXJpYWJsZS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkZWYgb2YgdmFyaWFibGUuZGVmcykge1xuICAgICAgICAgICAgaWYgKGRlZi50eXBlID09PSAnVmFyaWFibGUnICYmIGRlZi5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgY2hlY2tEZWNsYXJhdGlvbihkZWYucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVFeHBvcnREZWZhdWx0KG5vZGUpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpO1xuXG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5uYW1lKSB7XG4gICAgICAgIGNoZWNrRGVjbGFyYXRpb25zSW5TY29wZShzY29wZSwgbm9kZS5kZWNsYXJhdGlvbi5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVFeHBvcnROYW1lZChub2RlKSB7XG4gICAgICBjb25zdCBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKTtcblxuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24pICB7XG4gICAgICAgIGNoZWNrRGVjbGFyYXRpb24obm9kZS5kZWNsYXJhdGlvbik7XG4gICAgICB9IGVsc2UgaWYgKCFub2RlLnNvdXJjZSkge1xuICAgICAgICBmb3IgKGNvbnN0IHNwZWNpZmllciBvZiBub2RlLnNwZWNpZmllcnMpIHtcbiAgICAgICAgICBjaGVja0RlY2xhcmF0aW9uc0luU2NvcGUoc2NvcGUsIHNwZWNpZmllci5sb2NhbC5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJzogaGFuZGxlRXhwb3J0RGVmYXVsdCxcbiAgICAgICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJzogaGFuZGxlRXhwb3J0TmFtZWQsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-named-as-default-member.js b/node_modules/eslint-plugin-import/lib/rules/no-named-as-default-member.js
index f9e56ad..fa43285 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-named-as-default-member.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-named-as-default-member.js
@@ -104,4 +104,4 @@
* @copyright 2016 Desmond Brand. All rights reserved.
* See LICENSE in root directory for full license.
*/
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImZpbGVJbXBvcnRzIiwiTWFwIiwiYWxsUHJvcGVydHlMb29rdXBzIiwiaGFuZGxlSW1wb3J0RGVmYXVsdCIsIm5vZGUiLCJkZWNsYXJhdGlvbiIsImV4cG9ydE1hcCIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNldCIsImxvY2FsIiwibmFtZSIsInNvdXJjZVBhdGgiLCJzdG9yZVByb3BlcnR5TG9va3VwIiwib2JqZWN0TmFtZSIsInByb3BOYW1lIiwibG9va3VwcyIsInB1c2giLCJoYW5kbGVQcm9wTG9va3VwIiwib2JqZWN0IiwicHJvcGVydHkiLCJoYW5kbGVEZXN0cnVjdHVyaW5nQXNzaWdubWVudCIsImlzRGVzdHJ1Y3R1cmUiLCJpZCIsImluaXQiLCJwcm9wZXJ0aWVzIiwia2V5IiwiaGFuZGxlUHJvZ3JhbUV4aXQiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLHlDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLDRCQUFSLENBREQsRUFGRjs7QUFLSkMsWUFBUSxFQUxKLEVBRFM7OztBQVNmQyx1QkFBUSxnQkFBU0MsT0FBVCxFQUFrQjs7QUFFeEIsVUFBTUMsY0FBYyxJQUFJQyxHQUFKLEVBQXBCO0FBQ0EsVUFBTUMscUJBQXFCLElBQUlELEdBQUosRUFBM0I7O0FBRUEsZUFB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Ryw2QkFIakI7QUFJTCx3QkFBZ0JNLGlCQUpYLEVBQVA7O0FBTUQsS0E3RUQsaUJBVGUsRUFBakIsQyxDQWRBIiwiZmlsZSI6Im5vLW5hbWVkLWFzLWRlZmF1bHQtbWVtYmVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gd2FybiBhYm91dCBwb3RlbnRpYWxseSBjb25mdXNlZCB1c2Ugb2YgbmFtZSBleHBvcnRzXG4gKiBAYXV0aG9yIERlc21vbmQgQnJhbmRcbiAqIEBjb3B5cmlnaHQgMjAxNiBEZXNtb25kIEJyYW5kLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU2VlIExJQ0VOU0UgaW4gcm9vdCBkaXJlY3RvcnkgZm9yIGZ1bGwgbGljZW5zZS5cbiAqL1xuaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBpbXBvcnREZWNsYXJhdGlvbiBmcm9tICcuLi9pbXBvcnREZWNsYXJhdGlvbic7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlcicpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uKGNvbnRleHQpIHtcblxuICAgIGNvbnN0IGZpbGVJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGFsbFByb3BlcnR5TG9va3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUltcG9ydERlZmF1bHQobm9kZSkge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcbiAgICAgIGNvbnN0IGV4cG9ydE1hcCA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoZXhwb3J0TWFwID09IG51bGwpIHJldHVybjtcblxuICAgICAgaWYgKGV4cG9ydE1hcC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGV4cG9ydE1hcC5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZpbGVJbXBvcnRzLnNldChub2RlLmxvY2FsLm5hbWUsIHtcbiAgICAgICAgZXhwb3J0TWFwLFxuICAgICAgICBzb3VyY2VQYXRoOiBkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKSB7XG4gICAgICBjb25zdCBsb29rdXBzID0gYWxsUHJvcGVydHlMb29rdXBzLmdldChvYmplY3ROYW1lKSB8fCBbXTtcbiAgICAgIGxvb2t1cHMucHVzaCh7IG5vZGUsIHByb3BOYW1lIH0pO1xuICAgICAgYWxsUHJvcGVydHlMb29rdXBzLnNldChvYmplY3ROYW1lLCBsb29rdXBzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVQcm9wTG9va3VwKG5vZGUpIHtcbiAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBub2RlLm9iamVjdC5uYW1lO1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7XG4gICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVEZXN0cnVjdHVyaW5nQXNzaWdubWVudChub2RlKSB7XG4gICAgICBjb25zdCBpc0Rlc3RydWN0dXJlID0gKFxuICAgICAgICBub2RlLmlkLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJyAmJlxuICAgICAgICBub2RlLmluaXQgIT0gbnVsbCAmJlxuICAgICAgICBub2RlLmluaXQudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgICApO1xuICAgICAgaWYgKCFpc0Rlc3RydWN0dXJlKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBub2RlLmluaXQubmFtZTtcbiAgICAgIGZvciAoY29uc3QgeyBrZXkgfSBvZiBub2RlLmlkLnByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKGtleSA9PSBudWxsKSBjb250aW51ZTsgIC8vIHRydWUgZm9yIHJlc3QgcHJvcGVydGllc1xuICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIGtleS5uYW1lLCBrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVByb2dyYW1FeGl0KCkge1xuICAgICAgYWxsUHJvcGVydHlMb29rdXBzLmZvckVhY2goKGxvb2t1cHMsIG9iamVjdE5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUltcG9ydCA9IGZpbGVJbXBvcnRzLmdldChvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKGZpbGVJbXBvcnQgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgeyBwcm9wTmFtZSwgbm9kZSB9IG9mIGxvb2t1cHMpIHtcbiAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBpbXBvcnQgY2FuIGhhdmUgYSBcImRlZmF1bHRcIiBwcm9wZXJ0eVxuICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2RlZmF1bHQnKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoIWZpbGVJbXBvcnQuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMocHJvcE5hbWUpKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAoXG4gICAgICAgICAgICAgIGBDYXV0aW9uOiBcXGAke29iamVjdE5hbWV9XFxgIGFsc28gaGFzIGEgbmFtZWQgZXhwb3J0IGAgK1xuICAgICAgICAgICAgICBgXFxgJHtwcm9wTmFtZX1cXGAuIENoZWNrIGlmIHlvdSBtZWFudCB0byB3cml0ZSBgICtcbiAgICAgICAgICAgICAgYFxcYGltcG9ydCB7JHtwcm9wTmFtZX19IGZyb20gJyR7ZmlsZUltcG9ydC5zb3VyY2VQYXRofSdcXGAgYCArXG4gICAgICAgICAgICAgICdpbnN0ZWFkLidcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic6IGhhbmRsZUltcG9ydERlZmF1bHQsXG4gICAgICAnTWVtYmVyRXhwcmVzc2lvbic6IGhhbmRsZVByb3BMb29rdXAsXG4gICAgICAnVmFyaWFibGVEZWNsYXJhdG9yJzogaGFuZGxlRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnQsXG4gICAgICAnUHJvZ3JhbTpleGl0JzogaGFuZGxlUHJvZ3JhbUV4aXQsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsImZpbGVJbXBvcnRzIiwiTWFwIiwiYWxsUHJvcGVydHlMb29rdXBzIiwiaGFuZGxlSW1wb3J0RGVmYXVsdCIsIm5vZGUiLCJkZWNsYXJhdGlvbiIsImV4cG9ydE1hcCIsIkV4cG9ydHMiLCJnZXQiLCJzb3VyY2UiLCJ2YWx1ZSIsImVycm9ycyIsImxlbmd0aCIsInJlcG9ydEVycm9ycyIsInNldCIsImxvY2FsIiwibmFtZSIsInNvdXJjZVBhdGgiLCJzdG9yZVByb3BlcnR5TG9va3VwIiwib2JqZWN0TmFtZSIsInByb3BOYW1lIiwibG9va3VwcyIsInB1c2giLCJoYW5kbGVQcm9wTG9va3VwIiwib2JqZWN0IiwicHJvcGVydHkiLCJoYW5kbGVEZXN0cnVjdHVyaW5nQXNzaWdubWVudCIsImlzRGVzdHJ1Y3R1cmUiLCJpZCIsImluaXQiLCJwcm9wZXJ0aWVzIiwia2V5IiwiaGFuZGxlUHJvZ3JhbUV4aXQiLCJmb3JFYWNoIiwiZmlsZUltcG9ydCIsIm5hbWVzcGFjZSIsImhhcyIsInJlcG9ydCIsIm1lc3NhZ2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQU1BLHlDO0FBQ0EseUQ7QUFDQSxxQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUFBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLDRCQUFSLENBREQsRUFGRjs7QUFLSkMsWUFBUSxFQUxKLEVBRFM7OztBQVNmQyxRQVRlLCtCQVNSQyxPQVRRLEVBU0M7O0FBRWQsVUFBTUMsY0FBYyxJQUFJQyxHQUFKLEVBQXBCO0FBQ0EsVUFBTUMscUJBQXFCLElBQUlELEdBQUosRUFBM0I7O0FBRUEsZUFBU0Us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QkFIakI7QUFJTCx3QkFBZ0JNLGlCQUpYLEVBQVA7O0FBTUQsS0F0RmMsbUJBQWpCLEMsQ0FkQSIsImZpbGUiOiJuby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVvdmVydmlldyBSdWxlIHRvIHdhcm4gYWJvdXQgcG90ZW50aWFsbHkgY29uZnVzZWQgdXNlIG9mIG5hbWUgZXhwb3J0c1xuICogQGF1dGhvciBEZXNtb25kIEJyYW5kXG4gKiBAY29weXJpZ2h0IDIwMTYgRGVzbW9uZCBCcmFuZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFNlZSBMSUNFTlNFIGluIHJvb3QgZGlyZWN0b3J5IGZvciBmdWxsIGxpY2Vuc2UuXG4gKi9cbmltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdWxlIERlZmluaXRpb25cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZWQtYXMtZGVmYXVsdC1tZW1iZXInKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcblxuICAgIGNvbnN0IGZpbGVJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGFsbFByb3BlcnR5TG9va3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGZ1bmN0aW9uIGhhbmRsZUltcG9ydERlZmF1bHQobm9kZSkge1xuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcbiAgICAgIGNvbnN0IGV4cG9ydE1hcCA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoZXhwb3J0TWFwID09IG51bGwpIHJldHVybjtcblxuICAgICAgaWYgKGV4cG9ydE1hcC5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGV4cG9ydE1hcC5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZpbGVJbXBvcnRzLnNldChub2RlLmxvY2FsLm5hbWUsIHtcbiAgICAgICAgZXhwb3J0TWFwLFxuICAgICAgICBzb3VyY2VQYXRoOiBkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKSB7XG4gICAgICBjb25zdCBsb29rdXBzID0gYWxsUHJvcGVydHlMb29rdXBzLmdldChvYmplY3ROYW1lKSB8fCBbXTtcbiAgICAgIGxvb2t1cHMucHVzaCh7IG5vZGUsIHByb3BOYW1lIH0pO1xuICAgICAgYWxsUHJvcGVydHlMb29rdXBzLnNldChvYmplY3ROYW1lLCBsb29rdXBzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVQcm9wTG9va3VwKG5vZGUpIHtcbiAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBub2RlLm9iamVjdC5uYW1lO1xuICAgICAgY29uc3QgcHJvcE5hbWUgPSBub2RlLnByb3BlcnR5Lm5hbWU7XG4gICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIHByb3BOYW1lLCBub2RlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVEZXN0cnVjdHVyaW5nQXNzaWdubWVudChub2RlKSB7XG4gICAgICBjb25zdCBpc0Rlc3RydWN0dXJlID0gKFxuICAgICAgICBub2RlLmlkLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJyAmJlxuICAgICAgICBub2RlLmluaXQgIT0gbnVsbCAmJlxuICAgICAgICBub2RlLmluaXQudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgICApO1xuICAgICAgaWYgKCFpc0Rlc3RydWN0dXJlKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG9iamVjdE5hbWUgPSBub2RlLmluaXQubmFtZTtcbiAgICAgIGZvciAoY29uc3QgeyBrZXkgfSBvZiBub2RlLmlkLnByb3BlcnRpZXMpIHtcbiAgICAgICAgaWYgKGtleSA9PSBudWxsKSBjb250aW51ZTsgIC8vIHRydWUgZm9yIHJlc3QgcHJvcGVydGllc1xuICAgICAgICBzdG9yZVByb3BlcnR5TG9va3VwKG9iamVjdE5hbWUsIGtleS5uYW1lLCBrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVByb2dyYW1FeGl0KCkge1xuICAgICAgYWxsUHJvcGVydHlMb29rdXBzLmZvckVhY2goKGxvb2t1cHMsIG9iamVjdE5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUltcG9ydCA9IGZpbGVJbXBvcnRzLmdldChvYmplY3ROYW1lKTtcbiAgICAgICAgaWYgKGZpbGVJbXBvcnQgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3QgeyBwcm9wTmFtZSwgbm9kZSB9IG9mIGxvb2t1cHMpIHtcbiAgICAgICAgICAvLyB0aGUgZGVmYXVsdCBpbXBvcnQgY2FuIGhhdmUgYSBcImRlZmF1bHRcIiBwcm9wZXJ0eVxuICAgICAgICAgIGlmIChwcm9wTmFtZSA9PT0gJ2RlZmF1bHQnKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoIWZpbGVJbXBvcnQuZXhwb3J0TWFwLm5hbWVzcGFjZS5oYXMocHJvcE5hbWUpKSBjb250aW51ZTtcblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICBtZXNzYWdlOiAoXG4gICAgICAgICAgICAgIGBDYXV0aW9uOiBcXGAke29iamVjdE5hbWV9XFxgIGFsc28gaGFzIGEgbmFtZWQgZXhwb3J0IGAgK1xuICAgICAgICAgICAgICBgXFxgJHtwcm9wTmFtZX1cXGAuIENoZWNrIGlmIHlvdSBtZWFudCB0byB3cml0ZSBgICtcbiAgICAgICAgICAgICAgYFxcYGltcG9ydCB7JHtwcm9wTmFtZX19IGZyb20gJyR7ZmlsZUltcG9ydC5zb3VyY2VQYXRofSdcXGAgYCArXG4gICAgICAgICAgICAgICdpbnN0ZWFkLidcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcic6IGhhbmRsZUltcG9ydERlZmF1bHQsXG4gICAgICAnTWVtYmVyRXhwcmVzc2lvbic6IGhhbmRsZVByb3BMb29rdXAsXG4gICAgICAnVmFyaWFibGVEZWNsYXJhdG9yJzogaGFuZGxlRGVzdHJ1Y3R1cmluZ0Fzc2lnbm1lbnQsXG4gICAgICAnUHJvZ3JhbTpleGl0JzogaGFuZGxlUHJvZ3JhbUV4aXQsXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-named-as-default.js b/node_modules/eslint-plugin-import/lib/rules/no-named-as-default.js
index eee4d9b..3c30ea0 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-named-as-default.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-named-as-default.js
@@ -40,4 +40,4 @@
'ExportDefaultSpecifier': checkDefault.bind(null, 'exported') };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwiY2hlY2tEZWZhdWx0IiwibmFtZUtleSIsImRlZmF1bHRTcGVjaWZpZXIiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwibGVuZ3RoIiwicmVwb3J0RXJyb3JzIiwiaGFzIiwicmVwb3J0IiwiYmluZCJdLCJtYXBwaW5ncyI6ImFBQUEseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSxxQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsRUFMSixFQURTOzs7QUFTZkMsdUJBQVEsZ0JBQVVDLE9BQVYsRUFBbUI7QUFDekIsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtEOztBQUVsRCxZQUFNQyxjQUFjLG9DQUFrQkwsT0FBbEIsQ0FBcEI7O0FBRUEsWUFBTU0sVUFBVUMsdUJBQVFDLEdBQVIsQ0FBWUgsWUFBWUksTUFBWixDQUFtQkMsS0FBL0IsRUFBc0NWLE9BQXRDLENBQWhCO0FBQ0EsWUFBSU0sV0FBVyxJQUFmLEVBQXFCOztBQUVyQixZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmIsT0FBckIsRUFBOEJLLFdBQTlCO0FBQ0E7QUFDRDs7QUFFRCxZQUFJQyxRQUFRUSxHQUFSLENBQVksU0FBWjtBQUNBUixnQkFBUVEsR0FBUixDQUFZWCxpQkFBaUJELE9BQWpCLEVBQTBCRSxJQUF0QyxDQURKLEVBQ2lEOztBQUUvQ0osa0JBQVFlLE1BQVIsQ0FBZVosZ0JBQWY7QUFDRSxxQ0FBMkJBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXJEO0FBQ0EsZ0RBRkY7O0FBSUQ7QUFDRjtBQUNELGFBQU87QUFDTCxrQ0FBMEJILGFBQWFlLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0IsT0FBeEIsQ0FEckI7QUFFTCxrQ0FBMEJmLGFBQWFlLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0IsVUFBeEIsQ0FGckIsRUFBUDs7QUFJRCxLQTVCRCxpQkFUZSxFQUFqQiIsImZpbGUiOiJuby1uYW1lZC1hcy1kZWZhdWx0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4cG9ydHMgZnJvbSAnLi4vRXhwb3J0TWFwJztcbmltcG9ydCBpbXBvcnREZWNsYXJhdGlvbiBmcm9tICcuLi9pbXBvcnREZWNsYXJhdGlvbic7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1uYW1lZC1hcy1kZWZhdWx0JyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlZmF1bHQobmFtZUtleSwgZGVmYXVsdFNwZWNpZmllcikge1xuICAgICAgLy8gIzU2NjogZGVmYXVsdCBpcyBhIHZhbGlkIHNwZWNpZmllclxuICAgICAgaWYgKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSA9PT0gJ2RlZmF1bHQnKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gaW1wb3J0RGVjbGFyYXRpb24oY29udGV4dCk7XG5cbiAgICAgIGNvbnN0IGltcG9ydHMgPSBFeHBvcnRzLmdldChkZWNsYXJhdGlvbi5zb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuICAgICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICBpZiAoaW1wb3J0cy5lcnJvcnMubGVuZ3RoKSB7XG4gICAgICAgIGltcG9ydHMucmVwb3J0RXJyb3JzKGNvbnRleHQsIGRlY2xhcmF0aW9uKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW1wb3J0cy5oYXMoJ2RlZmF1bHQnKSAmJlxuICAgICAgICAgIGltcG9ydHMuaGFzKGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSkpIHtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydChkZWZhdWx0U3BlY2lmaWVyLFxuICAgICAgICAgICdVc2luZyBleHBvcnRlZCBuYW1lIFxcJycgKyBkZWZhdWx0U3BlY2lmaWVyW25hbWVLZXldLm5hbWUgK1xuICAgICAgICAgICdcXCcgYXMgaWRlbnRpZmllciBmb3IgZGVmYXVsdCBleHBvcnQuJyk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJzogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ2xvY2FsJyksXG4gICAgICAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcic6IGNoZWNrRGVmYXVsdC5iaW5kKG51bGwsICdleHBvcnRlZCcpLFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1hcy1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0IiwiY2hlY2tEZWZhdWx0IiwibmFtZUtleSIsImRlZmF1bHRTcGVjaWZpZXIiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJpbXBvcnRzIiwiRXhwb3J0cyIsImdldCIsInNvdXJjZSIsInZhbHVlIiwiZXJyb3JzIiwibGVuZ3RoIiwicmVwb3J0RXJyb3JzIiwiaGFzIiwicmVwb3J0IiwiYmluZCJdLCJtYXBwaW5ncyI6ImFBQUEseUM7QUFDQSx5RDtBQUNBLHFDOztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSxxQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsRUFMSixFQURTOzs7QUFTZkMsUUFUZSwrQkFTUkMsT0FUUSxFQVNDO0FBQ2QsZUFBU0MsWUFBVCxDQUFzQkMsT0FBdEIsRUFBK0JDLGdCQUEvQixFQUFpRDtBQUMvQztBQUNBLFlBQUlBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQTFCLEtBQW1DLFNBQXZDLEVBQWtEOztBQUVsRCxZQUFNQyxjQUFjLG9DQUFrQkwsT0FBbEIsQ0FBcEI7O0FBRUEsWUFBTU0sVUFBVUMsdUJBQVFDLEdBQVIsQ0FBWUgsWUFBWUksTUFBWixDQUFtQkMsS0FBL0IsRUFBc0NWLE9BQXRDLENBQWhCO0FBQ0EsWUFBSU0sV0FBVyxJQUFmLEVBQXFCOztBQUVyQixZQUFJQSxRQUFRSyxNQUFSLENBQWVDLE1BQW5CLEVBQTJCO0FBQ3pCTixrQkFBUU8sWUFBUixDQUFxQmIsT0FBckIsRUFBOEJLLFdBQTlCO0FBQ0E7QUFDRDs7QUFFRCxZQUFJQyxRQUFRUSxHQUFSLENBQVksU0FBWjtBQUNBUixnQkFBUVEsR0FBUixDQUFZWCxpQkFBaUJELE9BQWpCLEVBQTBCRSxJQUF0QyxDQURKLEVBQ2lEOztBQUUvQ0osa0JBQVFlLE1BQVIsQ0FBZVosZ0JBQWY7QUFDRSxxQ0FBMkJBLGlCQUFpQkQsT0FBakIsRUFBMEJFLElBQXJEO0FBQ0EsZ0RBRkY7O0FBSUQ7QUFDRjtBQUNELGFBQU87QUFDTCxrQ0FBMEJILGFBQWFlLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0IsT0FBeEIsQ0FEckI7QUFFTCxrQ0FBMEJmLGFBQWFlLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0IsVUFBeEIsQ0FGckIsRUFBUDs7QUFJRCxLQXJDYyxtQkFBakIiLCJmaWxlIjoibm8tbmFtZWQtYXMtZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRzIGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgaW1wb3J0RGVjbGFyYXRpb24gZnJvbSAnLi4vaW1wb3J0RGVjbGFyYXRpb24nO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZWQtYXMtZGVmYXVsdCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGZ1bmN0aW9uIGNoZWNrRGVmYXVsdChuYW1lS2V5LCBkZWZhdWx0U3BlY2lmaWVyKSB7XG4gICAgICAvLyAjNTY2OiBkZWZhdWx0IGlzIGEgdmFsaWQgc3BlY2lmaWVyXG4gICAgICBpZiAoZGVmYXVsdFNwZWNpZmllcltuYW1lS2V5XS5uYW1lID09PSAnZGVmYXVsdCcpIHJldHVybjtcblxuICAgICAgY29uc3QgZGVjbGFyYXRpb24gPSBpbXBvcnREZWNsYXJhdGlvbihjb250ZXh0KTtcblxuICAgICAgY29uc3QgaW1wb3J0cyA9IEV4cG9ydHMuZ2V0KGRlY2xhcmF0aW9uLnNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSByZXR1cm47XG5cbiAgICAgIGlmIChpbXBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgaW1wb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgZGVjbGFyYXRpb24pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpbXBvcnRzLmhhcygnZGVmYXVsdCcpICYmXG4gICAgICAgICAgaW1wb3J0cy5oYXMoZGVmYXVsdFNwZWNpZmllcltuYW1lS2V5XS5uYW1lKSkge1xuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KGRlZmF1bHRTcGVjaWZpZXIsXG4gICAgICAgICAgJ1VzaW5nIGV4cG9ydGVkIG5hbWUgXFwnJyArIGRlZmF1bHRTcGVjaWZpZXJbbmFtZUtleV0ubmFtZSArXG4gICAgICAgICAgJ1xcJyBhcyBpZGVudGlmaWVyIGZvciBkZWZhdWx0IGV4cG9ydC4nKTtcblxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInOiBjaGVja0RlZmF1bHQuYmluZChudWxsLCAnbG9jYWwnKSxcbiAgICAgICdFeHBvcnREZWZhdWx0U3BlY2lmaWVyJzogY2hlY2tEZWZhdWx0LmJpbmQobnVsbCwgJ2V4cG9ydGVkJyksXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-named-default.js b/node_modules/eslint-plugin-import/lib/rules/no-named-default.js
index ed92907..f76a147 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-named-default.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-named-default.js
@@ -26,4 +26,4 @@
}return ImportDeclaration;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0Iiwibm9kZSIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRLaW5kIiwiaW1wb3J0ZWQiLCJuYW1lIiwicmVwb3J0IiwibG9jYWwiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiYUFBQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsa0JBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLHVCQUFRLGdCQUFVQyxPQUFWLEVBQW1CO0FBQ3pCLGFBQU87QUFDTCwwQ0FBcUIsMkJBQVVDLElBQVYsRUFBZ0I7QUFDbkNBLGlCQUFLQyxVQUFMLENBQWdCQyxPQUFoQixDQUF3QixVQUFVQyxFQUFWLEVBQWM7QUFDcEMsa0JBQUlBLEdBQUdDLFVBQUgsS0FBa0IsTUFBbEIsSUFBNEJELEdBQUdDLFVBQUgsS0FBa0IsUUFBbEQsRUFBNEQ7QUFDMUQ7QUFDRDs7QUFFRCxrQkFBSUQsR0FBR1QsSUFBSCxLQUFZLGlCQUFaLElBQWlDUyxHQUFHRSxRQUFILENBQVlDLElBQVosS0FBcUIsU0FBMUQsRUFBcUU7QUFDbkVQLHdCQUFRUSxNQUFSLENBQWU7QUFDYlAsd0JBQU1HLEdBQUdLLEtBREk7QUFFYkMsNkVBQWlETixHQUFHSyxLQUFILENBQVNGLElBQTFELFNBRmEsRUFBZjtBQUdEO0FBQ0YsYUFWRDtBQVdELFdBWkQsNEJBREssRUFBUDs7QUFlRCxLQWhCRCxpQkFUZSxFQUFqQiIsImZpbGUiOiJuby1uYW1lZC1kZWZhdWx0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZWQtZGVmYXVsdCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdJbXBvcnREZWNsYXJhdGlvbic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChpbSkge1xuICAgICAgICAgIGlmIChpbS5pbXBvcnRLaW5kID09PSAndHlwZScgfHwgaW0uaW1wb3J0S2luZCA9PT0gJ3R5cGVvZicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW0udHlwZSA9PT0gJ0ltcG9ydFNwZWNpZmllcicgJiYgaW0uaW1wb3J0ZWQubmFtZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICAgIG5vZGU6IGltLmxvY2FsLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBgVXNlIGRlZmF1bHQgaW1wb3J0IHN5bnRheCB0byBpbXBvcnQgJyR7aW0ubG9jYWwubmFtZX0nLmAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lZC1kZWZhdWx0LmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJjb250ZXh0Iiwibm9kZSIsInNwZWNpZmllcnMiLCJmb3JFYWNoIiwiaW0iLCJpbXBvcnRLaW5kIiwiaW1wb3J0ZWQiLCJuYW1lIiwicmVwb3J0IiwibG9jYWwiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiYUFBQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsa0JBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLFFBVGUsK0JBU1JDLE9BVFEsRUFTQztBQUNkLGFBQU87QUFDTCwwQ0FBcUIsMkJBQVVDLElBQVYsRUFBZ0I7QUFDbkNBLGlCQUFLQyxVQUFMLENBQWdCQyxPQUFoQixDQUF3QixVQUFVQyxFQUFWLEVBQWM7QUFDcEMsa0JBQUlBLEdBQUdDLFVBQUgsS0FBa0IsTUFBbEIsSUFBNEJELEdBQUdDLFVBQUgsS0FBa0IsUUFBbEQsRUFBNEQ7QUFDMUQ7QUFDRDs7QUFFRCxrQkFBSUQsR0FBR1QsSUFBSCxLQUFZLGlCQUFaLElBQWlDUyxHQUFHRSxRQUFILENBQVlDLElBQVosS0FBcUIsU0FBMUQsRUFBcUU7QUFDbkVQLHdCQUFRUSxNQUFSLENBQWU7QUFDYlAsd0JBQU1HLEdBQUdLLEtBREk7QUFFYkMsNkVBQWlETixHQUFHSyxLQUFILENBQVNGLElBQTFELFNBRmEsRUFBZjtBQUdEO0FBQ0YsYUFWRDtBQVdELFdBWkQsNEJBREssRUFBUDs7QUFlRCxLQXpCYyxtQkFBakIiLCJmaWxlIjoibm8tbmFtZWQtZGVmYXVsdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVkLWRlZmF1bHQnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ0ltcG9ydERlY2xhcmF0aW9uJzogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgbm9kZS5zcGVjaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKGltKSB7XG4gICAgICAgICAgaWYgKGltLmltcG9ydEtpbmQgPT09ICd0eXBlJyB8fCBpbS5pbXBvcnRLaW5kID09PSAndHlwZW9mJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbS50eXBlID09PSAnSW1wb3J0U3BlY2lmaWVyJyAmJiBpbS5pbXBvcnRlZC5uYW1lID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgbm9kZTogaW0ubG9jYWwsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGBVc2UgZGVmYXVsdCBpbXBvcnQgc3ludGF4IHRvIGltcG9ydCAnJHtpbS5sb2NhbC5uYW1lfScuYCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-namespace.js b/node_modules/eslint-plugin-import/lib/rules/no-namespace.js
index 9153968..9931e25 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-namespace.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-namespace.js
@@ -174,4 +174,4 @@
});
return localNames;
}
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaWdub3JlIiwiaXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNyZWF0ZSIsImNvbnRleHQiLCJmaXJzdE9wdGlvbiIsIm9wdGlvbnMiLCJpZ25vcmVHbG9icyIsIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsIm5vZGUiLCJmaW5kIiwicGFyZW50Iiwic291cmNlIiwidmFsdWUiLCJnbG9iIiwibWF0Y2hCYXNlIiwic2NvcGVWYXJpYWJsZXMiLCJnZXRTY29wZSIsInZhcmlhYmxlcyIsIm5hbWVzcGFjZVZhcmlhYmxlIiwidmFyaWFibGUiLCJkZWZzIiwibmFtZXNwYWNlUmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJuYW1lc3BhY2VJZGVudGlmaWVycyIsIm1hcCIsInJlZmVyZW5jZSIsImlkZW50aWZpZXIiLCJjYW5GaXgiLCJsZW5ndGgiLCJ1c2VzTmFtZXNwYWNlQXNPYmplY3QiLCJyZXBvcnQiLCJtZXNzYWdlIiwiZml4Iiwic2NvcGVNYW5hZ2VyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImZvckVhY2giLCJpbXBvcnROYW1lIiwiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibG9jYWxDb25mbGljdHMiLCJnZXRWYXJpYWJsZU5hbWVzSW5TY29wZSIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwiZ2VuZXJhdGVMb2NhbE5hbWVzIiwibmFtZSIsIm5hbWVkSW1wb3J0U3BlY2lmaWVycyIsInB1c2giLCJmaXhlciIsInJlcGxhY2VUZXh0Iiwiam9pbiIsImV2ZXJ5IiwicHJvcGVydHkiLCJtZW1iZXJFeHByZXNzaW9uIiwiY3VycmVudE5vZGUiLCJzY29wZSIsImFjcXVpcmUiLCJTZXQiLCJ1cHBlciIsIm5hbWVzIiwibmFtZUNvbmZsaWN0cyIsIm5hbWVzcGFjZU5hbWUiLCJsb2NhbE5hbWVzIiwibG9jYWxOYW1lIiwiaGFzIiwiaSIsIkluZmluaXR5Il0sIm1hcHBpbmdzIjoiOzs7OztBQUtBLHNDO0FBQ0EscUMsMlVBTkE7OztvWEFRQTtBQUNBO0FBQ0E7O0FBR0FBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLGNBQVIsQ0FERCxFQUZGOztBQUtKQyxhQUFTLE1BTEw7QUFNSkMsWUFBUSxDQUFDO0FBQ1BKLFlBQU0sUUFEQztBQUVQSyxrQkFBWTtBQUNWQyxnQkFBUTtBQUNOTixnQkFBTSxPQURBO0FBRU5PLGlCQUFPO0FBQ0xQLGtCQUFNLFFBREQsRUFGRDs7QUFLTlEsdUJBQWEsSUFMUCxFQURFLEVBRkwsRUFBRCxDQU5KLEVBRFM7Ozs7OztBQXFCZkMsdUJBQVEsZ0JBQVVDLE9BQVYsRUFBbUI7QUFDekIsVUFBTUMsY0FBY0QsUUFBUUUsT0FBUixDQUFnQixDQUFoQixLQUFzQixFQUExQztBQUNBLFVBQU1DLGNBQWNGLFlBQVlMLE1BQWhDOztBQUVBLGFBQU87QUFDTFEsZ0NBREssaURBQ29CQyxJQURwQixFQUMwQjtBQUM3QixnQkFBSUYsZUFBZUEsWUFBWUcsSUFBWixDQUFpQix3QkFBUSw0QkFBVUQsS0FBS0UsTUFBTCxDQUFZQyxNQUFaLENBQW1CQyxLQUE3QixFQUFvQ0MsSUFBcEMsRUFBMEMsRUFBRUMsV0FBVyxJQUFiLEVBQTFDLENBQVIsRUFBakIsQ0FBbkIsRUFBNkc7QUFDM0c7QUFDRDs7QUFFRCxnQkFBTUMsaUJBQWlCWixRQUFRYSxRQUFSLEdBQW1CQyxTQUExQztBQUNBLGdCQUFNQyxvQkFBb0JILGVBQWVOLElBQWYsQ0FBb0IsVUFBQ1UsUUFBRCxVQUFjQSxTQUFTQyxJQUFULENBQWMsQ0FBZCxFQUFpQlosSUFBakIsS0FBMEJB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QUZELE1BRU8sSUFBSSxDQUFDZSxjQUFjZixJQUFkLEVBQW9CbUIsR0FBcEIsUUFBMkJILGFBQTNCLGlCQUE0Q2hCLElBQTVDLEVBQUwsRUFBMEQ7QUFDL0RrQix5QkFBZUYsYUFBZixpQkFBZ0NoQixJQUFoQztBQUNELEtBRk0sTUFFQTtBQUNMLFdBQUssSUFBSW9CLElBQUksQ0FBYixFQUFnQkEsSUFBSUMsUUFBcEIsRUFBOEJELEdBQTlCLEVBQW1DO0FBQ2pDLFlBQUksQ0FBQ0wsY0FBY2YsSUFBZCxFQUFvQm1CLEdBQXBCLFFBQTJCSCxhQUEzQixpQkFBNENoQixJQUE1QyxpQkFBb0RvQixDQUFwRCxFQUFMLEVBQStEO0FBQzdERiw2QkFBZUYsYUFBZixpQkFBZ0NoQixJQUFoQyxpQkFBd0NvQixDQUF4QztBQUNBO0FBQ0Q7QUFDRjtBQUNGO0FBQ0RILGVBQVdqQixJQUFYLElBQW1Ca0IsU0FBbkI7QUFDRCxHQWZEO0FBZ0JBLFNBQU9ELFVBQVA7QUFDRCIsImZpbGUiOiJuby1uYW1lc3BhY2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlb3ZlcnZpZXcgUnVsZSB0byBkaXNhbGxvdyBuYW1lc3BhY2UgaW1wb3J0XG4gKiBAYXV0aG9yIFJhZGVrIEJlbmtlbFxuICovXG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVsZSBEZWZpbml0aW9uXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tbmFtZXNwYWNlJyksXG4gICAgfSxcbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgc2NoZW1hOiBbe1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGlnbm9yZToge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBjb25zdCBmaXJzdE9wdGlvbiA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCBpZ25vcmVHbG9icyA9IGZpcnN0T3B0aW9uLmlnbm9yZTtcblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIobm9kZSkge1xuICAgICAgICBpZiAoaWdub3JlR2xvYnMgJiYgaWdub3JlR2xvYnMuZmluZChnbG9iID0+IG1pbmltYXRjaChub2RlLnBhcmVudC5zb3VyY2UudmFsdWUsIGdsb2IsIHsgbWF0Y2hCYXNlOiB0cnVlIH0pKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjb3BlVmFyaWFibGVzID0gY29udGV4dC5nZXRTY29wZSgpLnZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlVmFyaWFibGUgPSBzY29wZVZhcmlhYmxlcy5maW5kKCh2YXJpYWJsZSkgPT4gdmFyaWFibGUuZGVmc1swXS5ub2RlID09PSBub2RlKTtcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlUmVmZXJlbmNlcyA9IG5hbWVzcGFjZVZhcmlhYmxlLnJlZmVyZW5jZXM7XG4gICAgICAgIGNvbnN0IG5hbWVzcGFjZUlkZW50aWZpZXJzID0gbmFtZXNwYWNlUmVmZXJlbmNlcy5tYXAocmVmZXJlbmNlID0+IHJlZmVyZW5jZS5pZGVudGlmaWVyKTtcbiAgICAgICAgY29uc3QgY2FuRml4ID0gbmFtZXNwYWNlSWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJiAhdXNlc05hbWVzcGFjZUFzT2JqZWN0KG5hbWVzcGFjZUlkZW50aWZpZXJzKTtcblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBuYW1lc3BhY2UgaW1wb3J0LmAsXG4gICAgICAgICAgZml4OiBjYW5GaXggJiYgKGZpeGVyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlTWFuYWdlciA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLnNjb3BlTWFuYWdlcjtcbiAgICAgICAgICAgIGNvbnN0IGZpeGVzID0gW107XG5cbiAgICAgICAgICAgIC8vIFBhc3MgMTogQ29sbGVjdCB2YXJpYWJsZSBuYW1lcyB0aGF0IGFyZSBhbHJlYWR5IGluIHNjb3BlIGZvciBlYWNoIHJlZmVyZW5jZSB3ZSB3YW50XG4gICAgICAgICAgICAvLyB0byB0cmFuc2Zvcm0sIHNvIHRoYXQgd2UgY2FuIGJlIHN1cmUgdGhhdCB3ZSBjaG9vc2Ugbm9uLWNvbmZsaWN0aW5nIGltcG9ydCBuYW1lc1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0TmFtZUNvbmZsaWN0cyA9IHt9O1xuICAgICAgICAgICAgbmFtZXNwYWNlSWRlbnRpZmllcnMuZm9yRWFjaCgoaWRlbnRpZmllcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBpZGVudGlmaWVyLnBhcmVudDtcbiAgICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1wb3J0TmFtZSA9IGdldE1lbWJlclByb3BlcnR5TmFtZShwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsQ29uZmxpY3RzID0gZ2V0VmFyaWFibGVOYW1lc0luU2NvcGUoc2NvcGVNYW5hZ2VyLCBwYXJlbnQpO1xuICAgICAgICAgICAgICAgIGlmICghaW1wb3J0TmFtZUNvbmZsaWN0c1tpbXBvcnROYW1lXSkge1xuICAgICAgICAgICAgICAgICAgaW1wb3J0TmFtZUNvbmZsaWN0c1tpbXBvcnROYW1lXSA9IGxvY2FsQ29uZmxpY3RzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsb2NhbENvbmZsaWN0cy5mb3JFYWNoKChjKSA9PiBpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdLmFkZChjKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ2hvb3NlIG5ldyBuYW1lcyBmb3IgZWFjaCBpbXBvcnRcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWVzID0gT2JqZWN0LmtleXMoaW1wb3J0TmFtZUNvbmZsaWN0cyk7XG4gICAgICAgICAgICBjb25zdCBpbXBvcnRMb2NhbE5hbWVzID0gZ2VuZXJhdGVMb2NhbE5hbWVzKFxuICAgICAgICAgICAgICBpbXBvcnROYW1lcyxcbiAgICAgICAgICAgICAgaW1wb3J0TmFtZUNvbmZsaWN0cyxcbiAgICAgICAgICAgICAgbmFtZXNwYWNlVmFyaWFibGUubmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyIHdpdGggYSBsaXN0IG9mIEltcG9ydFNwZWNpZmllcnNcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkSW1wb3J0U3BlY2lmaWVycyA9IGltcG9ydE5hbWVzLm1hcCgoaW1wb3J0TmFtZSkgPT4gKFxuICAgICAgICAgICAgICBpbXBvcnROYW1lID09PSBpbXBvcnRMb2NhbE5hbWVzW2ltcG9ydE5hbWVdXG4gICAgICAgICAgICAgICAgPyBpbXBvcnROYW1lXG4gICAgICAgICAgICAgICAgOiBgJHtpbXBvcnROYW1lfSBhcyAke2ltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV19YFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KG5vZGUsIGB7ICR7bmFtZWRJbXBvcnRTcGVjaWZpZXJzLmpvaW4oJywgJyl9IH1gKSk7XG5cbiAgICAgICAgICAgIC8vIFBhc3MgMjogUmVwbGFjZSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lc3BhY2Ugd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBuYW1lZCBpbXBvcnRzXG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChwYXJlbnQsIGltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBmaXhlcztcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SWRlbnRpZmllcltdfSBuYW1lc3BhY2VJZGVudGlmaWVyc1xuICogQHJldHVybnMge2Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgbmFtZXNwYWNlIHZhcmlhYmxlIGlzIG1vcmUgdGhhbiBqdXN0IGEgZ2xvcmlmaWVkIGNvbnN0YW50XG4gKi9cbmZ1bmN0aW9uIHVzZXNOYW1lc3BhY2VBc09iamVjdChuYW1lc3BhY2VJZGVudGlmaWVycykge1xuICByZXR1cm4gIW5hbWVzcGFjZUlkZW50aWZpZXJzLmV2ZXJ5KChpZGVudGlmaWVyKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG5cbiAgICAvLyBgbmFtZXNwYWNlLnhgIG9yIGBuYW1lc3BhY2VbJ3gnXWBcbiAgICByZXR1cm4gKFxuICAgICAgcGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiZcbiAgICAgIChwYXJlbnQucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInIHx8IHBhcmVudC5wcm9wZXJ0eS50eXBlID09PSAnTGl0ZXJhbCcpXG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtNZW1iZXJFeHByZXNzaW9ufSBtZW1iZXJFeHByZXNzaW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyIGluIHRoZSBvYmplY3QgZXhwcmVzc2lvbiwgZS5nLiB0aGUgYHhgIGluIGBuYW1lc3BhY2UueGBcbiAqL1xuZnVuY3Rpb24gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKG1lbWJlckV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIG1lbWJlckV4cHJlc3Npb24ucHJvcGVydHkudHlwZSA9PT0gJ0lkZW50aWZpZXInXG4gICAgPyBtZW1iZXJFeHByZXNzaW9uLnByb3BlcnR5Lm5hbWVcbiAgICA6IG1lbWJlckV4cHJlc3Npb24ucHJvcGVydHkudmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtTY29wZU1hbmFnZXJ9IHNjb3BlTWFuYWdlclxuICogQHBhcmFtIHtBU1ROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtTZXQ8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZ2V0VmFyaWFibGVOYW1lc0luU2NvcGUoc2NvcGVNYW5hZ2VyLCBub2RlKSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IG5vZGU7XG4gIGxldCBzY29wZSA9IHNjb3BlTWFuYWdlci5hY3F1aXJlKGN1cnJlbnROb2RlKTtcbiAgd2hpbGUgKHNjb3BlID09IG51bGwpIHtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudDtcbiAgICBzY29wZSA9IHNjb3BlTWFuYWdlci5hY3F1aXJlKGN1cnJlbnROb2RlLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gbmV3IFNldChbXG4gICAgLi4uc2NvcGUudmFyaWFibGVzLm1hcCh2YXJpYWJsZSA9PiB2YXJpYWJsZS5uYW1lKSxcbiAgICAuLi5zY29wZS51cHBlci52YXJpYWJsZXMubWFwKHZhcmlhYmxlID0+IHZhcmlhYmxlLm5hbWUpLFxuICBdKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBuYW1lc1xuICogQHBhcmFtIHsqfSBuYW1lQ29uZmxpY3RzXG4gKiBAcGFyYW0geyp9IG5hbWVzcGFjZU5hbWVcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVMb2NhbE5hbWVzKG5hbWVzLCBuYW1lQ29uZmxpY3RzLCBuYW1lc3BhY2VOYW1lKSB7XG4gIGNvbnN0IGxvY2FsTmFtZXMgPSB7fTtcbiAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgIGxldCBsb2NhbE5hbWU7XG4gICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhuYW1lKSkge1xuICAgICAgbG9jYWxOYW1lID0gbmFtZTtcbiAgICB9IGVsc2UgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9YCkpIHtcbiAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEluZmluaXR5OyBpKyspIHtcbiAgICAgICAgaWYgKCFuYW1lQ29uZmxpY3RzW25hbWVdLmhhcyhgJHtuYW1lc3BhY2VOYW1lfV8ke25hbWV9XyR7aX1gKSkge1xuICAgICAgICAgIGxvY2FsTmFtZSA9IGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWA7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbG9jYWxOYW1lc1tuYW1lXSA9IGxvY2FsTmFtZTtcbiAgfSk7XG4gIHJldHVybiBsb2NhbE5hbWVzO1xufVxuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1uYW1lc3BhY2UuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsImZpeGFibGUiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiaWdub3JlIiwiaXRlbXMiLCJ1bmlxdWVJdGVtcyIsImNyZWF0ZSIsImNvbnRleHQiLCJmaXJzdE9wdGlvbiIsIm9wdGlvbnMiLCJpZ25vcmVHbG9icyIsIkltcG9ydE5hbWVzcGFjZVNwZWNpZmllciIsIm5vZGUiLCJmaW5kIiwicGFyZW50Iiwic291cmNlIiwidmFsdWUiLCJnbG9iIiwibWF0Y2hCYXNlIiwic2NvcGVWYXJpYWJsZXMiLCJnZXRTY29wZSIsInZhcmlhYmxlcyIsIm5hbWVzcGFjZVZhcmlhYmxlIiwidmFyaWFibGUiLCJkZWZzIiwibmFtZXNwYWNlUmVmZXJlbmNlcyIsInJlZmVyZW5jZXMiLCJuYW1lc3BhY2VJZGVudGlmaWVycyIsIm1hcCIsInJlZmVyZW5jZSIsImlkZW50aWZpZXIiLCJjYW5GaXgiLCJsZW5ndGgiLCJ1c2VzTmFtZXNwYWNlQXNPYmplY3QiLCJyZXBvcnQiLCJtZXNzYWdlIiwiZml4Iiwic2NvcGVNYW5hZ2VyIiwiZ2V0U291cmNlQ29kZSIsImZpeGVzIiwiaW1wb3J0TmFtZUNvbmZsaWN0cyIsImZvckVhY2giLCJpbXBvcnROYW1lIiwiZ2V0TWVtYmVyUHJvcGVydHlOYW1lIiwibG9jYWxDb25mbGljdHMiLCJnZXRWYXJpYWJsZU5hbWVzSW5TY29wZSIsImMiLCJhZGQiLCJpbXBvcnROYW1lcyIsIk9iamVjdCIsImtleXMiLCJpbXBvcnRMb2NhbE5hbWVzIiwiZ2VuZXJhdGVMb2NhbE5hbWVzIiwibmFtZSIsIm5hbWVkSW1wb3J0U3BlY2lmaWVycyIsInB1c2giLCJmaXhlciIsInJlcGxhY2VUZXh0Iiwiam9pbiIsImV2ZXJ5IiwicHJvcGVydHkiLCJtZW1iZXJFeHByZXNzaW9uIiwiY3VycmVudE5vZGUiLCJzY29wZSIsImFjcXVpcmUiLCJTZXQiLCJ1cHBlciIsIm5hbWVzIiwibmFtZUNvbmZsaWN0cyIsIm5hbWVzcGFjZU5hbWUiLCJsb2NhbE5hbWVzIiwibG9jYWxOYW1lIiwiaGFzIiwiaSIsIkluZmluaXR5Il0sIm1hcHBpbmdzIjoiOzs7OztBQUtBLHNDO0FBQ0EscUMsMlVBTkE7OztvWEFRQTtBQUNBO0FBQ0E7O0FBR0FBLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLGNBQVIsQ0FERCxFQUZGOztBQUtKQyxhQUFTLE1BTEw7QUFNSkMsWUFBUSxDQUFDO0FBQ1BKLFlBQU0sUUFEQztBQUVQSyxrQkFBWTtBQUNWQyxnQkFBUTtBQUNOTixnQkFBTSxPQURBO0FBRU5PLGlCQUFPO0FBQ0xQLGtCQUFNLFFBREQsRUFGRDs7QUFLTlEsdUJBQWEsSUFMUCxFQURFLEVBRkwsRUFBRCxDQU5KLEVBRFM7Ozs7OztBQXFCZkMsUUFyQmUsK0JBcUJSQyxPQXJCUSxFQXFCQztBQUNkLFVBQU1DLGNBQWNELFFBQVFFLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFBMUM7QUFDQSxVQUFNQyxjQUFjRixZQUFZTCxNQUFoQzs7QUFFQSxhQUFPO0FBQ0xRLGdDQURLLGlEQUNvQkMsSUFEcEIsRUFDMEI7QUFDN0IsZ0JBQUlGLGVBQWVBLFlBQVlHLElBQVosQ0FBaUIsd0JBQVEsNEJBQVVELEtBQUtFLE1BQUwsQ0FBWUMsTUFBWixDQUFtQkMsS0FBN0IsRUFBb0NDLElBQXBDLEVBQTBDLEVBQUVDLFdBQVcsSUFBYixFQUExQyxDQUFSLEVBQWpCLENBQW5CLEVBQTZHO0FBQzNHO0FBQ0Q7O0FBRUQsZ0JBQU1DLGlCQUFpQlosUUFBUWEsUUFBUixHQUFtQkMsU0FBMUM7QUFDQSxnQkFBTUMsb0JBQW9CSCxlQUFlTixJQUFmLENBQW9CLFVBQUNVLFFBQUQsVUFBY0EsU0FBU0MsSUFBVCxDQUFjLENBQWQsRUFBaUJaLElBQWpCLEtBQTBC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QUVPLElBQUksQ0FBQ2UsY0FBY2YsSUFBZCxFQUFvQm1CLEdBQXBCLFFBQTJCSCxhQUEzQixpQkFBNENoQixJQUE1QyxFQUFMLEVBQTBEO0FBQy9Ea0IseUJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEM7QUFDRCxLQUZNLE1BRUE7QUFDTCxXQUFLLElBQUlvQixJQUFJLENBQWIsRUFBZ0JBLElBQUlDLFFBQXBCLEVBQThCRCxHQUE5QixFQUFtQztBQUNqQyxZQUFJLENBQUNMLGNBQWNmLElBQWQsRUFBb0JtQixHQUFwQixRQUEyQkgsYUFBM0IsaUJBQTRDaEIsSUFBNUMsaUJBQW9Eb0IsQ0FBcEQsRUFBTCxFQUErRDtBQUM3REYsNkJBQWVGLGFBQWYsaUJBQWdDaEIsSUFBaEMsaUJBQXdDb0IsQ0FBeEM7QUFDQTtBQUNEO0FBQ0Y7QUFDRjtBQUNESCxlQUFXakIsSUFBWCxJQUFtQmtCLFNBQW5CO0FBQ0QsR0FmRDtBQWdCQSxTQUFPRCxVQUFQO0FBQ0QiLCJmaWxlIjoibm8tbmFtZXNwYWNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFJ1bGUgdG8gZGlzYWxsb3cgbmFtZXNwYWNlIGltcG9ydFxuICogQGF1dGhvciBSYWRlayBCZW5rZWxcbiAqL1xuXG5pbXBvcnQgbWluaW1hdGNoIGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJ1bGUgRGVmaW5pdGlvblxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5hbWVzcGFjZScpLFxuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBpZ25vcmU6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IGlnbm9yZUdsb2JzID0gZmlyc3RPcHRpb24uaWdub3JlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydE5hbWVzcGFjZVNwZWNpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChpZ25vcmVHbG9icyAmJiBpZ25vcmVHbG9icy5maW5kKGdsb2IgPT4gbWluaW1hdGNoKG5vZGUucGFyZW50LnNvdXJjZS52YWx1ZSwgZ2xvYiwgeyBtYXRjaEJhc2U6IHRydWUgfSkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2NvcGVWYXJpYWJsZXMgPSBjb250ZXh0LmdldFNjb3BlKCkudmFyaWFibGVzO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VWYXJpYWJsZSA9IHNjb3BlVmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB2YXJpYWJsZS5kZWZzWzBdLm5vZGUgPT09IG5vZGUpO1xuICAgICAgICBjb25zdCBuYW1lc3BhY2VSZWZlcmVuY2VzID0gbmFtZXNwYWNlVmFyaWFibGUucmVmZXJlbmNlcztcbiAgICAgICAgY29uc3QgbmFtZXNwYWNlSWRlbnRpZmllcnMgPSBuYW1lc3BhY2VSZWZlcmVuY2VzLm1hcChyZWZlcmVuY2UgPT4gcmVmZXJlbmNlLmlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCBjYW5GaXggPSBuYW1lc3BhY2VJZGVudGlmaWVycy5sZW5ndGggPiAwICYmICF1c2VzTmFtZXNwYWNlQXNPYmplY3QobmFtZXNwYWNlSWRlbnRpZmllcnMpO1xuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIG5hbWVzcGFjZSBpbXBvcnQuYCxcbiAgICAgICAgICBmaXg6IGNhbkZpeCAmJiAoZml4ZXIgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NvcGVNYW5hZ2VyID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuc2NvcGVNYW5hZ2VyO1xuICAgICAgICAgICAgY29uc3QgZml4ZXMgPSBbXTtcblxuICAgICAgICAgICAgLy8gUGFzcyAxOiBDb2xsZWN0IHZhcmlhYmxlIG5hbWVzIHRoYXQgYXJlIGFscmVhZHkgaW4gc2NvcGUgZm9yIGVhY2ggcmVmZXJlbmNlIHdlIHdhbnRcbiAgICAgICAgICAgIC8vIHRvIHRyYW5zZm9ybSwgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHdlIGNob29zZSBub24tY29uZmxpY3RpbmcgaW1wb3J0IG5hbWVzXG4gICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lQ29uZmxpY3RzID0ge307XG4gICAgICAgICAgICBuYW1lc3BhY2VJZGVudGlmaWVycy5mb3JFYWNoKChpZGVudGlmaWVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGlkZW50aWZpZXIucGFyZW50O1xuICAgICAgICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnROYW1lID0gZ2V0TWVtYmVyUHJvcGVydHlOYW1lKHBhcmVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxDb25mbGljdHMgPSBnZXRWYXJpYWJsZU5hbWVzSW5TY29wZShzY29wZU1hbmFnZXIsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCFpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzW2ltcG9ydE5hbWVdID0gbG9jYWxDb25mbGljdHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsQ29uZmxpY3RzLmZvckVhY2goKGMpID0+IGltcG9ydE5hbWVDb25mbGljdHNbaW1wb3J0TmFtZV0uYWRkKGMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDaG9vc2UgbmV3IG5hbWVzIGZvciBlYWNoIGltcG9ydFxuICAgICAgICAgICAgY29uc3QgaW1wb3J0TmFtZXMgPSBPYmplY3Qua2V5cyhpbXBvcnROYW1lQ29uZmxpY3RzKTtcbiAgICAgICAgICAgIGNvbnN0IGltcG9ydExvY2FsTmFtZXMgPSBnZW5lcmF0ZUxvY2FsTmFtZXMoXG4gICAgICAgICAgICAgIGltcG9ydE5hbWVzLFxuICAgICAgICAgICAgICBpbXBvcnROYW1lQ29uZmxpY3RzLFxuICAgICAgICAgICAgICBuYW1lc3BhY2VWYXJpYWJsZS5uYW1lXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXIgd2l0aCBhIGxpc3Qgb2YgSW1wb3J0U3BlY2lmaWVyc1xuICAgICAgICAgICAgY29uc3QgbmFtZWRJbXBvcnRTcGVjaWZpZXJzID0gaW1wb3J0TmFtZXMubWFwKChpbXBvcnROYW1lKSA9PiAoXG4gICAgICAgICAgICAgIGltcG9ydE5hbWUgPT09IGltcG9ydExvY2FsTmFtZXNbaW1wb3J0TmFtZV1cbiAgICAgICAgICAgICAgICA/IGltcG9ydE5hbWVcbiAgICAgICAgICAgICAgICA6IGAke2ltcG9ydE5hbWV9IGFzICR7aW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXX1gXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYHsgJHtuYW1lZEltcG9ydFNwZWNpZmllcnMuam9pbignLCAnKX0gfWApKTtcblxuICAgICAgICAgICAgLy8gUGFzcyAyOiBSZXBsYWNlIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVzcGFjZSB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVkIGltcG9ydHNcbiAgICAgICAgICAgIG5hbWVzcGFjZUlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gaWRlbnRpZmllci5wYXJlbnQ7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltcG9ydE5hbWUgPSBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUocGFyZW50KTtcbiAgICAgICAgICAgICAgICBmaXhlcy5wdXNoKGZpeGVyLnJlcGxhY2VUZXh0KHBhcmVudCwgaW1wb3J0TG9jYWxOYW1lc1tpbXBvcnROYW1lXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtJZGVudGlmaWVyW119IG5hbWVzcGFjZUlkZW50aWZpZXJzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIHRoZSBuYW1lc3BhY2UgdmFyaWFibGUgaXMgbW9yZSB0aGFuIGp1c3QgYSBnbG9yaWZpZWQgY29uc3RhbnRcbiAqL1xuZnVuY3Rpb24gdXNlc05hbWVzcGFjZUFzT2JqZWN0KG5hbWVzcGFjZUlkZW50aWZpZXJzKSB7XG4gIHJldHVybiAhbmFtZXNwYWNlSWRlbnRpZmllcnMuZXZlcnkoKGlkZW50aWZpZXIpID0+IHtcbiAgICBjb25zdCBwYXJlbnQgPSBpZGVudGlmaWVyLnBhcmVudDtcblxuICAgIC8vIGBuYW1lc3BhY2UueGAgb3IgYG5hbWVzcGFjZVsneCddYFxuICAgIHJldHVybiAoXG4gICAgICBwYXJlbnQgJiYgcGFyZW50LnR5cGUgPT09ICdNZW1iZXJFeHByZXNzaW9uJyAmJlxuICAgICAgKHBhcmVudC5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcicgfHwgcGFyZW50LnByb3BlcnR5LnR5cGUgPT09ICdMaXRlcmFsJylcbiAgICApO1xuICB9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge01lbWJlckV4cHJlc3Npb259IG1lbWJlckV4cHJlc3Npb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIgaW4gdGhlIG9iamVjdCBleHByZXNzaW9uLCBlLmcuIHRoZSBgeGAgaW4gYG5hbWVzcGFjZS54YFxuICovXG5mdW5jdGlvbiBnZXRNZW1iZXJQcm9wZXJ0eU5hbWUobWVtYmVyRXhwcmVzc2lvbikge1xuICByZXR1cm4gbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS50eXBlID09PSAnSWRlbnRpZmllcidcbiAgICA/IG1lbWJlckV4cHJlc3Npb24ucHJvcGVydHkubmFtZVxuICAgIDogbWVtYmVyRXhwcmVzc2lvbi5wcm9wZXJ0eS52YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1Njb3BlTWFuYWdlcn0gc2NvcGVNYW5hZ2VyXG4gKiBAcGFyYW0ge0FTVE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge1NldDxzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRWYXJpYWJsZU5hbWVzSW5TY29wZShzY29wZU1hbmFnZXIsIG5vZGUpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gbm9kZTtcbiAgbGV0IHNjb3BlID0gc2NvcGVNYW5hZ2VyLmFjcXVpcmUoY3VycmVudE5vZGUpO1xuICB3aGlsZSAoc2NvcGUgPT0gbnVsbCkge1xuICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50O1xuICAgIHNjb3BlID0gc2NvcGVNYW5hZ2VyLmFjcXVpcmUoY3VycmVudE5vZGUsIHRydWUpO1xuICB9XG4gIHJldHVybiBuZXcgU2V0KFtcbiAgICAuLi5zY29wZS52YXJpYWJsZXMubWFwKHZhcmlhYmxlID0+IHZhcmlhYmxlLm5hbWUpLFxuICAgIC4uLnNjb3BlLnVwcGVyLnZhcmlhYmxlcy5tYXAodmFyaWFibGUgPT4gdmFyaWFibGUubmFtZSksXG4gIF0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IG5hbWVzXG4gKiBAcGFyYW0geyp9IG5hbWVDb25mbGljdHNcbiAqIEBwYXJhbSB7Kn0gbmFtZXNwYWNlTmFtZVxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUxvY2FsTmFtZXMobmFtZXMsIG5hbWVDb25mbGljdHMsIG5hbWVzcGFjZU5hbWUpIHtcbiAgY29uc3QgbG9jYWxOYW1lcyA9IHt9O1xuICBuYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgbGV0IGxvY2FsTmFtZTtcbiAgICBpZiAoIW5hbWVDb25mbGljdHNbbmFtZV0uaGFzKG5hbWUpKSB7XG4gICAgICBsb2NhbE5hbWUgPSBuYW1lO1xuICAgIH0gZWxzZSBpZiAoIW5hbWVDb25mbGljdHNbbmFtZV0uaGFzKGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1gKSkge1xuICAgICAgbG9jYWxOYW1lID0gYCR7bmFtZXNwYWNlTmFtZX1fJHtuYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgSW5maW5pdHk7IGkrKykge1xuICAgICAgICBpZiAoIW5hbWVDb25mbGljdHNbbmFtZV0uaGFzKGAke25hbWVzcGFjZU5hbWV9XyR7bmFtZX1fJHtpfWApKSB7XG4gICAgICAgICAgbG9jYWxOYW1lID0gYCR7bmFtZXNwYWNlTmFtZX1fJHtuYW1lfV8ke2l9YDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsb2NhbE5hbWVzW25hbWVdID0gbG9jYWxOYW1lO1xuICB9KTtcbiAgcmV0dXJuIGxvY2FsTmFtZXM7XG59XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-nodejs-modules.js b/node_modules/eslint-plugin-import/lib/rules/no-nodejs-modules.js
index 158c607..00f4179 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-nodejs-modules.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-nodejs-modules.js
@@ -39,4 +39,4 @@
reportIfMissing(context, node, allowed, source.value);
}, { commonjs: true });
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1ub2RlanMtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJyZXBvcnRJZk1pc3NpbmciLCJjb250ZXh0Iiwibm9kZSIsImFsbG93ZWQiLCJuYW1lIiwiaW5kZXhPZiIsInJlcG9ydCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3ciLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJvcHRpb25zIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyJdLCJtYXBwaW5ncyI6ImFBQUEsZ0Q7QUFDQSxrRTtBQUNBLHFDOztBQUVBLFNBQVNBLGVBQVQsQ0FBeUJDLE9BQXpCLEVBQWtDQyxJQUFsQyxFQUF3Q0MsT0FBeEMsRUFBaURDLElBQWpELEVBQXVEO0FBQ3JELE1BQUlELFFBQVFFLE9BQVIsQ0FBZ0JELElBQWhCLE1BQTBCLENBQUMsQ0FBM0IsSUFBZ0MsNkJBQVdBLElBQVgsRUFBaUJILE9BQWpCLE1BQThCLFNBQWxFLEVBQTZFO0FBQzNFQSxZQUFRSyxNQUFSLENBQWVKLElBQWYsRUFBcUIsMkNBQTJDRSxJQUEzQyxHQUFrRCxHQUF2RTtBQUNEO0FBQ0Y7O0FBRURHLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLG1CQUFSLENBREQsRUFGRjs7QUFLSkMsWUFBUTtBQUNOO0FBQ0VILFlBQU0sUUFEUjtBQUVFSSxrQkFBWTtBQUNWQyxlQUFPO0FBQ0xMLGdCQUFNLE9BREQ7QUFFTE0sdUJBQWEsSUFGUjtBQUdMQyxpQkFBTztBQUNMUCxrQkFBTSxRQURELEVBSEYsRUFERyxFQUZkOzs7O0FBV0VRLDRCQUFzQixLQVh4QixFQURNLENBTEosRUFEUzs7Ozs7QUF1QmZDLHVCQUFRLGdCQUFVbEIsT0FBVixFQUFtQjtBQUN6QixVQUFNbUIsVUFBVW5CLFFBQVFtQixPQUFSLENBQWdCLENBQWhCLEtBQXNCLEVBQXRDO0FBQ0EsVUFBTWpCLFVBQVVpQixRQUFRTCxLQUFSLElBQWlCLEVBQWpDOztBQUVBLGFBQU8sZ0NBQWMsVUFBQ00sTUFBRCxFQUFTbkIsSUFBVCxFQUFrQjtBQUNyQ0Ysd0JBQWdCQyxPQUFoQixFQUF5QkMsSUFBekIsRUFBK0JDLE9BQS9CLEVBQXdDa0IsT0FBT0MsS0FBL0M7QUFDRCxPQUZNLEVBRUosRUFBRUMsVUFBVSxJQUFaLEVBRkksQ0FBUDtBQUdELEtBUEQsaUJBdkJlLEVBQWpCIiwiZmlsZSI6Im5vLW5vZGVqcy1tb2R1bGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvbW9kdWxlVmlzaXRvcic7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuZnVuY3Rpb24gcmVwb3J0SWZNaXNzaW5nKGNvbnRleHQsIG5vZGUsIGFsbG93ZWQsIG5hbWUpIHtcbiAgaWYgKGFsbG93ZWQuaW5kZXhPZihuYW1lKSA9PT0gLTEgJiYgaW1wb3J0VHlwZShuYW1lLCBjb250ZXh0KSA9PT0gJ2J1aWx0aW4nKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgJ0RvIG5vdCBpbXBvcnQgTm9kZS5qcyBidWlsdGluIG1vZHVsZSBcIicgKyBuYW1lICsgJ1wiJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1ub2RlanMtbW9kdWxlcycpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWxsb3c6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgYWxsb3dlZCA9IG9wdGlvbnMuYWxsb3cgfHwgW107XG5cbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlLCBub2RlKSA9PiB7XG4gICAgICByZXBvcnRJZk1pc3NpbmcoY29udGV4dCwgbm9kZSwgYWxsb3dlZCwgc291cmNlLnZhbHVlKTtcbiAgICB9LCB7IGNvbW1vbmpzOiB0cnVlIH0pO1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1ub2RlanMtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJyZXBvcnRJZk1pc3NpbmciLCJjb250ZXh0Iiwibm9kZSIsImFsbG93ZWQiLCJuYW1lIiwiaW5kZXhPZiIsInJlcG9ydCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiYWxsb3ciLCJ1bmlxdWVJdGVtcyIsIml0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjcmVhdGUiLCJvcHRpb25zIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyJdLCJtYXBwaW5ncyI6ImFBQUEsZ0Q7QUFDQSxrRTtBQUNBLHFDOztBQUVBLFNBQVNBLGVBQVQsQ0FBeUJDLE9BQXpCLEVBQWtDQyxJQUFsQyxFQUF3Q0MsT0FBeEMsRUFBaURDLElBQWpELEVBQXVEO0FBQ3JELE1BQUlELFFBQVFFLE9BQVIsQ0FBZ0JELElBQWhCLE1BQTBCLENBQUMsQ0FBM0IsSUFBZ0MsNkJBQVdBLElBQVgsRUFBaUJILE9BQWpCLE1BQThCLFNBQWxFLEVBQTZFO0FBQzNFQSxZQUFRSyxNQUFSLENBQWVKLElBQWYsRUFBcUIsMkNBQTJDRSxJQUEzQyxHQUFrRCxHQUF2RTtBQUNEO0FBQ0Y7O0FBRURHLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFlBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLG1CQUFSLENBREQsRUFGRjs7QUFLSkMsWUFBUTtBQUNOO0FBQ0VILFlBQU0sUUFEUjtBQUVFSSxrQkFBWTtBQUNWQyxlQUFPO0FBQ0xMLGdCQUFNLE9BREQ7QUFFTE0sdUJBQWEsSUFGUjtBQUdMQyxpQkFBTztBQUNMUCxrQkFBTSxRQURELEVBSEYsRUFERyxFQUZkOzs7O0FBV0VRLDRCQUFzQixLQVh4QixFQURNLENBTEosRUFEUzs7Ozs7QUF1QmZDLFFBdkJlLCtCQXVCUmxCLE9BdkJRLEVBdUJDO0FBQ2QsVUFBTW1CLFVBQVVuQixRQUFRbUIsT0FBUixDQUFnQixDQUFoQixLQUFzQixFQUF0QztBQUNBLFVBQU1qQixVQUFVaUIsUUFBUUwsS0FBUixJQUFpQixFQUFqQzs7QUFFQSxhQUFPLGdDQUFjLFVBQUNNLE1BQUQsRUFBU25CLElBQVQsRUFBa0I7QUFDckNGLHdCQUFnQkMsT0FBaEIsRUFBeUJDLElBQXpCLEVBQStCQyxPQUEvQixFQUF3Q2tCLE9BQU9DLEtBQS9DO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQTlCYyxtQkFBakIiLCJmaWxlIjoibm8tbm9kZWpzLW1vZHVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW1wb3J0VHlwZSBmcm9tICcuLi9jb3JlL2ltcG9ydFR5cGUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiByZXBvcnRJZk1pc3NpbmcoY29udGV4dCwgbm9kZSwgYWxsb3dlZCwgbmFtZSkge1xuICBpZiAoYWxsb3dlZC5pbmRleE9mKG5hbWUpID09PSAtMSAmJiBpbXBvcnRUeXBlKG5hbWUsIGNvbnRleHQpID09PSAnYnVpbHRpbicpIHtcbiAgICBjb250ZXh0LnJlcG9ydChub2RlLCAnRG8gbm90IGltcG9ydCBOb2RlLmpzIGJ1aWx0aW4gbW9kdWxlIFwiJyArIG5hbWUgKyAnXCInKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLW5vZGVqcy1tb2R1bGVzJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBhbGxvdzoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgYWxsb3dlZCA9IG9wdGlvbnMuYWxsb3cgfHwgW107XG5cbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlLCBub2RlKSA9PiB7XG4gICAgICByZXBvcnRJZk1pc3NpbmcoY29udGV4dCwgbm9kZSwgYWxsb3dlZCwgc291cmNlLnZhbHVlKTtcbiAgICB9LCB7IGNvbW1vbmpzOiB0cnVlIH0pO1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-relative-packages.js b/node_modules/eslint-plugin-import/lib/rules/no-relative-packages.js
index eac8475..26f3e59 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-relative-packages.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-relative-packages.js
@@ -1,5 +1,5 @@
'use strict';var _path = require('path');var _path2 = _interopRequireDefault(_path);
-var _readPkgUp = require('read-pkg-up');var _readPkgUp2 = _interopRequireDefault(_readPkgUp);
+var _readPkgUp = require('eslint-module-utils/readPkgUp');var _readPkgUp2 = _interopRequireDefault(_readPkgUp);
var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);
var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor);
@@ -7,7 +7,7 @@
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
function findNamedPackage(filePath) {
- var found = _readPkgUp2['default'].sync({ cwd: filePath, normalize: false });
+ var found = (0, _readPkgUp2['default'])({ cwd: filePath });
if (found.pkg && !found.pkg.name) {
return findNamedPackage(_path2['default'].join(found.path, '../..'));
}
@@ -58,4 +58,4 @@
create: function () {function create(context) {
return (0, _moduleVisitor2['default'])(function (source) {return checkImportForRelativePackage(context, source.value, source);}, context.options[0]);
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZWxhdGl2ZS1wYWNrYWdlcy5qcyJdLCJuYW1lcyI6WyJmaW5kTmFtZWRQYWNrYWdlIiwiZmlsZVBhdGgiLCJmb3VuZCIsInJlYWRQa2dVcCIsInN5bmMiLCJjd2QiLCJub3JtYWxpemUiLCJwa2ciLCJuYW1lIiwicGF0aCIsImpvaW4iLCJjaGVja0ltcG9ydEZvclJlbGF0aXZlUGFja2FnZSIsImNvbnRleHQiLCJpbXBvcnRQYXRoIiwibm9kZSIsInBvdGVudGlhbFZpb2xhdGlvblR5cGVzIiwiaW5kZXhPZiIsInJlc29sdmVkSW1wb3J0IiwicmVzb2x2ZWRDb250ZXh0IiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwiaW1wb3J0UGtnIiwiY29udGV4dFBrZyIsImltcG9ydEJhc2VOYW1lIiwiYmFzZW5hbWUiLCJpbXBvcnRSb290IiwiZGlybmFtZSIsInByb3BlclBhdGgiLCJyZWxhdGl2ZSIsInByb3BlckltcG9ydCIsInJlcG9ydCIsIm1lc3NhZ2UiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwic291cmNlIiwidmFsdWUiLCJvcHRpb25zIl0sIm1hcHBpbmdzIjoiYUFBQSw0QjtBQUNBLHdDOztBQUVBLHNEO0FBQ0Esa0U7QUFDQSxnRDtBQUNBLHFDOztBQUVBLFNBQVNBLGdCQUFULENBQTBCQyxRQUExQixFQUFvQztBQUNsQyxNQUFNQyxRQUFRQyx1QkFBVUMsSUFBVixDQUFlLEVBQUVDLEtBQUtKLFFBQVAsRUFBaUJLLFdBQVcsS0FBNUIsRUFBZixDQUFkO0FBQ0EsTUFBSUosTUFBTUssR0FBTixJQUFhLENBQUNMLE1BQU1LLEdBQU4sQ0FBVUMsSUFBNUIsRUFBa0M7QUFDaEMsV0FBT1IsaUJBQWlCUyxrQkFBS0MsSUFBTCxDQUFVUixNQUFNTyxJQUFoQixFQUFzQixPQUF0QixDQUFqQixDQUFQO0FBQ0Q7QUFDRCxTQUFPUCxLQUFQO0FBQ0Q7O0FBRUQsU0FBU1MsNkJBQVQsQ0FBdUNDLE9BQXZDLEVBQWdEQyxVQUFoRCxFQUE0REMsSUFBNUQsRUFBa0U7QUFDaEUsTUFBTUMsMEJBQTBCLENBQUMsUUFBRCxFQUFXLE9BQVgsRUFBb0IsU0FBcEIsQ0FBaEM7QUFDQSxNQUFJQSx3QkFBd0JDLE9BQXhCLENBQWdDLDZCQUFXSCxVQUFYLEVBQXVCRCxPQUF2QixDQUFoQyxNQUFxRSxDQUFDLENBQTFFLEVBQTZFO0FBQzNFO0FBQ0Q7O0FBRUQsTUFBTUssaUJBQWlCLDBCQUFRSixVQUFSLEVBQW9CRCxPQUFwQixDQUF2QjtBQUNBLE1BQU1NLGtCQUFrQk4sUUFBUU8sbUJBQVIsR0FBOEJQLFFBQVFPLG1CQUFSLEVBQTlCLEdBQThEUCxRQUFRUSxXQUFSLEVBQXRGOztBQUVBLE1BQUksQ0FBQ0gsY0FBRCxJQUFtQixDQUFDQyxlQUF4QixFQUF5QztBQUN2QztBQUNEOztBQUVELE1BQU1HLFlBQVlyQixpQkFBaUJpQixjQUFqQixDQUFsQjtBQUNBLE1BQU1LLGFBQWF0QixpQkFBaUJrQixlQUFqQixDQUFuQjs7QUFFQSxNQUFJRyxVQUFVZCxHQUFWLElBQWlCZSxXQUFXZixHQUE1QixJQUFtQ2MsVUFBVWQsR0FBVixDQUFjQyxJQUFkLEtBQXVCYyxXQUFXZixHQUFYLENBQWVDLElBQTdFLEVBQW1GO0FBQ2pGLFFBQU1lLGlCQUFpQmQsa0JBQUtlLFFBQUwsQ0FBY1gsVUFBZCxDQUF2QjtBQUNBLFFBQU1ZLGFBQWFoQixrQkFBS2lCLE9BQUwsQ0FBYUwsVUFBVVosSUFBdkIsQ0FBbkI7QUFDQSxRQUFNa0IsYUFBYWxCLGtCQUFLbUIsUUFBTCxDQUFjSCxVQUFkLEVBQTBCUixjQUExQixDQUFuQjtBQUNBLFFBQU1ZLGVBQWVwQixrQkFBS0MsSUFBTDtBQUNuQlcsY0FBVWQsR0FBVixDQUFjQyxJQURLO0FBRW5CQyxzQkFBS2lCLE9BQUwsQ0FBYUMsVUFBYixDQUZtQjtBQUduQkosdUJBQW1CZCxrQkFBS2UsUUFBTCxDQUFjQyxVQUFkLENBQW5CLEdBQStDLEVBQS9DLEdBQW9ERixjQUhqQyxDQUFyQjs7QUFLQVgsWUFBUWtCLE1BQVIsQ0FBZTtBQUNiaEIsZ0JBRGE7QUFFYmlCLHFGQUF1RUYsWUFBdkUsOEJBQXNHaEIsVUFBdEcsT0FGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRURtQixPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxZQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSxzQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsQ0FBQyx1Q0FBRCxDQUxKLEVBRFM7OztBQVNmQyxRQVRlLCtCQVNSM0IsT0FUUSxFQVNDO0FBQ2QsYUFBTyxnQ0FBYyxVQUFDNEIsTUFBRCxVQUFZN0IsOEJBQThCQyxPQUE5QixFQUF1QzRCLE9BQU9DLEtBQTlDLEVBQXFERCxNQUFyRCxDQUFaLEVBQWQsRUFBd0Y1QixRQUFROEIsT0FBUixDQUFnQixDQUFoQixDQUF4RixDQUFQO0FBQ0QsS0FYYyxtQkFBakIiLCJmaWxlIjoibm8tcmVsYXRpdmUtcGFja2FnZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCByZWFkUGtnVXAgZnJvbSAncmVhZC1wa2ctdXAnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IsIHsgbWFrZU9wdGlvbnNTY2hlbWEgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBmaW5kTmFtZWRQYWNrYWdlKGZpbGVQYXRoKSB7XG4gIGNvbnN0IGZvdW5kID0gcmVhZFBrZ1VwLnN5bmMoeyBjd2Q6IGZpbGVQYXRoLCBub3JtYWxpemU6IGZhbHNlIH0pO1xuICBpZiAoZm91bmQucGtnICYmICFmb3VuZC5wa2cubmFtZSkge1xuICAgIHJldHVybiBmaW5kTmFtZWRQYWNrYWdlKHBhdGguam9pbihmb3VuZC5wYXRoLCAnLi4vLi4nKSk7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5mdW5jdGlvbiBjaGVja0ltcG9ydEZvclJlbGF0aXZlUGFja2FnZShjb250ZXh0LCBpbXBvcnRQYXRoLCBub2RlKSB7XG4gIGNvbnN0IHBvdGVudGlhbFZpb2xhdGlvblR5cGVzID0gWydwYXJlbnQnLCAnaW5kZXgnLCAnc2libGluZyddO1xuICBpZiAocG90ZW50aWFsVmlvbGF0aW9uVHlwZXMuaW5kZXhPZihpbXBvcnRUeXBlKGltcG9ydFBhdGgsIGNvbnRleHQpKSA9PT0gLTEpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZXNvbHZlZEltcG9ydCA9IHJlc29sdmUoaW1wb3J0UGF0aCwgY29udGV4dCk7XG4gIGNvbnN0IHJlc29sdmVkQ29udGV4dCA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuXG4gIGlmICghcmVzb2x2ZWRJbXBvcnQgfHwgIXJlc29sdmVkQ29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGltcG9ydFBrZyA9IGZpbmROYW1lZFBhY2thZ2UocmVzb2x2ZWRJbXBvcnQpO1xuICBjb25zdCBjb250ZXh0UGtnID0gZmluZE5hbWVkUGFja2FnZShyZXNvbHZlZENvbnRleHQpO1xuXG4gIGlmIChpbXBvcnRQa2cucGtnICYmIGNvbnRleHRQa2cucGtnICYmIGltcG9ydFBrZy5wa2cubmFtZSAhPT0gY29udGV4dFBrZy5wa2cubmFtZSkge1xuICAgIGNvbnN0IGltcG9ydEJhc2VOYW1lID0gcGF0aC5iYXNlbmFtZShpbXBvcnRQYXRoKTtcbiAgICBjb25zdCBpbXBvcnRSb290ID0gcGF0aC5kaXJuYW1lKGltcG9ydFBrZy5wYXRoKTtcbiAgICBjb25zdCBwcm9wZXJQYXRoID0gcGF0aC5yZWxhdGl2ZShpbXBvcnRSb290LCByZXNvbHZlZEltcG9ydCk7XG4gICAgY29uc3QgcHJvcGVySW1wb3J0ID0gcGF0aC5qb2luKFxuICAgICAgaW1wb3J0UGtnLnBrZy5uYW1lLFxuICAgICAgcGF0aC5kaXJuYW1lKHByb3BlclBhdGgpLFxuICAgICAgaW1wb3J0QmFzZU5hbWUgPT09IHBhdGguYmFzZW5hbWUoaW1wb3J0Um9vdCkgPyAnJyA6IGltcG9ydEJhc2VOYW1lXG4gICAgKTtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlLFxuICAgICAgbWVzc2FnZTogYFJlbGF0aXZlIGltcG9ydCBmcm9tIGFub3RoZXIgcGFja2FnZSBpcyBub3QgYWxsb3dlZC4gVXNlIFxcYCR7cHJvcGVySW1wb3J0fVxcYCBpbnN0ZWFkIG9mIFxcYCR7aW1wb3J0UGF0aH1cXGBgLFxuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tcmVsYXRpdmUtcGFja2FnZXMnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW21ha2VPcHRpb25zU2NoZW1hKCldLFxuICB9LFxuXG4gIGNyZWF0ZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSkgPT4gY2hlY2tJbXBvcnRGb3JSZWxhdGl2ZVBhY2thZ2UoY29udGV4dCwgc291cmNlLnZhbHVlLCBzb3VyY2UpLCBjb250ZXh0Lm9wdGlvbnNbMF0pO1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZWxhdGl2ZS1wYWNrYWdlcy5qcyJdLCJuYW1lcyI6WyJmaW5kTmFtZWRQYWNrYWdlIiwiZmlsZVBhdGgiLCJmb3VuZCIsImN3ZCIsInBrZyIsIm5hbWUiLCJwYXRoIiwiam9pbiIsImNoZWNrSW1wb3J0Rm9yUmVsYXRpdmVQYWNrYWdlIiwiY29udGV4dCIsImltcG9ydFBhdGgiLCJub2RlIiwicG90ZW50aWFsVmlvbGF0aW9uVHlwZXMiLCJpbmRleE9mIiwicmVzb2x2ZWRJbXBvcnQiLCJyZXNvbHZlZENvbnRleHQiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJpbXBvcnRQa2ciLCJjb250ZXh0UGtnIiwiaW1wb3J0QmFzZU5hbWUiLCJiYXNlbmFtZSIsImltcG9ydFJvb3QiLCJkaXJuYW1lIiwicHJvcGVyUGF0aCIsInJlbGF0aXZlIiwicHJvcGVySW1wb3J0IiwicmVwb3J0IiwibWVzc2FnZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJzb3VyY2UiLCJ2YWx1ZSIsIm9wdGlvbnMiXSwibWFwcGluZ3MiOiJhQUFBLDRCO0FBQ0EsMEQ7O0FBRUEsc0Q7QUFDQSxrRTtBQUNBLGdEO0FBQ0EscUM7O0FBRUEsU0FBU0EsZ0JBQVQsQ0FBMEJDLFFBQTFCLEVBQW9DO0FBQ2xDLE1BQU1DLFFBQVEsNEJBQVUsRUFBRUMsS0FBS0YsUUFBUCxFQUFWLENBQWQ7QUFDQSxNQUFJQyxNQUFNRSxHQUFOLElBQWEsQ0FBQ0YsTUFBTUUsR0FBTixDQUFVQyxJQUE1QixFQUFrQztBQUNoQyxXQUFPTCxpQkFBaUJNLGtCQUFLQyxJQUFMLENBQVVMLE1BQU1JLElBQWhCLEVBQXNCLE9BQXRCLENBQWpCLENBQVA7QUFDRDtBQUNELFNBQU9KLEtBQVA7QUFDRDs7QUFFRCxTQUFTTSw2QkFBVCxDQUF1Q0MsT0FBdkMsRUFBZ0RDLFVBQWhELEVBQTREQyxJQUE1RCxFQUFrRTtBQUNoRSxNQUFNQywwQkFBMEIsQ0FBQyxRQUFELEVBQVcsT0FBWCxFQUFvQixTQUFwQixDQUFoQztBQUNBLE1BQUlBLHdCQUF3QkMsT0FBeEIsQ0FBZ0MsNkJBQVdILFVBQVgsRUFBdUJELE9BQXZCLENBQWhDLE1BQXFFLENBQUMsQ0FBMUUsRUFBNkU7QUFDM0U7QUFDRDs7QUFFRCxNQUFNSyxpQkFBaUIsMEJBQVFKLFVBQVIsRUFBb0JELE9BQXBCLENBQXZCO0FBQ0EsTUFBTU0sa0JBQWtCTixRQUFRTyxtQkFBUixHQUE4QlAsUUFBUU8sbUJBQVIsRUFBOUIsR0FBOERQLFFBQVFRLFdBQVIsRUFBdEY7O0FBRUEsTUFBSSxDQUFDSCxjQUFELElBQW1CLENBQUNDLGVBQXhCLEVBQXlDO0FBQ3ZDO0FBQ0Q7O0FBRUQsTUFBTUcsWUFBWWxCLGlCQUFpQmMsY0FBakIsQ0FBbEI7QUFDQSxNQUFNSyxhQUFhbkIsaUJBQWlCZSxlQUFqQixDQUFuQjs7QUFFQSxNQUFJRyxVQUFVZCxHQUFWLElBQWlCZSxXQUFXZixHQUE1QixJQUFtQ2MsVUFBVWQsR0FBVixDQUFjQyxJQUFkLEtBQXVCYyxXQUFXZixHQUFYLENBQWVDLElBQTdFLEVBQW1GO0FBQ2pGLFFBQU1lLGlCQUFpQmQsa0JBQUtlLFFBQUwsQ0FBY1gsVUFBZCxDQUF2QjtBQUNBLFFBQU1ZLGFBQWFoQixrQkFBS2lCLE9BQUwsQ0FBYUwsVUFBVVosSUFBdkIsQ0FBbkI7QUFDQSxRQUFNa0IsYUFBYWxCLGtCQUFLbUIsUUFBTCxDQUFjSCxVQUFkLEVBQTBCUixjQUExQixDQUFuQjtBQUNBLFFBQU1ZLGVBQWVwQixrQkFBS0MsSUFBTDtBQUNuQlcsY0FBVWQsR0FBVixDQUFjQyxJQURLO0FBRW5CQyxzQkFBS2lCLE9BQUwsQ0FBYUMsVUFBYixDQUZtQjtBQUduQkosdUJBQW1CZCxrQkFBS2UsUUFBTCxDQUFjQyxVQUFkLENBQW5CLEdBQStDLEVBQS9DLEdBQW9ERixjQUhqQyxDQUFyQjs7QUFLQVgsWUFBUWtCLE1BQVIsQ0FBZTtBQUNiaEIsZ0JBRGE7QUFFYmlCLHFGQUF1RUYsWUFBdkUsOEJBQXNHaEIsVUFBdEcsT0FGYSxFQUFmOztBQUlEO0FBQ0Y7O0FBRURtQixPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxZQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSxzQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsQ0FBQyx1Q0FBRCxDQUxKLEVBRFM7OztBQVNmQyxRQVRlLCtCQVNSM0IsT0FUUSxFQVNDO0FBQ2QsYUFBTyxnQ0FBYyxVQUFDNEIsTUFBRCxVQUFZN0IsOEJBQThCQyxPQUE5QixFQUF1QzRCLE9BQU9DLEtBQTlDLEVBQXFERCxNQUFyRCxDQUFaLEVBQWQsRUFBd0Y1QixRQUFROEIsT0FBUixDQUFnQixDQUFoQixDQUF4RixDQUFQO0FBQ0QsS0FYYyxtQkFBakIiLCJmaWxlIjoibm8tcmVsYXRpdmUtcGFja2FnZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCByZWFkUGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZWFkUGtnVXAnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IsIHsgbWFrZU9wdGlvbnNTY2hlbWEgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBmaW5kTmFtZWRQYWNrYWdlKGZpbGVQYXRoKSB7XG4gIGNvbnN0IGZvdW5kID0gcmVhZFBrZ1VwKHsgY3dkOiBmaWxlUGF0aCB9KTtcbiAgaWYgKGZvdW5kLnBrZyAmJiAhZm91bmQucGtnLm5hbWUpIHtcbiAgICByZXR1cm4gZmluZE5hbWVkUGFja2FnZShwYXRoLmpvaW4oZm91bmQucGF0aCwgJy4uLy4uJykpO1xuICB9XG4gIHJldHVybiBmb3VuZDtcbn1cblxuZnVuY3Rpb24gY2hlY2tJbXBvcnRGb3JSZWxhdGl2ZVBhY2thZ2UoY29udGV4dCwgaW1wb3J0UGF0aCwgbm9kZSkge1xuICBjb25zdCBwb3RlbnRpYWxWaW9sYXRpb25UeXBlcyA9IFsncGFyZW50JywgJ2luZGV4JywgJ3NpYmxpbmcnXTtcbiAgaWYgKHBvdGVudGlhbFZpb2xhdGlvblR5cGVzLmluZGV4T2YoaW1wb3J0VHlwZShpbXBvcnRQYXRoLCBjb250ZXh0KSkgPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRJbXBvcnQgPSByZXNvbHZlKGltcG9ydFBhdGgsIGNvbnRleHQpO1xuICBjb25zdCByZXNvbHZlZENvbnRleHQgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICBpZiAoIXJlc29sdmVkSW1wb3J0IHx8ICFyZXNvbHZlZENvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbXBvcnRQa2cgPSBmaW5kTmFtZWRQYWNrYWdlKHJlc29sdmVkSW1wb3J0KTtcbiAgY29uc3QgY29udGV4dFBrZyA9IGZpbmROYW1lZFBhY2thZ2UocmVzb2x2ZWRDb250ZXh0KTtcblxuICBpZiAoaW1wb3J0UGtnLnBrZyAmJiBjb250ZXh0UGtnLnBrZyAmJiBpbXBvcnRQa2cucGtnLm5hbWUgIT09IGNvbnRleHRQa2cucGtnLm5hbWUpIHtcbiAgICBjb25zdCBpbXBvcnRCYXNlTmFtZSA9IHBhdGguYmFzZW5hbWUoaW1wb3J0UGF0aCk7XG4gICAgY29uc3QgaW1wb3J0Um9vdCA9IHBhdGguZGlybmFtZShpbXBvcnRQa2cucGF0aCk7XG4gICAgY29uc3QgcHJvcGVyUGF0aCA9IHBhdGgucmVsYXRpdmUoaW1wb3J0Um9vdCwgcmVzb2x2ZWRJbXBvcnQpO1xuICAgIGNvbnN0IHByb3BlckltcG9ydCA9IHBhdGguam9pbihcbiAgICAgIGltcG9ydFBrZy5wa2cubmFtZSxcbiAgICAgIHBhdGguZGlybmFtZShwcm9wZXJQYXRoKSxcbiAgICAgIGltcG9ydEJhc2VOYW1lID09PSBwYXRoLmJhc2VuYW1lKGltcG9ydFJvb3QpID8gJycgOiBpbXBvcnRCYXNlTmFtZVxuICAgICk7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZSxcbiAgICAgIG1lc3NhZ2U6IGBSZWxhdGl2ZSBpbXBvcnQgZnJvbSBhbm90aGVyIHBhY2thZ2UgaXMgbm90IGFsbG93ZWQuIFVzZSBcXGAke3Byb3BlckltcG9ydH1cXGAgaW5zdGVhZCBvZiBcXGAke2ltcG9ydFBhdGh9XFxgYCxcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXJlbGF0aXZlLXBhY2thZ2VzJyksXG4gICAgfSxcbiAgICBzY2hlbWE6IFttYWtlT3B0aW9uc1NjaGVtYSgpXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKChzb3VyY2UpID0+IGNoZWNrSW1wb3J0Rm9yUmVsYXRpdmVQYWNrYWdlKGNvbnRleHQsIHNvdXJjZS52YWx1ZSwgc291cmNlKSwgY29udGV4dC5vcHRpb25zWzBdKTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-restricted-paths.js b/node_modules/eslint-plugin-import/lib/rules/no-restricted-paths.js
index c961fb7..0750f03 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-restricted-paths.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-restricted-paths.js
@@ -2,6 +2,8 @@
var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);
var _moduleVisitor = require('eslint-module-utils/moduleVisitor');var _moduleVisitor2 = _interopRequireDefault(_moduleVisitor);
+var _isGlob = require('is-glob');var _isGlob2 = _interopRequireDefault(_isGlob);
+var _minimatch = require('minimatch');var _minimatch2 = _interopRequireDefault(_minimatch);
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);
var _importType = require('../core/importType');var _importType2 = _interopRequireDefault(_importType);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
@@ -56,6 +58,10 @@
var matchingZones = restrictedPaths.filter(function (zone) {
var targetPath = _path2['default'].resolve(basePath, zone.target);
+ if ((0, _isGlob2['default'])(targetPath)) {
+ return (0, _minimatch2['default'])(currentFilename, targetPath);
+ }
+
return containsPath(currentFilename, targetPath);
});
@@ -72,18 +78,59 @@
}
- var zoneExceptions = matchingZones.map(function (zone) {
- var exceptionPaths = zone.except || [];
- var absoluteFrom = _path2['default'].resolve(basePath, zone.from);
- var absoluteExceptionPaths = exceptionPaths.map(function (exceptionPath) {return _path2['default'].resolve(absoluteFrom, exceptionPath);});
- var hasValidExceptionPaths = absoluteExceptionPaths.
- every(function (absoluteExceptionPath) {return isValidExceptionPath(absoluteFrom, absoluteExceptionPath);});
+ function reportInvalidExceptionGlob(node) {
+ context.report({
+ node: node,
+ message: 'Restricted path exceptions must be glob patterns when`from` is a glob pattern' });
- return {
- absoluteExceptionPaths: absoluteExceptionPaths,
- hasValidExceptionPaths: hasValidExceptionPaths };
+ }
- });
+ var makePathValidator = function () {function makePathValidator(zoneFrom) {var zoneExcept = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
+ var absoluteFrom = _path2['default'].resolve(basePath, zoneFrom);
+ var isGlobPattern = (0, _isGlob2['default'])(zoneFrom);
+ var isPathRestricted = void 0;
+ var hasValidExceptions = void 0;
+ var isPathException = void 0;
+ var reportInvalidException = void 0;
+
+ if (isGlobPattern) {
+ var mm = new _minimatch.Minimatch(absoluteFrom);
+ isPathRestricted = function () {function isPathRestricted(absoluteImportPath) {return mm.match(absoluteImportPath);}return isPathRestricted;}();
+
+ hasValidExceptions = zoneExcept.every(_isGlob2['default']);
+
+ if (hasValidExceptions) {
+ var exceptionsMm = zoneExcept.map(function (except) {return new _minimatch.Minimatch(except);});
+ isPathException = function () {function isPathException(absoluteImportPath) {return exceptionsMm.some(function (mm) {return mm.match(absoluteImportPath);});}return isPathException;}();
+ }
+
+ reportInvalidException = reportInvalidExceptionGlob;
+ } else {
+ isPathRestricted = function () {function isPathRestricted(absoluteImportPath) {return containsPath(absoluteImportPath, absoluteFrom);}return isPathRestricted;}();
+
+ var absoluteExceptionPaths = zoneExcept.
+ map(function (exceptionPath) {return _path2['default'].resolve(absoluteFrom, exceptionPath);});
+ hasValidExceptions = absoluteExceptionPaths.
+ every(function (absoluteExceptionPath) {return isValidExceptionPath(absoluteFrom, absoluteExceptionPath);});
+
+ if (hasValidExceptions) {
+ isPathException = function () {function isPathException(absoluteImportPath) {return absoluteExceptionPaths.some(
+ function (absoluteExceptionPath) {return containsPath(absoluteImportPath, absoluteExceptionPath);});}return isPathException;}();
+
+ }
+
+ reportInvalidException = reportInvalidExceptionPath;
+ }
+
+ return {
+ isPathRestricted: isPathRestricted,
+ hasValidExceptions: hasValidExceptions,
+ isPathException: isPathException,
+ reportInvalidException: reportInvalidException };
+
+ }return makePathValidator;}();
+
+ var validators = [];
function checkForRestrictedImportPath(importPath, node) {
var absoluteImportPath = (0, _resolve2['default'])(importPath, context);
@@ -93,22 +140,27 @@
}
matchingZones.forEach(function (zone, index) {
- var absoluteFrom = _path2['default'].resolve(basePath, zone.from);
+ if (!validators[index]) {
+ validators[index] = makePathValidator(zone.from, zone.except);
+ }var _validators$index =
- if (!containsPath(absoluteImportPath, absoluteFrom)) {
- return;
- }var _zoneExceptions$index =
- zoneExceptions[index],hasValidExceptionPaths = _zoneExceptions$index.hasValidExceptionPaths,absoluteExceptionPaths = _zoneExceptions$index.absoluteExceptionPaths;
- if (!hasValidExceptionPaths) {
- reportInvalidExceptionPath(node);
+
+
+
+ validators[index],isPathRestricted = _validators$index.isPathRestricted,hasValidExceptions = _validators$index.hasValidExceptions,isPathException = _validators$index.isPathException,reportInvalidException = _validators$index.reportInvalidException;
+
+ if (!isPathRestricted(absoluteImportPath)) {
return;
}
- var pathIsExcepted = absoluteExceptionPaths.
- some(function (absoluteExceptionPath) {return containsPath(absoluteImportPath, absoluteExceptionPath);});
+ if (!hasValidExceptions) {
+ reportInvalidException(node);
+ return;
+ }
+ var pathIsExcepted = isPathException(absoluteImportPath);
if (pathIsExcepted) {
return;
}
@@ -125,4 +177,4 @@
checkForRestrictedImportPath(source.value, source);
}, { commonjs: true });
}return noRestrictedPaths;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiem9uZXMiLCJtaW5JdGVtcyIsIml0ZW1zIiwiZnJvbSIsImV4Y2VwdCIsInVuaXF1ZUl0ZW1zIiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwidGFyZ2V0UGF0aCIsInJlc29sdmUiLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJ6b25lRXhjZXB0aW9ucyIsIm1hcCIsImV4Y2VwdGlvblBhdGhzIiwiYWJzb2x1dGVGcm9tIiwiYWJzb2x1dGVFeGNlcHRpb25QYXRocyIsImV4Y2VwdGlvblBhdGgiLCJoYXNWYWxpZEV4Y2VwdGlvblBhdGhzIiwiZXZlcnkiLCJjaGVja0ZvclJlc3RyaWN0ZWRJbXBvcnRQYXRoIiwiaW1wb3J0UGF0aCIsImFic29sdXRlSW1wb3J0UGF0aCIsImZvckVhY2giLCJpbmRleCIsInBhdGhJc0V4Y2VwdGVkIiwic29tZSIsImRhdGEiLCJzb3VyY2UiLCJ2YWx1ZSIsImNv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TyxFQUFmOztBQUtELFNBMUJEO0FBMkJEOztBQUVELGFBQU8sZ0NBQWMsVUFBQ08sTUFBRCxFQUFZO0FBQy9CUixxQ0FBNkJRLE9BQU9DLEtBQXBDLEVBQTJDRCxNQUEzQztBQUNELE9BRk0sRUFFSixFQUFFRSxVQUFVLElBQVosRUFGSSxDQUFQO0FBR0QsS0E1RUQsT0FBaUJ2QyxpQkFBakIsSUF0Q2UsRUFBakIiLCJmaWxlIjoibm8tcmVzdHJpY3RlZC1wYXRocy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcblxuY29uc3QgY29udGFpbnNQYXRoID0gKGZpbGVwYXRoLCB0YXJnZXQpID0+IHtcbiAgY29uc3QgcmVsYXRpdmUgPSBwYXRoLnJlbGF0aXZlKHRhcmdldCwgZmlsZXBhdGgpO1xuICByZXR1cm4gcmVsYXRpdmUgPT09ICcnIHx8ICFyZWxhdGl2ZS5zdGFydHNXaXRoKCcuLicpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1yZXN0cmljdGVkLXBhdGhzJyksXG4gICAgfSxcblxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHpvbmVzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHRhcmdldDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgICAgICAgIGZyb206IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICBleGNlcHQ6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhc2VQYXRoOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIG5vUmVzdHJpY3RlZFBhdGhzKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IHJlc3RyaWN0ZWRQYXRocyA9IG9wdGlvbnMuem9uZXMgfHwgW107XG4gICAgY29uc3QgYmFzZVBhdGggPSBvcHRpb25zLmJhc2VQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgY3VycmVudEZpbGVuYW1lID0gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lID8gY29udGV4dC5nZXRQaHlzaWNhbEZpbGVuYW1lKCkgOiBjb250ZXh0LmdldEZpbGVuYW1lKCk7XG4gICAgY29uc3QgbWF0Y2hpbmdab25lcyA9IHJlc3RyaWN0ZWRQYXRocy5maWx0ZXIoKHpvbmUpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldFBhdGggPSBwYXRoLnJlc29sdmUoYmFzZVBhdGgsIHpvbmUudGFyZ2V0KTtcblxuICAgICAgcmV0dXJuIGNvbnRhaW5zUGF0aChjdXJyZW50RmlsZW5hbWUsIHRhcmdldFBhdGgpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gaXNWYWxpZEV4Y2VwdGlvblBhdGgoYWJzb2x1dGVGcm9tUGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKSB7XG4gICAgICBjb25zdCByZWxhdGl2ZUV4Y2VwdGlvblBhdGggPSBwYXRoLnJlbGF0aXZlKGFic29sdXRlRnJvbVBhdGgsIGFic29sdXRlRXhjZXB0aW9uUGF0aCk7XG5cbiAgICAgIHJldHVybiBpbXBvcnRUeXBlKHJlbGF0aXZlRXhjZXB0aW9uUGF0aCwgY29udGV4dCkgIT09ICdwYXJlbnQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlcG9ydEludmFsaWRFeGNlcHRpb25QYXRoKG5vZGUpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3RyaWN0ZWQgcGF0aCBleGNlcHRpb25zIG11c3QgYmUgZGVzY2VuZGFudHMgb2YgdGhlIGNvbmZpZ3VyZWQgYGZyb21gIHBhdGggZm9yIHRoYXQgem9uZS4nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgem9uZUV4Y2VwdGlvbnMgPSBtYXRjaGluZ1pvbmVzLm1hcCgoem9uZSkgPT4ge1xuICAgICAgY29uc3QgZXhjZXB0aW9uUGF0aHMgPSB6b25lLmV4Y2VwdCB8fCBbXTtcbiAgICAgIGNvbnN0IGFic29sdXRlRnJvbSA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgem9uZS5mcm9tKTtcbiAgICAgIGNvbnN0IGFic29sdXRlRXhjZXB0aW9uUGF0aHMgPSBleGNlcHRpb25QYXRocy5tYXAoKGV4Y2VwdGlvblBhdGgpID0+IHBhdGgucmVzb2x2ZShhYnNvbHV0ZUZyb20sIGV4Y2VwdGlvblBhdGgpKTtcbiAgICAgIGNvbnN0IGhhc1ZhbGlkRXhjZXB0aW9uUGF0aHMgPSBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzXG4gICAgICAgIC5ldmVyeSgoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBpc1ZhbGlkRXhjZXB0aW9uUGF0aChhYnNvbHV0ZUZyb20sIGFic29sdXRlRXhjZXB0aW9uUGF0aCkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzLFxuICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvblBhdGhzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoaW1wb3J0UGF0aCwgbm9kZSkge1xuICAgICAgY29uc3QgYWJzb2x1dGVJbXBvcnRQYXRoID0gcmVzb2x2ZShpbXBvcnRQYXRoLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFhYnNvbHV0ZUltcG9ydFBhdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGluZ1pvbmVzLmZvckVhY2goKHpvbmUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGFic29sdXRlRnJvbSA9IHBhdGgucmVzb2x2ZShiYXNlUGF0aCwgem9uZS5mcm9tKTtcblxuICAgICAgICBpZiAoIWNvbnRhaW5zUGF0aChhYnNvbHV0ZUltcG9ydFBhdGgsIGFic29sdXRlRnJvbSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGhhc1ZhbGlkRXhjZXB0aW9uUGF0aHMsIGFic29sdXRlRXhjZXB0aW9uUGF0aHMgfSA9IHpvbmVFeGNlcHRpb25zW2luZGV4XTtcblxuICAgICAgICBpZiAoIWhhc1ZhbGlkRXhjZXB0aW9uUGF0aHMpIHtcbiAgICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aChub2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoSXNFeGNlcHRlZCA9IGFic29sdXRlRXhjZXB0aW9uUGF0aHNcbiAgICAgICAgICAuc29tZSgoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpKTtcblxuICAgICAgICBpZiAocGF0aElzRXhjZXB0ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBwYXRoIFwie3tpbXBvcnRQYXRofX1cIiBpbXBvcnRlZCBpbiByZXN0cmljdGVkIHpvbmUuJHt6b25lLm1lc3NhZ2UgPyBgICR7em9uZS5tZXNzYWdlfWAgOiAnJ31gLFxuICAgICAgICAgIGRhdGE6IHsgaW1wb3J0UGF0aCB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKChzb3VyY2UpID0+IHtcbiAgICAgIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoc291cmNlLnZhbHVlLCBzb3VyY2UpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1yZXN0cmljdGVkLXBhdGhzLmpzIl0sIm5hbWVzIjpbImNvbnRhaW5zUGF0aCIsImZpbGVwYXRoIiwidGFyZ2V0IiwicmVsYXRpdmUiLCJwYXRoIiwic3RhcnRzV2l0aCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJwcm9wZXJ0aWVzIiwiem9uZXMiLCJtaW5JdGVtcyIsIml0ZW1zIiwiZnJvbSIsImV4Y2VwdCIsInVuaXF1ZUl0ZW1zIiwibWVzc2FnZSIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwiYmFzZVBhdGgiLCJjcmVhdGUiLCJub1Jlc3RyaWN0ZWRQYXRocyIsImNvbnRleHQiLCJvcHRpb25zIiwicmVzdHJpY3RlZFBhdGhzIiwicHJvY2VzcyIsImN3ZCIsImN1cnJlbnRGaWxlbmFtZSIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsIm1hdGNoaW5nWm9uZXMiLCJmaWx0ZXIiLCJ6b25lIiwidGFyZ2V0UGF0aCIsInJlc29sdmUiLCJpc1ZhbGlkRXhjZXB0aW9uUGF0aCIsImFic29sdXRlRnJvbVBhdGgiLCJhYnNvbHV0ZUV4Y2VwdGlvblBhdGgiLCJyZWxhdGl2ZUV4Y2VwdGlvblBhdGgiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uUGF0aCIsIm5vZGUiLCJyZXBvcnQiLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYiIsIm1ha2VQYXRoVmFsaWRhdG9yIiwiem9uZUZyb20iLCJ6b25lRXhjZXB0IiwiYWJzb2x1dGVGcm9tIiwiaXNHbG9iUGF0dGVybiIsImlzUGF0aFJlc3RyaWN0ZWQiLCJoYXNWYWxpZEV4Y2VwdGlvbnMiLCJpc1BhdGhFeGNlcHRpb24iLCJyZXBvcnRJbnZhbGlkRXhjZXB0aW9uIiwibW0iLCJNaW5pbWF0Y2giLCJhYnNvbHV0ZUltcG9ydFBhdGgiLCJtYXRjaCIsImV2ZXJ5IiwiaXNHbG9iIiwiZXhjZXB0aW9uc01tIiwibWFwIiwic29tZSIsImFic29sdXRlRXhjZXB0aW9uUGF0aHMiLCJleGNlcHRpb25QYXRoIiwidmFsaWRhdG9ycyIsImNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgiLCJpbXBvcnRQYXRoIiwiZm9yRWFjaCIsImluZGV4IiwicGF0aElzRXhjZXB0ZWQiLCJkYXRhIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyJdLCJtYXBwaW5ncyI6ImFBQUEsNEI7O0FBRUEsc0Q7QUFDQSxrRTtBQUNBLGlDO0FBQ0Esc0M7QUFDQSxxQztBQUNBLGdEOztBQUVBLElBQU1BLGVBQWUsU0FBZkEsWUFBZSxDQUFDQyxRQUFELEVBQVdDLE1BQVgsRUFBc0I7QUFDekMsTUFBTUMsV0FBV0Msa0JBQUtELFFBQUwsQ0FBY0QsTUFBZCxFQUFzQkQsUUFBdEIsQ0FBakI7QUFDQSxTQUFPRSxhQUFhLEVBQWIsSUFBbUIsQ0FBQ0EsU0FBU0UsVUFBVCxDQUFvQixJQUFwQixDQUEzQjtBQUNELENBSEQ7O0FBS0FDLE9BQU9DLE9BQVAsR0FBaUI7QUFDZkMsUUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxXQUFLLDBCQUFRLHFCQUFSLENBREQsRUFGRjs7O0FBTUpDLFlBQVE7QUFDTjtBQUNFSCxZQUFNLFFBRFI7QUFFRUksa0JBQVk7QUFDVkMsZUFBTztBQUNMTCxnQkFBTSxPQUREO0FBRUxNLG9CQUFVLENBRkw7QUFHTEMsaUJBQU87QUFDTFAsa0JBQU0sUUFERDtBQUVMSSx3QkFBWTtBQUNWWCxzQkFBUSxFQUFFTyxNQUFNLFFBQVIsRUFERTtBQUVWUSxvQkFBTSxFQUFFUixNQUFNLFFBQVIsRUFGSTtBQUdWUyxzQkFBUTtBQUNOVCxzQkFBTSxPQURBO0FBRU5PLHVCQUFPO0FBQ0xQLHdCQUFNLFFBREQsRUFGRDs7QUFLTlUsNkJBQWEsSUFMUCxFQUhFOztBQVVWQyx1QkFBUyxFQUFFWCxNQUFNLFFBQVIsRUFWQyxFQUZQOztBQWNMWSxrQ0FBc0IsS0FkakIsRUFIRixFQURHOzs7QUFxQlZDLGtC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LHFCQVFuQ0EsZUFSbUMsQ0FTbkNDLHNCQVRtQyxxQkFTbkNBLHNCQVRtQzs7QUFZckMsY0FBSSxDQUFDSCxpQkFBaUJNLGtCQUFqQixDQUFMLEVBQTJDO0FBQ3pDO0FBQ0Q7O0FBRUQsY0FBSSxDQUFDTCxrQkFBTCxFQUF5QjtBQUN2QkUsbUNBQXVCWCxJQUF2QjtBQUNBO0FBQ0Q7O0FBRUQsY0FBTTRCLGlCQUFpQmxCLGdCQUFnQkksa0JBQWhCLENBQXZCO0FBQ0EsY0FBSWMsY0FBSixFQUFvQjtBQUNsQjtBQUNEOztBQUVEOUMsa0JBQVFtQixNQUFSLENBQWU7QUFDYkQsc0JBRGE7QUFFYnZCLHdGQUF5RWUsS0FBS2YsT0FBTCxnQkFBbUJlLEtBQUtmLE9BQXhCLElBQW9DLEVBQTdHLENBRmE7QUFHYm9ELGtCQUFNLEVBQUVKLHNCQUFGLEVBSE8sRUFBZjs7QUFLRCxTQS9CRDtBQWdDRDs7QUFFRCxhQUFPLGdDQUFjLFVBQUNLLE1BQUQsRUFBWTtBQUMvQk4scUNBQTZCTSxPQUFPQyxLQUFwQyxFQUEyQ0QsTUFBM0M7QUFDRCxPQUZNLEVBRUosRUFBRUUsVUFBVSxJQUFaLEVBRkksQ0FBUDtBQUdELEtBOUhELE9BQWlCbkQsaUJBQWpCLElBdENlLEVBQWpCIiwiZmlsZSI6Im5vLXJlc3RyaWN0ZWQtcGF0aHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHJlc29sdmUgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvbW9kdWxlVmlzaXRvcic7XG5pbXBvcnQgaXNHbG9iIGZyb20gJ2lzLWdsb2InO1xuaW1wb3J0IHsgTWluaW1hdGNoLCBkZWZhdWx0IGFzIG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5cbmNvbnN0IGNvbnRhaW5zUGF0aCA9IChmaWxlcGF0aCwgdGFyZ2V0KSA9PiB7XG4gIGNvbnN0IHJlbGF0aXZlID0gcGF0aC5yZWxhdGl2ZSh0YXJnZXQsIGZpbGVwYXRoKTtcbiAgcmV0dXJuIHJlbGF0aXZlID09PSAnJyB8fCAhcmVsYXRpdmUuc3RhcnRzV2l0aCgnLi4nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnbm8tcmVzdHJpY3RlZC1wYXRocycpLFxuICAgIH0sXG5cbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB6b25lczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgICAgICBmcm9tOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgICAgZXhjZXB0OiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYXNlUGF0aDogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICB9LFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG5cbiAgY3JlYXRlOiBmdW5jdGlvbiBub1Jlc3RyaWN0ZWRQYXRocyhjb250ZXh0KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcbiAgICBjb25zdCByZXN0cmljdGVkUGF0aHMgPSBvcHRpb25zLnpvbmVzIHx8IFtdO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gb3B0aW9ucy5iYXNlUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGN1cnJlbnRGaWxlbmFtZSA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuICAgIGNvbnN0IG1hdGNoaW5nWm9uZXMgPSByZXN0cmljdGVkUGF0aHMuZmlsdGVyKCh6b25lKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXRQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VQYXRoLCB6b25lLnRhcmdldCk7XG5cbiAgICAgIGlmIChpc0dsb2IodGFyZ2V0UGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIG1pbmltYXRjaChjdXJyZW50RmlsZW5hbWUsIHRhcmdldFBhdGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGFpbnNQYXRoKGN1cnJlbnRGaWxlbmFtZSwgdGFyZ2V0UGF0aCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkRXhjZXB0aW9uUGF0aChhYnNvbHV0ZUZyb21QYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpIHtcbiAgICAgIGNvbnN0IHJlbGF0aXZlRXhjZXB0aW9uUGF0aCA9IHBhdGgucmVsYXRpdmUoYWJzb2x1dGVGcm9tUGF0aCwgYWJzb2x1dGVFeGNlcHRpb25QYXRoKTtcblxuICAgICAgcmV0dXJuIGltcG9ydFR5cGUocmVsYXRpdmVFeGNlcHRpb25QYXRoLCBjb250ZXh0KSAhPT0gJ3BhcmVudCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVwb3J0SW52YWxpZEV4Y2VwdGlvblBhdGgobm9kZSkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlLFxuICAgICAgICBtZXNzYWdlOiAnUmVzdHJpY3RlZCBwYXRoIGV4Y2VwdGlvbnMgbXVzdCBiZSBkZXNjZW5kYW50cyBvZiB0aGUgY29uZmlndXJlZCBgZnJvbWAgcGF0aCBmb3IgdGhhdCB6b25lLicsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBvcnRJbnZhbGlkRXhjZXB0aW9uR2xvYihub2RlKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdSZXN0cmljdGVkIHBhdGggZXhjZXB0aW9ucyBtdXN0IGJlIGdsb2IgcGF0dGVybnMgd2hlbmBmcm9tYCBpcyBhIGdsb2IgcGF0dGVybicsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBtYWtlUGF0aFZhbGlkYXRvciA9ICh6b25lRnJvbSwgem9uZUV4Y2VwdCA9IFtdKSA9PiB7XG4gICAgICBjb25zdCBhYnNvbHV0ZUZyb20gPSBwYXRoLnJlc29sdmUoYmFzZVBhdGgsIHpvbmVGcm9tKTtcbiAgICAgIGNvbnN0IGlzR2xvYlBhdHRlcm4gPSBpc0dsb2Ioem9uZUZyb20pO1xuICAgICAgbGV0IGlzUGF0aFJlc3RyaWN0ZWQ7XG4gICAgICBsZXQgaGFzVmFsaWRFeGNlcHRpb25zO1xuICAgICAgbGV0IGlzUGF0aEV4Y2VwdGlvbjtcbiAgICAgIGxldCByZXBvcnRJbnZhbGlkRXhjZXB0aW9uO1xuXG4gICAgICBpZiAoaXNHbG9iUGF0dGVybikge1xuICAgICAgICBjb25zdCBtbSA9IG5ldyBNaW5pbWF0Y2goYWJzb2x1dGVGcm9tKTtcbiAgICAgICAgaXNQYXRoUmVzdHJpY3RlZCA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IG1tLm1hdGNoKGFic29sdXRlSW1wb3J0UGF0aCk7XG5cbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zID0gem9uZUV4Y2VwdC5ldmVyeShpc0dsb2IpO1xuXG4gICAgICAgIGlmIChoYXNWYWxpZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgICBjb25zdCBleGNlcHRpb25zTW0gPSB6b25lRXhjZXB0Lm1hcCgoZXhjZXB0KSA9PiBuZXcgTWluaW1hdGNoKGV4Y2VwdCkpO1xuICAgICAgICAgIGlzUGF0aEV4Y2VwdGlvbiA9IChhYnNvbHV0ZUltcG9ydFBhdGgpID0+IGV4Y2VwdGlvbnNNbS5zb21lKChtbSkgPT4gbW0ubWF0Y2goYWJzb2x1dGVJbXBvcnRQYXRoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uID0gcmVwb3J0SW52YWxpZEV4Y2VwdGlvbkdsb2I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc1BhdGhSZXN0cmljdGVkID0gKGFic29sdXRlSW1wb3J0UGF0aCkgPT4gY29udGFpbnNQYXRoKGFic29sdXRlSW1wb3J0UGF0aCwgYWJzb2x1dGVGcm9tKTtcblxuICAgICAgICBjb25zdCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzID0gem9uZUV4Y2VwdFxuICAgICAgICAgIC5tYXAoKGV4Y2VwdGlvblBhdGgpID0+IHBhdGgucmVzb2x2ZShhYnNvbHV0ZUZyb20sIGV4Y2VwdGlvblBhdGgpKTtcbiAgICAgICAgaGFzVmFsaWRFeGNlcHRpb25zID0gYWJzb2x1dGVFeGNlcHRpb25QYXRoc1xuICAgICAgICAgIC5ldmVyeSgoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBpc1ZhbGlkRXhjZXB0aW9uUGF0aChhYnNvbHV0ZUZyb20sIGFic29sdXRlRXhjZXB0aW9uUGF0aCkpO1xuXG4gICAgICAgIGlmIChoYXNWYWxpZEV4Y2VwdGlvbnMpIHtcbiAgICAgICAgICBpc1BhdGhFeGNlcHRpb24gPSAoYWJzb2x1dGVJbXBvcnRQYXRoKSA9PiBhYnNvbHV0ZUV4Y2VwdGlvblBhdGhzLnNvbWUoXG4gICAgICAgICAgICAoYWJzb2x1dGVFeGNlcHRpb25QYXRoKSA9PiBjb250YWluc1BhdGgoYWJzb2x1dGVJbXBvcnRQYXRoLCBhYnNvbHV0ZUV4Y2VwdGlvblBhdGgpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uID0gcmVwb3J0SW52YWxpZEV4Y2VwdGlvblBhdGg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzUGF0aFJlc3RyaWN0ZWQsXG4gICAgICAgIGhhc1ZhbGlkRXhjZXB0aW9ucyxcbiAgICAgICAgaXNQYXRoRXhjZXB0aW9uLFxuICAgICAgICByZXBvcnRJbnZhbGlkRXhjZXB0aW9uLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gY2hlY2tGb3JSZXN0cmljdGVkSW1wb3J0UGF0aChpbXBvcnRQYXRoLCBub2RlKSB7XG4gICAgICBjb25zdCBhYnNvbHV0ZUltcG9ydFBhdGggPSByZXNvbHZlKGltcG9ydFBhdGgsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoIWFic29sdXRlSW1wb3J0UGF0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG1hdGNoaW5nWm9uZXMuZm9yRWFjaCgoem9uZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKCF2YWxpZGF0b3JzW2luZGV4XSkge1xuICAgICAgICAgIHZhbGlkYXRvcnNbaW5kZXhdID0gbWFrZVBhdGhWYWxpZGF0b3Ioem9uZS5mcm9tLCB6b25lLmV4Y2VwdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgaXNQYXRoUmVzdHJpY3RlZCxcbiAgICAgICAgICBoYXNWYWxpZEV4Y2VwdGlvbnMsXG4gICAgICAgICAgaXNQYXRoRXhjZXB0aW9uLFxuICAgICAgICAgIHJlcG9ydEludmFsaWRFeGNlcHRpb24sXG4gICAgICAgIH0gPSB2YWxpZGF0b3JzW2luZGV4XTtcblxuICAgICAgICBpZiAoIWlzUGF0aFJlc3RyaWN0ZWQoYWJzb2x1dGVJbXBvcnRQYXRoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaGFzVmFsaWRFeGNlcHRpb25zKSB7XG4gICAgICAgICAgcmVwb3J0SW52YWxpZEV4Y2VwdGlvbihub2RlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXRoSXNFeGNlcHRlZCA9IGlzUGF0aEV4Y2VwdGlvbihhYnNvbHV0ZUltcG9ydFBhdGgpO1xuICAgICAgICBpZiAocGF0aElzRXhjZXB0ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCBwYXRoIFwie3tpbXBvcnRQYXRofX1cIiBpbXBvcnRlZCBpbiByZXN0cmljdGVkIHpvbmUuJHt6b25lLm1lc3NhZ2UgPyBgICR7em9uZS5tZXNzYWdlfWAgOiAnJ31gLFxuICAgICAgICAgIGRhdGE6IHsgaW1wb3J0UGF0aCB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKChzb3VyY2UpID0+IHtcbiAgICAgIGNoZWNrRm9yUmVzdHJpY3RlZEltcG9ydFBhdGgoc291cmNlLnZhbHVlLCBzb3VyY2UpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-self-import.js b/node_modules/eslint-plugin-import/lib/rules/no-self-import.js
index 567158f..600f1e2 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-self-import.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-self-import.js
@@ -35,4 +35,4 @@
isImportingSelf(context, node, source.value);
}, { commonjs: true });
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1zZWxmLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJpc0ltcG9ydGluZ1NlbGYiLCJjb250ZXh0Iiwibm9kZSIsInJlcXVpcmVOYW1lIiwiZmlsZVBhdGgiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJyZXBvcnQiLCJtZXNzYWdlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImRlc2NyaXB0aW9uIiwicmVjb21tZW5kZWQiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJzb3VyY2UiLCJ2YWx1ZSIsImNvbW1vbmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtBLHNEO0FBQ0Esa0U7QUFDQSxxQzs7QUFFQSxTQUFTQSxlQUFULENBQXlCQyxPQUF6QixFQUFrQ0MsSUFBbEMsRUFBd0NDLFdBQXhDLEVBQXFEO0FBQ25ELE1BQU1DLFdBQVdILFFBQVFJLG1CQUFSLEdBQThCSixRQUFRSSxtQkFBUixFQUE5QixHQUE4REosUUFBUUssV0FBUixFQUEvRTs7QUFFQTtBQUNBLE1BQUlGLGFBQWEsUUFBYixJQUF5QkEsYUFBYSwwQkFBUUQsV0FBUixFQUFxQkYsT0FBckIsQ0FBMUMsRUFBeUU7QUFDdkVBLFlBQVFNLE1BQVIsQ0FBZTtBQUNiTCxnQkFEYTtBQUViTSxlQUFTLHdCQUZJLEVBQWY7O0FBSUQ7QUFDRixDLENBbkJEOzs7S0FxQkFDLE9BQU9DLE9BQVAsR0FBaUIsRUFDZkMsTUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxtQkFBYSx1Q0FEVDtBQUVKQyxtQkFBYSxJQUZUO0FBR0pDLFdBQUssMEJBQVEsZ0JBQVIsQ0FIRCxFQUZGOzs7QUFRSkMsWUFBUSxFQVJKLEVBRFM7O0FBV2ZDLHVCQUFRLGdCQUFVakIsT0FBVixFQUFtQjtBQUN6QixhQUFPLGdDQUFjLFVBQUNrQixNQUFELEVBQVNqQixJQUFULEVBQWtCO0FBQ3JDRix3QkFBZ0JDLE9BQWhCLEVBQXlCQyxJQUF6QixFQUErQmlCLE9BQU9DLEtBQXRDO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQUpELGlCQVhlLEVBQWpCIiwiZmlsZSI6Im5vLXNlbGYtaW1wb3J0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IEZvcmJpZHMgYSBtb2R1bGUgZnJvbSBpbXBvcnRpbmcgaXRzZWxmXG4gKiBAYXV0aG9yIEdpbyBkJ0FtZWxpb1xuICovXG5cbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmZ1bmN0aW9uIGlzSW1wb3J0aW5nU2VsZihjb250ZXh0LCBub2RlLCByZXF1aXJlTmFtZSkge1xuICBjb25zdCBmaWxlUGF0aCA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuXG4gIC8vIElmIHRoZSBpbnB1dCBpcyBmcm9tIHN0ZGluLCB0aGlzIHRlc3QgY2FuJ3QgZmFpbFxuICBpZiAoZmlsZVBhdGggIT09ICc8dGV4dD4nICYmIGZpbGVQYXRoID09PSByZXNvbHZlKHJlcXVpcmVOYW1lLCBjb250ZXh0KSkge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG5vZGUsXG4gICAgICBtZXNzYWdlOiAnTW9kdWxlIGltcG9ydHMgaXRzZWxmLicsXG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdGb3JiaWQgYSBtb2R1bGUgZnJvbSBpbXBvcnRpbmcgaXRzZWxmJyxcbiAgICAgIHJlY29tbWVuZGVkOiB0cnVlLFxuICAgICAgdXJsOiBkb2NzVXJsKCduby1zZWxmLWltcG9ydCcpLFxuICAgIH0sXG5cbiAgICBzY2hlbWE6IFtdLFxuICB9LFxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgaXNJbXBvcnRpbmdTZWxmKGNvbnRleHQsIG5vZGUsIHNvdXJjZS52YWx1ZSk7XG4gICAgfSwgeyBjb21tb25qczogdHJ1ZSB9KTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby1zZWxmLWltcG9ydC5qcyJdLCJuYW1lcyI6WyJpc0ltcG9ydGluZ1NlbGYiLCJjb250ZXh0Iiwibm9kZSIsInJlcXVpcmVOYW1lIiwiZmlsZVBhdGgiLCJnZXRQaHlzaWNhbEZpbGVuYW1lIiwiZ2V0RmlsZW5hbWUiLCJyZXBvcnQiLCJtZXNzYWdlIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsImRlc2NyaXB0aW9uIiwicmVjb21tZW5kZWQiLCJ1cmwiLCJzY2hlbWEiLCJjcmVhdGUiLCJzb3VyY2UiLCJ2YWx1ZSIsImNvbW1vbmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtBLHNEO0FBQ0Esa0U7QUFDQSxxQzs7QUFFQSxTQUFTQSxlQUFULENBQXlCQyxPQUF6QixFQUFrQ0MsSUFBbEMsRUFBd0NDLFdBQXhDLEVBQXFEO0FBQ25ELE1BQU1DLFdBQVdILFFBQVFJLG1CQUFSLEdBQThCSixRQUFRSSxtQkFBUixFQUE5QixHQUE4REosUUFBUUssV0FBUixFQUEvRTs7QUFFQTtBQUNBLE1BQUlGLGFBQWEsUUFBYixJQUF5QkEsYUFBYSwwQkFBUUQsV0FBUixFQUFxQkYsT0FBckIsQ0FBMUMsRUFBeUU7QUFDdkVBLFlBQVFNLE1BQVIsQ0FBZTtBQUNiTCxnQkFEYTtBQUViTSxlQUFTLHdCQUZJLEVBQWY7O0FBSUQ7QUFDRixDLENBbkJEOzs7S0FxQkFDLE9BQU9DLE9BQVAsR0FBaUIsRUFDZkMsTUFBTTtBQUNKQyxVQUFNLFNBREY7QUFFSkMsVUFBTTtBQUNKQyxtQkFBYSx1Q0FEVDtBQUVKQyxtQkFBYSxJQUZUO0FBR0pDLFdBQUssMEJBQVEsZ0JBQVIsQ0FIRCxFQUZGOzs7QUFRSkMsWUFBUSxFQVJKLEVBRFM7O0FBV2ZDLFFBWGUsK0JBV1JqQixPQVhRLEVBV0M7QUFDZCxhQUFPLGdDQUFjLFVBQUNrQixNQUFELEVBQVNqQixJQUFULEVBQWtCO0FBQ3JDRix3QkFBZ0JDLE9BQWhCLEVBQXlCQyxJQUF6QixFQUErQmlCLE9BQU9DLEtBQXRDO0FBQ0QsT0FGTSxFQUVKLEVBQUVDLFVBQVUsSUFBWixFQUZJLENBQVA7QUFHRCxLQWZjLG1CQUFqQiIsImZpbGUiOiJuby1zZWxmLWltcG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBGb3JiaWRzIGEgbW9kdWxlIGZyb20gaW1wb3J0aW5nIGl0c2VsZlxuICogQGF1dGhvciBHaW8gZCdBbWVsaW9cbiAqL1xuXG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiBpc0ltcG9ydGluZ1NlbGYoY29udGV4dCwgbm9kZSwgcmVxdWlyZU5hbWUpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAvLyBJZiB0aGUgaW5wdXQgaXMgZnJvbSBzdGRpbiwgdGhpcyB0ZXN0IGNhbid0IGZhaWxcbiAgaWYgKGZpbGVQYXRoICE9PSAnPHRleHQ+JyAmJiBmaWxlUGF0aCA9PT0gcmVzb2x2ZShyZXF1aXJlTmFtZSwgY29udGV4dCkpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlLFxuICAgICAgbWVzc2FnZTogJ01vZHVsZSBpbXBvcnRzIGl0c2VsZi4nLFxuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3Byb2JsZW0nLFxuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnRm9yYmlkIGEgbW9kdWxlIGZyb20gaW1wb3J0aW5nIGl0c2VsZicsXG4gICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICAgIHVybDogZG9jc1VybCgnbm8tc2VsZi1pbXBvcnQnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlLCBub2RlKSA9PiB7XG4gICAgICBpc0ltcG9ydGluZ1NlbGYoY29udGV4dCwgbm9kZSwgc291cmNlLnZhbHVlKTtcbiAgICB9LCB7IGNvbW1vbmpzOiB0cnVlIH0pO1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-unresolved.js b/node_modules/eslint-plugin-import/lib/rules/no-unresolved.js
index 55364a3..1b491f7 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-unresolved.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-unresolved.js
@@ -17,15 +17,23 @@
schema: [
(0, _moduleVisitor.makeOptionsSchema)({
- caseSensitive: { type: 'boolean', 'default': true } })] },
+ caseSensitive: { type: 'boolean', 'default': true },
+ caseSensitiveStrict: { type: 'boolean', 'default': false } })] },
create: function () {function create(context) {
- function checkSourceValue(source) {
- var shouldCheckCase = !_resolve.CASE_SENSITIVE_FS && (
- !context.options[0] || context.options[0].caseSensitive !== false);
+ var options = context.options[0] || {};
+
+ function checkSourceValue(source, node) {
+ // ignore type-only imports
+ if (node.importKind === 'type') {
+ return;
+ }
+
+ var caseSensitive = !_resolve.CASE_SENSITIVE_FS && options.caseSensitive !== false;
+ var caseSensitiveStrict = !_resolve.CASE_SENSITIVE_FS && options.caseSensitiveStrict;
var resolvedPath = (0, _resolve2['default'])(source.value, context);
@@ -34,9 +42,9 @@
source, 'Unable to resolve path to module \'' + String(
source.value) + '\'.');
- } else if (shouldCheckCase) {
+ } else if (caseSensitive || caseSensitiveStrict) {
var cacheSettings = _ModuleCache2['default'].getSettings(context.settings);
- if (!(0, _resolve.fileExistsWithCaseSync)(resolvedPath, cacheSettings)) {
+ if (!(0, _resolve.fileExistsWithCaseSync)(resolvedPath, cacheSettings, caseSensitiveStrict)) {
context.report(
source, 'Casing of ' + String(
source.value) + ' does not match the underlying filesystem.');
@@ -45,6 +53,6 @@
}
}
- return (0, _moduleVisitor2['default'])(checkSourceValue, context.options[0]);
+ return (0, _moduleVisitor2['default'])(checkSourceValue, options);
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnJlc29sdmVkLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjYXNlU2Vuc2l0aXZlIiwiY3JlYXRlIiwiY29udGV4dCIsImNoZWNrU291cmNlVmFsdWUiLCJzb3VyY2UiLCJzaG91bGRDaGVja0Nhc2UiLCJDQVNFX1NFTlNJVElWRV9GUyIsIm9wdGlvbnMiLCJyZXNvbHZlZFBhdGgiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInJlcG9ydCIsImNhY2hlU2V0dGluZ3MiLCJNb2R1bGVDYWNoZSIsImdldFNldHRpbmdzIiwic2V0dGluZ3MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esc0Q7QUFDQSw4RDtBQUNBLGtFO0FBQ0EscUMsaUpBUkE7Ozt5TEFVQUEsT0FBT0MsT0FBUCxHQUFpQixFQUNmQyxNQUFNO0FBQ0pDLFVBQU0sU0FERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsZUFBUixDQURELEVBRkY7OztBQU1KQyxZQUFRO0FBQ04sMENBQWtCO0FBQ2hCQyxxQkFBZSxFQUFFSixNQUFNLFNBQVIsRUFBbUIsV0FBUyxJQUE1QixFQURDLEVBQWxCLENBRE0sQ0FOSixFQURTOzs7OztBQWNmSyx1QkFBUSxnQkFBVUMsT0FBVixFQUFtQjtBQUN6QixlQUFTQyxnQkFBVCxDQUEwQkMsTUFBMUIsRUFBa0M7QUFDaEMsWUFBTUMsa0JBQWtCLENBQUNDLDBCQUFEO0FBQ2xCLFNBQUNKLFFBQVFLLE9BQVIsQ0FBZ0IsQ0FBaEIsQ0FBRCxJQUF1QkwsUUFBUUssT0FBUixDQUFnQixDQUFoQixFQUFtQlAsYUFBbkIsS0FBcUMsS0FEMUMsQ0FBeEI7O0FBR0EsWUFBTVEsZUFBZSwwQkFBUUosT0FBT0ssS0FBZixFQUFzQlAsT0FBdEIsQ0FBckI7O0FBRUEsWUFBSU0saUJBQWlCRSxTQUFyQixFQUFnQztBQUM5QlIsa0JBQVFTLE1BQVI7QUFDRVAsZ0JBREY7QUFFdUNBLGlCQUFPSyxLQUY5Qzs7QUFJRCxTQUxELE1BS08sSUFBSUosZUFBSixFQUFxQjtBQUMxQixjQUFNTyxnQkFBZ0JDLHlCQUFZQyxXQUFaLENBQXdCWixRQUFRYSxRQUFoQyxDQUF0QjtBQUNBLGNBQUksQ0FBQyxxQ0FBdUJQLFlBQXZCLEVBQXFDSSxhQUFyQyxDQUFMLEVBQTBEO0FBQ3hEVixvQkFBUVMsTUFBUjtBQUNFUCxrQkFERjtBQUVlQSxtQkFBT0ssS0FGdEI7O0FBSUQ7QUFDRjtBQUNGOztBQUVELGFBQU8sZ0NBQWNOLGdCQUFkLEVBQWdDRCxRQUFRSyxPQUFSLENBQWdCLENBQWhCLENBQWhDLENBQVA7QUFDRCxLQXhCRCxpQkFkZSxFQUFqQiIsImZpbGUiOiJuby11bnJlc29sdmVkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IEVuc3VyZXMgdGhhdCBhbiBpbXBvcnRlZCBwYXRoIGV4aXN0cywgZ2l2ZW4gcmVzb2x1dGlvbiBydWxlcy5cbiAqIEBhdXRob3IgQmVuIE1vc2hlclxuICovXG5cbmltcG9ydCByZXNvbHZlLCB7IENBU0VfU0VOU0lUSVZFX0ZTLCBmaWxlRXhpc3RzV2l0aENhc2VTeW5jIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBNb2R1bGVDYWNoZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL01vZHVsZUNhY2hlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yLCB7IG1ha2VPcHRpb25zU2NoZW1hIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXVucmVzb2x2ZWQnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICBtYWtlT3B0aW9uc1NjaGVtYSh7XG4gICAgICAgIGNhc2VTZW5zaXRpdmU6IHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgICB9KSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZSkge1xuICAgICAgY29uc3Qgc2hvdWxkQ2hlY2tDYXNlID0gIUNBU0VfU0VOU0lUSVZFX0ZTXG4gICAgICAgICYmICghY29udGV4dC5vcHRpb25zWzBdIHx8IGNvbnRleHQub3B0aW9uc1swXS5jYXNlU2Vuc2l0aXZlICE9PSBmYWxzZSk7XG5cbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUoc291cmNlLnZhbHVlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHJlc29sdmVkUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICBgVW5hYmxlIHRvIHJlc29sdmUgcGF0aCB0byBtb2R1bGUgJyR7c291cmNlLnZhbHVlfScuYFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChzaG91bGRDaGVja0Nhc2UpIHtcbiAgICAgICAgY29uc3QgY2FjaGVTZXR0aW5ncyA9IE1vZHVsZUNhY2hlLmdldFNldHRpbmdzKGNvbnRleHQuc2V0dGluZ3MpO1xuICAgICAgICBpZiAoIWZpbGVFeGlzdHNXaXRoQ2FzZVN5bmMocmVzb2x2ZWRQYXRoLCBjYWNoZVNldHRpbmdzKSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgYENhc2luZyBvZiAke3NvdXJjZS52YWx1ZX0gZG9lcyBub3QgbWF0Y2ggdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbS5gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2R1bGVWaXNpdG9yKGNoZWNrU291cmNlVmFsdWUsIGNvbnRleHQub3B0aW9uc1swXSk7XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnJlc29sdmVkLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJtZXRhIiwidHlwZSIsImRvY3MiLCJ1cmwiLCJzY2hlbWEiLCJjYXNlU2Vuc2l0aXZlIiwiY2FzZVNlbnNpdGl2ZVN0cmljdCIsImNyZWF0ZSIsImNvbnRleHQiLCJvcHRpb25zIiwiY2hlY2tTb3VyY2VWYWx1ZSIsInNvdXJjZSIsIm5vZGUiLCJpbXBvcnRLaW5kIiwiQ0FTRV9TRU5TSVRJVkVfRlMiLCJyZXNvbHZlZFBhdGgiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsInJlcG9ydCIsImNhY2hlU2V0dGluZ3MiLCJNb2R1bGVDYWNoZSIsImdldFNldHRpbmdzIiwic2V0dGluZ3MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esc0Q7QUFDQSw4RDtBQUNBLGtFO0FBQ0EscUMsaUpBUkE7Ozt5TEFVQUEsT0FBT0MsT0FBUCxHQUFpQixFQUNmQyxNQUFNO0FBQ0pDLFVBQU0sU0FERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsZUFBUixDQURELEVBRkY7OztBQU1KQyxZQUFRO0FBQ04sMENBQWtCO0FBQ2hCQyxxQkFBZSxFQUFFSixNQUFNLFNBQVIsRUFBbUIsV0FBUyxJQUE1QixFQURDO0FBRWhCSywyQkFBcUIsRUFBRUwsTUFBTSxTQUFSLEVBQW1CLFdBQVMsS0FBNUIsRUFGTCxFQUFsQixDQURNLENBTkosRUFEUzs7Ozs7QUFlZk0sUUFmZSwrQkFlUkMsT0FmUSxFQWVDO0FBQ2QsVUFBTUMsVUFBVUQsUUFBUUMsT0FBUixDQUFnQixDQUFoQixLQUFzQixFQUF0Qzs7QUFFQSxlQUFTQyxnQkFBVCxDQUEwQkMsTUFBMUIsRUFBa0NDLElBQWxDLEVBQXdDO0FBQ3RDO0FBQ0EsWUFBSUEsS0FBS0MsVUFBTCxLQUFvQixNQUF4QixFQUFnQztBQUM5QjtBQUNEOztBQUVELFlBQU1SLGdCQUFnQixDQUFDUywwQkFBRCxJQUFzQkwsUUFBUUosYUFBUixLQUEwQixLQUF0RTtBQUNBLFlBQU1DLHNCQUFzQixDQUFDUSwwQkFBRCxJQUFzQkwsUUFBUUgsbUJBQTFEOztBQUVBLFlBQU1TLGVBQWUsMEJBQVFKLE9BQU9LLEtBQWYsRUFBc0JSLE9BQXRCLENBQXJCOztBQUVBLFlBQUlPLGlCQUFpQkUsU0FBckIsRUFBZ0M7QUFDOUJULGtCQUFRVSxNQUFSO0FBQ0VQLGdCQURGO0FBRXVDQSxpQkFBT0ssS0FGOUM7O0FBSUQsU0FMRCxNQUtPLElBQUlYLGlCQUFpQkMsbUJBQXJCLEVBQTBDO0FBQy9DLGNBQU1hLGdCQUFnQkMseUJBQVlDLFdBQVosQ0FBd0JiLFFBQVFjLFFBQWhDLENBQXRCO0FBQ0EsY0FBSSxDQUFDLHFDQUF1QlAsWUFBdkIsRUFBcUNJLGFBQXJDLEVBQW9EYixtQkFBcEQsQ0FBTCxFQUErRTtBQUM3RUUsb0JBQVFVLE1BQVI7QUFDRVAsa0JBREY7QUFFZUEsbUJBQU9LLEtBRnRCOztBQUlEO0FBQ0Y7QUFDRjs7QUFFRCxhQUFPLGdDQUFjTixnQkFBZCxFQUFnQ0QsT0FBaEMsQ0FBUDtBQUNELEtBOUNjLG1CQUFqQiIsImZpbGUiOiJuby11bnJlc29sdmVkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IEVuc3VyZXMgdGhhdCBhbiBpbXBvcnRlZCBwYXRoIGV4aXN0cywgZ2l2ZW4gcmVzb2x1dGlvbiBydWxlcy5cbiAqIEBhdXRob3IgQmVuIE1vc2hlclxuICovXG5cbmltcG9ydCByZXNvbHZlLCB7IENBU0VfU0VOU0lUSVZFX0ZTLCBmaWxlRXhpc3RzV2l0aENhc2VTeW5jIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZXNvbHZlJztcbmltcG9ydCBNb2R1bGVDYWNoZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL01vZHVsZUNhY2hlJztcbmltcG9ydCBtb2R1bGVWaXNpdG9yLCB7IG1ha2VPcHRpb25zU2NoZW1hIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXVucmVzb2x2ZWQnKSxcbiAgICB9LFxuXG4gICAgc2NoZW1hOiBbXG4gICAgICBtYWtlT3B0aW9uc1NjaGVtYSh7XG4gICAgICAgIGNhc2VTZW5zaXRpdmU6IHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgICAgIGNhc2VTZW5zaXRpdmVTdHJpY3Q6IHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgICAgfSksXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBmdW5jdGlvbiBjaGVja1NvdXJjZVZhbHVlKHNvdXJjZSwgbm9kZSkge1xuICAgICAgLy8gaWdub3JlIHR5cGUtb25seSBpbXBvcnRzXG4gICAgICBpZiAobm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYXNlU2Vuc2l0aXZlID0gIUNBU0VfU0VOU0lUSVZFX0ZTICYmIG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSAhPT0gZmFsc2U7XG4gICAgICBjb25zdCBjYXNlU2Vuc2l0aXZlU3RyaWN0ID0gIUNBU0VfU0VOU0lUSVZFX0ZTICYmIG9wdGlvbnMuY2FzZVNlbnNpdGl2ZVN0cmljdDtcblxuICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShzb3VyY2UudmFsdWUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVzb2x2ZWRQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgc291cmNlLFxuICAgICAgICAgIGBVbmFibGUgdG8gcmVzb2x2ZSBwYXRoIHRvIG1vZHVsZSAnJHtzb3VyY2UudmFsdWV9Jy5gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGNhc2VTZW5zaXRpdmUgfHwgY2FzZVNlbnNpdGl2ZVN0cmljdCkge1xuICAgICAgICBjb25zdCBjYWNoZVNldHRpbmdzID0gTW9kdWxlQ2FjaGUuZ2V0U2V0dGluZ3MoY29udGV4dC5zZXR0aW5ncyk7XG4gICAgICAgIGlmICghZmlsZUV4aXN0c1dpdGhDYXNlU3luYyhyZXNvbHZlZFBhdGgsIGNhY2hlU2V0dGluZ3MsIGNhc2VTZW5zaXRpdmVTdHJpY3QpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICBgQ2FzaW5nIG9mICR7c291cmNlLnZhbHVlfSBkb2VzIG5vdCBtYXRjaCB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtLmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoY2hlY2tTb3VyY2VWYWx1ZSwgb3B0aW9ucyk7XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-unused-modules.js b/node_modules/eslint-plugin-import/lib/rules/no-unused-modules.js
index bda956c..58d6bfb 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-unused-modules.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-unused-modules.js
@@ -7,51 +7,62 @@
var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap);
var _ignore = require('eslint-module-utils/ignore');
var _resolve = require('eslint-module-utils/resolve');var _resolve2 = _interopRequireDefault(_resolve);
+var _visit = require('eslint-module-utils/visit');var _visit2 = _interopRequireDefault(_visit);
var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);
var _path = require('path');
-var _readPkgUp = require('read-pkg-up');var _readPkgUp2 = _interopRequireDefault(_readPkgUp);
+var _readPkgUp2 = require('eslint-module-utils/readPkgUp');var _readPkgUp3 = _interopRequireDefault(_readPkgUp2);
var _object = require('object.values');var _object2 = _interopRequireDefault(_object);
var _arrayIncludes = require('array-includes');var _arrayIncludes2 = _interopRequireDefault(_arrayIncludes);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}function _toConsumableArray(arr) {if (Array.isArray(arr)) {for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {arr2[i] = arr[i];}return arr2;} else {return Array.from(arr);}} /**
* @fileOverview Ensures that modules contain exports and/or all
* modules are consumed within other modules.
* @author René Fermann
- */ // eslint/lib/util/glob-util has been moved to eslint/lib/util/glob-utils with version 5.3
-// and has been moved to eslint/lib/cli-engine/file-enumerator in version 6
-var listFilesToProcess = void 0;try {var FileEnumerator = require('eslint/lib/cli-engine/file-enumerator').FileEnumerator;
+ */var FileEnumerator = void 0;var listFilesToProcess = void 0;
+try {var _require =
+ require('eslint/use-at-your-own-risk');FileEnumerator = _require.FileEnumerator;
+} catch (e) {
+ try {var _require2 =
+
+ require('eslint/lib/cli-engine/file-enumerator'); // has been moved to eslint/lib/cli-engine/file-enumerator in version 6
+ FileEnumerator = _require2.FileEnumerator;} catch (e) {
+ try {
+ // eslint/lib/util/glob-util has been moved to eslint/lib/util/glob-utils with version 5.3
+ var _require3 = require('eslint/lib/util/glob-utils'),originalListFilesToProcess = _require3.listFilesToProcess;
+
+ // Prevent passing invalid options (extensions array) to old versions of the function.
+ // https://github.com/eslint/eslint/blob/v5.16.0/lib/util/glob-utils.js#L178-L280
+ // https://github.com/eslint/eslint/blob/v5.2.0/lib/util/glob-util.js#L174-L269
+ listFilesToProcess = function listFilesToProcess(src, extensions) {
+ return originalListFilesToProcess(src, {
+ extensions: extensions });
+
+ };
+ } catch (e) {var _require4 =
+ require('eslint/lib/util/glob-util'),_originalListFilesToProcess = _require4.listFilesToProcess;
+
+ listFilesToProcess = function listFilesToProcess(src, extensions) {
+ var patterns = src.reduce(function (carry, pattern) {
+ return carry.concat(extensions.map(function (extension) {
+ return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));
+ }));
+ }, src.slice());
+
+ return _originalListFilesToProcess(patterns);
+ };
+ }
+ }
+}
+
+if (FileEnumerator) {
listFilesToProcess = function listFilesToProcess(src, extensions) {
var e = new FileEnumerator({
extensions: extensions });
+
return Array.from(e.iterateFiles(src), function (_ref) {var filePath = _ref.filePath,ignored = _ref.ignored;return {
ignored: ignored,
filename: filePath };});
};
-} catch (e1) {
- // Prevent passing invalid options (extensions array) to old versions of the function.
- // https://github.com/eslint/eslint/blob/v5.16.0/lib/util/glob-utils.js#L178-L280
- // https://github.com/eslint/eslint/blob/v5.2.0/lib/util/glob-util.js#L174-L269
- var originalListFilesToProcess = void 0;
- try {
- originalListFilesToProcess = require('eslint/lib/util/glob-utils').listFilesToProcess;
- listFilesToProcess = function listFilesToProcess(src, extensions) {
- return originalListFilesToProcess(src, {
- extensions: extensions });
-
- };
- } catch (e2) {
- originalListFilesToProcess = require('eslint/lib/util/glob-util').listFilesToProcess;
-
- listFilesToProcess = function listFilesToProcess(src, extensions) {
- var patterns = src.reduce(function (carry, pattern) {
- return carry.concat(extensions.map(function (extension) {
- return (/\*\*|\*\./.test(pattern) ? pattern : String(pattern) + '/**/*' + String(extension));
- }));
- }, src.slice());
-
- return originalListFilesToProcess(patterns);
- };
- }
}
var EXPORT_DEFAULT_DECLARATION = 'ExportDefaultDeclaration';
@@ -144,6 +155,8 @@
*/
var exportList = new Map();
+var visitorKeyMap = new Map();
+
var ignoredFiles = new Set();
var filesOutsideSrc = new Set();
@@ -183,8 +196,15 @@
var imports = new Map();
var currentExports = _ExportMap2['default'].get(file, context);
if (currentExports) {var
- dependencies = currentExports.dependencies,reexports = currentExports.reexports,localImportList = currentExports.imports,namespace = currentExports.namespace;
+ dependencies =
+
+
+
+
+ currentExports.dependencies,reexports = currentExports.reexports,localImportList = currentExports.imports,namespace = currentExports.namespace,visitorKeys = currentExports.visitorKeys;
+
+ visitorKeyMap.set(file, visitorKeys);
// dependencies === export * from
var currentExportAll = new Set();
dependencies.forEach(function (getDependency) {
@@ -331,8 +351,8 @@
var newDefaultImportExists = function newDefaultImportExists(specifiers) {return (
specifiers.some(function (_ref8) {var type = _ref8.type;return type === IMPORT_DEFAULT_SPECIFIER;}));};
-var fileIsInPkg = function fileIsInPkg(file) {var _readPkgUp$sync =
- _readPkgUp2['default'].sync({ cwd: file, normalize: false }),path = _readPkgUp$sync.path,pkg = _readPkgUp$sync.pkg;
+var fileIsInPkg = function fileIsInPkg(file) {var _readPkgUp =
+ (0, _readPkgUp3['default'])({ cwd: file }),path = _readPkgUp.path,pkg = _readPkgUp.pkg;
var basePath = (0, _path.dirname)(path);
var checkPkgFieldString = function checkPkgFieldString(pkgField) {
@@ -665,6 +685,28 @@
});
});
+ function processDynamicImport(source) {
+ if (source.type !== 'Literal') {
+ return null;
+ }
+ var p = (0, _resolve2['default'])(source.value, context);
+ if (p == null) {
+ return null;
+ }
+ newNamespaceImports.add(p);
+ }
+
+ (0, _visit2['default'])(node, visitorKeyMap.get(file), {
+ ImportExpression: function () {function ImportExpression(child) {
+ processDynamicImport(child.source);
+ }return ImportExpression;}(),
+ CallExpression: function () {function CallExpression(child) {
+ if (child.callee.type === 'Import') {
+ processDynamicImport(child.arguments[0]);
+ }
+ }return CallExpression;}() });
+
+
node.body.forEach(function (astNode) {
var resolvedPath = void 0;
@@ -908,4 +950,4 @@
}return ExportNamedDeclaration;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJsaXN0RmlsZXNUb1Byb2Nlc3MiLCJGaWxlRW51bWVyYXRvciIsInJlcXVpcmUiLCJzcmMiLCJleHRlbnNpb25zIiwiZSIsIkFycmF5IiwiZnJvbSIsIml0ZXJhdGVGaWxlcyIsImZpbGVQYXRoIiwiaWdub3JlZCIsImZpbGVuYW1lIiwiZTEiLCJvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyIsImUyIiwicGF0dGVybnMiLCJyZWR1Y2UiLCJjYXJyeSIsInBhdHRlcm4iLCJjb25jYXQiLCJtYXAiLCJleHRlbnNpb24iLCJ0ZXN0Iiwic2xpY2UiLCJFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiIsIkVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTiIsIkVYUE9SVF9BTExfREVDTEFSQVRJT04iLCJJTVBPUlRfREVDTEFSQVRJT04iLCJJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiIsIklNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiIsIlZBUklBQkxFX0RFQ0xBUkFUSU9OIiwiRlVOQ1RJT05fREVDTEFSQVRJT04iLCJDTEFTU19ERUNMQVJBVElPTiIsIklERU5USUZJRVIiLCJPQkpFQ1RfUEFUVEVSTiIsIlRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTiIsIlRTX1RZUEVfQUxJQVNfREVDTEFSQVRJT04iLCJUU19FTlVNX0RFQ0xBUkFUSU9OIiwiREVGQVVMVCIsImZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIiLCJkZWNsYXJhdGlvbiIsImNiIiwidHlwZSIsImlkIiwibmFtZSIsImRlY2xhcmF0aW9ucyIsImZvckVhY2giLCJpbXBvcnRMaXN0IiwiTWFwIiwiZXhwb3J0TGlzdCIsImlnbm9yZWRGaWxlcyIsIlNldCIsImZpbGVzT3V0c2lkZVNyYyIsImlzTm9kZU1vZHVsZSIsInBhdGgiLCJyZXNvbHZlRmlsZXMiLCJpZ25vcmVFeHBvcnRzIiwiY29udGV4dCIsInNldHRpbmdzIiwic3JjRmlsZXMiLCJzcmNGaWxlTGlzdCIsImlnbm9yZWRGaWxlc0xpc3QiLCJhZGQiLCJmaWx0ZXIiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJleHBvcnRBbGwiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0cyIsImdldCIsImZpbGUiLCJkZXBlbmRlbmNpZXMiLCJyZWV4cG9ydHMiLCJsb2NhbEltcG9ydExpc3QiLCJuYW1lc3BhY2UiLCJjdXJyZW50RXhwb3J0QWxsIiwiZGVwZW5kZW5jeSIsImdldERlcGVuZGVuY3kiLCJzZXQiLCJ2YWx1ZSIsImtleSIsIndoZXJlVXNlZCIsInJlZXhwb3J0IiwiZ2V0SW1wb3J0IiwibG9jYWxJbXBvcnQiLCJjdXJyZW50VmFsdWUiLCJsb2NhbCIsImltcG9ydGVkU3BlY2lmaWVycyIsInNwZWNpZmllciIsImhhcyIsInZhbCIsImN1cnJlbnRFeHBvcnQiLCJkZXRlcm1pbmVVc2FnZSIsImxpc3RWYWx1ZSIsImxpc3RLZXkiLCJjdXJyZW50SW1wb3J0IiwiZXhwb3J0U3RhdGVtZW50IiwiZ2V0U3JjIiwicHJvY2VzcyIsImN3ZCIsImxhc3RQcmVwYXJlS2V5IiwiZG9QcmVwYXJhdGlvbiIsInByZXBhcmVLZXkiLCJKU09OIiwic3RyaW5naWZ5Iiwic29ydCIsImNsZWFyIiwibmV3TmFtZXNwYWNlSW1wb3J0RXhpc3RzIiwic3BlY2lmaWVycyIsInNvbWUiLCJuZXdEZWZhdWx0SW1wb3J0RXhpc3RzIiwiZmlsZUlzSW5Qa2ciLCJyZWFkUGtnVXAiLCJzeW5jIiwibm9ybWFsaXplIiwicGtnIiwiYmFzZVBhdGgiLCJjaGVja1BrZ0ZpZWxkU3RyaW5nIiwicGtnRmllbGQiLCJjaGVja1BrZ0ZpZWxkT2JqZWN0IiwicGtnRmllbGRGaWxlcyIsImNoZWNrUGtnRmllbGQiLCJiaW4iLCJicm93c2VyIiwibWFpbiIsIm1vZHVsZSIsIm1ldGEiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwicHJvcGVydGllcyIsImRlc2NyaXB0aW9uIiwibWluSXRlbXMiLCJpdGVtcyIsIm1pbkxlbmd0aCIsIm1pc3NpbmdFeHBvcnRzIiwidW51c2VkRXhwb3J0cyIsIm5vdCIsImFueU9mIiwicmVxdWlyZWQiLCJjcmVhdGUiLCJvcHRpb25zIiwiZ2V0UGh5c2ljYWxGaWxlbmFtZSIsImdldEZpbGVuYW1lIiwiY2hlY2tFeHBvcnRQcmVzZW5jZSIsImV4cG9ydENvdW50IiwibmFtZXNwYWNlSW1wb3J0cyIsInNpemUiLCJyZXBvcnQiLCJub2RlIiwiYm9keSIsImNoZWNrVXNhZ2UiLCJleHBvcnRlZFZhbHVlIiwiZXhwb3J0c0tleSIsInVwZGF0ZUV4cG9ydFVzYWdlIiwibmV3RXhwb3J0cyIsIm5ld0V4cG9ydElkZW50aWZpZXJzIiwibGVuZ3RoIiwiZXhwb3J0ZWQiLCJ1cGRhdGVJbXBvcnRVc2FnZSIsIm9sZEltcG9ydFBhdGhzIiwib2xkTmFtZXNwYWNlSW1wb3J0cyIsIm5ld05hbWVzcGFjZUltcG9ydHMiLCJvbGRFeHBvcnRBbGwiLCJuZXdFeHBvcnRBbGwiLCJvbGREZWZhdWx0SW1wb3J0cyIsIm5ld0RlZmF1bHRJbXBvcnRzIiwib2xkSW1wb3J0cyIsIm5ld0ltcG9ydHMiLCJyZXNvbHZlZFBhdGgiLCJhc3ROb2RlIiwic291cmNlIiwicmF3IiwicmVwbGFjZSIsImltcG9ydGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSx5QztBQUNBO0FBQ0Esc0Q7QUFDQSxxQztBQUNBO0FBQ0Esd0M7QUFDQSx1QztBQUNBLCtDLHVWQWJBOzs7OzBZQWVBO0FBQ0E7QUFDQSxJQUFJQSwyQkFBSixDQUNBLElBQUksQ0FDRixJQUFNQyxpQkFBaUJDLFFBQVEsdUNBQVIsRUFBaURELGNBQXhFO0FBQ0FELHVCQUFxQiw0QkFBVUcsR0FBVixFQUFlQyxVQUFmLEVBQTJCO0FBQzlDLFFBQU1DLElBQUksSUFBSUosY0FBSixDQUFtQjtBQUMzQkcsa0JBQVlBLFVBRGUsRUFBbkIsQ0FBVjs7QUFHQSxXQUFPRSxNQUFNQyxJQUFOLENBQVdGLEVBQUVH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Z0I7QUFDakMsZ0JBQUksQ0FBQ3dGLFdBQVcvRSxHQUFYLENBQWVULEdBQWYsQ0FBTCxFQUEwQjtBQUN4QixrQkFBTWQsVUFBVThGLGVBQWUzRixHQUFmLENBQW1CVSxLQUFuQixDQUFoQjtBQUNBYixnQ0FBZWMsR0FBZjs7QUFFQSxrQkFBTWYsWUFBVWpCLFdBQVdxQixHQUFYLENBQWVVLEtBQWYsQ0FBaEI7QUFDQSxrQkFBSSxPQUFPZCxTQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDLG9CQUFNMEIsZ0JBQWdCMUIsVUFBUUksR0FBUixDQUFZVyxHQUFaLENBQXRCO0FBQ0Esb0JBQUksT0FBT1csYUFBUCxLQUF5QixXQUE3QixFQUEwQztBQUN4Q0EsZ0NBQWNWLFNBQWQsV0FBK0JYLElBQS9CO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsV0FiRDtBQWNELFNBclFLLDRCQUFOOztBQXVRQSxhQUFPO0FBQ0wscUNBQWdCLDJCQUFRO0FBQ3RCb0YsOEJBQWtCTCxJQUFsQjtBQUNBVSw4QkFBa0JWLElBQWxCO0FBQ0FMLGdDQUFvQkssSUFBcEI7QUFDRCxXQUpELHNCQURLO0FBTUwsaURBQTRCLHdDQUFRO0FBQ2xDRSx1QkFBV0YsSUFBWCxFQUFpQnpILHdCQUFqQjtBQUNELFdBRkQsbUNBTks7QUFTTCwrQ0FBMEIsc0NBQVE7QUFDaEN5SCxpQkFBS3pDLFVBQUwsQ0FBZ0IvRCxPQUFoQixDQUF3QixxQkFBYTtBQUNuQzBHLHlCQUFXRixJQUFYLEVBQWlCN0QsVUFBVXNFLFFBQVYsQ0FBbUJuSCxJQUFwQztBQUNELGFBRkQ7QUFHQUwseUNBQTZCK0csS0FBSzlHLFdBQWxDLEVBQStDLFVBQUNJLElBQUQsRUFBVTtBQUN2RDRHLHlCQUFXRixJQUFYLEVBQWlCMUcsSUFBakI7QUFDRCxhQUZEO0FBR0QsV0FQRCxpQ0FUSyxFQUFQOztBQWtCRCxLQXhjRCxpQkFwRWUsRUFBakIiLCJmaWxlIjoibm8tdW51c2VkLW1vZHVsZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlT3ZlcnZpZXcgRW5zdXJlcyB0aGF0IG1vZHVsZXMgY29udGFpbiBleHBvcnRzIGFuZC9vciBhbGxcbiAqIG1vZHVsZXMgYXJlIGNvbnN1bWVkIHdpdGhpbiBvdGhlciBtb2R1bGVzLlxuICogQGF1dGhvciBSZW7DqSBGZXJtYW5uXG4gKi9cblxuaW1wb3J0IEV4cG9ydHMsIHsgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgfSBmcm9tICcuLi9FeHBvcnRNYXAnO1xuaW1wb3J0IHsgZ2V0RmlsZUV4dGVuc2lvbnMgfSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL2lnbm9yZSc7XG5pbXBvcnQgcmVzb2x2ZSBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL3Jlc29sdmUnO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgcmVhZFBrZ1VwIGZyb20gJ3JlYWQtcGtnLXVwJztcbmltcG9ydCB2YWx1ZXMgZnJvbSAnb2JqZWN0LnZhbHVlcyc7XG5pbXBvcnQgaW5jbHVkZXMgZnJvbSAnYXJyYXktaW5jbHVkZXMnO1xuXG4vLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbi8vIGFuZCBoYXMgYmVlbiBtb3ZlZCB0byBlc2xpbnQvbGliL2NsaS1lbmdpbmUvZmlsZS1lbnVtZXJhdG9yIGluIHZlcnNpb24gNlxubGV0IGxpc3RGaWxlc1RvUHJvY2VzcztcbnRyeSB7XG4gIGNvbnN0IEZpbGVFbnVtZXJhdG9yID0gcmVxdWlyZSgnZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvcicpLkZpbGVFbnVtZXJhdG9yO1xuICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgICBleHRlbnNpb25zOiBleHRlbnNpb25zLFxuICAgIH0pO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGUuaXRlcmF0ZUZpbGVzKHNyYyksICh7IGZpbGVQYXRoLCBpZ25vcmVkIH0pID0+ICh7XG4gICAgICBpZ25vcmVkLFxuICAgICAgZmlsZW5hbWU6IGZpbGVQYXRoLFxuICAgIH0pKTtcbiAgfTtcbn0gY2F0Y2ggKGUxKSB7XG4gIC8vIFByZXZlbnQgcGFzc2luZyBpbnZhbGlkIG9wdGlvbnMgKGV4dGVuc2lvbnMgYXJyYXkpIHRvIG9sZCB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb24uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2Jsb2IvdjUuMTYuMC9saWIvdXRpbC9nbG9iLXV0aWxzLmpzI0wxNzgtTDI4MFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9ibG9iL3Y1LjIuMC9saWIvdXRpbC9nbG9iLXV0aWwuanMjTDE3NC1MMjY5XG4gIGxldCBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcztcbiAgdHJ5IHtcbiAgICBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyA9IHJlcXVpcmUoJ2VzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzJykubGlzdEZpbGVzVG9Qcm9jZXNzO1xuICAgIGxpc3RGaWxlc1RvUHJvY2VzcyA9IGZ1bmN0aW9uIChzcmMsIGV4dGVuc2lvbnMpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyhzcmMsIHtcbiAgICAgICAgZXh0ZW5zaW9uczogZXh0ZW5zaW9ucyxcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gY2F0Y2ggKGUyKSB7XG4gICAgb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MgPSByZXF1aXJlKCdlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsJykubGlzdEZpbGVzVG9Qcm9jZXNzO1xuXG4gICAgbGlzdEZpbGVzVG9Qcm9jZXNzID0gZnVuY3Rpb24gKHNyYywgZXh0ZW5zaW9ucykge1xuICAgICAgY29uc3QgcGF0dGVybnMgPSBzcmMucmVkdWNlKChjYXJyeSwgcGF0dGVybikgPT4ge1xuICAgICAgICByZXR1cm4gY2FycnkuY29uY2F0KGV4dGVuc2lvbnMubWFwKChleHRlbnNpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gL1xcKlxcKnxcXCpcXC4vLnRlc3QocGF0dGVybikgPyBwYXR0ZXJuIDogYCR7cGF0dGVybn0vKiovKiR7ZXh0ZW5zaW9ufWA7XG4gICAgICAgIH0pKTtcbiAgICAgIH0sIHNyYy5zbGljZSgpKTtcblxuICAgICAgcmV0dXJuIG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzKHBhdHRlcm5zKTtcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OID0gJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbic7XG5jb25zdCBFWFBPUlRfTkFNRURfREVDTEFSQVRJT04gPSAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbic7XG5jb25zdCBFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OID0gJ0V4cG9ydEFsbERlY2xhcmF0aW9uJztcbmNvbnN0IElNUE9SVF9ERUNMQVJBVElPTiA9ICdJbXBvcnREZWNsYXJhdGlvbic7XG5jb25zdCBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiA9ICdJbXBvcnROYW1lc3BhY2VTcGVjaWZpZXInO1xuY29uc3QgSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSID0gJ0ltcG9ydERlZmF1bHRTcGVjaWZpZXInO1xuY29uc3QgVkFSSUFCTEVfREVDTEFSQVRJT04gPSAnVmFyaWFibGVEZWNsYXJhdGlvbic7XG5jb25zdCBGVU5DVElPTl9ERUNMQVJBVElPTiA9ICdGdW5jdGlvbkRlY2xhcmF0aW9uJztcbmNvbnN0IENMQVNTX0RFQ0xBUkFUSU9OID0gJ0NsYXNzRGVjbGFyYXRpb24nO1xuY29uc3QgSURFTlRJRklFUiA9ICdJZGVudGlmaWVyJztcbmNvbnN0IE9CSkVDVF9QQVRURVJOID0gJ09iamVjdFBhdHRlcm4nO1xuY29uc3QgVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OID0gJ1RTSW50ZXJmYWNlRGVjbGFyYXRpb24nO1xuY29uc3QgVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTiA9ICdUU1R5cGVBbGlhc0RlY2xhcmF0aW9uJztcbmNvbnN0IFRTX0VOVU1fREVDTEFSQVRJT04gPSAnVFNFbnVtRGVjbGFyYXRpb24nO1xuY29uc3QgREVGQVVMVCA9ICdkZWZhdWx0JztcblxuZnVuY3Rpb24gZm9yRWFjaERlY2xhcmF0aW9uSWRlbnRpZmllcihkZWNsYXJhdGlvbiwgY2IpIHtcbiAgaWYgKGRlY2xhcmF0aW9uKSB7XG4gICAgaWYgKFxuICAgICAgZGVjbGFyYXRpb24udHlwZSA9PT0gRlVOQ1RJT05fREVDTEFSQVRJT04gfHxcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IENMQVNTX0RFQ0xBUkFUSU9OIHx8XG4gICAgICBkZWNsYXJhdGlvbi50eXBlID09PSBUU19JTlRFUkZBQ0VfREVDTEFSQVRJT04gfHxcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IFRTX1RZUEVfQUxJQVNfREVDTEFSQVRJT04gfHxcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IFRTX0VOVU1fREVDTEFSQVRJT05cbiAgICApIHtcbiAgICAgIGNiKGRlY2xhcmF0aW9uLmlkLm5hbWUpO1xuICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24udHlwZSA9PT0gVkFSSUFCTEVfREVDTEFSQVRJT04pIHtcbiAgICAgIGRlY2xhcmF0aW9uLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGlkIH0pID0+IHtcbiAgICAgICAgaWYgKGlkLnR5cGUgPT09IE9CSkVDVF9QQVRURVJOKSB7XG4gICAgICAgICAgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUoaWQsIChwYXR0ZXJuKSA9PiB7XG4gICAgICAgICAgICBpZiAocGF0dGVybi50eXBlID09PSBJREVOVElGSUVSKSB7XG4gICAgICAgICAgICAgIGNiKHBhdHRlcm4ubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2IoaWQubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIExpc3Qgb2YgaW1wb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYSBTZXQgb2YgaWRlbnRpZmllcnMuIFRoZSB1cHBlci1sZXZlbCBNYXBcbiAqIGtleXMgYXJlIHRoZSBwYXRocyB0byB0aGUgbW9kdWxlcyBjb250YWluaW5nIHRoZSBpbXBvcnRzLCB3aGlsZSB0aGVcbiAqIGxvd2VyLWxldmVsIE1hcCBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIGZpbGVzIHdoaWNoIGFyZSBiZWluZyBpbXBvcnRlZFxuICogZnJvbS4gTGFzdGx5LCB0aGUgU2V0IG9mIGlkZW50aWZpZXJzIGNvbnRhaW5zIGVpdGhlciBuYW1lcyBiZWluZyBpbXBvcnRlZFxuICogb3IgYSBzcGVjaWFsIEFTVCBub2RlIG5hbWUgbGlzdGVkIGFib3ZlIChlLmcgSW1wb3J0RGVmYXVsdFNwZWNpZmllcikuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nOlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Zvby5qcycgPT4gTWFwIHsgJ2Jhci5qcycgPT4gU2V0IHsgJ28yJyB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4+fVxuICovXG5jb25zdCBpbXBvcnRMaXN0ID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIExpc3Qgb2YgZXhwb3J0cyBwZXIgZmlsZS5cbiAqXG4gKiBSZXByZXNlbnRlZCBieSBhIHR3by1sZXZlbCBNYXAgdG8gYW4gb2JqZWN0IG9mIG1ldGFkYXRhLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgZXhwb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHNwZWNpZmljIGlkZW50aWZpZXJzIG9yIHNwZWNpYWwgQVNUIG5vZGUgbmFtZXNcbiAqIGJlaW5nIGV4cG9ydGVkLiBUaGUgbGVhZi1sZXZlbCBtZXRhZGF0YSBvYmplY3QgYXQgdGhlIG1vbWVudCBvbmx5IGNvbnRhaW5zIGFcbiAqIGB3aGVyZVVzZWRgIHByb3BlcnR5LCB3aGljaCBjb250YWlucyBhIFNldCBvZiBwYXRocyB0byBtb2R1bGVzIHRoYXQgaW1wb3J0XG4gKiB0aGUgbmFtZS5cbiAqXG4gKiBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSBhIGZpbGUgbmFtZWQgYmFyLmpzIGNvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBleHBvcnRzOlxuICpcbiAqICAgY29uc3QgbzIgPSAnYmFyJztcbiAqICAgZXhwb3J0IHsgbzIgfTtcbiAqXG4gKiBBbmQgYSBmaWxlIG5hbWVkIGZvby5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgaW1wb3J0OlxuICpcbiAqICAgaW1wb3J0IHsgbzIgfSBmcm9tICcuL2Jhci5qcyc7XG4gKlxuICogVGhlbiB3ZSB3aWxsIGhhdmUgYSBzdHJ1Y3R1cmUgdGhhdCBsb29rcyBsaWtlOlxuICpcbiAqICAgTWFwIHsgJ2Jhci5qcycgPT4gTWFwIHsgJ28yJyA9PiB7IHdoZXJlVXNlZDogU2V0IHsgJ2Zvby5qcycgfSB9IH0gfVxuICpcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBvYmplY3Q+Pn1cbiAqL1xuY29uc3QgZXhwb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuY29uc3QgaWdub3JlZEZpbGVzID0gbmV3IFNldCgpO1xuY29uc3QgZmlsZXNPdXRzaWRlU3JjID0gbmV3IFNldCgpO1xuXG5jb25zdCBpc05vZGVNb2R1bGUgPSBwYXRoID0+IHtcbiAgcmV0dXJuIC9cXC8obm9kZV9tb2R1bGVzKVxcLy8udGVzdChwYXRoKTtcbn07XG5cbi8qKlxuICogcmVhZCBhbGwgZmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm5zIGluIHNyYyBhbmQgaWdub3JlRXhwb3J0c1xuICpcbiAqIHJldHVybiBhbGwgZmlsZXMgbWF0Y2hpbmcgc3JjIHBhdHRlcm4sIHdoaWNoIGFyZSBub3QgbWF0Y2hpbmcgdGhlIGlnbm9yZUV4cG9ydHMgcGF0dGVyblxuICovXG5jb25zdCByZXNvbHZlRmlsZXMgPSAoc3JjLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KSA9PiB7XG4gIGNvbnN0IGV4dGVuc2lvbnMgPSBBcnJheS5mcm9tKGdldEZpbGVFeHRlbnNpb25zKGNvbnRleHQuc2V0dGluZ3MpKTtcblxuICBjb25zdCBzcmNGaWxlcyA9IG5ldyBTZXQoKTtcbiAgY29uc3Qgc3JjRmlsZUxpc3QgPSBsaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCBleHRlbnNpb25zKTtcblxuICAvLyBwcmVwYXJlIGxpc3Qgb2YgaWdub3JlZCBmaWxlc1xuICBjb25zdCBpZ25vcmVkRmlsZXNMaXN0ID0gIGxpc3RGaWxlc1RvUHJvY2VzcyhpZ25vcmVFeHBvcnRzLCBleHRlbnNpb25zKTtcbiAgaWdub3JlZEZpbGVzTGlzdC5mb3JFYWNoKCh7IGZpbGVuYW1lIH0pID0+IGlnbm9yZWRGaWxlcy5hZGQoZmlsZW5hbWUpKTtcblxuICAvLyBwcmVwYXJlIGxpc3Qgb2Ygc291cmNlIGZpbGVzLCBkb24ndCBjb25zaWRlciBmaWxlcyBmcm9tIG5vZGVfbW9kdWxlc1xuICBzcmNGaWxlTGlzdC5maWx0ZXIoKHsgZmlsZW5hbWUgfSkgPT4gIWlzTm9kZU1vZHVsZShmaWxlbmFtZSkpLmZvckVhY2goKHsgZmlsZW5hbWUgfSkgPT4ge1xuICAgIHNyY0ZpbGVzLmFkZChmaWxlbmFtZSk7XG4gIH0pO1xuICByZXR1cm4gc3JjRmlsZXM7XG59O1xuXG4vKipcbiAqIHBhcnNlIGFsbCBzb3VyY2UgZmlsZXMgYW5kIGJ1aWxkIHVwIDIgbWFwcyBjb250YWluaW5nIHRoZSBleGlzdGluZyBpbXBvcnRzIGFuZCBleHBvcnRzXG4gKi9cbmNvbnN0IHByZXBhcmVJbXBvcnRzQW5kRXhwb3J0cyA9IChzcmNGaWxlcywgY29udGV4dCkgPT4ge1xuICBjb25zdCBleHBvcnRBbGwgPSBuZXcgTWFwKCk7XG4gIHNyY0ZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gICAgY29uc3QgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBpbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRzID0gRXhwb3J0cy5nZXQoZmlsZSwgY29udGV4dCk7XG4gICAgaWYgKGN1cnJlbnRFeHBvcnRzKSB7XG4gICAgICBjb25zdCB7IGRlcGVuZGVuY2llcywgcmVleHBvcnRzLCBpbXBvcnRzOiBsb2NhbEltcG9ydExpc3QsIG5hbWVzcGFjZSAgfSA9IGN1cnJlbnRFeHBvcnRzO1xuXG4gICAgICAvLyBkZXBlbmRlbmNpZXMgPT09IGV4cG9ydCAqIGZyb21cbiAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRBbGwgPSBuZXcgU2V0KCk7XG4gICAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaChnZXREZXBlbmRlbmN5ID0+IHtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IGdldERlcGVuZGVuY3koKTtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RXhwb3J0QWxsLmFkZChkZXBlbmRlbmN5LnBhdGgpO1xuICAgICAgfSk7XG4gICAgICBleHBvcnRBbGwuc2V0KGZpbGUsIGN1cnJlbnRFeHBvcnRBbGwpO1xuXG4gICAgICByZWV4cG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSLCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWV4cG9ydCA9ICB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PlxuICAgICAgICAgIGltcG9ydGVkU3BlY2lmaWVycy5mb3JFYWNoKHNwZWNpZmllciA9PiBsb2NhbEltcG9ydC5hZGQoc3BlY2lmaWVyKSlcbiAgICAgICAgKTtcbiAgICAgICAgaW1wb3J0cy5zZXQoa2V5LCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcbiAgICAgIGltcG9ydExpc3Quc2V0KGZpbGUsIGltcG9ydHMpO1xuXG4gICAgICAvLyBidWlsZCB1cCBleHBvcnQgbGlzdCBvbmx5LCBpZiBmaWxlIGlzIG5vdCBpZ25vcmVkXG4gICAgICBpZiAoaWdub3JlZEZpbGVzLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBuYW1lc3BhY2UuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSLCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGV4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgZXhwb3J0cy5zZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgZXhwb3J0TGlzdC5zZXQoZmlsZSwgZXhwb3J0cyk7XG4gIH0pO1xuICBleHBvcnRBbGwuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIHZhbHVlLmZvckVhY2godmFsID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnQgPSBjdXJyZW50RXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoa2V5KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIHRyYXZlcnNlIHRocm91Z2ggYWxsIGltcG9ydHMgYW5kIGFkZCB0aGUgcmVzcGVjdGl2ZSBwYXRoIHRvIHRoZSB3aGVyZVVzZWQtbGlzdFxuICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgZXhwb3J0XG4gKi9cbmNvbnN0IGRldGVybWluZVVzYWdlID0gKCkgPT4ge1xuICBpbXBvcnRMaXN0LmZvckVhY2goKGxpc3RWYWx1ZSwgbGlzdEtleSkgPT4ge1xuICAgIGxpc3RWYWx1ZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoa2V5KTtcbiAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChjdXJyZW50SW1wb3J0ID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSBzcmMgPT4ge1xuICBpZiAoc3JjKSB7XG4gICAgcmV0dXJuIHNyYztcbiAgfVxuICByZXR1cm4gW3Byb2Nlc3MuY3dkKCldO1xufTtcblxuLyoqXG4gKiBwcmVwYXJlIHRoZSBsaXN0cyBvZiBleGlzdGluZyBpbXBvcnRzIGFuZCBleHBvcnRzIC0gc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgb25jZSBhdFxuICogdGhlIHN0YXJ0IG9mIGEgbmV3IGVzbGludCBydW5cbiAqL1xubGV0IHNyY0ZpbGVzO1xubGV0IGxhc3RQcmVwYXJlS2V5O1xuY29uc3QgZG9QcmVwYXJhdGlvbiA9IChzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgcHJlcGFyZUtleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBzcmM6IChzcmMgfHwgW10pLnNvcnQoKSxcbiAgICBpZ25vcmVFeHBvcnRzOiAoaWdub3JlRXhwb3J0cyB8fCBbXSkuc29ydCgpLFxuICAgIGV4dGVuc2lvbnM6IEFycmF5LmZyb20oZ2V0RmlsZUV4dGVuc2lvbnMoY29udGV4dC5zZXR0aW5ncykpLnNvcnQoKSxcbiAgfSk7XG4gIGlmIChwcmVwYXJlS2V5ID09PSBsYXN0UHJlcGFyZUtleSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGltcG9ydExpc3QuY2xlYXIoKTtcbiAgZXhwb3J0TGlzdC5jbGVhcigpO1xuICBpZ25vcmVkRmlsZXMuY2xlYXIoKTtcbiAgZmlsZXNPdXRzaWRlU3JjLmNsZWFyKCk7XG5cbiAgc3JjRmlsZXMgPSByZXNvbHZlRmlsZXMoZ2V0U3JjKHNyYyksIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMoc3JjRmlsZXMsIGNvbnRleHQpO1xuICBkZXRlcm1pbmVVc2FnZSgpO1xuICBsYXN0UHJlcGFyZUtleSA9IHByZXBhcmVLZXk7XG59O1xuXG5jb25zdCBuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMgPSBzcGVjaWZpZXJzID0+XG4gIHNwZWNpZmllcnMuc29tZSgoeyB0eXBlIH0pID0+IHR5cGUgPT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuY29uc3QgbmV3RGVmYXVsdEltcG9ydEV4aXN0cyA9IHNwZWNpZmllcnMgPT5cbiAgc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuY29uc3QgZmlsZUlzSW5Qa2cgPSBmaWxlID0+IHtcbiAgY29uc3QgeyBwYXRoLCBwa2cgfSA9IHJlYWRQa2dVcC5zeW5jKHsgY3dkOiBmaWxlLCBub3JtYWxpemU6IGZhbHNlIH0pO1xuICBjb25zdCBiYXNlUGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZFN0cmluZyA9IHBrZ0ZpZWxkID0+IHtcbiAgICBpZiAoam9pbihiYXNlUGF0aCwgcGtnRmllbGQpID09PSBmaWxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZE9iamVjdCA9IHBrZ0ZpZWxkID0+IHtcbiAgICBjb25zdCBwa2dGaWVsZEZpbGVzID0gdmFsdWVzKHBrZ0ZpZWxkKS5tYXAodmFsdWUgPT4gam9pbihiYXNlUGF0aCwgdmFsdWUpKTtcbiAgICBpZiAoaW5jbHVkZXMocGtnRmllbGRGaWxlcywgZmlsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjaGVja1BrZ0ZpZWxkID0gcGtnRmllbGQgPT4ge1xuICAgIGlmICh0eXBlb2YgcGtnRmllbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gY2hlY2tQa2dGaWVsZFN0cmluZyhwa2dGaWVsZCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwa2dGaWVsZCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBjaGVja1BrZ0ZpZWxkT2JqZWN0KHBrZ0ZpZWxkKTtcbiAgICB9XG4gIH07XG5cbiAgaWYgKHBrZy5wcml2YXRlID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHBrZy5iaW4pIHtcbiAgICBpZiAoY2hlY2tQa2dGaWVsZChwa2cuYmluKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBrZy5icm93c2VyKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGQocGtnLmJyb3dzZXIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAocGtnLm1haW4pIHtcbiAgICBpZiAoY2hlY2tQa2dGaWVsZFN0cmluZyhwa2cubWFpbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHsgdXJsOiBkb2NzVXJsKCduby11bnVzZWQtbW9kdWxlcycpIH0sXG4gICAgc2NoZW1hOiBbe1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBzcmM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ZpbGVzL3BhdGhzIHRvIGJlIGFuYWx5emVkIChvbmx5IGZvciB1bnVzZWQgZXhwb3J0cyknLFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGlnbm9yZUV4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICdmaWxlcy9wYXRocyBmb3Igd2hpY2ggdW51c2VkIGV4cG9ydHMgd2lsbCBub3QgYmUgcmVwb3J0ZWQgKGUuZyBtb2R1bGUgZW50cnkgcG9pbnRzKScsXG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgbWlzc2luZ0V4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBtb2R1bGVzIHdpdGhvdXQgYW55IGV4cG9ydHMnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgICAgdW51c2VkRXhwb3J0czoge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAncmVwb3J0IGV4cG9ydHMgd2l0aG91dCBhbnkgdXNhZ2UnLFxuICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBub3Q6IHtcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHVudXNlZEV4cG9ydHM6IHsgZW51bTogW2ZhbHNlXSB9LFxuICAgICAgICAgIG1pc3NpbmdFeHBvcnRzOiB7IGVudW06IFtmYWxzZV0gfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhbnlPZjpbe1xuICAgICAgICBub3Q6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1bnVzZWRFeHBvcnRzOiB7IGVudW06IFt0cnVlXSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbJ21pc3NpbmdFeHBvcnRzJ10sXG4gICAgICB9LCB7XG4gICAgICAgIG5vdDoge1xuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG1pc3NpbmdFeHBvcnRzOiB7IGVudW06IFt0cnVlXSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbJ3VudXNlZEV4cG9ydHMnXSxcbiAgICAgIH0sIHtcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHVudXNlZEV4cG9ydHM6IHsgZW51bTogW3RydWVdIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmVkOiBbJ3VudXNlZEV4cG9ydHMnXSxcbiAgICAgIH0sIHtcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIG1pc3NpbmdFeHBvcnRzOiB7IGVudW06IFt0cnVlXSB9LFxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogWydtaXNzaW5nRXhwb3J0cyddLFxuICAgICAgfV0sXG4gICAgfV0sXG4gIH0sXG5cbiAgY3JlYXRlOiBjb250ZXh0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzcmMsXG4gICAgICBpZ25vcmVFeHBvcnRzID0gW10sXG4gICAgICBtaXNzaW5nRXhwb3J0cyxcbiAgICAgIHVudXNlZEV4cG9ydHMsXG4gICAgfSA9IGNvbnRleHQub3B0aW9uc1swXSB8fCB7fTtcblxuICAgIGlmICh1bnVzZWRFeHBvcnRzKSB7XG4gICAgICBkb1ByZXBhcmF0aW9uKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSA/IGNvbnRleHQuZ2V0UGh5c2ljYWxGaWxlbmFtZSgpIDogY29udGV4dC5nZXRGaWxlbmFtZSgpO1xuXG4gICAgY29uc3QgY2hlY2tFeHBvcnRQcmVzZW5jZSA9IG5vZGUgPT4ge1xuICAgICAgaWYgKCFtaXNzaW5nRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhwb3J0Q291bnQgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydENvdW50LmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRDb3VudC5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBleHBvcnRDb3VudC5kZWxldGUoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuICAgICAgaWYgKGV4cG9ydENvdW50LnNpemUgPCAxKSB7XG4gICAgICAgIC8vIG5vZGUuYm9keVswXSA9PT0gJ3VuZGVmaW5lZCcgb25seSBoYXBwZW5zLCBpZiBldmVyeXRoaW5nIGlzIGNvbW1lbnRlZCBvdXQgaW4gdGhlIGZpbGVcbiAgICAgICAgLy8gYmVpbmcgbGludGVkXG4gICAgICAgIGNvbnRleHQucmVwb3J0KG5vZGUuYm9keVswXSA/IG5vZGUuYm9keVswXSA6IG5vZGUsICdObyBleHBvcnRzIGZvdW5kJyk7XG4gICAgICB9XG4gICAgICBleHBvcnRDb3VudC5zZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTiwgZXhwb3J0QWxsKTtcbiAgICAgIGV4cG9ydENvdW50LnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNoZWNrVXNhZ2UgPSAobm9kZSwgZXhwb3J0ZWRWYWx1ZSkgPT4ge1xuICAgICAgaWYgKCF1bnVzZWRFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZUlzSW5Qa2coZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZXNPdXRzaWRlU3JjLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIG1ha2Ugc3VyZSBmaWxlIHRvIGJlIGxpbnRlZCBpcyBpbmNsdWRlZCBpbiBzb3VyY2UgZmlsZXNcbiAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHNyY0ZpbGVzID0gcmVzb2x2ZUZpbGVzKGdldFNyYyhzcmMpLCBpZ25vcmVFeHBvcnRzLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFzcmNGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgICBmaWxlc091dHNpZGVTcmMuYWRkKGZpbGUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogZXhwb3J0ICogZnJvbVxuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBpZiAodHlwZW9mIGV4cG9ydEFsbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZXhwb3J0ZWRWYWx1ZSAhPT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSB7XG4gICAgICAgIGlmIChleHBvcnRBbGwud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNwZWNpYWwgY2FzZTogbmFtZXNwYWNlIGltcG9ydFxuICAgICAgY29uc3QgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlSW1wb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKG5hbWVzcGFjZUltcG9ydHMud2hlcmVVc2VkLnNpemUgPiAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGV4cG9ydHNMaXN0IHdpbGwgYWx3YXlzIG1hcCBhbnkgaW1wb3J0ZWQgdmFsdWUgb2YgJ2RlZmF1bHQnIHRvICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJ1xuICAgICAgY29uc3QgZXhwb3J0c0tleSA9IGV4cG9ydGVkVmFsdWUgPT09IERFRkFVTFQgPyBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgOiBleHBvcnRlZFZhbHVlO1xuXG4gICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChleHBvcnRzS2V5KTtcblxuICAgICAgY29uc3QgdmFsdWUgPSBleHBvcnRzS2V5ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgPyBERUZBVUxUIDogZXhwb3J0c0tleTtcblxuICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChleHBvcnRTdGF0ZW1lbnQud2hlcmVVc2VkLnNpemUgPCAxKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnQoXG4gICAgICAgICAgbm9kZSxcbiAgICAgICAgICBgZXhwb3J0ZWQgZGVjbGFyYXRpb24gJyR7dmFsdWV9JyBub3QgdXNlZCB3aXRoaW4gb3RoZXIgbW9kdWxlc2BcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGV4cG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVFeHBvcnRVc2FnZSA9IG5vZGUgPT4ge1xuICAgICAgaWYgKGlnbm9yZWRGaWxlcy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGZpbGUpO1xuXG4gICAgICAvLyBuZXcgbW9kdWxlIGhhcyBiZWVuIGNyZWF0ZWQgZHVyaW5nIHJ1bnRpbWVcbiAgICAgIC8vIGluY2x1ZGUgaXQgaW4gZnVydGhlciBwcm9jZXNzaW5nXG4gICAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0V4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICBjb25zdCBuZXdFeHBvcnRJZGVudGlmaWVycyA9IG5ldyBTZXQoKTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goKHsgdHlwZSwgZGVjbGFyYXRpb24sIHNwZWNpZmllcnMgfSkgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gRVhQT1JUX0RFRkFVTFRfREVDTEFSQVRJT04pIHtcbiAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSA9PT0gRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgaWYgKHNwZWNpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3BlY2lmaWVycy5mb3JFYWNoKHNwZWNpZmllciA9PiB7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIuZXhwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQoc3BlY2lmaWVyLmV4cG9ydGVkLm5hbWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaERlY2xhcmF0aW9uSWRlbnRpZmllcihkZWNsYXJhdGlvbiwgKG5hbWUpID0+IHtcbiAgICAgICAgICAgIG5ld0V4cG9ydElkZW50aWZpZXJzLmFkZChuYW1lKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIG9sZCBleHBvcnRzIGV4aXN0IHdpdGhpbiBsaXN0IG9mIG5ldyBleHBvcnRzIGlkZW50aWZpZXJzOiBhZGQgdG8gbWFwIG9mIG5ldyBleHBvcnRzXG4gICAgICBleHBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKG5ld0V4cG9ydElkZW50aWZpZXJzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgbmV3RXhwb3J0cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBuZXcgZXhwb3J0IGlkZW50aWZpZXJzIGFkZGVkOiBhZGQgdG8gbWFwIG9mIG5ldyBleHBvcnRzXG4gICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmICghZXhwb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHByZXNlcnZlIGluZm9ybWF0aW9uIGFib3V0IG5hbWVzcGFjZSBpbXBvcnRzXG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgIGxldCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0cy5nZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIG5hbWVzcGFjZUltcG9ydHMgPSB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH07XG4gICAgICB9XG5cbiAgICAgIG5ld0V4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBuZXdFeHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgbmFtZXNwYWNlSW1wb3J0cyk7XG4gICAgICBleHBvcnRMaXN0LnNldChmaWxlLCBuZXdFeHBvcnRzKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogb25seSB1c2VmdWwgZm9yIHRvb2xzIGxpa2UgdnNjb2RlLWVzbGludFxuICAgICAqXG4gICAgICogdXBkYXRlIGxpc3RzIG9mIGV4aXN0aW5nIGltcG9ydHMgZHVyaW5nIHJ1bnRpbWVcbiAgICAgKi9cbiAgICBjb25zdCB1cGRhdGVJbXBvcnRVc2FnZSA9IG5vZGUgPT4ge1xuICAgICAgaWYgKCF1bnVzZWRFeHBvcnRzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IG9sZEltcG9ydFBhdGhzID0gaW1wb3J0TGlzdC5nZXQoZmlsZSk7XG4gICAgICBpZiAodHlwZW9mIG9sZEltcG9ydFBhdGhzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvbGRJbXBvcnRQYXRocyA9IG5ldyBNYXAoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2xkTmFtZXNwYWNlSW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld05hbWVzcGFjZUltcG9ydHMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIGNvbnN0IG9sZEV4cG9ydEFsbCA9IG5ldyBTZXQoKTtcbiAgICAgIGNvbnN0IG5ld0V4cG9ydEFsbCA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkRGVmYXVsdEltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICBjb25zdCBuZXdEZWZhdWx0SW1wb3J0cyA9IG5ldyBTZXQoKTtcblxuICAgICAgY29uc3Qgb2xkSW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgIGNvbnN0IG5ld0ltcG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICBvbGRJbXBvcnRQYXRocy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5oYXMoRVhQT1JUX0FMTF9ERUNMQVJBVElPTikpIHtcbiAgICAgICAgICBvbGRFeHBvcnRBbGwuYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLmhhcyhJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikpIHtcbiAgICAgICAgICBvbGROYW1lc3BhY2VJbXBvcnRzLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5oYXMoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKSkge1xuICAgICAgICAgIG9sZERlZmF1bHRJbXBvcnRzLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICBpZiAodmFsICE9PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiAmJlxuICAgICAgICAgICAgICB2YWwgIT09IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUikge1xuICAgICAgICAgICAgb2xkSW1wb3J0cy5zZXQodmFsLCBrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goYXN0Tm9kZSA9PiB7XG4gICAgICAgIGxldCByZXNvbHZlZFBhdGg7XG5cbiAgICAgICAgLy8gc3VwcG9ydCBmb3IgZXhwb3J0IHsgdmFsdWUgfSBmcm9tICdtb2R1bGUnXG4gICAgICAgIGlmIChhc3ROb2RlLnR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChhc3ROb2RlLnNvdXJjZSkge1xuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgICBhc3ROb2RlLnNwZWNpZmllcnMuZm9yRWFjaChzcGVjaWZpZXIgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIubG9jYWwubmFtZSA9PT0gREVGQVVMVCkge1xuICAgICAgICAgICAgICAgIG5ld0RlZmF1bHRJbXBvcnRzLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0ltcG9ydHMuc2V0KG5hbWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhc3ROb2RlLnR5cGUgPT09IEVYUE9SVF9BTExfREVDTEFSQVRJT04pIHtcbiAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICBuZXdFeHBvcnRBbGwuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBJTVBPUlRfREVDTEFSQVRJT04pIHtcbiAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc05vZGVNb2R1bGUocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3TmFtZXNwYWNlSW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3RGVmYXVsdEltcG9ydEV4aXN0cyhhc3ROb2RlLnNwZWNpZmllcnMpKSB7XG4gICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhc3ROb2RlLnNwZWNpZmllcnMuZm9yRWFjaChzcGVjaWZpZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHNwZWNpZmllci50eXBlID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgfHxcbiAgICAgICAgICAgICAgICBzcGVjaWZpZXIudHlwZSA9PT0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3SW1wb3J0cy5zZXQoc3BlY2lmaWVyLmltcG9ydGVkLm5hbWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdFeHBvcnRBbGwuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghb2xkRXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OLCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRFeHBvcnRBbGwuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghb2xkRGVmYXVsdEltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGxldCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbXBvcnRzLmFkZChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG9sZERlZmF1bHRJbXBvcnRzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICBpZiAoIW5ld0RlZmF1bHRJbXBvcnRzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuXG4gICAgICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKCFuZXdOYW1lc3BhY2VJbXBvcnRzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG5cbiAgICAgICAgICBjb25zdCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFvbGRJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChrZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICghbmV3SW1wb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKGtleSk7XG5cbiAgICAgICAgICBjb25zdCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICdQcm9ncmFtOmV4aXQnOiBub2RlID0+IHtcbiAgICAgICAgdXBkYXRlRXhwb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIHVwZGF0ZUltcG9ydFVzYWdlKG5vZGUpO1xuICAgICAgICBjaGVja0V4cG9ydFByZXNlbmNlKG5vZGUpO1xuICAgICAgfSxcbiAgICAgICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nOiBub2RlID0+IHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgfSxcbiAgICAgICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJzogbm9kZSA9PiB7XG4gICAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKHNwZWNpZmllciA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShub2RlLCBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKG5vZGUuZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShub2RlLCBuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby11bnVzZWQtbW9kdWxlcy5qcyJdLCJuYW1lcyI6WyJGaWxlRW51bWVyYXRvciIsImxpc3RGaWxlc1RvUHJvY2VzcyIsInJlcXVpcmUiLCJlIiwib3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3MiLCJzcmMiLCJleHRlbnNpb25zIiwicGF0dGVybnMiLCJyZWR1Y2UiLCJjYXJyeSIsInBhdHRlcm4iLCJjb25jYXQiLCJtYXAiLCJleHRlbnNpb24iLCJ0ZXN0Iiwic2xpY2UiLCJBcnJheSIsImZyb20iLCJpdGVyYXRlRmlsZXMiLCJmaWxlUGF0aCIsImlnbm9yZWQiLCJmaWxlbmFtZSIsIkVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OIiwiRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OIiwiRVhQT1JUX0FMTF9ERUNMQVJBVElPTiIsIklNUE9SVF9ERUNMQVJBVElPTiIsIklNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSIiwiSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSIiwiVkFSSUFCTEVfREVDTEFSQVRJT04iLCJGVU5DVElPTl9ERUNMQVJBVElPTiIsIkNMQVNTX0RFQ0xBUkFUSU9OIiwiSURFTlRJRklFUiIsIk9CSkVDVF9QQVRURVJOIiwiVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OIiwiVFNfVFlQRV9BTElBU19ERUNMQVJBVElPTiIsIlRTX0VOVU1fREVDTEFSQVRJT04iLCJERUZBVUxUIiwiZm9yRWFjaERlY2xhcmF0aW9uSWRlbnRpZmllciIsImRlY2xhcmF0aW9uIiwiY2IiLCJ0eXBlIiwiaWQiLCJuYW1lIiwiZGVjbGFyYXRpb25zIiwiZm9yRWFjaCIsImltcG9ydExpc3QiLCJNYXAiLCJleHBvcnRMaXN0IiwidmlzaXRvcktleU1hcCIsImlnbm9yZWRGaWxlcyIsIlNldCIsImZpbGVzT3V0c2lkZVNyYyIsImlzTm9kZU1vZHVsZSIsInBhdGgiLCJyZXNvbHZlRmlsZXMiLCJpZ25vcmVFeHBvcnRzIiwiY29udGV4dCIsInNldHRpbmdzIiwic3JjRmlsZXMiLCJzcmNGaWxlTGlzdCIsImlnbm9yZWRGaWxlc0xpc3QiLCJhZGQiLCJmaWx0ZXIiLCJwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMiLCJleHBvcnRBbGwiLCJleHBvcnRzIiwiaW1wb3J0cyIsImN1cnJlbnRFeHBvcnRzIiwiRXhwb3J0cyIsImdldCIsImZpbGUiLCJkZXBlbmRlbmNpZXMiLCJyZWV4cG9ydHMiLCJsb2NhbEltcG9ydExpc3QiLCJuYW1lc3BhY2UiLCJ2aXNpdG9yS2V5cyIsInNldCIsImN1cnJlbnRFeHBvcnRBbGwiLCJkZXBlbmRlbmN5IiwiZ2V0RGVwZW5kZW5jeSIsInZhbHVlIiwia2V5Iiwid2hlcmVVc2VkIiwicmVleHBvcnQiLCJnZXRJbXBvcnQiLCJsb2NhbEltcG9ydCIsImN1cnJlbnRWYWx1ZSIsImxvY2FsIiwiaW1wb3J0ZWRTcGVjaWZpZXJzIiwic3BlY2lmaWVyIiwiaGFzIiwidmFsIiwiY3VycmVudEV4cG9ydCIsImRldGVybWluZVVzYWdlIiwibGlzdFZhbHVlIiwibGlzdEtleSIsImN1cnJlbnRJbXBvcnQiLCJleHBvcnRTdGF0ZW1lbnQiLCJnZXRTcmMiLCJwcm9jZXNzIiwiY3dkIiwibGFzdFByZXBhcmVLZXkiLCJkb1ByZXBhcmF0aW9uIiwicHJlcGFyZUtleSIsIkpTT04iLCJzdHJpbmdpZnkiLCJzb3J0IiwiY2xlYXIiLCJuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMiLCJzcGVjaWZpZXJzIiwic29tZSIsIm5ld0RlZmF1bHRJbXBvcnRFeGlzdHMiLCJmaWxlSXNJblBrZyIsInBrZyIsImJhc2VQYXRoIiwiY2hlY2tQa2dGaWVsZFN0cmluZyIsInBrZ0ZpZWxkIiwiY2hlY2tQa2dGaWVsZE9iamVjdCIsInBrZ0ZpZWxkRmlsZXMiLCJjaGVja1BrZ0ZpZWxkIiwiYmluIiwiYnJvd3NlciIsIm1haW4iLCJtb2R1bGUiLCJtZXRhIiwiZG9jcyIsInVybCIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJkZXNjcmlwdGlvbiIsIm1pbkl0ZW1zIiwiaXRlbXMiLCJtaW5MZW5ndGgiLCJtaXNzaW5nRXhwb3J0cyIsInVudXNlZEV4cG9ydHMiLCJub3QiLCJhbnlPZiIsInJlcXVpcmVkIiwiY3JlYXRlIiwib3B0aW9ucyIsImdldFBoeXNpY2FsRmlsZW5hbWUiLCJnZXRGaWxlbmFtZSIsImNoZWNrRXhwb3J0UHJlc2VuY2UiLCJleHBvcnRDb3VudCIsIm5hbWVzcGFjZUltcG9ydHMiLCJzaXplIiwicmVwb3J0Iiwibm9kZSIsImJvZHkiLCJjaGVja1VzYWdlIiwiZXhwb3J0ZWRWYWx1ZSIsImV4cG9ydHNLZXkiLCJ1cGRhdGVFeHBvcnRVc2FnZSIsIm5ld0V4cG9ydHMiLCJuZXdFeHBvcnRJZGVudGlmaWVycyIsImxlbmd0aCIsImV4cG9ydGVkIiwidXBkYXRlSW1wb3J0VXNhZ2UiLCJvbGRJbXBvcnRQYXRocyIsIm9sZE5hbWVzcGFjZUltcG9ydHMiLCJuZXdOYW1lc3BhY2VJbXBvcnRzIiwib2xkRXhwb3J0QWxsIiwibmV3RXhwb3J0QWxsIiwib2xkRGVmYXVsdEltcG9ydHMiLCJuZXdEZWZhdWx0SW1wb3J0cyIsIm9sZEltcG9ydHMiLCJuZXdJbXBvcnRzIiwicHJvY2Vzc0R5bmFtaWNJbXBvcnQiLCJzb3VyY2UiLCJwIiwiSW1wb3J0RXhwcmVzc2lvbiIsImNoaWxkIiwiQ2FsbEV4cHJlc3Npb24iLCJjYWxsZWUiLCJhcmd1bWVudHMiLCJyZXNvbHZlZFBhdGgiLCJhc3ROb2RlIiwicmF3IiwicmVwbGFjZSIsImltcG9ydGVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSx5QztBQUNBO0FBQ0Esc0Q7QUFDQSxrRDtBQUNBLHFDO0FBQ0E7QUFDQSwyRDtBQUNBLHVDO0FBQ0EsK0MsdVZBZEE7Ozs7eVlBZ0JBLElBQUlBLHVCQUFKLENBQ0EsSUFBSUMsMkJBQUo7QUFFQSxJQUFJO0FBQ29CQyxVQUFRLDZCQUFSLENBRHBCLENBQ0NGLGNBREQsWUFDQ0EsY0FERDtBQUVILENBRkQsQ0FFRSxPQUFPRyxDQUFQLEVBQVU7QUFDVixNQUFJOztBQUVvQkQsWUFBUSx1Q0FBUixDQUZwQixFQUNGO0FBQ0dGLGtCQUZELGFBRUNBLGNBRkQsQ0FHSCxDQUhELENBR0UsT0FBT0csQ0FBUCxFQUFVO0FBQ1YsUUFBSTtBQUNGO0FBREUsc0JBRXlERCxRQUFRLDRCQUFSLENBRnpELENBRTBCRSwwQkFGMUIsYUFFTUgsa0JBRk47O0FBSUY7QUFDQTtBQUNBO0FBQ0FBLDJCQUFxQiw0QkFBVUksR0FBVixFQUFlQyxVQUFmLEVBQTJCO0FBQzlDLGVBQU9GLDJCQUEyQkMsR0FBM0IsRUFBZ0M7QUFDckNDLGdDQURxQyxFQUFoQyxDQUFQOztBQUdELE9BSkQ7QUFLRCxLQVpELENBWUUsT0FBT0gsQ0FBUCxFQUFVO0FBQ2lERCxjQUFRLDJCQUFSLENBRGpELENBQ2tCRSwyQkFEbEIsYUFDRkgsa0JBREU7O0FBR1ZBLDJCQUFxQiw0QkFBVUksR0FBVixFQUFlQyxVQUFmLEVBQTJCO0FBQzlDLFlBQU1DLFdBQVdGLElBQUlHLE1BQUosQ0FBVyxVQUFDQyxLQUFELEVBQVFDLE9BQVIsRUFBb0I7QUFDOUMsaUJBQU9ELE1BQU1FLE1BQU4sQ0FBYUwsV0FBV00sR0FBWCxDQUFlLFVBQUNDLFNBQUQsRUFBZTtBQUNoRCxtQkFBTyxhQUFZQyxJQUFaLENBQWlCSixPQUFqQixJQUE0QkEsT0FBNUIsVUFBeUNBLE9BQXpDLHFCQUF3REcsU0FBeEQsQ0FBUDtBQUNELFdBRm1CLENBQWIsQ0FBUDtBQUdELFNBSmdCLEVBSWRSLElBQUlVLEtBQUosRUFKYyxDQUFqQjs7QUFNQSxlQUFPWCw0QkFBMkJHLFFBQTNCLENBQVA7QUFDRCxPQVJEO0FBU0Q7QUFDRjtBQUNGOztBQUVELElBQUlQLGNBQUosRUFBb0I7QUFDbEJDLHVCQUFxQiw0QkFBVUksR0FBVixFQUFlQyxVQUFmLEVBQTJCO0FBQzlDLFFBQU1ILElBQUksSUFBSUgsY0FBSixDQUFtQjtBQUMzQk0sNEJBRDJCLEVBQW5CLENBQVY7OztBQUlBLFdBQU9VLE1BQU1DLElBQU4sQ0FBV2QsRUFBRWUsWUFBRixDQUFlYixHQUFmLENBQVgsRUFBZ0MscUJBQUdjLFFBQUgsUUFBR0EsUUFBSCxDQUFhQyxPQUFiLFFBQWFBLE9BQWIsUUFBNEI7QUFDakVBLHdCQURpRTtBQUVqRUMsa0JBQVVGLFFBRnVELEVBQTVCLEVBQWhDLENBQVA7O0FBSUQsR0FURDtBQVVEOztBQUVELElBQU1HLDZCQUE2QiwwQkFBbkM7QUFDQSxJQUFNQywyQkFBMkIsd0JBQWpDO0FBQ0EsSUFBTUMseUJBQXlCLHNCQUEvQjtBQUNBLElBQU1DLHFCQUFxQixtQkFBM0I7QUFDQSxJQUFNQyw2QkFBNkIsMEJBQW5DO0FBQ0EsSUFBTUMsMkJBQTJCLHdCQUFqQztBQUNBLElBQU1DLHVCQUF1QixxQkFBN0I7QUFDQSxJQUFNQyx1QkFBdUIscUJBQTdCO0FBQ0EsSUFBTUMsb0JBQW9CLGtCQUExQjtBQUNBLElBQU1DLGFBQWEsWUFBbkI7QUFDQSxJQUFNQyxpQkFBaUIsZUFBdkI7QUFDQSxJQUFNQywyQkFBMkIsd0JBQWpDO0FBQ0EsSUFBTUMsNEJBQTRCLHdCQUFsQztBQUNBLElBQU1DLHNCQUFzQixtQkFBNUI7QUFDQSxJQUFNQyxVQUFVLFNBQWhCOztBQUVBLFNBQVNDLDRCQUFULENBQXNDQyxXQUF0QyxFQUFtREMsRUFBbkQsRUFBdUQ7QUFDckQsTUFBSUQsV0FBSixFQUFpQjtBQUNmO0FBQ0VBLGdCQUFZRSxJQUFaLEtBQXFCWCxvQkFBckI7QUFDQVMsZ0JBQVlFLElBQVosS0FBcUJWLGlCQURyQjtBQUVBUSxnQkFBWUUsSUFBWixLQUFxQlAsd0JBRnJCO0FBR0FLLGdCQUFZRSxJQUFaLEtBQXFCTix5QkFIckI7QUFJQUksZ0JBQVlFLElBQVosS0FBcUJMLG1CQUx2QjtBQU1FO0FBQ0FJLFNBQUdELFlBQVlHLEVBQVosQ0FBZUMsSUFBbEI7QUFDRCxLQVJELE1BUU8sSUFBSUosWUFBWUUsSUFBWixLQUFxQlosb0JBQXpCLEVBQStDO0FBQ3BEVSxrQkFBWUssWUFBWixDQUF5QkMsT0FBekIsQ0FBaUMsaUJBQVksS0FBVEgsRUFBUyxTQUFUQSxFQUFTO0FBQzNDLFlBQUlBLEdBQUdELElBQUgsS0FBWVIsY0FBaEIsRUFBZ0M7QUFDOUIsa0RBQXdCUyxFQUF4QixFQUE0QixVQUFDL0IsT0FBRCxFQUFhO0FBQ3ZDLGdCQUFJQSxRQUFROEIsSUFBUixLQUFpQlQsVUFBckIsRUFBaUM7QUFDL0JRLGlCQUFHN0IsUUFBUWdDLElBQVg7QUFDRDtBQUNGLFdBSkQ7QUFLRCxTQU5ELE1BTU87QUFDTEgsYUFBR0UsR0FBR0MsSUFBTjtBQUNEO0FBQ0YsT0FWRDtBQVdEO0FBQ0Y7QUFDRjs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxJQUFNRyxhQUFhLElBQUlDLEdBQUosRUFBbkI7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF5QkEsSUFBTUMsYUFBYSxJQUFJRCxHQUFKLEVBQW5COztBQUVBLElBQU1FLGdCQUFnQixJQUFJRixHQUFKLEVBQXRCOztBQUVBLElBQU1HLGVBQWUsSUFBSUMsR0FBSixFQUFyQjtBQUNBLElBQU1DLGtCQUFrQixJQUFJRCxHQUFKLEVBQXhCOztBQUVBLElBQU1FLGVBQWUsU0FBZkEsWUFBZSxPQUFRO0FBQzNCLFNBQU8sc0JBQXFCdEMsSUFBckIsQ0FBMEJ1QyxJQUExQixDQUFQO0FBQ0QsQ0FGRDs7QUFJQTs7Ozs7QUFLQSxJQUFNQyxlQUFlLFNBQWZBLFlBQWUsQ0FBQ2pELEdBQUQsRUFBTWtELGFBQU4sRUFBcUJDLE9BQXJCLEVBQWlDO0FBQ3BELE1BQU1sRCxhQUFhVSxNQUFNQyxJQUFOLENBQVcsK0JBQWtCdUMsUUFBUUMsUUFBMUIsQ0FBWCxDQUFuQjs7QUFFQSxNQUFNQyxXQUFXLElBQUlSLEdBQUosRUFBakI7QUFDQSxNQUFNUyxjQUFjMUQsbUJBQW1CSSxHQUFuQixFQUF3QkMsVUFBeEIsQ0FBcEI7O0FBRUE7QUFDQSxNQUFNc0QsbUJBQW9CM0QsbUJBQW1Cc0QsYUFBbkIsRUFBa0NqRCxVQUFsQyxDQUExQjtBQUNBc0QsbUJBQWlCaEIsT0FBakIsQ0FBeUIsc0JBQUd2QixRQUFILFNBQUdBLFFBQUgsUUFBa0I0QixhQUFhWSxHQUFiLENBQWlCeEMsUUFBakIsQ0FBbEIsRUFBekI7O0FBRUE7QUFDQXNDLGNBQVlHLE1BQVosQ0FBbUIsc0JBQUd6QyxRQUFILFNBQUdBLFFBQUgsUUFBa0IsQ0FBQytCLGFBQWEvQixRQUFiLENBQW5CLEVBQW5CLEVBQThEdUIsT0FBOUQsQ0FBc0UsaUJBQWtCLEtBQWZ2QixRQUFlLFNBQWZBLFFBQWU7QUFDdEZxQyxhQUFTRyxHQUFULENBQWF4QyxRQUFiO0FBQ0QsR0FGRDtBQUdBLFNBQU9xQyxRQUFQO0FBQ0QsQ0FmRDs7QUFpQkE7OztBQUdBLElBQU1LLDJCQUEyQixTQUEzQkEsd0JBQTJCLENBQUNMLFFBQUQsRUFBV0YsT0FBWCxFQUF1QjtBQUN0RCxNQUFNUSxZQUFZLElBQUlsQixHQUFKLEVBQWxCO0FBQ0FZLFdBQVNkLE9BQVQsQ0FBaUIsZ0JBQVE7QUFDdkIsUUFBTXFCLFVBQVUsSUFBSW5CLEdBQUosRUFBaEI7QUFDQSxRQUFNb0IsVUFBVSxJQUFJcEIsR0FBSixFQUFoQjtBQUNBLFFBQU1xQixpQkFBaUJDLHVCQUFRQyxHQUFSLENBQVlDLElBQVosRUFBa0JkLE9BQWxCLENBQXZCO0FBQ0EsUUFBSVcsY0FBSixFQUFvQjs7QUFFaEJJLGtCQUZnQjs7Ozs7QUFPZEosb0JBUGMsQ0FFaEJJLFlBRmdCLENBR2hCQyxTQUhnQixHQU9kTCxjQVBjLENBR2hCSyxTQUhnQixDQUlQQyxlQUpPLEdBT2ROLGNBUGMsQ0FJaEJELE9BSmdCLENBS2hCUSxTQUxnQixHQU9kUCxjQVBjLENBS2hCTyxTQUxnQixDQU1oQkMsV0FOZ0IsR0FPZFIsY0FQYyxDQU1oQlEsV0FOZ0I7O0FBU2xCM0Isb0JBQWM0QixHQUFkLENBQWtCTixJQUFsQixFQUF3QkssV0FBeEI7QUFDQTtBQUNBLFVBQU1FLG1CQUFtQixJQUFJM0IsR0FBSixFQUF6QjtBQUNBcUIsbUJBQWEzQixPQUFiLENBQXFCLHlCQUFpQjtBQUNwQyxZQUFNa0MsYUFBYUMsZUFBbkI7QUFDQSxZQUFJRCxlQUFlLElBQW5CLEVBQXlCO0FBQ3ZCO0FBQ0Q7O0FBRURELHlCQUFpQmhCLEdBQWpCLENBQXFCaUIsV0FBV3pCLElBQWhDO0FBQ0QsT0FQRDtBQVFBVyxnQkFBVVksR0FBVixDQUFjTixJQUFkLEVBQW9CTyxnQkFBcEI7O0FBRUFMLGdCQUFVNUIsT0FBVixDQUFrQixVQUFDb0MsS0FBRCxFQUFRQyxHQUFSLEVBQWdCO0FBQ2hDLFlBQUlBLFFBQVE3QyxPQUFaLEVBQXFCO0FBQ25CNkIsa0JBQVFXLEdBQVIsQ0FBWWpELHdCQUFaLEVBQXNDLEVBQUV1RCxXQUFXLElBQUloQyxHQUFKLEVBQWIsRUFBdEM7QUFDRCxTQUZELE1BRU87QUFDTGUsa0JBQVFXLEdBQVIsQ0FBWUssR0FBWixFQUFpQixFQUFFQyxXQUFXLElBQUloQyxHQUFKLEVBQWIsRUFBakI7QUFDRDtBQUNELFlBQU1pQyxXQUFZSCxNQUFNSSxTQUFOLEVBQWxCO0FBQ0EsWUFBSSxDQUFDRCxRQUFMLEVBQWU7QUFDYjtBQUNEO0FBQ0QsWUFBSUUsY0FBY25CLFFBQVFHLEdBQVIsQ0FBWWMsU0FBUzlCLElBQXJCLENBQWxCO0FBQ0EsWUFBSWlDLHFCQUFKO0FBQ0EsWUFBSU4sTUFBTU8sS0FBTixLQUFnQm5ELE9BQXBCLEVBQTZCO0FBQzNCa0QseUJBQWUzRCx3QkFBZjtBQUNELFNBRkQsTUFFTztBQUNMMkQseUJBQWVOLE1BQU1PLEtBQXJCO0FBQ0Q7QUFDRCxZQUFJLE9BQU9GLFdBQVAsS0FBdUIsV0FBM0IsRUFBd0M7QUFDdENBLHdCQUFjLElBQUluQyxHQUFKLDhCQUFZbUMsV0FBWixJQUF5QkMsWUFBekIsR0FBZDtBQUNELFNBRkQsTUFFTztBQUNMRCx3QkFBYyxJQUFJbkMsR0FBSixDQUFRLENBQUNvQyxZQUFELENBQVIsQ0FBZDtBQUNEO0FBQ0RwQixnQkFBUVUsR0FBUixDQUFZTyxTQUFTOUIsSUFBckIsRUFBMkJnQyxXQUEzQjtBQUNELE9BdkJEOztBQXlCQVosc0JBQWdCN0IsT0FBaEIsQ0FBd0IsVUFBQ29DLEtBQUQsRUFBUUMsR0FBUixFQUFnQjtBQUN0QyxZQUFJN0IsYUFBYTZCLEdBQWIsQ0FBSixFQUF1QjtBQUNyQjtBQUNEO0FBQ0QsWUFBTUksY0FBY25CLFFBQVFHLEdBQVIsQ0FBWVksR0FBWixLQUFvQixJQUFJL0IsR0FBSixFQUF4QztBQUNBOEIsY0FBTXJDLFlBQU4sQ0FBbUJDLE9BQW5CLENBQTJCLHNCQUFHNEMsa0JBQUgsU0FBR0Esa0JBQUg7QUFDekJBLCtCQUFtQjVDLE9BQW5CLENBQTJCLDZCQUFheUMsWUFBWXhCLEdBQVosQ0FBZ0I0QixTQUFoQixDQUFiLEVBQTNCLENBRHlCLEdBQTNCOztBQUdBdkIsZ0JBQVFVLEdBQVIsQ0FBWUssR0FBWixFQUFpQkksV0FBakI7QUFDRCxPQVREO0FBVUF4QyxpQkFBVytCLEdBQVgsQ0FBZU4sSUFBZixFQUFxQkosT0FBckI7O0FBRUE7QUFDQSxVQUFJakIsYUFBYXlDLEdBQWIsQ0FBaUJwQixJQUFqQixDQUFKLEVBQTRCO0FBQzFCO0FBQ0Q7QUFDREksZ0JBQVU5QixPQUFWLENBQWtCLFVBQUNvQyxLQUFELEVBQVFDLEdBQVIsRUFBZ0I7QUFDaEMsWUFBSUEsUUFBUTdDLE9BQVosRUFBcUI7QUFDbkI2QixrQkFBUVcsR0FBUixDQUFZakQsd0JBQVosRUFBc0MsRUFBRXVELFdBQVcsSUFBSWhDLEdBQUosRUFBYixFQUF0QztBQUNELFNBRkQsTUFFTztBQUNMZSxrQkFBUVcsR0FBUixDQUFZSyxHQUFaLEVBQWlCLEVBQUVDLFdBQVcsSUFBSWhDLEdBQUosRUFBYixFQUFqQjtBQUNEO0FBQ0YsT0FORDtBQU9EO0FBQ0RlLFlBQVFXLEdBQVIsQ0FBWXBELHNCQUFaLEVBQW9DLEVBQUUwRCxXQUFXLElBQUloQyxHQUFKLEVBQWIsRUFBcEM7QUFDQWUsWUFBUVcsR0FBUixDQUFZbEQsMEJBQVosRUFBd0MsRUFBRXdELFdBQVcsSUFBSWhDLEdBQUosRUFBYixFQUF4QztBQUNBSCxlQUFXNkIsR0FBWCxDQUFlTixJQUFmLEVBQXFCTCxPQUFyQjtBQUNELEdBOUVEO0FBK0VBRCxZQUFVcEIsT0FBVixDQUFrQixVQUFDb0MsS0FBRCxFQUFRQyxHQUFSLEVBQWdCO0FBQ2hDRCxVQUFNcEMsT0FBTixDQUFjLGVBQU87QUFDbkIsVUFBTXVCLGlCQUFpQnBCLFdBQVdzQixHQUFYLENBQWVzQixHQUFmLENBQXZCO0FBQ0EsVUFBTUMsZ0JBQWdCekIsZUFBZUUsR0FBZixDQUFtQjdDLHNCQUFuQixDQUF0QjtBQUNBb0Usb0JBQWNWLFNBQWQsQ0FBd0JyQixHQUF4QixDQUE0Qm9CLEdBQTVCO0FBQ0QsS0FKRDtBQUtELEdBTkQ7QUFPRCxDQXhGRDs7QUEwRkE7Ozs7QUFJQSxJQUFNWSxpQkFBaUIsU0FBakJBLGNBQWlCLEdBQU07QUFDM0JoRCxhQUFXRCxPQUFYLENBQW1CLFVBQUNrRCxTQUFELEVBQVlDLE9BQVosRUFBd0I7QUFDekNELGNBQVVsRCxPQUFWLENBQWtCLFVBQUNvQyxLQUFELEVBQVFDLEdBQVIsRUFBZ0I7QUFDaEMsVUFBTWhCLFVBQVVsQixXQUFXc0IsR0FBWCxDQUFlWSxHQUFmLENBQWhCO0FBQ0EsVUFBSSxPQUFPaEIsT0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQ2UsY0FBTXBDLE9BQU4sQ0FBYyx5QkFBaUI7QUFDN0IsY0FBSTZDLGtCQUFKO0FBQ0EsY0FBSU8sa0JBQWtCdEUsMEJBQXRCLEVBQWtEO0FBQ2hEK0Qsd0JBQVkvRCwwQkFBWjtBQUNELFdBRkQsTUFFTyxJQUFJc0Usa0JBQWtCckUsd0JBQXRCLEVBQWdEO0FBQ3JEOEQsd0JBQVk5RCx3QkFBWjtBQUNELFdBRk0sTUFFQTtBQUNMOEQsd0JBQVlPLGFBQVo7QUFDRDtBQUNELGNBQUksT0FBT1AsU0FBUCxLQUFxQixXQUF6QixFQUFzQztBQUNwQyxnQkFBTVEsa0JBQWtCaEMsUUFBUUksR0FBUixDQUFZb0IsU0FBWixDQUF4QjtBQUNBLGdCQUFJLE9BQU9RLGVBQVAsS0FBMkIsV0FBL0IsRUFBNEM7QUFDbENmLHVCQURrQyxHQUNwQmUsZUFEb0IsQ0FDbENmLFNBRGtDO0FBRTFDQSx3QkFBVXJCLEdBQVYsQ0FBY2tDLE9BQWQ7QUFDQTlCLHNCQUFRVyxHQUFSLENBQVlhLFNBQVosRUFBdUIsRUFBRVAsb0JBQUYsRUFBdkI7QUFDRDtBQUNGO0FBQ0YsU0FqQkQ7QUFrQkQ7QUFDRixLQXRCRDtBQXVCRCxHQXhCRDtBQXlCRCxDQTFCRDs7QUE0QkEsSUFBTWdCLFNBQVMsU0FBVEEsTUFBUyxNQUFPO0FBQ3BCLE1BQUk3RixHQUFKLEVBQVM7QUFDUCxXQUFPQSxHQUFQO0FBQ0Q7QUFDRCxTQUFPLENBQUM4RixRQUFRQyxHQUFSLEVBQUQsQ0FBUDtBQUNELENBTEQ7O0FBT0E7Ozs7QUFJQSxJQUFJMUMsaUJBQUo7QUFDQSxJQUFJMkMsdUJBQUo7QUFDQSxJQUFNQyxnQkFBZ0IsU0FBaEJBLGFBQWdCLENBQUNqRyxHQUFELEVBQU1rRCxhQUFOLEVBQXFCQyxPQUFyQixFQUFpQztBQUNyRCxNQUFNK0MsYUFBYUMsS0FBS0MsU0FBTCxDQUFlO0FBQ2hDcEcsU0FBSyxDQUFDQSxPQUFPLEVBQVIsRUFBWXFHLElBQVosRUFEMkI7QUFFaENuRCxtQkFBZSxDQUFDQSxpQkFBaUIsRUFBbEIsRUFBc0JtRCxJQUF0QixFQUZpQjtBQUdoQ3BHLGdCQUFZVSxNQUFNQyxJQUFOLENBQVcsK0JBQWtCdUMsUUFBUUMsUUFBMUIsQ0FBWCxFQUFnRGlELElBQWhELEVBSG9CLEVBQWYsQ0FBbkI7O0FBS0EsTUFBSUgsZUFBZUYsY0FBbkIsRUFBbUM7QUFDakM7QUFDRDs7QUFFRHhELGFBQVc4RCxLQUFYO0FBQ0E1RCxhQUFXNEQsS0FBWDtBQUNBMUQsZUFBYTBELEtBQWI7QUFDQXhELGtCQUFnQndELEtBQWhCOztBQUVBakQsYUFBV0osYUFBYTRDLE9BQU83RixHQUFQLENBQWIsRUFBMEJrRCxhQUExQixFQUF5Q0MsT0FBekMsQ0FBWDtBQUNBTywyQkFBeUJMLFFBQXpCLEVBQW1DRixPQUFuQztBQUNBcUM7QUFDQVEsbUJBQWlCRSxVQUFqQjtBQUNELENBbkJEOztBQXFCQSxJQUFNSywyQkFBMkIsU0FBM0JBLHdCQUEyQjtBQUMvQkMsZUFBV0MsSUFBWCxDQUFnQixzQkFBR3RFLElBQUgsU0FBR0EsSUFBSCxRQUFjQSxTQUFTZCwwQkFBdkIsRUFBaEIsQ0FEK0IsR0FBakM7O0FBR0EsSUFBTXFGLHlCQUF5QixTQUF6QkEsc0JBQXlCO0FBQzdCRixlQUFXQyxJQUFYLENBQWdCLHNCQUFHdEUsSUFBSCxTQUFHQSxJQUFILFFBQWNBLFNBQVNiLHdCQUF2QixFQUFoQixDQUQ2QixHQUEvQjs7QUFHQSxJQUFNcUYsY0FBYyxTQUFkQSxXQUFjLE9BQVE7QUFDSiw4QkFBVSxFQUFFWixLQUFLOUIsSUFBUCxFQUFWLENBREksQ0FDbEJqQixJQURrQixjQUNsQkEsSUFEa0IsQ0FDWjRELEdBRFksY0FDWkEsR0FEWTtBQUUxQixNQUFNQyxXQUFXLG1CQUFRN0QsSUFBUixDQUFqQjs7QUFFQSxNQUFNOEQsc0JBQXNCLFNBQXRCQSxtQkFBc0IsV0FBWTtBQUN0QyxRQUFJLGdCQUFLRCxRQUFMLEVBQWVFLFFBQWYsTUFBNkI5QyxJQUFqQyxFQUF1QztBQUNyQyxhQUFPLElBQVA7QUFDRDtBQUNGLEdBSkQ7O0FBTUEsTUFBTStDLHNCQUFzQixTQUF0QkEsbUJBQXNCLFdBQVk7QUFDdEMsUUFBTUMsZ0JBQWdCLHlCQUFPRixRQUFQLEVBQWlCeEcsR0FBakIsQ0FBcUIseUJBQVMsZ0JBQUtzRyxRQUFMLEVBQWVsQyxLQUFmLENBQVQsRUFBckIsQ0FBdEI7QUFDQSxRQUFJLGdDQUFTc0MsYUFBVCxFQUF3QmhELElBQXhCLENBQUosRUFBbUM7QUFDakMsYUFBTyxJQUFQO0FBQ0Q7QUFDRixHQUxEOztBQU9BLE1BQU1pRCxnQkFBZ0IsU0FBaEJBLGFBQWdCLFdBQVk7QUFDaEMsUUFBSSxPQUFPSCxRQUFQLEtBQW9CLFFBQXhCLEVBQWtDO0FBQ2hDLGFBQU9ELG9CQUFvQkMsUUFBcEIsQ0FBUDtBQUNEOztBQUVELFFBQUksUUFBT0EsUUFBUCx5Q0FBT0EsUUFBUCxPQUFvQixRQUF4QixFQUFrQztBQUNoQyxhQUFPQyxvQkFBb0JELFFBQXBCLENBQVA7QUFDRDtBQUNGLEdBUkQ7O0FBVUEsTUFBSUgsbUJBQWdCLElBQXBCLEVBQTBCO0FBQ3hCLFdBQU8sS0FBUDtBQUNEOztBQUVELE1BQUlBLElBQUlPLEdBQVIsRUFBYTtBQUNYLFFBQUlELGNBQWNOLElBQUlPLEdBQWxCLENBQUosRUFBNEI7QUFDMUIsYUFBTyxJQUFQO0FBQ0Q7QUFDRjs7QUFFRCxNQUFJUCxJQUFJUSxPQUFSLEVBQWlCO0FBQ2YsUUFBSUYsY0FBY04sSUFBSVEsT0FBbEIsQ0FBSixFQUFnQztBQUM5QixhQUFPLElBQVA7QUFDRDtBQUNGOztBQUVELE1BQUlSLElBQUlTLElBQVIsRUFBYztBQUNaLFFBQUlQLG9CQUFvQkYsSUFBSVMsSUFBeEIsQ0FBSixFQUFtQztBQUNqQyxhQUFPLElBQVA7QUFDRDtBQUNGOztBQUVELFNBQU8sS0FBUDtBQUNELENBbEREOztBQW9EQUMsT0FBTzFELE9BQVAsR0FBaUI7QUFDZjJELFFBQU07QUFDSnBGLFVBQU0sWUFERjtBQUVKcUYsVUFBTSxFQUFFQyxLQUFLLDBCQUFRLG1CQUFSLENBQVAsRUFGRjtBQUdKQyxZQUFRLENBQUM7QUFDUEMsa0JBQVk7QUFDVjNILGFBQUs7QUFDSDRILHVCQUFhLHNEQURWO0FBRUh6RixnQkFBTSxPQUZIO0FBR0gwRixvQkFBVSxDQUhQO0FBSUhDLGlCQUFPO0FBQ0wzRixrQkFBTSxRQUREO0FBRUw0Rix1QkFBVyxDQUZOLEVBSkosRUFESzs7O0FBVVY3RSx1QkFBZTtBQUNiMEU7QUFDRSwrRkFGVztBQUdiekYsZ0JBQU0sT0FITztBQUliMEYsb0JBQVUsQ0FKRztBQUtiQyxpQkFBTztBQUNMM0Ysa0JBQU0sUUFERDtBQUVMNEYsdUJBQVcsQ0FGTixFQUxNLEVBVkw7OztBQW9CVkMsd0JBQWdCO0FBQ2RKLHVCQUFhLG9DQURDO0FBRWR6RixnQkFBTSxTQUZRLEVBcEJOOztBQXdCVjhGLHVCQUFlO0FBQ2JMLHVCQUFhLGtDQURBO0FBRWJ6RixnQkFBTSxTQUZPLEVBeEJMLEVBREw7OztBQThCUCtGLFdBQUs7QUFDSFAsb0JBQVk7QUFDVk0seUJBQWUsRUFBRSxRQUFNLENBQUMsS0FBRCxDQUFSLEVBREw7QUFFVkQsMEJBQWdCLEVBQUUsUUFBTSxDQUFDLEtBQUQsQ0FBUixFQUZOLEVBRFQsRUE5QkU7OztBQW9DUEcsYUFBTSxDQUFDO0FBQ0xELGFBQUs7QUFDSFAsc0JBQVk7QUFDVk0sMkJBQWUsRUFBRSxRQUFNLENBQUMsSUFBRCxDQUFSLEVBREwsRUFEVCxFQURBOzs7QUFNTEcsa0JBQVUsQ0FBQyxnQkFBRCxDQU5MLEVBQUQ7QUFPSDtBQUNERixhQUFLO0FBQ0hQLHNCQUFZO0FBQ1ZLLDRCQUFnQixFQUFFLFFBQU0sQ0FBQyxJQUFELENBQVIsRUFETixFQURULEVBREo7OztBQU1ESSxrQkFBVSxDQUFDLGVBQUQsQ0FOVCxFQVBHO0FBY0g7QUFDRFQsb0JBQVk7QUFDVk0seUJBQWUsRUFBRSxRQUFNLENBQUMsSUFBRCxDQUFSLEVBREwsRUFEWDs7QUFJREcsa0JBQVUsQ0FBQyxlQUFELENBSlQsRUFkRztBQW1CSDtBQUNEVCxvQkFBWTtBQUNWSywwQkFBZ0IsRUFBRSxRQUFNLENBQUMsSUFBRCxDQUFSLEVBRE4sRUFEWDs7QUFJREksa0JBQVUsQ0FBQyxnQkFBRCxDQUpULEVBbkJHLENBcENDLEVBQUQsQ0FISixFQURTOzs7OztBQW9FZkMsdUJBQVEseUJBQVc7Ozs7OztBQU1ibEYsY0FBUW1GLE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFOVCxDQUVmdEksR0FGZSxTQUVmQSxHQUZlLDZCQUdma0QsYUFIZSxDQUdmQSxhQUhlLHVDQUdDLEVBSEQsdUJBSWY4RSxjQUplLFNBSWZBLGNBSmUsQ0FLZkMsYUFMZSxTQUtmQSxhQUxlOztBQVFqQixVQUFJQSxhQUFKLEVBQW1CO0FBQ2pCaEMsc0JBQWNqRyxHQUFkLEVBQW1Ca0QsYUFBbkIsRUFBa0NDLE9BQWxDO0FBQ0Q7O0FBRUQsVUFBTWMsT0FBT2QsUUFBUW9GLG1CQUFSLEdBQThCcEYsUUFBUW9GLG1CQUFSLEVBQTlCLEdBQThEcEYsUUFBUXFGLFdBQVIsRUFBM0U7O0FBRUEsVUFBTUMsbUNBQXNCLFNBQXRCQSxtQkFBc0IsT0FBUTtBQUNsQyxjQUFJLENBQUNULGNBQUwsRUFBcUI7QUFDbkI7QUFDRDs7QUFFRCxjQUFJcEYsYUFBYXlDLEdBQWIsQ0FBaUJwQixJQUFqQixDQUFKLEVBQTRCO0FBQzFCO0FBQ0Q7O0FBRUQsY0FBTXlFLGNBQWNoRyxXQUFXc0IsR0FBWCxDQUFlQyxJQUFmLENBQXBCO0FBQ0EsY0FBTU4sWUFBWStFLFlBQVkxRSxHQUFaLENBQWdCN0Msc0JBQWhCLENBQWxCO0FBQ0EsY0FBTXdILG1CQUFtQkQsWUFBWTFFLEdBQVosQ0FBZ0IzQywwQkFBaEIsQ0FBekI7O0FBRUFxSCxnQ0FBbUJ2SCxzQkFBbkI7QUFDQXVILGdDQUFtQnJILDBCQUFuQjtBQUNBLGNBQUlxSCxZQUFZRSxJQUFaLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3hCO0FBQ0E7QUFDQXpGLG9CQUFRMEYsTUFBUixDQUFlQyxLQUFLQyxJQUFMLENBQVUsQ0FBVixJQUFlRCxLQUFLQyxJQUFMLENBQVUsQ0FBVixDQUFmLEdBQThCRCxJQUE3QyxFQUFtRCxrQkFBbkQ7QUFDRDtBQUNESixzQkFBWW5FLEdBQVosQ0FBZ0JwRCxzQkFBaEIsRUFBd0N3QyxTQUF4QztBQUNBK0Usc0JBQVluRSxHQUFaLENBQWdCbEQsMEJBQWhCLEVBQTRDc0gsZ0JBQTVDO0FBQ0QsU0F0QkssOEJBQU47O0FBd0JBLFVBQU1LLDBCQUFhLFNBQWJBLFVBQWEsQ0FBQ0YsSUFBRCxFQUFPRyxhQUFQLEVBQXlCO0FBQzFDLGNBQUksQ0FBQ2hCLGFBQUwsRUFBb0I7QUFDbEI7QUFDRDs7QUFFRCxjQUFJckYsYUFBYXlDLEdBQWIsQ0FBaUJwQixJQUFqQixDQUFKLEVBQTRCO0FBQzFCO0FBQ0Q7O0FBRUQsY0FBSTBDLFlBQVkxQyxJQUFaLENBQUosRUFBdUI7QUFDckI7QUFDRDs7QUFFRCxjQUFJbkIsZ0JBQWdCdUMsR0FBaEIsQ0FBb0JwQixJQUFwQixDQUFKLEVBQStCO0FBQzdCO0FBQ0Q7O0FBRUQ7QUFDQSxjQUFJLENBQUNaLFNBQVNnQyxHQUFULENBQWFwQixJQUFiLENBQUwsRUFBeUI7QUFDdkJaLHVCQUFXSixhQUFhNEMsT0FBTzdGLEdBQVAsQ0FBYixFQUEwQmtELGFBQTFCLEVBQXlDQyxPQUF6QyxDQUFYO0FBQ0EsZ0JBQUksQ0FBQ0UsU0FBU2dDLEdBQVQsQ0FBYXBCLElBQWIsQ0FBTCxFQUF5QjtBQUN2Qm5CLDhCQUFnQlUsR0FBaEIsQ0FBb0JTLElBQXBCO0FBQ0E7QUFDRDtBQUNGOztBQUVETCxvQkFBVWxCLFdBQVdzQixHQUFYLENBQWVDLElBQWYsQ0FBVjs7QUFFQTtBQUNBLGNBQU1OLFlBQVlDLFFBQVFJLEdBQVIsQ0FBWTdDLHNCQUFaLENBQWxCO0FBQ0EsY0FBSSxPQUFPd0MsU0FBUCxLQUFxQixXQUFyQixJQUFvQ3NGLGtCQUFrQjNILHdCQUExRCxFQUFvRjtBQUNsRixnQkFBSXFDLFVBQVVrQixTQUFWLENBQW9CK0QsSUFBcEIsR0FBMkIsQ0FBL0IsRUFBa0M7QUFDaEM7QUFDRDtBQUNGOztBQUVEO0FBQ0EsY0FBTUQsbUJBQW1CL0UsUUFBUUksR0FBUixDQUFZM0MsMEJBQVosQ0FBekI7QUFDQSxjQUFJLE9BQU9zSCxnQkFBUCxLQUE0QixXQUFoQyxFQUE2QztBQUMzQyxnQkFBSUEsaUJBQWlCOUQsU0FBakIsQ0FBMkIrRCxJQUEzQixHQUFrQyxDQUF0QyxFQUF5QztBQUN2QztBQUNEO0FBQ0Y7O0FBRUQ7QUFDQSxjQUFNTSxhQUFhRCxrQkFBa0JsSCxPQUFsQixHQUE0QlQsd0JBQTVCLEdBQXVEMkgsYUFBMUU7O0FBRUEsY0FBTXJELGtCQUFrQmhDLFFBQVFJLEdBQVIsQ0FBWWtGLFVBQVosQ0FBeEI7O0FBRUEsY0FBTXZFLFFBQVF1RSxlQUFlNUgsd0JBQWYsR0FBMENTLE9BQTFDLEdBQW9EbUgsVUFBbEU7O0FBRUEsY0FBSSxPQUFPdEQsZUFBUCxLQUEyQixXQUEvQixFQUE0QztBQUMxQyxnQkFBSUEsZ0JBQWdCZixTQUFoQixDQUEwQitELElBQTFCLEdBQWlDLENBQXJDLEVBQXdDO0FBQ3RDekYsc0JBQVEwRixNQUFSO0FBQ0VDLGtCQURGO0FBRTJCbkUsbUJBRjNCOztBQUlEO0FBQ0YsV0FQRCxNQU9PO0FBQ0x4QixvQkFBUTBGLE1BQVI7QUFDRUMsZ0JBREY7QUFFMkJuRSxpQkFGM0I7O0FBSUQ7QUFDRixTQWhFSyxxQkFBTjs7QUFrRUE7Ozs7O0FBS0EsVUFBTXdFLGlDQUFvQixTQUFwQkEsaUJBQW9CLE9BQVE7QUFDaEMsY0FBSXZHLGFBQWF5QyxHQUFiLENBQWlCcEIsSUFBakIsQ0FBSixFQUE0QjtBQUMxQjtBQUNEOztBQUVELGNBQUlMLFVBQVVsQixXQUFXc0IsR0FBWCxDQUFlQyxJQUFmLENBQWQ7O0FBRUE7QUFDQTtBQUNBLGNBQUksT0FBT0wsT0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQ0Esc0JBQVUsSUFBSW5CLEdBQUosRUFBVjtBQUNEOztBQUVELGNBQU0yRyxhQUFhLElBQUkzRyxHQUFKLEVBQW5CO0FBQ0EsY0FBTTRHLHVCQUF1QixJQUFJeEcsR0FBSixFQUE3Qjs7QUFFQWlHLGVBQUtDLElBQUwsQ0FBVXhHLE9BQVYsQ0FBa0Isa0JBQXVDLEtBQXBDSixJQUFvQyxVQUFwQ0EsSUFBb0MsQ0FBOUJGLFdBQThCLFVBQTlCQSxXQUE4QixDQUFqQnVFLFVBQWlCLFVBQWpCQSxVQUFpQjtBQUN2RCxnQkFBSXJFLFNBQVNsQiwwQkFBYixFQUF5QztBQUN2Q29JLG1DQUFxQjdGLEdBQXJCLENBQXlCbEMsd0JBQXpCO0FBQ0Q7QUFDRCxnQkFBSWEsU0FBU2pCLHdCQUFiLEVBQXVDO0FBQ3JDLGtCQUFJc0YsV0FBVzhDLE1BQVgsR0FBb0IsQ0FBeEIsRUFBMkI7QUFDekI5QywyQkFBV2pFLE9BQVgsQ0FBbUIscUJBQWE7QUFDOUIsc0JBQUk2QyxVQUFVbUUsUUFBZCxFQUF3QjtBQUN0QkYseUNBQXFCN0YsR0FBckIsQ0FBeUI0QixVQUFVbUUsUUFBVixDQUFtQmxILElBQTVDO0FBQ0Q7QUFDRixpQkFKRDtBQUtEO0FBQ0RMLDJDQUE2QkMsV0FBN0IsRUFBMEMsVUFBQ0ksSUFBRCxFQUFVO0FBQ2xEZ0gscUNBQXFCN0YsR0FBckIsQ0FBeUJuQixJQUF6QjtBQUNELGVBRkQ7QUFHRDtBQUNGLFdBaEJEOztBQWtCQTtBQUNBdUIsa0JBQVFyQixPQUFSLENBQWdCLFVBQUNvQyxLQUFELEVBQVFDLEdBQVIsRUFBZ0I7QUFDOUIsZ0JBQUl5RSxxQkFBcUJoRSxHQUFyQixDQUF5QlQsR0FBekIsQ0FBSixFQUFtQztBQUNqQ3dFLHlCQUFXN0UsR0FBWCxDQUFlSyxHQUFmLEVBQW9CRCxLQUFwQjtBQUNEO0FBQ0YsV0FKRDs7QUFNQTtBQUNBMEUsK0JBQXFCOUcsT0FBckIsQ0FBNkIsZUFBTztBQUNsQyxnQkFBSSxDQUFDcUIsUUFBUXlCLEdBQVIsQ0FBWVQsR0FBWixDQUFMLEVBQXVCO0FBQ3JCd0UseUJBQVc3RSxHQUFYLENBQWVLLEdBQWYsRUFBb0IsRUFBRUMsV0FBVyxJQUFJaEMsR0FBSixFQUFiLEVBQXBCO0FBQ0Q7QUFDRixXQUpEOztBQU1BO0FBQ0EsY0FBTWMsWUFBWUMsUUFBUUksR0FBUixDQUFZN0Msc0JBQVosQ0FBbEI7QUFDQSxjQUFJd0gsbUJBQW1CL0UsUUFBUUksR0FBUixDQUFZM0MsMEJBQVosQ0FBdkI7O0FBRUEsY0FBSSxPQUFPc0gsZ0JBQVAsS0FBNEIsV0FBaEMsRUFBNkM7QUFDM0NBLCtCQUFtQixFQUFFOUQsV0FBVyxJQUFJaEMsR0FBSixFQUFiLEVBQW5CO0FBQ0Q7O0FBRUR1RyxxQkFBVzdFLEdBQVgsQ0FBZXBELHNCQUFmLEVBQXVDd0MsU0FBdkM7QUFDQXlGLHFCQUFXN0UsR0FBWCxDQUFlbEQsMEJBQWYsRUFBMkNzSCxnQkFBM0M7QUFDQWpHLHFCQUFXNkIsR0FBWCxDQUFlTixJQUFmLEVBQXFCbUYsVUFBckI7QUFDRCxTQTNESyw0QkFBTjs7QUE2REE7Ozs7O0FBS0EsVUFBTUksaUNBQW9CLFNBQXBCQSxpQkFBb0IsT0FBUTtBQUNoQyxjQUFJLENBQUN2QixhQUFMLEVBQW9CO0FBQ2xCO0FBQ0Q7O0FBRUQsY0FBSXdCLGlCQUFpQmpILFdBQVd3QixHQUFYLENBQWVDLElBQWYsQ0FBckI7QUFDQSxjQUFJLE9BQU93RixjQUFQLEtBQTBCLFdBQTlCLEVBQTJDO0FBQ3pDQSw2QkFBaUIsSUFBSWhILEdBQUosRUFBakI7QUFDRDs7QUFFRCxjQUFNaUgsc0JBQXNCLElBQUk3RyxHQUFKLEVBQTVCO0FBQ0EsY0FBTThHLHNCQUFzQixJQUFJOUcsR0FBSixFQUE1Qjs7QUFFQSxjQUFNK0csZUFBZSxJQUFJL0csR0FBSixFQUFyQjtBQUNBLGNBQU1nSCxlQUFlLElBQUloSCxHQUFKLEVBQXJCOztBQUVBLGNBQU1pSCxvQkFBb0IsSUFBSWpILEdBQUosRUFBMUI7QUFDQSxjQUFNa0gsb0JBQW9CLElBQUlsSCxHQUFKLEVBQTFCOztBQUVBLGNBQU1tSCxhQUFhLElBQUl2SCxHQUFKLEVBQW5CO0FBQ0EsY0FBTXdILGFBQWEsSUFBSXhILEdBQUosRUFBbkI7QUFDQWdILHlCQUFlbEgsT0FBZixDQUF1QixVQUFDb0MsS0FBRCxFQUFRQyxHQUFSLEVBQWdCO0FBQ3JDLGdCQUFJRCxNQUFNVSxHQUFOLENBQVVsRSxzQkFBVixDQUFKLEVBQXVDO0FBQ3JDeUksMkJBQWFwRyxHQUFiLENBQWlCb0IsR0FBakI7QUFDRDtBQUNELGdCQUFJRCxNQUFNVSxHQUFOLENBQVVoRSwwQkFBVixDQUFKLEVBQTJDO0FBQ3pDcUksa0NBQW9CbEcsR0FBcEIsQ0FBd0JvQixHQUF4QjtBQUNEO0FBQ0QsZ0JBQUlELE1BQU1VLEdBQU4sQ0FBVS9ELHdCQUFWLENBQUosRUFBeUM7QUFDdkN3SSxnQ0FBa0J0RyxHQUFsQixDQUFzQm9CLEdBQXRCO0FBQ0Q7QUFDREQsa0JBQU1wQyxPQUFOLENBQWMsZUFBTztBQUNuQixrQkFBSStDLFFBQVFqRSwwQkFBUjtBQUNBaUUsc0JBQVFoRSx3QkFEWixFQUNzQztBQUNwQzBJLDJCQUFXekYsR0FBWCxDQUFlZSxHQUFmLEVBQW9CVixHQUFwQjtBQUNEO0FBQ0YsYUFMRDtBQU1ELFdBaEJEOztBQWtCQSxtQkFBU3NGLG9CQUFULENBQThCQyxNQUE5QixFQUFzQztBQUNwQyxnQkFBSUEsT0FBT2hJLElBQVAsS0FBZ0IsU0FBcEIsRUFBK0I7QUFDN0IscUJBQU8sSUFBUDtBQUNEO0FBQ0QsZ0JBQU1pSSxJQUFJLDBCQUFRRCxPQUFPeEYsS0FBZixFQUFzQnhCLE9BQXRCLENBQVY7QUFDQSxnQkFBSWlILEtBQUssSUFBVCxFQUFlO0FBQ2IscUJBQU8sSUFBUDtBQUNEO0FBQ0RULGdDQUFvQm5HLEdBQXBCLENBQXdCNEcsQ0FBeEI7QUFDRDs7QUFFRCxrQ0FBTXRCLElBQU4sRUFBWW5HLGNBQWNxQixHQUFkLENBQWtCQyxJQUFsQixDQUFaLEVBQXFDO0FBQ25Db0csNEJBRG1DLHlDQUNsQkMsS0FEa0IsRUFDWDtBQUN0QkoscUNBQXFCSSxNQUFNSCxNQUEzQjtBQUNELGVBSGtDO0FBSW5DSSwwQkFKbUMsdUNBSXBCRCxLQUpvQixFQUliO0FBQ3BCLG9CQUFJQSxNQUFNRSxNQUFOLENBQWFySSxJQUFiLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ2xDK0gsdUNBQXFCSSxNQUFNRyxTQUFOLENBQWdCLENBQWhCLENBQXJCO0FBQ0Q7QUFDRixlQVJrQywyQkFBckM7OztBQVdBM0IsZUFBS0MsSUFBTCxDQUFVeEcsT0FBVixDQUFrQixtQkFBVztBQUMzQixnQkFBSW1JLHFCQUFKOztBQUVBO0FBQ0EsZ0JBQUlDLFFBQVF4SSxJQUFSLEtBQWlCakIsd0JBQXJCLEVBQStDO0FBQzdDLGtCQUFJeUosUUFBUVIsTUFBWixFQUFvQjtBQUNsQk8sK0JBQWUsMEJBQVFDLFFBQVFSLE1BQVIsQ0FBZVMsR0FBZixDQUFtQkMsT0FBbkIsQ0FBMkIsUUFBM0IsRUFBcUMsRUFBckMsQ0FBUixFQUFrRDFILE9BQWxELENBQWY7QUFDQXdILHdCQUFRbkUsVUFBUixDQUFtQmpFLE9BQW5CLENBQTJCLHFCQUFhO0FBQ3RDLHNCQUFNRixPQUFPK0MsVUFBVUYsS0FBVixDQUFnQjdDLElBQTdCO0FBQ0Esc0JBQUkrQyxVQUFVRixLQUFWLENBQWdCN0MsSUFBaEIsS0FBeUJOLE9BQTdCLEVBQXNDO0FBQ3BDZ0ksc0NBQWtCdkcsR0FBbEIsQ0FBc0JrSCxZQUF0QjtBQUNELG1CQUZELE1BRU87QUFDTFQsK0JBQVcxRixHQUFYLENBQWVsQyxJQUFmLEVBQXFCcUksWUFBckI7QUFDRDtBQUNGLGlCQVBEO0FBUUQ7QUFDRjs7QUFFRCxnQkFBSUMsUUFBUXhJLElBQVIsS0FBaUJoQixzQkFBckIsRUFBNkM7QUFDM0N1Siw2QkFBZSwwQkFBUUMsUUFBUVIsTUFBUixDQUFlUyxHQUFmLENBQW1CQyxPQUFuQixDQUEyQixRQUEzQixFQUFxQyxFQUFyQyxDQUFSLEVBQWtEMUgsT0FBbEQsQ0FBZjtBQUNBMEcsMkJBQWFyRyxHQUFiLENBQWlCa0gsWUFBakI7QUFDRDs7QUFFRCxnQkFBSUMsUUFBUXhJLElBQVIsS0FBaUJmLGtCQUFyQixFQUF5QztBQUN2Q3NKLDZCQUFlLDBCQUFRQyxRQUFRUixNQUFSLENBQWVTLEdBQWYsQ0FBbUJDLE9BQW5CLENBQTJCLFFBQTNCLEVBQXFDLEVBQXJDLENBQVIsRUFBa0QxSCxPQUFsRCxDQUFmO0FBQ0Esa0JBQUksQ0FBQ3VILFlBQUwsRUFBbUI7QUFDakI7QUFDRDs7QUFFRCxrQkFBSTNILGFBQWEySCxZQUFiLENBQUosRUFBZ0M7QUFDOUI7QUFDRDs7QUFFRCxrQkFBSW5FLHlCQUF5Qm9FLFFBQVFuRSxVQUFqQyxDQUFKLEVBQWtEO0FBQ2hEbUQsb0NBQW9CbkcsR0FBcEIsQ0FBd0JrSCxZQUF4QjtBQUNEOztBQUVELGtCQUFJaEUsdUJBQXVCaUUsUUFBUW5FLFVBQS9CLENBQUosRUFBZ0Q7QUFDOUN1RCxrQ0FBa0J2RyxHQUFsQixDQUFzQmtILFlBQXRCO0FBQ0Q7O0FBRURDLHNCQUFRbkUsVUFBUixDQUFtQmpFLE9BQW5CLENBQTJCLHFCQUFhO0FBQ3RDLG9CQUFJNkMsVUFBVWpELElBQVYsS0FBbUJiLHdCQUFuQjtBQUNBOEQsMEJBQVVqRCxJQUFWLEtBQW1CZCwwQkFEdkIsRUFDbUQ7QUFDakQ7QUFDRDtBQUNENEksMkJBQVcxRixHQUFYLENBQWVhLFVBQVUwRixRQUFWLENBQW1CekksSUFBbEMsRUFBd0NxSSxZQUF4QztBQUNELGVBTkQ7QUFPRDtBQUNGLFdBakREOztBQW1EQWIsdUJBQWF0SCxPQUFiLENBQXFCLGlCQUFTO0FBQzVCLGdCQUFJLENBQUNxSCxhQUFhdkUsR0FBYixDQUFpQlYsS0FBakIsQ0FBTCxFQUE4QjtBQUM1QixrQkFBSWQsVUFBVTRGLGVBQWV6RixHQUFmLENBQW1CVyxLQUFuQixDQUFkO0FBQ0Esa0JBQUksT0FBT2QsT0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQ0EsMEJBQVUsSUFBSWhCLEdBQUosRUFBVjtBQUNEO0FBQ0RnQixzQkFBUUwsR0FBUixDQUFZckMsc0JBQVo7QUFDQXNJLDZCQUFlbEYsR0FBZixDQUFtQkksS0FBbkIsRUFBMEJkLE9BQTFCOztBQUVBLGtCQUFJRCxXQUFVbEIsV0FBV3NCLEdBQVgsQ0FBZVcsS0FBZixDQUFkO0FBQ0Esa0JBQUlZLHNCQUFKO0FBQ0Esa0JBQUksT0FBTzNCLFFBQVAsS0FBbUIsV0FBdkIsRUFBb0M7QUFDbEMyQixnQ0FBZ0IzQixTQUFRSSxHQUFSLENBQVk3QyxzQkFBWixDQUFoQjtBQUNELGVBRkQsTUFFTztBQUNMeUMsMkJBQVUsSUFBSW5CLEdBQUosRUFBVjtBQUNBQywyQkFBVzZCLEdBQVgsQ0FBZUksS0FBZixFQUFzQmYsUUFBdEI7QUFDRDs7QUFFRCxrQkFBSSxPQUFPMkIsYUFBUCxLQUF5QixXQUE3QixFQUEwQztBQUN4Q0EsOEJBQWNWLFNBQWQsQ0FBd0JyQixHQUF4QixDQUE0QlMsSUFBNUI7QUFDRCxlQUZELE1BRU87QUFDTCxvQkFBTVksWUFBWSxJQUFJaEMsR0FBSixFQUFsQjtBQUNBZ0MsMEJBQVVyQixHQUFWLENBQWNTLElBQWQ7QUFDQUwseUJBQVFXLEdBQVIsQ0FBWXBELHNCQUFaLEVBQW9DLEVBQUUwRCxvQkFBRixFQUFwQztBQUNEO0FBQ0Y7QUFDRixXQTFCRDs7QUE0QkErRSx1QkFBYXJILE9BQWIsQ0FBcUIsaUJBQVM7QUFDNUIsZ0JBQUksQ0FBQ3NILGFBQWF4RSxHQUFiLENBQWlCVixLQUFqQixDQUFMLEVBQThCO0FBQzVCLGtCQUFNZCxVQUFVNEYsZUFBZXpGLEdBQWYsQ0FBbUJXLEtBQW5CLENBQWhCO0FBQ0FkLGdDQUFlMUMsc0JBQWY7O0FBRUEsa0JBQU15QyxZQUFVbEIsV0FBV3NCLEdBQVgsQ0FBZVcsS0FBZixDQUFoQjtBQUNBLGtCQUFJLE9BQU9mLFNBQVAsS0FBbUIsV0FBdkIsRUFBb0M7QUFDbEMsb0JBQU0yQixnQkFBZ0IzQixVQUFRSSxHQUFSLENBQVk3QyxzQkFBWixDQUF0QjtBQUNBLG9CQUFJLE9BQU9vRSxhQUFQLEtBQXlCLFdBQTdCLEVBQTBDO0FBQ3hDQSxnQ0FBY1YsU0FBZCxXQUErQlosSUFBL0I7QUFDRDtBQUNGO0FBQ0Y7QUFDRixXQWJEOztBQWVBOEYsNEJBQWtCeEgsT0FBbEIsQ0FBMEIsaUJBQVM7QUFDakMsZ0JBQUksQ0FBQ3VILGtCQUFrQnpFLEdBQWxCLENBQXNCVixLQUF0QixDQUFMLEVBQW1DO0FBQ2pDLGtCQUFJZCxVQUFVNEYsZUFBZXpGLEdBQWYsQ0FBbUJXLEtBQW5CLENBQWQ7QUFDQSxrQkFBSSxPQUFPZCxPQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDQSwwQkFBVSxJQUFJaEIsR0FBSixFQUFWO0FBQ0Q7QUFDRGdCLHNCQUFRTCxHQUFSLENBQVlsQyx3QkFBWjtBQUNBbUksNkJBQWVsRixHQUFmLENBQW1CSSxLQUFuQixFQUEwQmQsT0FBMUI7O0FBRUEsa0JBQUlELFlBQVVsQixXQUFXc0IsR0FBWCxDQUFlVyxLQUFmLENBQWQ7QUFDQSxrQkFBSVksc0JBQUo7QUFDQSxrQkFBSSxPQUFPM0IsU0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQzJCLGdDQUFnQjNCLFVBQVFJLEdBQVIsQ0FBWTFDLHdCQUFaLENBQWhCO0FBQ0QsZUFGRCxNQUVPO0FBQ0xzQyw0QkFBVSxJQUFJbkIsR0FBSixFQUFWO0FBQ0FDLDJCQUFXNkIsR0FBWCxDQUFlSSxLQUFmLEVBQXNCZixTQUF0QjtBQUNEOztBQUVELGtCQUFJLE9BQU8yQixhQUFQLEtBQXlCLFdBQTdCLEVBQTBDO0FBQ3hDQSw4QkFBY1YsU0FBZCxDQUF3QnJCLEdBQXhCLENBQTRCUyxJQUE1QjtBQUNELGVBRkQsTUFFTztBQUNMLG9CQUFNWSxZQUFZLElBQUloQyxHQUFKLEVBQWxCO0FBQ0FnQywwQkFBVXJCLEdBQVYsQ0FBY1MsSUFBZDtBQUNBTCwwQkFBUVcsR0FBUixDQUFZakQsd0JBQVosRUFBc0MsRUFBRXVELG9CQUFGLEVBQXRDO0FBQ0Q7QUFDRjtBQUNGLFdBMUJEOztBQTRCQWlGLDRCQUFrQnZILE9BQWxCLENBQTBCLGlCQUFTO0FBQ2pDLGdCQUFJLENBQUN3SCxrQkFBa0IxRSxHQUFsQixDQUFzQlYsS0FBdEIsQ0FBTCxFQUFtQztBQUNqQyxrQkFBTWQsVUFBVTRGLGVBQWV6RixHQUFmLENBQW1CVyxLQUFuQixDQUFoQjtBQUNBZCxnQ0FBZXZDLHdCQUFmOztBQUVBLGtCQUFNc0MsWUFBVWxCLFdBQVdzQixHQUFYLENBQWVXLEtBQWYsQ0FBaEI7QUFDQSxrQkFBSSxPQUFPZixTQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDLG9CQUFNMkIsZ0JBQWdCM0IsVUFBUUksR0FBUixDQUFZMUMsd0JBQVosQ0FBdEI7QUFDQSxvQkFBSSxPQUFPaUUsYUFBUCxLQUF5QixXQUE3QixFQUEwQztBQUN4Q0EsZ0NBQWNWLFNBQWQsV0FBK0JaLElBQS9CO0FBQ0Q7QUFDRjtBQUNGO0FBQ0YsV0FiRDs7QUFlQTBGLDhCQUFvQnBILE9BQXBCLENBQTRCLGlCQUFTO0FBQ25DLGdCQUFJLENBQUNtSCxvQkFBb0JyRSxHQUFwQixDQUF3QlYsS0FBeEIsQ0FBTCxFQUFxQztBQUNuQyxrQkFBSWQsVUFBVTRGLGVBQWV6RixHQUFmLENBQW1CVyxLQUFuQixDQUFkO0FBQ0Esa0JBQUksT0FBT2QsT0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQ0EsMEJBQVUsSUFBSWhCLEdBQUosRUFBVjtBQUNEO0FBQ0RnQixzQkFBUUwsR0FBUixDQUFZbkMsMEJBQVo7QUFDQW9JLDZCQUFlbEYsR0FBZixDQUFtQkksS0FBbkIsRUFBMEJkLE9BQTFCOztBQUVBLGtCQUFJRCxZQUFVbEIsV0FBV3NCLEdBQVgsQ0FBZVcsS0FBZixDQUFkO0FBQ0Esa0JBQUlZLHNCQUFKO0FBQ0Esa0JBQUksT0FBTzNCLFNBQVAsS0FBbUIsV0FBdkIsRUFBb0M7QUFDbEMyQixnQ0FBZ0IzQixVQUFRSSxHQUFSLENBQVkzQywwQkFBWixDQUFoQjtBQUNELGVBRkQsTUFFTztBQUNMdUMsNEJBQVUsSUFBSW5CLEdBQUosRUFBVjtBQUNBQywyQkFBVzZCLEdBQVgsQ0FBZUksS0FBZixFQUFzQmYsU0FBdEI7QUFDRDs7QUFFRCxrQkFBSSxPQUFPMkIsYUFBUCxLQUF5QixXQUE3QixFQUEwQztBQUN4Q0EsOEJBQWNWLFNBQWQsQ0FBd0JyQixHQUF4QixDQUE0QlMsSUFBNUI7QUFDRCxlQUZELE1BRU87QUFDTCxvQkFBTVksWUFBWSxJQUFJaEMsR0FBSixFQUFsQjtBQUNBZ0MsMEJBQVVyQixHQUFWLENBQWNTLElBQWQ7QUFDQUwsMEJBQVFXLEdBQVIsQ0FBWWxELDBCQUFaLEVBQXdDLEVBQUV3RCxvQkFBRixFQUF4QztBQUNEO0FBQ0Y7QUFDRixXQTFCRDs7QUE0QkE2RSw4QkFBb0JuSCxPQUFwQixDQUE0QixpQkFBUztBQUNuQyxnQkFBSSxDQUFDb0gsb0JBQW9CdEUsR0FBcEIsQ0FBd0JWLEtBQXhCLENBQUwsRUFBcUM7QUFDbkMsa0JBQU1kLFVBQVU0RixlQUFlekYsR0FBZixDQUFtQlcsS0FBbkIsQ0FBaEI7QUFDQWQsZ0NBQWV4QywwQkFBZjs7QUFFQSxrQkFBTXVDLFlBQVVsQixXQUFXc0IsR0FBWCxDQUFlVyxLQUFmLENBQWhCO0FBQ0Esa0JBQUksT0FBT2YsU0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQyxvQkFBTTJCLGdCQUFnQjNCLFVBQVFJLEdBQVIsQ0FBWTNDLDBCQUFaLENBQXRCO0FBQ0Esb0JBQUksT0FBT2tFLGFBQVAsS0FBeUIsV0FBN0IsRUFBMEM7QUFDeENBLGdDQUFjVixTQUFkLFdBQStCWixJQUEvQjtBQUNEO0FBQ0Y7QUFDRjtBQUNGLFdBYkQ7O0FBZUFnRyxxQkFBVzFILE9BQVgsQ0FBbUIsVUFBQ29DLEtBQUQsRUFBUUMsR0FBUixFQUFnQjtBQUNqQyxnQkFBSSxDQUFDb0YsV0FBVzNFLEdBQVgsQ0FBZVQsR0FBZixDQUFMLEVBQTBCO0FBQ3hCLGtCQUFJZixVQUFVNEYsZUFBZXpGLEdBQWYsQ0FBbUJXLEtBQW5CLENBQWQ7QUFDQSxrQkFBSSxPQUFPZCxPQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDQSwwQkFBVSxJQUFJaEIsR0FBSixFQUFWO0FBQ0Q7QUFDRGdCLHNCQUFRTCxHQUFSLENBQVlvQixHQUFaO0FBQ0E2RSw2QkFBZWxGLEdBQWYsQ0FBbUJJLEtBQW5CLEVBQTBCZCxPQUExQjs7QUFFQSxrQkFBSUQsWUFBVWxCLFdBQVdzQixHQUFYLENBQWVXLEtBQWYsQ0FBZDtBQUNBLGtCQUFJWSxzQkFBSjtBQUNBLGtCQUFJLE9BQU8zQixTQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDMkIsZ0NBQWdCM0IsVUFBUUksR0FBUixDQUFZWSxHQUFaLENBQWhCO0FBQ0QsZUFGRCxNQUVPO0FBQ0xoQiw0QkFBVSxJQUFJbkIsR0FBSixFQUFWO0FBQ0FDLDJCQUFXNkIsR0FBWCxDQUFlSSxLQUFmLEVBQXNCZixTQUF0QjtBQUNEOztBQUVELGtCQUFJLE9BQU8yQixhQUFQLEtBQXlCLFdBQTdCLEVBQTBDO0FBQ3hDQSw4QkFBY1YsU0FBZCxDQUF3QnJCLEdBQXhCLENBQTRCUyxJQUE1QjtBQUNELGVBRkQsTUFFTztBQUNMLG9CQUFNWSxZQUFZLElBQUloQyxHQUFKLEVBQWxCO0FBQ0FnQywwQkFBVXJCLEdBQVYsQ0FBY1MsSUFBZDtBQUNBTCwwQkFBUVcsR0FBUixDQUFZSyxHQUFaLEVBQWlCLEVBQUVDLG9CQUFGLEVBQWpCO0FBQ0Q7QUFDRjtBQUNGLFdBMUJEOztBQTRCQW1GLHFCQUFXekgsT0FBWCxDQUFtQixVQUFDb0MsS0FBRCxFQUFRQyxHQUFSLEVBQWdCO0FBQ2pDLGdCQUFJLENBQUNxRixXQUFXNUUsR0FBWCxDQUFlVCxHQUFmLENBQUwsRUFBMEI7QUFDeEIsa0JBQU1mLFVBQVU0RixlQUFlekYsR0FBZixDQUFtQlcsS0FBbkIsQ0FBaEI7QUFDQWQsZ0NBQWVlLEdBQWY7O0FBRUEsa0JBQU1oQixZQUFVbEIsV0FBV3NCLEdBQVgsQ0FBZVcsS0FBZixDQUFoQjtBQUNBLGtCQUFJLE9BQU9mLFNBQVAsS0FBbUIsV0FBdkIsRUFBb0M7QUFDbEMsb0JBQU0yQixnQkFBZ0IzQixVQUFRSSxHQUFSLENBQVlZLEdBQVosQ0FBdEI7QUFDQSxvQkFBSSxPQUFPVyxhQUFQLEtBQXlCLFdBQTdCLEVBQTBDO0FBQ3hDQSxnQ0FBY1YsU0FBZCxXQUErQlosSUFBL0I7QUFDRDtBQUNGO0FBQ0Y7QUFDRixXQWJEO0FBY0QsU0EzUkssNEJBQU47O0FBNlJBLGFBQU87QUFDTCxxQ0FBZ0IsMkJBQVE7QUFDdEJrRiw4QkFBa0JMLElBQWxCO0FBQ0FVLDhCQUFrQlYsSUFBbEI7QUFDQUwsZ0NBQW9CSyxJQUFwQjtBQUNELFdBSkQsc0JBREs7QUFNTCxpREFBNEIsd0NBQVE7QUFDbENFLHVCQUFXRixJQUFYLEVBQWlCeEgsd0JBQWpCO0FBQ0QsV0FGRCxtQ0FOSztBQVNMLCtDQUEwQixzQ0FBUTtBQUNoQ3dILGlCQUFLdEMsVUFBTCxDQUFnQmpFLE9BQWhCLENBQXdCLHFCQUFhO0FBQ25DeUcseUJBQVdGLElBQVgsRUFBaUIxRCxVQUFVbUUsUUFBVixDQUFtQmxILElBQXBDO0FBQ0QsYUFGRDtBQUdBTCx5Q0FBNkI4RyxLQUFLN0csV0FBbEMsRUFBK0MsVUFBQ0ksSUFBRCxFQUFVO0FBQ3ZEMkcseUJBQVdGLElBQVgsRUFBaUJ6RyxJQUFqQjtBQUNELGFBRkQ7QUFHRCxXQVBELGlDQVRLLEVBQVA7O0FBa0JELEtBOWRELGlCQXBFZSxFQUFqQiIsImZpbGUiOiJuby11bnVzZWQtbW9kdWxlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgbW9kdWxlcyBjb250YWluIGV4cG9ydHMgYW5kL29yIGFsbFxuICogbW9kdWxlcyBhcmUgY29uc3VtZWQgd2l0aGluIG90aGVyIG1vZHVsZXMuXG4gKiBAYXV0aG9yIFJlbsOpIEZlcm1hbm5cbiAqL1xuXG5pbXBvcnQgRXhwb3J0cywgeyByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZSB9IGZyb20gJy4uL0V4cG9ydE1hcCc7XG5pbXBvcnQgeyBnZXRGaWxlRXh0ZW5zaW9ucyB9IGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvaWdub3JlJztcbmltcG9ydCByZXNvbHZlIGZyb20gJ2VzbGludC1tb2R1bGUtdXRpbHMvcmVzb2x2ZSc7XG5pbXBvcnQgdmlzaXQgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy92aXNpdCc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCByZWFkUGtnVXAgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9yZWFkUGtnVXAnO1xuaW1wb3J0IHZhbHVlcyBmcm9tICdvYmplY3QudmFsdWVzJztcbmltcG9ydCBpbmNsdWRlcyBmcm9tICdhcnJheS1pbmNsdWRlcyc7XG5cbmxldCBGaWxlRW51bWVyYXRvcjtcbmxldCBsaXN0RmlsZXNUb1Byb2Nlc3M7XG5cbnRyeSB7XG4gICh7IEZpbGVFbnVtZXJhdG9yIH0gPSByZXF1aXJlKCdlc2xpbnQvdXNlLWF0LXlvdXItb3duLXJpc2snKSk7XG59IGNhdGNoIChlKSB7XG4gIHRyeSB7XG4gICAgLy8gaGFzIGJlZW4gbW92ZWQgdG8gZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvciBpbiB2ZXJzaW9uIDZcbiAgICAoeyBGaWxlRW51bWVyYXRvciB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi9jbGktZW5naW5lL2ZpbGUtZW51bWVyYXRvcicpKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBlc2xpbnQvbGliL3V0aWwvZ2xvYi11dGlsIGhhcyBiZWVuIG1vdmVkIHRvIGVzbGludC9saWIvdXRpbC9nbG9iLXV0aWxzIHdpdGggdmVyc2lvbiA1LjNcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbHMnKTtcblxuICAgICAgLy8gUHJldmVudCBwYXNzaW5nIGludmFsaWQgb3B0aW9ucyAoZXh0ZW5zaW9ucyBhcnJheSkgdG8gb2xkIHZlcnNpb25zIG9mIHRoZSBmdW5jdGlvbi5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lc2xpbnQvZXNsaW50L2Jsb2IvdjUuMTYuMC9saWIvdXRpbC9nbG9iLXV0aWxzLmpzI0wxNzgtTDI4MFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvYmxvYi92NS4yLjAvbGliL3V0aWwvZ2xvYi11dGlsLmpzI0wxNzQtTDI2OVxuICAgICAgbGlzdEZpbGVzVG9Qcm9jZXNzID0gZnVuY3Rpb24gKHNyYywgZXh0ZW5zaW9ucykge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxMaXN0RmlsZXNUb1Byb2Nlc3Moc3JjLCB7XG4gICAgICAgICAgZXh0ZW5zaW9ucyxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IHsgbGlzdEZpbGVzVG9Qcm9jZXNzOiBvcmlnaW5hbExpc3RGaWxlc1RvUHJvY2VzcyB9ID0gcmVxdWlyZSgnZXNsaW50L2xpYi91dGlsL2dsb2ItdXRpbCcpO1xuICAgICAgXG4gICAgICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5zID0gc3JjLnJlZHVjZSgoY2FycnksIHBhdHRlcm4pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2FycnkuY29uY2F0KGV4dGVuc2lvbnMubWFwKChleHRlbnNpb24pID0+IHtcbiAgICAgICAgICAgIHJldHVybiAvXFwqXFwqfFxcKlxcLi8udGVzdChwYXR0ZXJuKSA/IHBhdHRlcm4gOiBgJHtwYXR0ZXJufS8qKi8qJHtleHRlbnNpb259YDtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0sIHNyYy5zbGljZSgpKTtcbiAgICBcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsTGlzdEZpbGVzVG9Qcm9jZXNzKHBhdHRlcm5zKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmlmIChGaWxlRW51bWVyYXRvcikge1xuICBsaXN0RmlsZXNUb1Byb2Nlc3MgPSBmdW5jdGlvbiAoc3JjLCBleHRlbnNpb25zKSB7XG4gICAgY29uc3QgZSA9IG5ldyBGaWxlRW51bWVyYXRvcih7XG4gICAgICBleHRlbnNpb25zLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZS5pdGVyYXRlRmlsZXMoc3JjKSwgKHsgZmlsZVBhdGgsIGlnbm9yZWQgfSkgPT4gKHtcbiAgICAgIGlnbm9yZWQsXG4gICAgICBmaWxlbmFtZTogZmlsZVBhdGgsXG4gICAgfSkpO1xuICB9O1xufVxuXG5jb25zdCBFWFBPUlRfREVGQVVMVF9ERUNMQVJBVElPTiA9ICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX05BTUVEX0RFQ0xBUkFUSU9OID0gJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nO1xuY29uc3QgRVhQT1JUX0FMTF9ERUNMQVJBVElPTiA9ICdFeHBvcnRBbGxEZWNsYXJhdGlvbic7XG5jb25zdCBJTVBPUlRfREVDTEFSQVRJT04gPSAnSW1wb3J0RGVjbGFyYXRpb24nO1xuY29uc3QgSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIgPSAnSW1wb3J0TmFtZXNwYWNlU3BlY2lmaWVyJztcbmNvbnN0IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUiA9ICdJbXBvcnREZWZhdWx0U3BlY2lmaWVyJztcbmNvbnN0IFZBUklBQkxFX0RFQ0xBUkFUSU9OID0gJ1ZhcmlhYmxlRGVjbGFyYXRpb24nO1xuY29uc3QgRlVOQ1RJT05fREVDTEFSQVRJT04gPSAnRnVuY3Rpb25EZWNsYXJhdGlvbic7XG5jb25zdCBDTEFTU19ERUNMQVJBVElPTiA9ICdDbGFzc0RlY2xhcmF0aW9uJztcbmNvbnN0IElERU5USUZJRVIgPSAnSWRlbnRpZmllcic7XG5jb25zdCBPQkpFQ1RfUEFUVEVSTiA9ICdPYmplY3RQYXR0ZXJuJztcbmNvbnN0IFRTX0lOVEVSRkFDRV9ERUNMQVJBVElPTiA9ICdUU0ludGVyZmFjZURlY2xhcmF0aW9uJztcbmNvbnN0IFRTX1RZUEVfQUxJQVNfREVDTEFSQVRJT04gPSAnVFNUeXBlQWxpYXNEZWNsYXJhdGlvbic7XG5jb25zdCBUU19FTlVNX0RFQ0xBUkFUSU9OID0gJ1RTRW51bURlY2xhcmF0aW9uJztcbmNvbnN0IERFRkFVTFQgPSAnZGVmYXVsdCc7XG5cbmZ1bmN0aW9uIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIGNiKSB7XG4gIGlmIChkZWNsYXJhdGlvbikge1xuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEZVTkNUSU9OX0RFQ0xBUkFUSU9OIHx8XG4gICAgICBkZWNsYXJhdGlvbi50eXBlID09PSBDTEFTU19ERUNMQVJBVElPTiB8fFxuICAgICAgZGVjbGFyYXRpb24udHlwZSA9PT0gVFNfSU5URVJGQUNFX0RFQ0xBUkFUSU9OIHx8XG4gICAgICBkZWNsYXJhdGlvbi50eXBlID09PSBUU19UWVBFX0FMSUFTX0RFQ0xBUkFUSU9OIHx8XG4gICAgICBkZWNsYXJhdGlvbi50eXBlID09PSBUU19FTlVNX0RFQ0xBUkFUSU9OXG4gICAgKSB7XG4gICAgICBjYihkZWNsYXJhdGlvbi5pZC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGUgPT09IFZBUklBQkxFX0RFQ0xBUkFUSU9OKSB7XG4gICAgICBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaCgoeyBpZCB9KSA9PiB7XG4gICAgICAgIGlmIChpZC50eXBlID09PSBPQkpFQ1RfUEFUVEVSTikge1xuICAgICAgICAgIHJlY3Vyc2l2ZVBhdHRlcm5DYXB0dXJlKGlkLCAocGF0dGVybikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhdHRlcm4udHlwZSA9PT0gSURFTlRJRklFUikge1xuICAgICAgICAgICAgICBjYihwYXR0ZXJuLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKGlkLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IG9mIGltcG9ydHMgcGVyIGZpbGUuXG4gKlxuICogUmVwcmVzZW50ZWQgYnkgYSB0d28tbGV2ZWwgTWFwIHRvIGEgU2V0IG9mIGlkZW50aWZpZXJzLiBUaGUgdXBwZXItbGV2ZWwgTWFwXG4gKiBrZXlzIGFyZSB0aGUgcGF0aHMgdG8gdGhlIG1vZHVsZXMgY29udGFpbmluZyB0aGUgaW1wb3J0cywgd2hpbGUgdGhlXG4gKiBsb3dlci1sZXZlbCBNYXAga2V5cyBhcmUgdGhlIHBhdGhzIHRvIHRoZSBmaWxlcyB3aGljaCBhcmUgYmVpbmcgaW1wb3J0ZWRcbiAqIGZyb20uIExhc3RseSwgdGhlIFNldCBvZiBpZGVudGlmaWVycyBjb250YWlucyBlaXRoZXIgbmFtZXMgYmVpbmcgaW1wb3J0ZWRcbiAqIG9yIGEgc3BlY2lhbCBBU1Qgbm9kZSBuYW1lIGxpc3RlZCBhYm92ZSAoZS5nIEltcG9ydERlZmF1bHRTcGVjaWZpZXIpLlxuICpcbiAqIEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIGEgZmlsZSBuYW1lZCBmb28uanMgY29udGFpbmluZzpcbiAqXG4gKiAgIGltcG9ydCB7IG8yIH0gZnJvbSAnLi9iYXIuanMnO1xuICpcbiAqIFRoZW4gd2Ugd2lsbCBoYXZlIGEgc3RydWN0dXJlIHRoYXQgbG9va3MgbGlrZTpcbiAqXG4gKiAgIE1hcCB7ICdmb28uanMnID0+IE1hcCB7ICdiYXIuanMnID0+IFNldCB7ICdvMicgfSB9IH1cbiAqXG4gKiBAdHlwZSB7TWFwPHN0cmluZywgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+Pn1cbiAqL1xuY29uc3QgaW1wb3J0TGlzdCA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBMaXN0IG9mIGV4cG9ydHMgcGVyIGZpbGUuXG4gKlxuICogUmVwcmVzZW50ZWQgYnkgYSB0d28tbGV2ZWwgTWFwIHRvIGFuIG9iamVjdCBvZiBtZXRhZGF0YS4gVGhlIHVwcGVyLWxldmVsIE1hcFxuICoga2V5cyBhcmUgdGhlIHBhdGhzIHRvIHRoZSBtb2R1bGVzIGNvbnRhaW5pbmcgdGhlIGV4cG9ydHMsIHdoaWxlIHRoZVxuICogbG93ZXItbGV2ZWwgTWFwIGtleXMgYXJlIHRoZSBzcGVjaWZpYyBpZGVudGlmaWVycyBvciBzcGVjaWFsIEFTVCBub2RlIG5hbWVzXG4gKiBiZWluZyBleHBvcnRlZC4gVGhlIGxlYWYtbGV2ZWwgbWV0YWRhdGEgb2JqZWN0IGF0IHRoZSBtb21lbnQgb25seSBjb250YWlucyBhXG4gKiBgd2hlcmVVc2VkYCBwcm9wZXJ0eSwgd2hpY2ggY29udGFpbnMgYSBTZXQgb2YgcGF0aHMgdG8gbW9kdWxlcyB0aGF0IGltcG9ydFxuICogdGhlIG5hbWUuXG4gKlxuICogRm9yIGV4YW1wbGUsIGlmIHdlIGhhdmUgYSBmaWxlIG5hbWVkIGJhci5qcyBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgZXhwb3J0czpcbiAqXG4gKiAgIGNvbnN0IG8yID0gJ2Jhcic7XG4gKiAgIGV4cG9ydCB7IG8yIH07XG4gKlxuICogQW5kIGEgZmlsZSBuYW1lZCBmb28uanMgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGltcG9ydDpcbiAqXG4gKiAgIGltcG9ydCB7IG8yIH0gZnJvbSAnLi9iYXIuanMnO1xuICpcbiAqIFRoZW4gd2Ugd2lsbCBoYXZlIGEgc3RydWN0dXJlIHRoYXQgbG9va3MgbGlrZTpcbiAqXG4gKiAgIE1hcCB7ICdiYXIuanMnID0+IE1hcCB7ICdvMicgPT4geyB3aGVyZVVzZWQ6IFNldCB7ICdmb28uanMnIH0gfSB9IH1cbiAqXG4gKiBAdHlwZSB7TWFwPHN0cmluZywgTWFwPHN0cmluZywgb2JqZWN0Pj59XG4gKi9cbmNvbnN0IGV4cG9ydExpc3QgPSBuZXcgTWFwKCk7XG5cbmNvbnN0IHZpc2l0b3JLZXlNYXAgPSBuZXcgTWFwKCk7XG5cbmNvbnN0IGlnbm9yZWRGaWxlcyA9IG5ldyBTZXQoKTtcbmNvbnN0IGZpbGVzT3V0c2lkZVNyYyA9IG5ldyBTZXQoKTtcblxuY29uc3QgaXNOb2RlTW9kdWxlID0gcGF0aCA9PiB7XG4gIHJldHVybiAvXFwvKG5vZGVfbW9kdWxlcylcXC8vLnRlc3QocGF0aCk7XG59O1xuXG4vKipcbiAqIHJlYWQgYWxsIGZpbGVzIG1hdGNoaW5nIHRoZSBwYXR0ZXJucyBpbiBzcmMgYW5kIGlnbm9yZUV4cG9ydHNcbiAqXG4gKiByZXR1cm4gYWxsIGZpbGVzIG1hdGNoaW5nIHNyYyBwYXR0ZXJuLCB3aGljaCBhcmUgbm90IG1hdGNoaW5nIHRoZSBpZ25vcmVFeHBvcnRzIHBhdHRlcm5cbiAqL1xuY29uc3QgcmVzb2x2ZUZpbGVzID0gKHNyYywgaWdub3JlRXhwb3J0cywgY29udGV4dCkgPT4ge1xuICBjb25zdCBleHRlbnNpb25zID0gQXJyYXkuZnJvbShnZXRGaWxlRXh0ZW5zaW9ucyhjb250ZXh0LnNldHRpbmdzKSk7XG5cbiAgY29uc3Qgc3JjRmlsZXMgPSBuZXcgU2V0KCk7XG4gIGNvbnN0IHNyY0ZpbGVMaXN0ID0gbGlzdEZpbGVzVG9Qcm9jZXNzKHNyYywgZXh0ZW5zaW9ucyk7XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIGlnbm9yZWQgZmlsZXNcbiAgY29uc3QgaWdub3JlZEZpbGVzTGlzdCA9ICBsaXN0RmlsZXNUb1Byb2Nlc3MoaWdub3JlRXhwb3J0cywgZXh0ZW5zaW9ucyk7XG4gIGlnbm9yZWRGaWxlc0xpc3QuZm9yRWFjaCgoeyBmaWxlbmFtZSB9KSA9PiBpZ25vcmVkRmlsZXMuYWRkKGZpbGVuYW1lKSk7XG5cbiAgLy8gcHJlcGFyZSBsaXN0IG9mIHNvdXJjZSBmaWxlcywgZG9uJ3QgY29uc2lkZXIgZmlsZXMgZnJvbSBub2RlX21vZHVsZXNcbiAgc3JjRmlsZUxpc3QuZmlsdGVyKCh7IGZpbGVuYW1lIH0pID0+ICFpc05vZGVNb2R1bGUoZmlsZW5hbWUpKS5mb3JFYWNoKCh7IGZpbGVuYW1lIH0pID0+IHtcbiAgICBzcmNGaWxlcy5hZGQoZmlsZW5hbWUpO1xuICB9KTtcbiAgcmV0dXJuIHNyY0ZpbGVzO1xufTtcblxuLyoqXG4gKiBwYXJzZSBhbGwgc291cmNlIGZpbGVzIGFuZCBidWlsZCB1cCAyIG1hcHMgY29udGFpbmluZyB0aGUgZXhpc3RpbmcgaW1wb3J0cyBhbmQgZXhwb3J0c1xuICovXG5jb25zdCBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMgPSAoc3JjRmlsZXMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgZXhwb3J0QWxsID0gbmV3IE1hcCgpO1xuICBzcmNGaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgIGNvbnN0IGV4cG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgY29uc3QgaW1wb3J0cyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBjdXJyZW50RXhwb3J0cyA9IEV4cG9ydHMuZ2V0KGZpbGUsIGNvbnRleHQpO1xuICAgIGlmIChjdXJyZW50RXhwb3J0cykge1xuICAgICAgY29uc3Qge1xuICAgICAgICBkZXBlbmRlbmNpZXMsXG4gICAgICAgIHJlZXhwb3J0cyxcbiAgICAgICAgaW1wb3J0czogbG9jYWxJbXBvcnRMaXN0LFxuICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgIHZpc2l0b3JLZXlzLFxuICAgICAgfSA9IGN1cnJlbnRFeHBvcnRzO1xuXG4gICAgICB2aXNpdG9yS2V5TWFwLnNldChmaWxlLCB2aXNpdG9yS2V5cyk7XG4gICAgICAvLyBkZXBlbmRlbmNpZXMgPT09IGV4cG9ydCAqIGZyb21cbiAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRBbGwgPSBuZXcgU2V0KCk7XG4gICAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaChnZXREZXBlbmRlbmN5ID0+IHtcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jeSA9IGdldERlcGVuZGVuY3koKTtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RXhwb3J0QWxsLmFkZChkZXBlbmRlbmN5LnBhdGgpO1xuICAgICAgfSk7XG4gICAgICBleHBvcnRBbGwuc2V0KGZpbGUsIGN1cnJlbnRFeHBvcnRBbGwpO1xuXG4gICAgICByZWV4cG9ydHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSLCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWV4cG9ydCA9ICB2YWx1ZS5nZXRJbXBvcnQoKTtcbiAgICAgICAgaWYgKCFyZWV4cG9ydCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9jYWxJbXBvcnQgPSBpbXBvcnRzLmdldChyZWV4cG9ydC5wYXRoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlLmxvY2FsID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IHZhbHVlLmxvY2FsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxJbXBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFsuLi5sb2NhbEltcG9ydCwgY3VycmVudFZhbHVlXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9jYWxJbXBvcnQgPSBuZXcgU2V0KFtjdXJyZW50VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBvcnRzLnNldChyZWV4cG9ydC5wYXRoLCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcblxuICAgICAgbG9jYWxJbXBvcnRMaXN0LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGlzTm9kZU1vZHVsZShrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2FsSW1wb3J0ID0gaW1wb3J0cy5nZXQoa2V5KSB8fCBuZXcgU2V0KCk7XG4gICAgICAgIHZhbHVlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKCh7IGltcG9ydGVkU3BlY2lmaWVycyB9KSA9PlxuICAgICAgICAgIGltcG9ydGVkU3BlY2lmaWVycy5mb3JFYWNoKHNwZWNpZmllciA9PiBsb2NhbEltcG9ydC5hZGQoc3BlY2lmaWVyKSlcbiAgICAgICAgKTtcbiAgICAgICAgaW1wb3J0cy5zZXQoa2V5LCBsb2NhbEltcG9ydCk7XG4gICAgICB9KTtcbiAgICAgIGltcG9ydExpc3Quc2V0KGZpbGUsIGltcG9ydHMpO1xuXG4gICAgICAvLyBidWlsZCB1cCBleHBvcnQgbGlzdCBvbmx5LCBpZiBmaWxlIGlzIG5vdCBpZ25vcmVkXG4gICAgICBpZiAoaWdub3JlZEZpbGVzLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBuYW1lc3BhY2UuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUKSB7XG4gICAgICAgICAgZXhwb3J0cy5zZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSLCB7IHdoZXJlVXNlZDogbmV3IFNldCgpIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGV4cG9ydHMuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgZXhwb3J0cy5zZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgZXhwb3J0TGlzdC5zZXQoZmlsZSwgZXhwb3J0cyk7XG4gIH0pO1xuICBleHBvcnRBbGwuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIHZhbHVlLmZvckVhY2godmFsID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnQgPSBjdXJyZW50RXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoa2V5KTtcbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIHRyYXZlcnNlIHRocm91Z2ggYWxsIGltcG9ydHMgYW5kIGFkZCB0aGUgcmVzcGVjdGl2ZSBwYXRoIHRvIHRoZSB3aGVyZVVzZWQtbGlzdFxuICogb2YgdGhlIGNvcnJlc3BvbmRpbmcgZXhwb3J0XG4gKi9cbmNvbnN0IGRldGVybWluZVVzYWdlID0gKCkgPT4ge1xuICBpbXBvcnRMaXN0LmZvckVhY2goKGxpc3RWYWx1ZSwgbGlzdEtleSkgPT4ge1xuICAgIGxpc3RWYWx1ZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQoa2V5KTtcbiAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChjdXJyZW50SW1wb3J0ID0+IHtcbiAgICAgICAgICBsZXQgc3BlY2lmaWVyO1xuICAgICAgICAgIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUikge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVI7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0ID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIHNwZWNpZmllciA9IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3BlY2lmaWVyID0gY3VycmVudEltcG9ydDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiBzcGVjaWZpZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBleHBvcnRTdGF0ZW1lbnQgPSBleHBvcnRzLmdldChzcGVjaWZpZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRTdGF0ZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgd2hlcmVVc2VkIH0gPSBleHBvcnRTdGF0ZW1lbnQ7XG4gICAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQobGlzdEtleSk7XG4gICAgICAgICAgICAgIGV4cG9ydHMuc2V0KHNwZWNpZmllciwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5jb25zdCBnZXRTcmMgPSBzcmMgPT4ge1xuICBpZiAoc3JjKSB7XG4gICAgcmV0dXJuIHNyYztcbiAgfVxuICByZXR1cm4gW3Byb2Nlc3MuY3dkKCldO1xufTtcblxuLyoqXG4gKiBwcmVwYXJlIHRoZSBsaXN0cyBvZiBleGlzdGluZyBpbXBvcnRzIGFuZCBleHBvcnRzIC0gc2hvdWxkIG9ubHkgYmUgZXhlY3V0ZWQgb25jZSBhdFxuICogdGhlIHN0YXJ0IG9mIGEgbmV3IGVzbGludCBydW5cbiAqL1xubGV0IHNyY0ZpbGVzO1xubGV0IGxhc3RQcmVwYXJlS2V5O1xuY29uc3QgZG9QcmVwYXJhdGlvbiA9IChzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgcHJlcGFyZUtleSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBzcmM6IChzcmMgfHwgW10pLnNvcnQoKSxcbiAgICBpZ25vcmVFeHBvcnRzOiAoaWdub3JlRXhwb3J0cyB8fCBbXSkuc29ydCgpLFxuICAgIGV4dGVuc2lvbnM6IEFycmF5LmZyb20oZ2V0RmlsZUV4dGVuc2lvbnMoY29udGV4dC5zZXR0aW5ncykpLnNvcnQoKSxcbiAgfSk7XG4gIGlmIChwcmVwYXJlS2V5ID09PSBsYXN0UHJlcGFyZUtleSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGltcG9ydExpc3QuY2xlYXIoKTtcbiAgZXhwb3J0TGlzdC5jbGVhcigpO1xuICBpZ25vcmVkRmlsZXMuY2xlYXIoKTtcbiAgZmlsZXNPdXRzaWRlU3JjLmNsZWFyKCk7XG5cbiAgc3JjRmlsZXMgPSByZXNvbHZlRmlsZXMoZ2V0U3JjKHNyYyksIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICBwcmVwYXJlSW1wb3J0c0FuZEV4cG9ydHMoc3JjRmlsZXMsIGNvbnRleHQpO1xuICBkZXRlcm1pbmVVc2FnZSgpO1xuICBsYXN0UHJlcGFyZUtleSA9IHByZXBhcmVLZXk7XG59O1xuXG5jb25zdCBuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMgPSBzcGVjaWZpZXJzID0+XG4gIHNwZWNpZmllcnMuc29tZSgoeyB0eXBlIH0pID0+IHR5cGUgPT09IElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuY29uc3QgbmV3RGVmYXVsdEltcG9ydEV4aXN0cyA9IHNwZWNpZmllcnMgPT5cbiAgc3BlY2lmaWVycy5zb21lKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcblxuY29uc3QgZmlsZUlzSW5Qa2cgPSBmaWxlID0+IHtcbiAgY29uc3QgeyBwYXRoLCBwa2cgfSA9IHJlYWRQa2dVcCh7IGN3ZDogZmlsZSB9KTtcbiAgY29uc3QgYmFzZVBhdGggPSBkaXJuYW1lKHBhdGgpO1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGRTdHJpbmcgPSBwa2dGaWVsZCA9PiB7XG4gICAgaWYgKGpvaW4oYmFzZVBhdGgsIHBrZ0ZpZWxkKSA9PT0gZmlsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrUGtnRmllbGRPYmplY3QgPSBwa2dGaWVsZCA9PiB7XG4gICAgY29uc3QgcGtnRmllbGRGaWxlcyA9IHZhbHVlcyhwa2dGaWVsZCkubWFwKHZhbHVlID0+IGpvaW4oYmFzZVBhdGgsIHZhbHVlKSk7XG4gICAgaWYgKGluY2x1ZGVzKHBrZ0ZpZWxkRmlsZXMsIGZpbGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2hlY2tQa2dGaWVsZCA9IHBrZ0ZpZWxkID0+IHtcbiAgICBpZiAodHlwZW9mIHBrZ0ZpZWxkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNoZWNrUGtnRmllbGRTdHJpbmcocGtnRmllbGQpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcGtnRmllbGQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gY2hlY2tQa2dGaWVsZE9iamVjdChwa2dGaWVsZCk7XG4gICAgfVxuICB9O1xuXG4gIGlmIChwa2cucHJpdmF0ZSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwa2cuYmluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGQocGtnLmJpbikpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwa2cuYnJvd3Nlcikge1xuICAgIGlmIChjaGVja1BrZ0ZpZWxkKHBrZy5icm93c2VyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBrZy5tYWluKSB7XG4gICAgaWYgKGNoZWNrUGtnRmllbGRTdHJpbmcocGtnLm1haW4pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7IHVybDogZG9jc1VybCgnbm8tdW51c2VkLW1vZHVsZXMnKSB9LFxuICAgIHNjaGVtYTogW3tcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgc3JjOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdmaWxlcy9wYXRocyB0byBiZSBhbmFseXplZCAob25seSBmb3IgdW51c2VkIGV4cG9ydHMpJyxcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIG1pbkxlbmd0aDogMSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmVFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAnZmlsZXMvcGF0aHMgZm9yIHdoaWNoIHVudXNlZCBleHBvcnRzIHdpbGwgbm90IGJlIHJlcG9ydGVkIChlLmcgbW9kdWxlIGVudHJ5IHBvaW50cyknLFxuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiAxLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1pc3NpbmdFeHBvcnRzOiB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdyZXBvcnQgbW9kdWxlcyB3aXRob3V0IGFueSBleHBvcnRzJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgIHVudXNlZEV4cG9ydHM6IHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ3JlcG9ydCBleHBvcnRzIHdpdGhvdXQgYW55IHVzYWdlJyxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbm90OiB7XG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB1bnVzZWRFeHBvcnRzOiB7IGVudW06IFtmYWxzZV0gfSxcbiAgICAgICAgICBtaXNzaW5nRXhwb3J0czogeyBlbnVtOiBbZmFsc2VdIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYW55T2Y6W3tcbiAgICAgICAgbm90OiB7XG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdW51c2VkRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogWydtaXNzaW5nRXhwb3J0cyddLFxuICAgICAgfSwge1xuICAgICAgICBub3Q6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBtaXNzaW5nRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogWyd1bnVzZWRFeHBvcnRzJ10sXG4gICAgICB9LCB7XG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICB1bnVzZWRFeHBvcnRzOiB7IGVudW06IFt0cnVlXSB9LFxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogWyd1bnVzZWRFeHBvcnRzJ10sXG4gICAgICB9LCB7XG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBtaXNzaW5nRXhwb3J0czogeyBlbnVtOiBbdHJ1ZV0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IFsnbWlzc2luZ0V4cG9ydHMnXSxcbiAgICAgIH1dLFxuICAgIH1dLFxuICB9LFxuXG4gIGNyZWF0ZTogY29udGV4dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc3JjLFxuICAgICAgaWdub3JlRXhwb3J0cyA9IFtdLFxuICAgICAgbWlzc2luZ0V4cG9ydHMsXG4gICAgICB1bnVzZWRFeHBvcnRzLFxuICAgIH0gPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG5cbiAgICBpZiAodW51c2VkRXhwb3J0cykge1xuICAgICAgZG9QcmVwYXJhdGlvbihzcmMsIGlnbm9yZUV4cG9ydHMsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUgPyBjb250ZXh0LmdldFBoeXNpY2FsRmlsZW5hbWUoKSA6IGNvbnRleHQuZ2V0RmlsZW5hbWUoKTtcblxuICAgIGNvbnN0IGNoZWNrRXhwb3J0UHJlc2VuY2UgPSBub2RlID0+IHtcbiAgICAgIGlmICghbWlzc2luZ0V4cG9ydHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaWdub3JlZEZpbGVzLmhhcyhmaWxlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4cG9ydENvdW50ID0gZXhwb3J0TGlzdC5nZXQoZmlsZSk7XG4gICAgICBjb25zdCBleHBvcnRBbGwgPSBleHBvcnRDb3VudC5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBjb25zdCBuYW1lc3BhY2VJbXBvcnRzID0gZXhwb3J0Q291bnQuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgZXhwb3J0Q291bnQuZGVsZXRlKEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgZXhwb3J0Q291bnQuZGVsZXRlKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgIGlmIChleHBvcnRDb3VudC5zaXplIDwgMSkge1xuICAgICAgICAvLyBub2RlLmJvZHlbMF0gPT09ICd1bmRlZmluZWQnIG9ubHkgaGFwcGVucywgaWYgZXZlcnl0aGluZyBpcyBjb21tZW50ZWQgb3V0IGluIHRoZSBmaWxlXG4gICAgICAgIC8vIGJlaW5nIGxpbnRlZFxuICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLmJvZHlbMF0gPyBub2RlLmJvZHlbMF0gOiBub2RlLCAnTm8gZXhwb3J0cyBmb3VuZCcpO1xuICAgICAgfVxuICAgICAgZXhwb3J0Q291bnQuc2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04sIGV4cG9ydEFsbCk7XG4gICAgICBleHBvcnRDb3VudC5zZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIsIG5hbWVzcGFjZUltcG9ydHMpO1xuICAgIH07XG5cbiAgICBjb25zdCBjaGVja1VzYWdlID0gKG5vZGUsIGV4cG9ydGVkVmFsdWUpID0+IHtcbiAgICAgIGlmICghdW51c2VkRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVJc0luUGtnKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzT3V0c2lkZVNyYy5oYXMoZmlsZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBtYWtlIHN1cmUgZmlsZSB0byBiZSBsaW50ZWQgaXMgaW5jbHVkZWQgaW4gc291cmNlIGZpbGVzXG4gICAgICBpZiAoIXNyY0ZpbGVzLmhhcyhmaWxlKSkge1xuICAgICAgICBzcmNGaWxlcyA9IHJlc29sdmVGaWxlcyhnZXRTcmMoc3JjKSwgaWdub3JlRXhwb3J0cywgY29udGV4dCk7XG4gICAgICAgIGlmICghc3JjRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgICAgZmlsZXNPdXRzaWRlU3JjLmFkZChmaWxlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KGZpbGUpO1xuXG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IGV4cG9ydCAqIGZyb21cbiAgICAgIGNvbnN0IGV4cG9ydEFsbCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRBbGwgIT09ICd1bmRlZmluZWQnICYmIGV4cG9ydGVkVmFsdWUgIT09IElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUikge1xuICAgICAgICBpZiAoZXhwb3J0QWxsLndoZXJlVXNlZC5zaXplID4gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzcGVjaWFsIGNhc2U6IG5hbWVzcGFjZSBpbXBvcnRcbiAgICAgIGNvbnN0IG5hbWVzcGFjZUltcG9ydHMgPSBleHBvcnRzLmdldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZUltcG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChuYW1lc3BhY2VJbXBvcnRzLndoZXJlVXNlZC5zaXplID4gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBleHBvcnRzTGlzdCB3aWxsIGFsd2F5cyBtYXAgYW55IGltcG9ydGVkIHZhbHVlIG9mICdkZWZhdWx0JyB0byAnSW1wb3J0RGVmYXVsdFNwZWNpZmllcidcbiAgICAgIGNvbnN0IGV4cG9ydHNLZXkgPSBleHBvcnRlZFZhbHVlID09PSBERUZBVUxUID8gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSIDogZXhwb3J0ZWRWYWx1ZTtcblxuICAgICAgY29uc3QgZXhwb3J0U3RhdGVtZW50ID0gZXhwb3J0cy5nZXQoZXhwb3J0c0tleSk7XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gZXhwb3J0c0tleSA9PT0gSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSID8gREVGQVVMVCA6IGV4cG9ydHNLZXk7XG5cbiAgICAgIGlmICh0eXBlb2YgZXhwb3J0U3RhdGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoZXhwb3J0U3RhdGVtZW50LndoZXJlVXNlZC5zaXplIDwgMSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIGBleHBvcnRlZCBkZWNsYXJhdGlvbiAnJHt2YWx1ZX0nIG5vdCB1c2VkIHdpdGhpbiBvdGhlciBtb2R1bGVzYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KFxuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgYGV4cG9ydGVkIGRlY2xhcmF0aW9uICcke3ZhbHVlfScgbm90IHVzZWQgd2l0aGluIG90aGVyIG1vZHVsZXNgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIG9ubHkgdXNlZnVsIGZvciB0b29scyBsaWtlIHZzY29kZS1lc2xpbnRcbiAgICAgKlxuICAgICAqIHVwZGF0ZSBsaXN0cyBvZiBleGlzdGluZyBleHBvcnRzIGR1cmluZyBydW50aW1lXG4gICAgICovXG4gICAgY29uc3QgdXBkYXRlRXhwb3J0VXNhZ2UgPSBub2RlID0+IHtcbiAgICAgIGlmIChpZ25vcmVkRmlsZXMuaGFzKGZpbGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldChmaWxlKTtcblxuICAgICAgLy8gbmV3IG1vZHVsZSBoYXMgYmVlbiBjcmVhdGVkIGR1cmluZyBydW50aW1lXG4gICAgICAvLyBpbmNsdWRlIGl0IGluIGZ1cnRoZXIgcHJvY2Vzc2luZ1xuICAgICAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdFeHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgY29uc3QgbmV3RXhwb3J0SWRlbnRpZmllcnMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIG5vZGUuYm9keS5mb3JFYWNoKCh7IHR5cGUsIGRlY2xhcmF0aW9uLCBzcGVjaWZpZXJzIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9ERUZBVUxUX0RFQ0xBUkFUSU9OKSB7XG4gICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChzcGVjaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNwZWNpZmllcnMuZm9yRWFjaChzcGVjaWZpZXIgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3BlY2lmaWVyLmV4cG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuYWRkKHNwZWNpZmllci5leHBvcnRlZC5uYW1lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvckVhY2hEZWNsYXJhdGlvbklkZW50aWZpZXIoZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgICBuZXdFeHBvcnRJZGVudGlmaWVycy5hZGQobmFtZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBvbGQgZXhwb3J0cyBleGlzdCB3aXRoaW4gbGlzdCBvZiBuZXcgZXhwb3J0cyBpZGVudGlmaWVyczogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgZXhwb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmIChuZXdFeHBvcnRJZGVudGlmaWVycy5oYXMoa2V5KSkge1xuICAgICAgICAgIG5ld0V4cG9ydHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gbmV3IGV4cG9ydCBpZGVudGlmaWVycyBhZGRlZDogYWRkIHRvIG1hcCBvZiBuZXcgZXhwb3J0c1xuICAgICAgbmV3RXhwb3J0SWRlbnRpZmllcnMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoIWV4cG9ydHMuaGFzKGtleSkpIHtcbiAgICAgICAgICBuZXdFeHBvcnRzLnNldChrZXksIHsgd2hlcmVVc2VkOiBuZXcgU2V0KCkgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBwcmVzZXJ2ZSBpbmZvcm1hdGlvbiBhYm91dCBuYW1lc3BhY2UgaW1wb3J0c1xuICAgICAgY29uc3QgZXhwb3J0QWxsID0gZXhwb3J0cy5nZXQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICBsZXQgbmFtZXNwYWNlSW1wb3J0cyA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcblxuICAgICAgaWYgKHR5cGVvZiBuYW1lc3BhY2VJbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBuYW1lc3BhY2VJbXBvcnRzID0geyB3aGVyZVVzZWQ6IG5ldyBTZXQoKSB9O1xuICAgICAgfVxuXG4gICAgICBuZXdFeHBvcnRzLnNldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OLCBleHBvcnRBbGwpO1xuICAgICAgbmV3RXhwb3J0cy5zZXQoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIsIG5hbWVzcGFjZUltcG9ydHMpO1xuICAgICAgZXhwb3J0TGlzdC5zZXQoZmlsZSwgbmV3RXhwb3J0cyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIG9ubHkgdXNlZnVsIGZvciB0b29scyBsaWtlIHZzY29kZS1lc2xpbnRcbiAgICAgKlxuICAgICAqIHVwZGF0ZSBsaXN0cyBvZiBleGlzdGluZyBpbXBvcnRzIGR1cmluZyBydW50aW1lXG4gICAgICovXG4gICAgY29uc3QgdXBkYXRlSW1wb3J0VXNhZ2UgPSBub2RlID0+IHtcbiAgICAgIGlmICghdW51c2VkRXhwb3J0cykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBvbGRJbXBvcnRQYXRocyA9IGltcG9ydExpc3QuZ2V0KGZpbGUpO1xuICAgICAgaWYgKHR5cGVvZiBvbGRJbXBvcnRQYXRocyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgb2xkSW1wb3J0UGF0aHMgPSBuZXcgTWFwKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9sZE5hbWVzcGFjZUltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICBjb25zdCBuZXdOYW1lc3BhY2VJbXBvcnRzID0gbmV3IFNldCgpO1xuXG4gICAgICBjb25zdCBvbGRFeHBvcnRBbGwgPSBuZXcgU2V0KCk7XG4gICAgICBjb25zdCBuZXdFeHBvcnRBbGwgPSBuZXcgU2V0KCk7XG5cbiAgICAgIGNvbnN0IG9sZERlZmF1bHRJbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgY29uc3QgbmV3RGVmYXVsdEltcG9ydHMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIGNvbnN0IG9sZEltcG9ydHMgPSBuZXcgTWFwKCk7XG4gICAgICBjb25zdCBuZXdJbXBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgb2xkSW1wb3J0UGF0aHMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUuaGFzKEVYUE9SVF9BTExfREVDTEFSQVRJT04pKSB7XG4gICAgICAgICAgb2xkRXhwb3J0QWxsLmFkZChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5oYXMoSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpKSB7XG4gICAgICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUuaGFzKElNUE9SVF9ERUZBVUxUX1NQRUNJRklFUikpIHtcbiAgICAgICAgICBvbGREZWZhdWx0SW1wb3J0cy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICAgaWYgKHZhbCAhPT0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIgJiZcbiAgICAgICAgICAgICAgdmFsICE9PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgIG9sZEltcG9ydHMuc2V0KHZhbCwga2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHByb2Nlc3NEeW5hbWljSW1wb3J0KHNvdXJjZSkge1xuICAgICAgICBpZiAoc291cmNlLnR5cGUgIT09ICdMaXRlcmFsJykge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSByZXNvbHZlKHNvdXJjZS52YWx1ZSwgY29udGV4dCk7XG4gICAgICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBuZXdOYW1lc3BhY2VJbXBvcnRzLmFkZChwKTtcbiAgICAgIH1cblxuICAgICAgdmlzaXQobm9kZSwgdmlzaXRvcktleU1hcC5nZXQoZmlsZSksIHtcbiAgICAgICAgSW1wb3J0RXhwcmVzc2lvbihjaGlsZCkge1xuICAgICAgICAgIHByb2Nlc3NEeW5hbWljSW1wb3J0KGNoaWxkLnNvdXJjZSk7XG4gICAgICAgIH0sXG4gICAgICAgIENhbGxFeHByZXNzaW9uKGNoaWxkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkLmNhbGxlZS50eXBlID09PSAnSW1wb3J0Jykge1xuICAgICAgICAgICAgcHJvY2Vzc0R5bmFtaWNJbXBvcnQoY2hpbGQuYXJndW1lbnRzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgbm9kZS5ib2R5LmZvckVhY2goYXN0Tm9kZSA9PiB7XG4gICAgICAgIGxldCByZXNvbHZlZFBhdGg7XG5cbiAgICAgICAgLy8gc3VwcG9ydCBmb3IgZXhwb3J0IHsgdmFsdWUgfSBmcm9tICdtb2R1bGUnXG4gICAgICAgIGlmIChhc3ROb2RlLnR5cGUgPT09IEVYUE9SVF9OQU1FRF9ERUNMQVJBVElPTikge1xuICAgICAgICAgIGlmIChhc3ROb2RlLnNvdXJjZSkge1xuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZShhc3ROb2RlLnNvdXJjZS5yYXcucmVwbGFjZSgvKCd8XCIpL2csICcnKSwgY29udGV4dCk7XG4gICAgICAgICAgICBhc3ROb2RlLnNwZWNpZmllcnMuZm9yRWFjaChzcGVjaWZpZXIgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuYW1lID0gc3BlY2lmaWVyLmxvY2FsLm5hbWU7XG4gICAgICAgICAgICAgIGlmIChzcGVjaWZpZXIubG9jYWwubmFtZSA9PT0gREVGQVVMVCkge1xuICAgICAgICAgICAgICAgIG5ld0RlZmF1bHRJbXBvcnRzLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld0ltcG9ydHMuc2V0KG5hbWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhc3ROb2RlLnR5cGUgPT09IEVYUE9SVF9BTExfREVDTEFSQVRJT04pIHtcbiAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICBuZXdFeHBvcnRBbGwuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN0Tm9kZS50eXBlID09PSBJTVBPUlRfREVDTEFSQVRJT04pIHtcbiAgICAgICAgICByZXNvbHZlZFBhdGggPSByZXNvbHZlKGFzdE5vZGUuc291cmNlLnJhdy5yZXBsYWNlKC8oJ3xcIikvZywgJycpLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc05vZGVNb2R1bGUocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXdOYW1lc3BhY2VJbXBvcnRFeGlzdHMoYXN0Tm9kZS5zcGVjaWZpZXJzKSkge1xuICAgICAgICAgICAgbmV3TmFtZXNwYWNlSW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3RGVmYXVsdEltcG9ydEV4aXN0cyhhc3ROb2RlLnNwZWNpZmllcnMpKSB7XG4gICAgICAgICAgICBuZXdEZWZhdWx0SW1wb3J0cy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhc3ROb2RlLnNwZWNpZmllcnMuZm9yRWFjaChzcGVjaWZpZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHNwZWNpZmllci50eXBlID09PSBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIgfHxcbiAgICAgICAgICAgICAgICBzcGVjaWZpZXIudHlwZSA9PT0gSU1QT1JUX05BTUVTUEFDRV9TUEVDSUZJRVIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3SW1wb3J0cy5zZXQoc3BlY2lmaWVyLmltcG9ydGVkLm5hbWUsIHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdFeHBvcnRBbGwuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghb2xkRXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBsZXQgaW1wb3J0cyA9IG9sZEltcG9ydFBhdGhzLmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpbXBvcnRzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaW1wb3J0cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1wb3J0cy5hZGQoRVhQT1JUX0FMTF9ERUNMQVJBVElPTik7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OLCB7IHdoZXJlVXNlZCB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBvbGRFeHBvcnRBbGwuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghbmV3RXhwb3J0QWxsLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShFWFBPUlRfQUxMX0RFQ0xBUkFUSU9OKTtcblxuICAgICAgICAgIGNvbnN0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KEVYUE9SVF9BTExfREVDTEFSQVRJT04pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbmV3RGVmYXVsdEltcG9ydHMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghb2xkRGVmYXVsdEltcG9ydHMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIGxldCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGltcG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBpbXBvcnRzID0gbmV3IFNldCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbXBvcnRzLmFkZChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgICAgIG9sZEltcG9ydFBhdGhzLnNldCh2YWx1ZSwgaW1wb3J0cyk7XG5cbiAgICAgICAgICBsZXQgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBsZXQgY3VycmVudEV4cG9ydDtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIsIHsgd2hlcmVVc2VkIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG9sZERlZmF1bHRJbXBvcnRzLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICBpZiAoIW5ld0RlZmF1bHRJbXBvcnRzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuXG4gICAgICAgICAgY29uc3QgZXhwb3J0cyA9IGV4cG9ydExpc3QuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RXhwb3J0ID0gZXhwb3J0cy5nZXQoSU1QT1JUX0RFRkFVTFRfU1BFQ0lGSUVSKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY3VycmVudEV4cG9ydC53aGVyZVVzZWQuZGVsZXRlKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIG5ld05hbWVzcGFjZUltcG9ydHMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgIGlmICghb2xkTmFtZXNwYWNlSW1wb3J0cy5oYXModmFsdWUpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICBvbGRJbXBvcnRQYXRocy5zZXQodmFsdWUsIGltcG9ydHMpO1xuXG4gICAgICAgICAgbGV0IGV4cG9ydHMgPSBleHBvcnRMaXN0LmdldCh2YWx1ZSk7XG4gICAgICAgICAgbGV0IGN1cnJlbnRFeHBvcnQ7XG4gICAgICAgICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY3VycmVudEV4cG9ydCA9IGV4cG9ydHMuZ2V0KElNUE9SVF9OQU1FU1BBQ0VfU1BFQ0lGSUVSKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwb3J0cyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIGV4cG9ydExpc3Quc2V0KHZhbHVlLCBleHBvcnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHdoZXJlVXNlZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHdoZXJlVXNlZC5hZGQoZmlsZSk7XG4gICAgICAgICAgICBleHBvcnRzLnNldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUiwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkTmFtZXNwYWNlSW1wb3J0cy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKCFuZXdOYW1lc3BhY2VJbXBvcnRzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRzID0gb2xkSW1wb3J0UGF0aHMuZ2V0KHZhbHVlKTtcbiAgICAgICAgICBpbXBvcnRzLmRlbGV0ZShJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG5cbiAgICAgICAgICBjb25zdCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChJTVBPUlRfTkFNRVNQQUNFX1NQRUNJRklFUik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRFeHBvcnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmRlbGV0ZShmaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBuZXdJbXBvcnRzLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKCFvbGRJbXBvcnRzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgbGV0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgaW1wb3J0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGltcG9ydHMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGltcG9ydHMuYWRkKGtleSk7XG4gICAgICAgICAgb2xkSW1wb3J0UGF0aHMuc2V0KHZhbHVlLCBpbXBvcnRzKTtcblxuICAgICAgICAgIGxldCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGxldCBjdXJyZW50RXhwb3J0O1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChrZXkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBvcnRzID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgZXhwb3J0TGlzdC5zZXQodmFsdWUsIGV4cG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudEV4cG9ydCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFeHBvcnQud2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgd2hlcmVVc2VkID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgd2hlcmVVc2VkLmFkZChmaWxlKTtcbiAgICAgICAgICAgIGV4cG9ydHMuc2V0KGtleSwgeyB3aGVyZVVzZWQgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgb2xkSW1wb3J0cy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICghbmV3SW1wb3J0cy5oYXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IGltcG9ydHMgPSBvbGRJbXBvcnRQYXRocy5nZXQodmFsdWUpO1xuICAgICAgICAgIGltcG9ydHMuZGVsZXRlKGtleSk7XG5cbiAgICAgICAgICBjb25zdCBleHBvcnRzID0gZXhwb3J0TGlzdC5nZXQodmFsdWUpO1xuICAgICAgICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFeHBvcnQgPSBleHBvcnRzLmdldChrZXkpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50RXhwb3J0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjdXJyZW50RXhwb3J0LndoZXJlVXNlZC5kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICdQcm9ncmFtOmV4aXQnOiBub2RlID0+IHtcbiAgICAgICAgdXBkYXRlRXhwb3J0VXNhZ2Uobm9kZSk7XG4gICAgICAgIHVwZGF0ZUltcG9ydFVzYWdlKG5vZGUpO1xuICAgICAgICBjaGVja0V4cG9ydFByZXNlbmNlKG5vZGUpO1xuICAgICAgfSxcbiAgICAgICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nOiBub2RlID0+IHtcbiAgICAgICAgY2hlY2tVc2FnZShub2RlLCBJTVBPUlRfREVGQVVMVF9TUEVDSUZJRVIpO1xuICAgICAgfSxcbiAgICAgICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJzogbm9kZSA9PiB7XG4gICAgICAgIG5vZGUuc3BlY2lmaWVycy5mb3JFYWNoKHNwZWNpZmllciA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShub2RlLCBzcGVjaWZpZXIuZXhwb3J0ZWQubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBmb3JFYWNoRGVjbGFyYXRpb25JZGVudGlmaWVyKG5vZGUuZGVjbGFyYXRpb24sIChuYW1lKSA9PiB7XG4gICAgICAgICAgY2hlY2tVc2FnZShub2RlLCBuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/no-webpack-loader-syntax.js b/node_modules/eslint-plugin-import/lib/rules/no-webpack-loader-syntax.js
index 82f59f7..14d1c3a 100644
--- a/node_modules/eslint-plugin-import/lib/rules/no-webpack-loader-syntax.js
+++ b/node_modules/eslint-plugin-import/lib/rules/no-webpack-loader-syntax.js
@@ -23,4 +23,4 @@
reportIfNonStandard(context, node, source.value);
}, { commonjs: true });
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXguanMiXSwibmFtZXMiOlsicmVwb3J0SWZOb25TdGFuZGFyZCIsImNvbnRleHQiLCJub2RlIiwibmFtZSIsImluZGV4T2YiLCJyZXBvcnQiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSxxQzs7QUFFQSxTQUFTQSxtQkFBVCxDQUE2QkMsT0FBN0IsRUFBc0NDLElBQXRDLEVBQTRDQyxJQUE1QyxFQUFrRDtBQUNoRCxNQUFJQSxRQUFRQSxLQUFLQyxPQUFMLENBQWEsR0FBYixNQUFzQixDQUFDLENBQW5DLEVBQXNDO0FBQ3BDSCxZQUFRSSxNQUFSLENBQWVILElBQWYsRUFBcUIsa0NBQXNCQyxJQUF0QjtBQUNuQiw0REFERjs7QUFHRDtBQUNGOztBQUVERyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSwwQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsRUFMSixFQURTOzs7QUFTZkMsdUJBQVEsZ0JBQVVaLE9BQVYsRUFBbUI7QUFDekIsYUFBTyxnQ0FBYyxVQUFDYSxNQUFELEVBQVNaLElBQVQsRUFBa0I7QUFDckNGLDRCQUFvQkMsT0FBcEIsRUFBNkJDLElBQTdCLEVBQW1DWSxPQUFPQyxLQUExQztBQUNELE9BRk0sRUFFSixFQUFFQyxVQUFVLElBQVosRUFGSSxDQUFQO0FBR0QsS0FKRCxpQkFUZSxFQUFqQiIsImZpbGUiOiJuby13ZWJwYWNrLWxvYWRlci1zeW50YXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9kdWxlVmlzaXRvciBmcm9tICdlc2xpbnQtbW9kdWxlLXV0aWxzL21vZHVsZVZpc2l0b3InO1xuaW1wb3J0IGRvY3NVcmwgZnJvbSAnLi4vZG9jc1VybCc7XG5cbmZ1bmN0aW9uIHJlcG9ydElmTm9uU3RhbmRhcmQoY29udGV4dCwgbm9kZSwgbmFtZSkge1xuICBpZiAobmFtZSAmJiBuYW1lLmluZGV4T2YoJyEnKSAhPT0gLTEpIHtcbiAgICBjb250ZXh0LnJlcG9ydChub2RlLCBgVW5leHBlY3RlZCAnIScgaW4gJyR7bmFtZX0nLiBgICtcbiAgICAgICdEbyBub3QgdXNlIGltcG9ydCBzeW50YXggdG8gY29uZmlndXJlIHdlYnBhY2sgbG9hZGVycy4nXG4gICAgKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdwcm9ibGVtJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ25vLXdlYnBhY2stbG9hZGVyLXN5bnRheCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgcmV0dXJuIG1vZHVsZVZpc2l0b3IoKHNvdXJjZSwgbm9kZSkgPT4ge1xuICAgICAgcmVwb3J0SWZOb25TdGFuZGFyZChjb250ZXh0LCBub2RlLCBzb3VyY2UudmFsdWUpO1xuICAgIH0sIHsgY29tbW9uanM6IHRydWUgfSk7XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9uby13ZWJwYWNrLWxvYWRlci1zeW50YXguanMiXSwibmFtZXMiOlsicmVwb3J0SWZOb25TdGFuZGFyZCIsImNvbnRleHQiLCJub2RlIiwibmFtZSIsImluZGV4T2YiLCJyZXBvcnQiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwic291cmNlIiwidmFsdWUiLCJjb21tb25qcyJdLCJtYXBwaW5ncyI6ImFBQUEsa0U7QUFDQSxxQzs7QUFFQSxTQUFTQSxtQkFBVCxDQUE2QkMsT0FBN0IsRUFBc0NDLElBQXRDLEVBQTRDQyxJQUE1QyxFQUFrRDtBQUNoRCxNQUFJQSxRQUFRQSxLQUFLQyxPQUFMLENBQWEsR0FBYixNQUFzQixDQUFDLENBQW5DLEVBQXNDO0FBQ3BDSCxZQUFRSSxNQUFSLENBQWVILElBQWYsRUFBcUIsa0NBQXNCQyxJQUF0QjtBQUNuQiw0REFERjs7QUFHRDtBQUNGOztBQUVERyxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTSxTQURGO0FBRUpDLFVBQU07QUFDSkMsV0FBSywwQkFBUSwwQkFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsRUFMSixFQURTOzs7QUFTZkMsUUFUZSwrQkFTUlosT0FUUSxFQVNDO0FBQ2QsYUFBTyxnQ0FBYyxVQUFDYSxNQUFELEVBQVNaLElBQVQsRUFBa0I7QUFDckNGLDRCQUFvQkMsT0FBcEIsRUFBNkJDLElBQTdCLEVBQW1DWSxPQUFPQyxLQUExQztBQUNELE9BRk0sRUFFSixFQUFFQyxVQUFVLElBQVosRUFGSSxDQUFQO0FBR0QsS0FiYyxtQkFBakIiLCJmaWxlIjoibm8td2VicGFjay1sb2FkZXItc3ludGF4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vZHVsZVZpc2l0b3IgZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy9tb2R1bGVWaXNpdG9yJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5mdW5jdGlvbiByZXBvcnRJZk5vblN0YW5kYXJkKGNvbnRleHQsIG5vZGUsIG5hbWUpIHtcbiAgaWYgKG5hbWUgJiYgbmFtZS5pbmRleE9mKCchJykgIT09IC0xKSB7XG4gICAgY29udGV4dC5yZXBvcnQobm9kZSwgYFVuZXhwZWN0ZWQgJyEnIGluICcke25hbWV9Jy4gYCArXG4gICAgICAnRG8gbm90IHVzZSBpbXBvcnQgc3ludGF4IHRvIGNvbmZpZ3VyZSB3ZWJwYWNrIGxvYWRlcnMuJ1xuICAgICk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAncHJvYmxlbScsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby13ZWJwYWNrLWxvYWRlci1zeW50YXgnKSxcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gIH0sXG5cbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICByZXR1cm4gbW9kdWxlVmlzaXRvcigoc291cmNlLCBub2RlKSA9PiB7XG4gICAgICByZXBvcnRJZk5vblN0YW5kYXJkKGNvbnRleHQsIG5vZGUsIHNvdXJjZS52YWx1ZSk7XG4gICAgfSwgeyBjb21tb25qczogdHJ1ZSB9KTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/order.js b/node_modules/eslint-plugin-import/lib/rules/order.js
index 5cebb8d..08eb901 100644
--- a/node_modules/eslint-plugin-import/lib/rules/order.js
+++ b/node_modules/eslint-plugin-import/lib/rules/order.js
@@ -336,7 +336,7 @@
}
}
-function isModuleLevelRequire(node) {
+function getRequireBlock(node) {
var n = node;
// Handle cases like `const baz = require('foo').bar.baz`
// and `const foo = require('foo')()`
@@ -346,11 +346,13 @@
{
n = n.parent;
}
- return (
- n.parent.type === 'VariableDeclarator' &&
- n.parent.parent.type === 'VariableDeclaration' &&
- n.parent.parent.parent.type === 'Program');
-
+ if (
+ n.parent.type === 'VariableDeclarator' &&
+ n.parent.parent.type === 'VariableDeclaration' &&
+ n.parent.parent.parent.type === 'Program')
+ {
+ return n.parent.parent.parent;
+ }
}
var types = ['builtin', 'external', 'internal', 'unknown', 'parent', 'sibling', 'index', 'object', 'type'];
@@ -605,7 +607,14 @@
}return Program;}() };
}
- var imported = [];
+ var importMap = new Map();
+
+ function getBlockImports(node) {
+ if (!importMap.has(node)) {
+ importMap.set(node, []);
+ }
+ return importMap.get(node);
+ }
return {
ImportDeclaration: function () {function handleImports(node) {
@@ -621,7 +630,7 @@
type: 'import' },
ranks,
- imported,
+ getBlockImports(node.parent),
pathGroupsExcludedImportTypes);
}
@@ -652,12 +661,16 @@
type: type },
ranks,
- imported,
+ getBlockImports(node.parent),
pathGroupsExcludedImportTypes);
}return handleImports;}(),
CallExpression: function () {function handleRequires(node) {
- if (!(0, _staticRequire2['default'])(node) || !isModuleLevelRequire(node)) {
+ if (!(0, _staticRequire2['default'])(node)) {
+ return;
+ }
+ var block = getRequireBlock(node);
+ if (!block) {
return;
}
var name = node.arguments[0].value;
@@ -670,23 +683,25 @@
type: 'require' },
ranks,
- imported,
+ getBlockImports(block),
pathGroupsExcludedImportTypes);
}return handleRequires;}(),
'Program:exit': function () {function reportAndReset() {
- if (newlinesBetweenImports !== 'ignore') {
- makeNewlinesBetweenReport(context, imported, newlinesBetweenImports);
- }
+ importMap.forEach(function (imported) {
+ if (newlinesBetweenImports !== 'ignore') {
+ makeNewlinesBetweenReport(context, imported, newlinesBetweenImports);
+ }
- if (alphabetize.order !== 'ignore') {
- mutateRanksToAlphabetize(imported, alphabetize);
- }
+ if (alphabetize.order !== 'ignore') {
+ mutateRanksToAlphabetize(imported, alphabetize);
+ }
- makeOutOfOrderReport(context, imported);
+ makeOutOfOrderReport(context, imported);
+ });
- imported = [];
+ importMap.clear();
}return reportAndReset;}() };
}return importOrderRule;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsIk9iamVjdCIsImFzc2lnbiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyIsInRva2Vuc1RvRW5kT2ZMaW5lIiwiY29tbWVudE9uU2FtZUxpbmVBcyIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwidG9rZW4iLCJ0eXBlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiZW5kIiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUGxhaW5SZXF1aXJlTW9kdWxlIiwiZGVjbGFyYXRpb25zIiwiZGVjbCIsImlkIiwiaW5pdCIsImNhbGxlZSIsIm5hbWUiLCJhcmd1bWVudHMiLCJpc1BsYWluSW1wb3J0TW9kdWxlIiwic3BlY2lmaWVycyIsImlzUGxhaW5JbXBvcnRFcXVhbHMiLCJtb2R1bGVSZWZlcmVuY2UiLCJleHByZXNzaW9uIiwiY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyIiwiY2FuUmVvcmRlckl0ZW1zIiwiZmlyc3ROb2RlIiwic2Vjb25kTm9kZSIsImluZGV4T2YiLCJzb3J0IiwiZmlyc3RJbmRleCIsInNlY29uZEluZGV4Iiwibm9kZXNCZXR3ZWVuIiwic2xpY2UiLCJub2RlQmV0d2VlbiIsImZpeE91dE9mT3JkZXIiLCJjb250ZXh0Iiwib3JkZXIiLCJnZXRTb3VyY2VDb2RlIiwiZmlyc3RSb290IiwiZmlyc3RSb290U3RhcnQiLCJmaXJzdFJvb3RFbmQiLCJzZWNvbmRSb290Iiwic2Vjb25kUm9vdFN0YXJ0Iiwic2Vjb25kUm9vdEVuZCIsImNhbkZpeCIsIm5ld0NvZGUiLCJzdWJzdHJpbmciLCJtZXNzYWdlIiwiZGlzcGxheU5hbWUiLCJyZXBvcnQiLCJmaXgiLCJmaXhlciIsInJlcGxhY2VUZXh0UmFuZ2UiLCJyZXBvcnRPdXRPZk9yZGVyIiwib3V0T2ZPcmRlciIsImZvckVhY2giLCJpbXAiLCJmb3VuZCIsImZpbmQiLCJoYXNIaWdoZXJSYW5rIiwiaW1wb3J0ZWRJdGVtIiwibWFrZU91dE9mT3JkZXJSZXBvcnQiLCJyZXZlcnNlZEltcG9ydGVkIiwicmV2ZXJzZWRPcmRlciIsImdldFNvcnRlciIsImFzY2VuZGluZyIsIm11bHRpcGxpZXIiLCJpbXBvcnRzU29ydGVyIiwiaW1wb3J0QSIsImltcG9ydEIiLCJtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUiLCJhbHBoYWJldGl6ZU9wdGlvbnMiLCJncm91cGVkQnlSYW5rcyIsInJlZHVjZSIsImFjYyIsIkFycmF5IiwiaXNBcnJheSIsImdyb3VwUmFua3MiLCJrZXlzIiwic29ydGVyRm4iLCJjb21wYXJhdG9yIiwiY2FzZUluc2Vuc2l0aXZlIiwiYSIsImIiLCJTdHJpbmciLCJ2YWx1ZSIsInRvTG93ZXJDYXNlIiwiZ3JvdXBSYW5rIiwibmV3UmFuayIsImFscGhhYmV0aXplZFJhbmtzIiwiaW1wb3J0S2luZCIsInBhcnNlSW50IiwiY29tcHV0ZVBhdGhSYW5rIiwicmFua3MiLCJwYXRoR3JvdXBzIiwicGF0aCIsIm1heFBvc2l0aW9uIiwibCIsInBhdHRlcm4iLCJwYXR0ZXJuT3B0aW9ucyIsImdyb3VwIiwicG9zaXRpb24iLCJub2NvbW1lbnQiLCJjb21wdXRlUmFuayIsImltcG9ydEVudHJ5IiwiZXhjbHVkZWRJbXBvcnRUeXBlcyIsImltcFR5cGUiLCJvbWl0dGVkVHlwZXMiLCJoYXMiLCJncm91cHMiLCJzdGFydHNXaXRoIiwicmVnaXN0ZXJOb2RlIiwiaXNNb2R1bGVMZXZlbFJlcXVpcmUiLCJuIiwib2JqZWN0IiwidHlwZXMiLCJjb252ZXJ0R3JvdXBzVG9SYW5rcyIsInJhbmtPYmplY3QiLCJpbmRleCIsImdyb3VwSXRlbSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInVuZGVmaW5lZCIsImNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3MiLCJhZnRlciIsImJlZm9yZSIsInRyYW5zZm9ybWVkIiwicGF0aEdyb3VwIiwicG9zaXRpb25TdHJpbmciLCJncm91cExlbmd0aCIsImdyb3VwSW5kZXgiLCJNYXRoIiwibWF4Iiwia2V5IiwiZ3JvdXBOZXh0UG9zaXRpb24iLCJwb3ciLCJjZWlsIiwibG9nMTAiLCJmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQiLCJwcmV2aW91c0ltcG9ydCIsInByZXZSb290IiwiZW5kT2ZMaW5lIiwiaW5zZXJ0VGV4dEFmdGVyUmFuZ2UiLCJyZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQiLCJjdXJyZW50SW1wb3J0IiwiY3VyclJvb3QiLCJyYW5nZVRvUmVtb3ZlIiwidGVzdCIsInJlbW92ZVJhbmdlIiwibWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydCIsIm5ld2xpbmVzQmV0d2VlbkltcG9ydHMiLCJnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuIiwibGluZXNCZXR3ZWVuSW1wb3J0cyIsImxpbmVzIiwidHJpbSIsImVtcHR5TGluZXNCZXR3ZWVuIiwiZ2V0QWxwaGFiZXRpemVDb25maWciLCJvcHRpb25zIiwiYWxwaGFiZXRpemUiLCJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJmaXhhYmxlIiwic2NoZW1hIiwicHJvcGVydGllcyIsInBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzIiwiaXRlbXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwid2Fybk9uVW5hc3NpZ25lZEltcG9ydHMiLCJjcmVhdGUiLCJpbXBvcnRPcmRlclJ1bGUiLCJTZXQiLCJlcnJvciIsIlByb2dyYW0iLCJJbXBvcnREZWNsYXJhdGlvbiIsImhhbmRsZUltcG9ydHMiLCJzb3VyY2UiLCJUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uIiwiaXNFeHBvcnQiLCJnZXRUZXh0IiwiQ2FsbEV4cHJlc3Npb24iLCJoYW5kbGVSZXF1aXJlcyIsInJlcG9ydEFuZFJlc2V0Il0sIm1hcHBpbmdzIjoiQUFBQSxhOztBQUVBLHNDO0FBQ0EsZ0Q7QUFDQSxzRDtBQUNBLHFDOztBQUVBLElBQU1BLGdCQUFnQixDQUFDLFNBQUQsRUFBWSxVQUFaLEVBQXdCLFFBQXhCLEVBQWtDLFNBQWxDLEVBQTZDLE9BQTdDLENBQXRCOztBQUVBOztBQUVBLFNBQVNDLE9BQVQsQ0FBaUJDLEtBQWpCLEVBQXdCO0FBQ3RCLFNBQU9BLE1BQU1DLEdBQU4sQ0FBVSxVQUFVQyxDQUFWLEVBQWE7QUFDNUIsV0FBT0MsT0FBT0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JGLENBQWxCLEVBQXFCLEVBQUVHLE1BQU0sQ0FBQ0gsRUFBRUcsSUFBWCxFQUFyQixDQUFQO0FBQ0QsR0FGTSxFQUVKTixPQUZJLEVBQVA7QUFHRDs7QUFFRCxTQUFTTyx3QkFBVCxDQUFrQ0MsVUFBbEMsRUFBOENDLElBQTlDLEVBQW9EQyxLQUFwRCxFQUEyRDtBQUN6RCxNQUFJQyxxQkFBcUJGLElBQXpCO0FBQ0EsTUFBTUcsU0FBUyxFQUFmO0FBQ0EsT0FBSyxJQUFJQyxJQUFJLENBQWIsRUFBZ0JBLElBQUlILEtBQXBCLEVBQTJCRyxHQUEzQixFQUFnQztBQUM5QkYseUJBQXFCSCxXQUFXTSxzQkFBWCxDQUFrQ0gsa0JBQWxDLENBQXJCO0FBQ0EsUUFBSUEsc0JBQXNCLElBQTFCLEVBQWdDO0FBQzlCO0FBQ0Q7QUFDREMsV0FBT0csSUFBUCxDQUFZSixrQkFBWjtBQUNEO0FBQ0QsU0FBT0MsTUFBUDtBQUNEOztBQUVELFNBQVNJLHlCQUFULENBQW1DUixVQUFuQyxFQUErQ0MsSUFBL0MsRUFBcURDLEtBQXJELEVBQTREO0FBQzFELE1BQUlDLHFCQUFxQkYsSUFBekI7QUFDQSxNQUFNRyxTQUFTLEVBQWY7QUFDQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUgsS0FBcEIsRUFBMkJHLEdBQTNCLEVBQWdDO0FBQzlCRix5QkFBcUJILFdBQVdTLHVCQUFYLENBQW1DTixrQkFBbkMsQ0FBckI7QUFDQSxRQUFJQSxzQkFBc0IsSUFBMUIsRUFBZ0M7QUFDOUI7QUFDRDtBQUNEQyxXQUFPRyxJQUFQLENBQVlKLGtCQUFaO0FBQ0Q7QUFDRCxTQUFPQyxPQUFPWixPQUFQLEVBQVA7QUFDRDs7QUFFRCxTQUFTa0Isb0JBQVQsQ0FBOEJWLFVBQTlCLEVBQTBDQyxJQUExQyxFQUFnRFUsU0FBaEQsRUFBMkQ7QUFDekQsTUFBTUMsU0FBU2IseUJBQXlCQyxVQUF6QixFQUFxQ0MsSUFBckMsRUFBMkMsR0FBM0MsQ0FBZjtBQUNBLE1BQU1HLFNBQVMsRUFBZjtBQUNBLE9BQUssSUFBSUMsSUFBSSxDQUFiLEVBQWdCQSxJQUFJTyxPQUFPQyxNQUEzQixFQUFtQ1IsR0FBbkMsRUFBd0M7QUFDdEMsUUFBSU0sVUFBVUMsT0FBT1AsQ0FBUCxDQUFWLENBQUosRUFBMEI7QUFDeEJELGFBQU9HLElBQVAsQ0FBWUssT0FBT1AsQ0FBUCxDQUFaO0FBQ0QsS0FGRCxNQUVPO0FBQ0w7QUFDRDtBQUNGO0FBQ0QsU0FBT0QsTUFBUDtBQUNEOztBQUVELFNBQVNVLHFCQUFULENBQStCZCxVQUEvQixFQUEyQ0MsSUFBM0MsRUFBaURVLFNBQWpELEVBQTREO0FBQzFELE1BQU1DLFNBQVNKLDBCQUEwQlIsVUFBMUIsRUFBc0NDLElBQXRDLEVBQTRDLEdBQTVDLENBQWY7QUFDQSxNQUFNRyxTQUFTLEVBQWY7QUFDQSxPQUFLLElBQUlDLElBQUlPLE9BQU9DLE1BQVAsR0FBZ0IsQ0FBN0IsRUFBZ0NSLEtBQUssQ0FBckMsRUFBd0NBLEdBQXhDLEVBQTZDO0FBQzNDLFFBQUlNLFVBQVVDLE9BQU9QLENBQVAsQ0FBVixDQUFKLEVBQTBCO0FBQ3hCRCxhQUFPRyxJQUFQLENBQVlLLE9BQU9QLENBQVAsQ0FBWjtBQUNELEtBRkQsTUFFTztBQUNMO0FBQ0Q7QUFDRjtBQUNELFNBQU9ELE9BQU9aLE9BQVAsRUFBUDtBQUNEOztBQUVELFNBQVN1QixjQUFULENBQXdCQyxRQUF4QixFQUFrQztBQUNoQyxNQUFJQSxTQUFTSCxNQUFULEtBQW9CLENBQXhCLEVBQTJCO0FBQ3pCLFdBQU8sRUFBUDtBQUNEO0FBQ0QsTUFBSUksa0JBQWtCRCxTQUFTLENBQVQsQ0FBdEI7QUFDQSxTQUFPQSxTQUFTRSxNQUFULENBQWdCLFVBQVVDLGNBQVYsRUFBMEI7QUFDL0MsUUFBTUMsTUFBTUQsZUFBZXJCLElBQWYsR0FBc0JtQixnQkFBZ0JuQixJQUFsRDtBQUNBLFFBQUltQixnQkFBZ0JuQixJQUFoQixHQUF1QnFCLGVBQWVyQixJQUExQyxFQUFnRDtBQUM5Q21CLHdCQUFrQkUsY0FBbEI7QUFDRDtBQUNELFdBQU9DLEdBQVA7QUFDRCxHQU5NLENBQVA7QUFPRDs7QUFFRCxTQUFTQyxZQUFULENBQXNCcEIsSUFBdEIsRUFBNEI7QUFDMUIsTUFBSXFCLFNBQVNyQixJQUFiO0FBQ0EsU0FBT3FCLE9BQU9BLE1BQVAsSUFBaUIsSUFBakIsSUFBeUJBLE9BQU9BLE1BQVAsQ0FBY0MsSUFBZCxJQUFzQixJQUF0RCxFQUE0RDtBQUMxREQsYUFBU0EsT0FBT0EsTUFBaEI7QUFDRDtBQUNELFNBQU9BLE1BQVA7QUFDRDs7QUFFRCxTQUFTRSx5QkFBVCxDQUFtQ3hCLFVBQW5DLEVBQStDQyxJQUEvQyxFQUFxRDtBQUNuRCxNQUFNd0Isb0JBQW9CZixxQkFBcUJWLFVBQXJCLEVBQWlDQyxJQUFqQyxFQUF1Q3lCLG9CQUFvQnpCLElBQXBCLENBQXZDLENBQTFCO0FBQ0EsTUFBTTBCLGNBQWNGLGtCQUFrQlosTUFBbEIsR0FBMkIsQ0FBM0I7QUFDaEJZLG9CQUFrQkEsa0JBQWtCWixNQUFsQixHQUEyQixDQUE3QyxFQUFnRGUsS0FBaEQsQ0FBc0QsQ0FBdEQsQ0FEZ0I7QUFFaEIzQixPQUFLMkIsS0FBTCxDQUFXLENBQVgsQ0FGSjtBQUdBLE1BQUl4QixTQUFTdUIsV0FBYjtBQUNBLE9BQUssSUFBSXRCLElBQUlzQixXQUFiLEVBQTBCdEIsSUFBSUwsV0FBVzZCLElBQVgsQ0FBZ0JoQixNQUE5QyxFQUFzRFIsR0FBdEQsRUFBMkQ7QUFDekQsUUFBSUwsV0FBVzZCLElBQVgsQ0FBZ0J4QixDQUFoQixNQUF1QixJQUEzQixFQUFpQztBQUMvQkQsZUFBU0MsSUFBSSxDQUFiO0FBQ0E7QUFDRDtBQUNELFFBQUlMLFdBQVc2QixJQUFYLENBQWdCeEIsQ0FBaEIsTUFBdUIsR0FBdkIsSUFBOEJMLFdBQVc2QixJQUFYLENBQWdCeEIsQ0FBaEIsTUFBdUIsSUFBckQsSUFBNkRMLFdBQVc2QixJQUFYLENBQWdCeEIsQ0FBaEIsTUFBdUIsSUFBeEYsRUFBOEY7QUFDNUY7QUFDRDtBQUNERCxhQUFTQyxJQUFJLENBQWI7QUFDRDtBQUNELFNBQU9ELE1BQVA7QUFDRDs7QUFFRCxTQUFTc0IsbUJBQVQsQ0FBNkJ6QixJQUE3QixFQUFtQztBQUNqQyxTQUFPLHlCQUFTLENBQUM2QixNQUFNQyxJQUFOLEtBQWUsT0FBZixJQUEyQkQsTUFBTUMsSUFBTixLQUFlLE1BQTNDO0FBQ1pELFVBQU1FLEdBQU4sQ0FBVUMsS0FBVixDQUFnQkMsSUFBaEIsS0FBeUJKLE1BQU1FLEdBQU4sQ0FBVUcsR0FBVixDQUFjRCxJQUQzQjtBQUVaSixVQUFNRSxHQUFOLENBQVVHLEdBQVYsQ0FBY0QsSUFBZCxLQUF1QmpDLEtBQUsrQixHQUFMLENBQVNHLEdBQVQsQ0FBYUQsSUFGakMsRUFBUDtBQUdEOztBQUVELFNBQVNFLDJCQUFULENBQXFDcEMsVUFBckMsRUFBaURDLElBQWpELEVBQXVEO0FBQ3JELE1BQU13QixvQkFBb0JYLHNCQUFzQmQsVUFBdEIsRUFBa0NDLElBQWxDLEVBQXdDeUIsb0JBQW9CekIsSUFBcEIsQ0FBeEMsQ0FBMUI7QUFDQSxNQUFNb0MsZ0JBQWdCWixrQkFBa0JaLE1BQWxCLEdBQTJCLENBQTNCLEdBQStCWSxrQkFBa0IsQ0FBbEIsRUFBcUJHLEtBQXJCLENBQTJCLENBQTNCLENBQS9CLEdBQStEM0IsS0FBSzJCLEtBQUwsQ0FBVyxDQUFYLENBQXJGO0FBQ0EsTUFBSXhCLFNBQVNpQyxhQUFiO0FBQ0EsT0FBSyxJQUFJaEMsSUFBSWdDLGdCQUFnQixDQUE3QixFQUFnQ2hDLElBQUksQ0FBcEMsRUFBdUNBLEdBQXZDLEVBQTRDO0FBQzFDLFFBQUlMLFdBQVc2QixJQUFYLENBQWdCeEIsQ0FBaEIsTUFBdUIsR0FBdkIsSUFBOEJMLFdBQVc2QixJQUFYLENBQWdCeEIsQ0FBaEIsTUFBdUIsSUFBekQsRUFBK0Q7QUFDN0Q7QUFDRDtBQUNERCxhQUFTQyxDQUFUO0FBQ0Q7QUFDRCxTQUFPRCxNQUFQO0FBQ0Q7O0FBRUQsU0FBU2tDLG9CQUFULENBQThCckMsSUFBOUIsRUFBb0M7QUFDbEMsTUFBSUEsS0FBSzhCLElBQUwsS0FBYyxxQkFBbEIsRUFBeUM7QUFDdkMsV0FBTyxLQUFQO0FBQ0Q7QUFDRCxNQUFJOUIsS0FBS3NDLFlBQUwsQ0FBa0IxQixNQUFsQixLQUE2QixDQUFqQyxFQUFvQztBQUNsQyxXQUFPLEtBQVA7QUFDRDtBQUNELE1BQU0yQixPQUFPdkMsS0FBS3NDLFlBQUwsQ0FBa0IsQ0FBbEIsQ0FBYjtBQUNBLE1BQU1uQyxTQUFTb0MsS0FBS0MsRUFBTDtBQUNaRCxPQUFLQyxFQUFMLENBQVFWLElBQVIsS0FBaUIsWUFBakIsSUFBaUNTLEtBQUtDLEVBQUwsQ0FBUVYsSUFBUixLQUFpQixlQUR0QztBQUViUyxPQUFLRSxJQUFMLElBQWEsSUFGQTtBQUdiRixPQUFLRSxJQUFMLENBQVVYLElBQVYsS0FBbUIsZ0JBSE47QUFJYlMsT0FBS0UsSUFBTCxDQUFVQyxNQUFWLElBQW9CLElBSlA7QUFLYkgsT0FBS0UsSUFBTCxDQUFVQyxNQUFWLENBQWlCQyxJQUFqQixLQUEwQixTQUxiO0FBTWJKLE9BQUtFLElBQUwsQ0FBVUcsU0FBVixJQUF1QixJQU5WO0FBT2JMLE9BQUtFLElBQUwsQ0FBVUcsU0FBVixDQUFvQmhDLE1BQXBCLEtBQStCLENBUGxCO0FBUWIyQixPQUFLRSxJQUFMLENBQVVHLFNBQVYsQ0FBb0IsQ0FBcEIsRUFBdUJkLElBQXZCLEtBQWdDLFNBUmxDO0FBU0EsU0FBTzNCLE1BQVA7QUFDRDs7QUFFRCxTQUFTMEMsbUJBQVQsQ0FBNkI3QyxJQUE3QixFQUFtQztBQUNqQyxTQUFPQSxLQUFLOEIsSUFBTCxLQUFjLG1CQUFkLElBQXFDOUIsS0FBSzhDLFVBQUwsSUFBbUIsSUFBeEQsSUFBZ0U5QyxLQUFLOEMsVUFBTCxDQUFnQmxDLE1BQWhCLEdBQXlCLENBQWhHO0FBQ0Q7O0FBRUQsU0FBU21DLG1CQUFULENBQTZCL0MsSUFBN0IsRUFBbUM7QUFDakMsU0FBT0EsS0FBSzhCLElBQUwsS0FBYywyQkFBZCxJQUE2QzlCLEtBQUtnRCxlQUFMLENBQXFCQyxVQUF6RTtBQUNEOztBQUVELFNBQVNDLHdCQUFULENBQWtDbEQsSUFBbEMsRUFBd0M7QUFDdEMsU0FBT3FDLHFCQUFxQnJDLElBQXJCLEtBQThCNkMsb0JBQW9CN0MsSUFBcEIsQ0FBOUIsSUFBMkQrQyxvQkFBb0IvQyxJQUFwQixDQUFsRTtBQUNEOztBQUVELFNBQVNtRCxlQUFULENBQXlCQyxTQUF6QixFQUFvQ0MsVUFBcEMsRUFBZ0Q7QUFDOUMsTUFBTWhDLFNBQVMrQixVQUFVL0IsTUFBekIsQ0FEOEM7QUFFWjtBQUNoQ0EsU0FBT0MsSUFBUCxDQUFZZ0MsT0FBWixDQUFvQkYsU0FBcEIsQ0FEZ0M7QUFFaEMvQixTQUFPQyxJQUFQLENBQVlnQyxPQUFaLENBQW9CRCxVQUFwQixDQUZnQztBQUdoQ0UsTUFIZ0MsRUFGWSxtQ0FFdkNDLFVBRnVDLGFBRTNCQyxXQUYyQjtBQU05QyxNQUFNQyxlQUFlckMsT0FBT0MsSUFBUCxDQUFZcUMsS0FBWixDQUFrQkgsVUFBbEIsRUFBOEJDLGNBQWMsQ0FBNUMsQ0FBckIsQ0FOOEM7QUFPOUMseUJBQTBCQyxZQUExQiw4SEFBd0MsS0FBN0JFLFdBQTZCO0FBQ3RDLFVBQUksQ0FBQ1YseUJBQXlCVSxXQUF6QixDQUFMLEVBQTRDO0FBQzFDLGVBQU8sS0FBUDtBQUNEO0FBQ0YsS0FYNkM7QUFZOUMsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsU0FBU0MsYUFBVCxDQUF1QkMsT0FBdkIsRUFBZ0NWLFNBQWhDLEVBQTJDQyxVQUEzQyxFQUF1RFUsS0FBdkQsRUFBOEQ7QUFDNUQsTUFBTWhFLGFBQWErRCxRQUFRRSxhQUFSLEVBQW5COztBQUVBLE1BQU1DLFlBQVk3QyxhQUFhZ0MsVUFBVXBELElBQXZCLENBQWxCO0FBQ0EsTUFBTWtFLGlCQUFpQi9CLDRCQUE0QnBDLFVBQTVCLEVBQXdDa0UsU0FBeEMsQ0FBdkI7QUFDQSxNQUFNRSxlQUFlNUMsMEJBQTBCeEIsVUFBMUIsRUFBc0NrRSxTQUF0QyxDQUFyQjs7QUFFQSxNQUFNRyxhQUFhaEQsYUFBYWlDLFdBQVdyRCxJQUF4QixDQUFuQjtBQUNBLE1BQU1xRSxrQkFBa0JsQyw0QkFBNEJwQyxVQUE1QixFQUF3Q3FFLFVBQXhDLENBQXhCO0FBQ0EsTUFBTUUsZ0JBQWdCL0MsMEJBQTBCeEIsVUFBMUIsRUFBc0NxRSxVQUF0QyxDQUF0QjtBQUNBLE1BQU1HLFNBQVNwQixnQkFBZ0JjLFNBQWhCLEVBQTJCRyxVQUEzQixDQUFmOztBQUVBLE1BQUlJLFVBQVV6RSxXQUFXNkIsSUFBWCxDQUFnQjZDLFNBQWhCLENBQTBCSixlQUExQixFQUEyQ0MsYUFBM0MsQ0FBZDtBQUNBLE1BQUlFLFFBQVFBLFFBQVE1RCxNQUFSLEdBQWlCLENBQXpCLE1BQWdDLElBQXBDLEVBQTBDO0FBQ3hDNEQsY0FBVUEsVUFBVSxJQUFwQjtBQUNEOztBQUVELE1BQU1FLHVCQUFlckIsV0FBV3NCLFdBQTFCLHNDQUErRFosS0FBL0QsNEJBQW9GWCxVQUFVdUIsV0FBOUYsT0FBTjs7QUFFQSxNQUFJWixVQUFVLFFBQWQsRUFBd0I7QUFDdEJELFlBQVFjLE1BQVIsQ0FBZTtBQUNiNUUsWUFBTXFELFdBQVdyRCxJQURKO0FBRWIwRSxlQUFTQSxPQUZJO0FBR2JHLFdBQUtOLFVBQVc7QUFDZE8sZ0JBQU1DLGdCQUFOO0FBQ0UsV0FBQ2IsY0FBRCxFQUFpQkksYUFBakIsQ0FERjtBQUVFRSxvQkFBVXpFLFdBQVc2QixJQUFYLENBQWdCNkMsU0FBaEIsQ0FBMEJQLGNBQTFCLEVBQTBDRyxlQUExQyxDQUZaLENBRGMsR0FISCxFQUFmOzs7QUFTRCxHQVZELE1BVU8sSUFBSU4sVUFBVSxPQUFkLEVBQXVCO0FBQzVCRCxZQUFRYyxNQUFSLENBQWU7QUFDYjVFLFlBQU1xRCxXQUFXckQsSUFESjtBQUViMEUsZUFBU0EsT0FGSTtBQUdiRyxXQUFLTixVQUFXO0FBQ2RPLGdCQUFNQyxnQkFBTjtBQUNFLFdBQUNWLGVBQUQsRUFBa0JGLFlBQWxCLENBREY7QUFFRXBFLHFCQUFXNkIsSUFBWCxDQUFnQjZDLFNBQWhCLENBQTBCSCxhQUExQixFQUF5Q0gsWUFBekMsSUFBeURLLE9BRjNELENBRGMsR0FISCxFQUFmOzs7QUFTRDtBQUNGOztBQUVELFNBQVNRLGdCQUFULENBQTBCbEIsT0FBMUIsRUFBbUMvQyxRQUFuQyxFQUE2Q2tFLFVBQTdDLEVBQXlEbEIsS0FBekQsRUFBZ0U7QUFDOURrQixhQUFXQyxPQUFYLENBQW1CLFVBQVVDLEdBQVYsRUFBZTtBQUNoQyxRQUFNQyxRQUFRckUsU0FBU3NFLElBQVQsY0FBYyxTQUFTQyxhQUFULENBQXVCQyxZQUF2QixFQUFxQztBQUMvRCxlQUFPQSxhQUFhMUYsSUFBYixHQUFvQnNGLElBQUl0RixJQUEvQjtBQUNELE9BRmEsT0FBdUJ5RixhQUF2QixLQUFkO0FBR0F6QixrQkFBY0MsT0FBZCxFQUF1QnNCLEtBQXZCLEVBQThCRCxHQUE5QixFQUFtQ3BCLEtBQW5DO0FBQ0QsR0FMRDtBQU1EOztBQUVELFNBQVN5QixvQkFBVCxDQUE4QjFCLE9BQTlCLEVBQXVDL0MsUUFBdkMsRUFBaUQ7QUFDL0MsTUFBTWtFLGFBQWFuRSxlQUFlQyxRQUFmLENBQW5CO0FBQ0EsTUFBSSxDQUFDa0UsV0FBV3JFLE1BQWhCLEVBQXdCO0FBQ3RCO0FBQ0Q7QUFDRDtBQUNBLE1BQU02RSxtQkFBbUJsRyxRQUFRd0IsUUFBUixDQUF6QjtBQUNBLE1BQU0yRSxnQkFBZ0I1RSxlQUFlMkUsZ0JBQWYsQ0FBdEI7QUFDQSxNQUFJQyxjQUFjOUUsTUFBZCxHQUF1QnFFLFdBQVdyRSxNQUF0QyxFQUE4QztBQUM1Q29FLHFCQUFpQmxCLE9BQWpCLEVBQTBCMkIsZ0JBQTFCLEVBQTRDQyxhQUE1QyxFQUEyRCxPQUEzRDtBQUNBO0FBQ0Q7QUFDRFYsbUJBQWlCbEIsT0FBakIsRUFBMEIvQyxRQUExQixFQUFvQ2tFLFVBQXBDLEVBQWdELFFBQWhEO0FBQ0Q7O0FBRUQsU0FBU1UsU0FBVCxDQUFtQkMsU0FBbkIsRUFBOEI7QUFDNUIsTUFBTUMsYUFBYUQsWUFBWSxDQUFaLEdBQWdCLENBQUMsQ0FBcEM7O0FBRUEsc0JBQU8sU0FBU0UsYUFBVCxDQUF1QkMsT0FBdkIsRUFBZ0NDLE9BQWhDLEVBQXlDO0FBQzlDLFVBQUk3RixlQUFKOztBQUVBLFVBQUk0RixVQUFVQyxPQUFkLEVBQXVCO0FBQ3JCN0YsaUJBQVMsQ0FBQyxDQUFWO0FBQ0QsT0FGRCxNQUVPLElBQUk0RixVQUFVQyxPQUFkLEVBQXVCO0FBQzVCN0YsaUJBQVMsQ0FBVDtBQUNELE9BRk0sTUFFQTtBQUNMQSxpQkFBUyxDQUFUO0FBQ0Q7O0FBRUQsYUFBT0EsU0FBUzBGLFVBQWhCO0FBQ0QsS0FaRCxPQUFnQkMsYUFBaEI7QUFhRDs7QUFFRCxTQUFTRyx3QkFBVCxDQUFrQ2xGLFFBQWxDLEVBQTRDbUYsa0JBQTVDLEVBQWdFO0FBQzlELE1BQU1DLGlCQUFpQnBGLFNBQVNxRixNQUFULENBQWdCLFVBQVNDLEdBQVQsRUFBY2QsWUFBZCxFQUE0QjtBQUNqRSxRQUFJLENBQUNlLE1BQU1DLE9BQU4sQ0FBY0YsSUFBSWQsYUFBYTFGLElBQWpCLENBQWQsQ0FBTCxFQUE0QztBQUMxQ3dHLFVBQUlkLGFBQWExRixJQUFqQixJQUF5QixFQUF6QjtBQUNEO0FBQ0R3RyxRQUFJZCxhQUFhMUYsSUFBakIsRUFBdUJTLElBQXZCLENBQTRCaUYsWUFBNUI7QUFDQSxXQUFPYyxHQUFQO0FBQ0QsR0FOc0IsRUFNcEIsRUFOb0IsQ0FBdkI7O0FBUUEsTUFBTUcsYUFBYTdHLE9BQU84RyxJQUFQLENBQVlOLGNBQVosQ0FBbkI7O0FBRUEsTUFBTU8sV0FBV2YsVUFBVU8sbUJBQW1CbkMsS0FBbkIsS0FBNkIsS0FBdkMsQ0FBakI7QUFDQSxNQUFNNEMsYUFBYVQsbUJBQW1CVSxlQUFuQjtBQUNmLFlBQUNDLENBQUQsRUFBSUMsQ0FBSixVQUFVSixTQUFTSyxPQUFPRixFQUFFRyxLQUFULEVBQWdCQyxXQUFoQixFQUFULEVBQXdDRixPQUFPRCxFQUFFRSxLQUFULEVBQWdCQyxXQUFoQixFQUF4QyxDQUFWLEVBRGU7QUFFZixZQUFDSixDQUFELEVBQUlDLENBQUosVUFBVUosU0FBU0csRUFBRUcsS0FBWCxFQUFrQkYsRUFBRUUsS0FBcEIsQ0FBVixFQUZKOztBQUlBO0FBQ0FSLGFBQVd0QixPQUFYLENBQW1CLFVBQVNnQyxTQUFULEVBQW9CO0FBQ3JDZixtQkFBZWUsU0FBZixFQUEwQjNELElBQTFCLENBQStCb0QsVUFBL0I7QUFDRCxHQUZEOztBQUlBO0FBQ0EsTUFBSVEsVUFBVSxDQUFkO0FBQ0EsTUFBTUMsb0JBQW9CWixXQUFXakQsSUFBWCxHQUFrQjZDLE1BQWxCLENBQXlCLFVBQVNDLEdBQVQsRUFBY2EsU0FBZCxFQUF5QjtBQUMxRWYsbUJBQWVlLFNBQWYsRUFBMEJoQyxPQUExQixDQUFrQyxVQUFTSyxZQUFULEVBQXVCO0FBQ3ZEYyxpQkFBT2QsYUFBYXlCLEtBQXBCLGlCQUE2QnpCLGFBQWF2RixJQUFiLENBQWtCcUgsVUFBL0MsS0FBK0RDLFNBQVNKLFNBQVQsRUFBb0IsRUFBcEIsSUFBMEJDLE9BQXpGO0FBQ0FBLGlCQUFXLENBQVg7QUFDRCxLQUhEO0FBSUEsV0FBT2QsR0FBUDtBQUNELEdBTnlCLEVBTXZCLEVBTnVCLENBQTFCOztBQVFBO0FBQ0F0RixXQUFTbUUsT0FBVCxDQUFpQixVQUFTSyxZQUFULEVBQXVCO0FBQ3RDQSxpQkFBYTFGLElBQWIsR0FBb0J1SCx5QkFBcUI3QixhQUFheUIsS0FBbEMsaUJBQTJDekIsYUFBYXZGLElBQWIsQ0FBa0JxSCxVQUE3RCxFQUFwQjtBQUNELEdBRkQ7QUFHRDs7QUFFRDs7QUFFQSxTQUFTRSxlQUFULENBQXlCQyxLQUF6QixFQUFnQ0MsVUFBaEMsRUFBNENDLElBQTVDLEVBQWtEQyxXQUFsRCxFQUErRDtBQUM3RCxPQUFLLElBQUl2SCxJQUFJLENBQVIsRUFBV3dILElBQUlILFdBQVc3RyxNQUEvQixFQUF1Q1IsSUFBSXdILENBQTNDLEVBQThDeEgsR0FBOUMsRUFBbUQ7QUFDUXFILGVBQVdySCxDQUFYLENBRFIsQ0FDekN5SCxPQUR5QyxpQkFDekNBLE9BRHlDLENBQ2hDQyxjQURnQyxpQkFDaENBLGNBRGdDLENBQ2hCQyxLQURnQixpQkFDaEJBLEtBRGdCLHVDQUNUQyxRQURTLENBQ1RBLFFBRFMseUNBQ0UsQ0FERjtBQUVqRCxRQUFJLDRCQUFVTixJQUFWLEVBQWdCRyxPQUFoQixFQUF5QkMsa0JBQWtCLEVBQUVHLFdBQVcsSUFBYixFQUEzQyxDQUFKLEVBQXFFO0FBQ25FLGFBQU9ULE1BQU1PLEtBQU4sSUFBZ0JDLFdBQVdMLFdBQWxDO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQVNPLFdBQVQsQ0FBcUJwRSxPQUFyQixFQUE4QjBELEtBQTlCLEVBQXFDVyxXQUFyQyxFQUFrREMsbUJBQWxELEVBQXVFO0FBQ3JFLE1BQUlDLGdCQUFKO0FBQ0EsTUFBSXhJLGFBQUo7QUFDQSxNQUFJc0ksWUFBWXJHLElBQVosS0FBcUIsZUFBekIsRUFBMEM7QUFDeEN1RyxjQUFVLFFBQVY7QUFDRCxHQUZELE1BRU8sSUFBSUYsWUFBWW5JLElBQVosQ0FBaUJxSCxVQUFqQixLQUFnQyxNQUFoQyxJQUEwQ0csTUFBTWMsWUFBTixDQUFtQmhGLE9BQW5CLENBQTJCLE1BQTNCLE1BQXVDLENBQUMsQ0FBdEYsRUFBeUY7QUFDOUYrRSxjQUFVLE1BQVY7QUFDRCxHQUZNLE1BRUE7QUFDTEEsY0FBVSw2QkFBV0YsWUFBWW5CLEtBQXZCLEVBQThCbEQsT0FBOUIsQ0FBVjtBQUNEO0FBQ0QsTUFBSSxDQUFDc0Usb0JBQW9CRyxHQUFwQixDQUF3QkYsT0FBeEIsQ0FBTCxFQUF1QztBQUNyQ3hJLFdBQU8wSCxnQkFBZ0JDLE1BQU1nQixNQUF0QixFQUE4QmhCLE1BQU1DLFVBQXBDLEVBQWdEVSxZQUFZbkIsS0FBNUQsRUFBbUVRLE1BQU1HLFdBQXpFLENBQVA7QUFDRDtBQUNELE1BQUksT0FBTzlILElBQVAsS0FBZ0IsV0FBcEIsRUFBaUM7QUFDL0JBLFdBQU8ySCxNQUFNZ0IsTUFBTixDQUFhSCxPQUFiLENBQVA7QUFDRDtBQUNELE1BQUlGLFlBQVlyRyxJQUFaLEtBQXFCLFFBQXJCLElBQWlDLENBQUNxRyxZQUFZckcsSUFBWixDQUFpQjJHLFVBQWpCLENBQTRCLFNBQTVCLENBQXRDLEVBQThFO0FBQzVFNUksWUFBUSxHQUFSO0FBQ0Q7O0FBRUQsU0FBT0EsSUFBUDtBQUNEOztBQUVELFNBQVM2SSxZQUFULENBQXNCNUUsT0FBdEIsRUFBK0JxRSxXQUEvQixFQUE0Q1gsS0FBNUMsRUFBbUR6RyxRQUFuRCxFQUE2RHFILG1CQUE3RCxFQUFrRjtBQUNoRixNQUFNdkksT0FBT3FJLFlBQVlwRSxPQUFaLEVBQXFCMEQsS0FBckIsRUFBNEJXLFdBQTVCLEVBQXlDQyxtQkFBekMsQ0FBYjtBQUNBLE1BQUl2SSxTQUFTLENBQUMsQ0FBZCxFQUFpQjtBQUNma0IsYUFBU1QsSUFBVCxDQUFjWCxPQUFPQyxNQUFQLENBQWMsRUFBZCxFQUFrQnVJLFdBQWxCLEVBQStCLEVBQUV0SSxVQUFGLEVBQS9CLENBQWQ7QUFDRDtBQUNGOztBQUVELFNBQVM4SSxvQkFBVCxDQUE4QjNJLElBQTlCLEVBQW9DO0FBQ2xDLE1BQUk0SSxJQUFJNUksSUFBUjtBQUNBO0FBQ0E7QUFDQTtBQUNHNEksSUFBRXZILE1BQUYsQ0FBU1MsSUFBVCxLQUFrQixrQkFBbEIsSUFBd0M4RyxFQUFFdkgsTUFBRixDQUFTd0gsTUFBVCxLQUFvQkQsQ0FBN0Q7QUFDQ0EsSUFBRXZILE1BQUYsQ0FBU1MsSUFBVCxLQUFrQixnQkFBbEIsSUFBc0M4RyxFQUFFdkgsTUFBRixDQUFTcUIsTUFBVCxLQUFvQmtHLENBRjdEO0FBR0U7QUFDQUEsUUFBSUEsRUFBRXZILE1BQU47QUFDRDtBQUNEO0FBQ0V1SCxNQUFFdkgsTUFBRixDQUFTUyxJQUFULEtBQWtCLG9CQUFsQjtBQUNBOEcsTUFBRXZILE1BQUYsQ0FBU0EsTUFBVCxDQUFnQlMsSUFBaEIsS0FBeUIscUJBRHpCO0FBRUE4RyxNQUFFdkgsTUFBRixDQUFTQSxNQUFULENBQWdCQSxNQUFoQixDQUF1QlMsSUFBdkIsS0FBZ0MsU0FIbEM7O0FBS0Q7O0FBRUQsSUFBTWdILFFBQVEsQ0FBQyxTQUFELEVBQVksVUFBWixFQUF3QixVQUF4QixFQUFvQyxTQUFwQyxFQUErQyxRQUEvQyxFQUF5RCxTQUF6RCxFQUFvRSxPQUFwRSxFQUE2RSxRQUE3RSxFQUF1RixNQUF2RixDQUFkOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLG9CQUFULENBQThCUCxNQUE5QixFQUFzQztBQUNwQyxNQUFNUSxhQUFhUixPQUFPcEMsTUFBUCxDQUFjLFVBQVNqRixHQUFULEVBQWM0RyxLQUFkLEVBQXFCa0IsS0FBckIsRUFBNEI7QUFDM0QsUUFBSSxPQUFPbEIsS0FBUCxLQUFpQixRQUFyQixFQUErQjtBQUM3QkEsY0FBUSxDQUFDQSxLQUFELENBQVI7QUFDRDtBQUNEQSxVQUFNN0MsT0FBTixDQUFjLFVBQVNnRSxTQUFULEVBQW9CO0FBQ2hDLFVBQUlKLE1BQU14RixPQUFOLENBQWM0RixTQUFkLE1BQTZCLENBQUMsQ0FBbEMsRUFBcUM7QUFDbkMsY0FBTSxJQUFJQyxLQUFKLENBQVU7QUFDZEMsYUFBS0MsU0FBTCxDQUFlSCxTQUFmLENBRGMsR0FDYyxHQUR4QixDQUFOO0FBRUQ7QUFDRCxVQUFJL0gsSUFBSStILFNBQUosTUFBbUJJLFNBQXZCLEVBQWtDO0FBQ2hDLGNBQU0sSUFBSUgsS0FBSixDQUFVLDJDQUEyQ0QsU0FBM0MsR0FBdUQsaUJBQWpFLENBQU47QUFDRDtBQUNEL0gsVUFBSStILFNBQUosSUFBaUJELEtBQWpCO0FBQ0QsS0FURDtBQVVBLFdBQU85SCxHQUFQO0FBQ0QsR0Fma0IsRUFlaEIsRUFmZ0IsQ0FBbkI7O0FBaUJBLE1BQU1tSCxlQUFlUSxNQUFNN0gsTUFBTixDQUFhLFVBQVNhLElBQVQsRUFBZTtBQUMvQyxXQUFPa0gsV0FBV2xILElBQVgsTUFBcUJ3SCxTQUE1QjtBQUNELEdBRm9CLENBQXJCOztBQUlBLE1BQU05QixRQUFRYyxhQUFhbEMsTUFBYixDQUFvQixVQUFTakYsR0FBVCxFQUFjVyxJQUFkLEVBQW9CO0FBQ3BEWCxRQUFJVyxJQUFKLElBQVkwRyxPQUFPNUgsTUFBbkI7QUFDQSxXQUFPTyxHQUFQO0FBQ0QsR0FIYSxFQUdYNkgsVUFIVyxDQUFkOztBQUtBLFNBQU8sRUFBRVIsUUFBUWhCLEtBQVYsRUFBaUJjLDBCQUFqQixFQUFQO0FBQ0Q7O0FBRUQsU0FBU2lCLHlCQUFULENBQW1DOUIsVUFBbkMsRUFBK0M7QUFDN0MsTUFBTStCLFFBQVEsRUFBZDtBQUNBLE1BQU1DLFNBQVMsRUFBZjs7QUFFQSxNQUFNQyxjQUFjakMsV0FBV2hJLEdBQVgsQ0FBZSxVQUFDa0ssU0FBRCxFQUFZVixLQUFaLEVBQXNCO0FBQy9DbEIsU0FEK0MsR0FDWDRCLFNBRFcsQ0FDL0M1QixLQUQrQyxDQUM5QjZCLGNBRDhCLEdBQ1hELFNBRFcsQ0FDeEMzQixRQUR3QztBQUV2RCxRQUFJQSxXQUFXLENBQWY7QUFDQSxRQUFJNEIsbUJBQW1CLE9BQXZCLEVBQWdDO0FBQzlCLFVBQUksQ0FBQ0osTUFBTXpCLEtBQU4sQ0FBTCxFQUFtQjtBQUNqQnlCLGNBQU16QixLQUFOLElBQWUsQ0FBZjtBQUNEO0FBQ0RDLGlCQUFXd0IsTUFBTXpCLEtBQU4sR0FBWDtBQUNELEtBTEQsTUFLTyxJQUFJNkIsbUJBQW1CLFFBQXZCLEVBQWlDO0FBQ3RDLFVBQUksQ0FBQ0gsT0FBTzFCLEtBQVAsQ0FBTCxFQUFvQjtBQUNsQjBCLGVBQU8xQixLQUFQLElBQWdCLEVBQWhCO0FBQ0Q7QUFDRDBCLGFBQU8xQixLQUFQLEVBQWN6SCxJQUFkLENBQW1CMkksS0FBbkI7QUFDRDs7QUFFRCxXQUFPdEosT0FBT0MsTUFBUCxDQUFjLEVBQWQsRUFBa0IrSixTQUFsQixFQUE2QixFQUFFM0Isa0JBQUYsRUFBN0IsQ0FBUDtBQUNELEdBaEJtQixDQUFwQjs7QUFrQkEsTUFBSUwsY0FBYyxDQUFsQjs7QUFFQWhJLFNBQU84RyxJQUFQLENBQVlnRCxNQUFaLEVBQW9CdkUsT0FBcEIsQ0FBNEIsVUFBQzZDLEtBQUQsRUFBVztBQUNyQyxRQUFNOEIsY0FBY0osT0FBTzFCLEtBQVAsRUFBY25ILE1BQWxDO0FBQ0E2SSxXQUFPMUIsS0FBUCxFQUFjN0MsT0FBZCxDQUFzQixVQUFDNEUsVUFBRCxFQUFhYixLQUFiLEVBQXVCO0FBQzNDUyxrQkFBWUksVUFBWixFQUF3QjlCLFFBQXhCLEdBQW1DLENBQUMsQ0FBRCxJQUFNNkIsY0FBY1osS0FBcEIsQ0FBbkM7QUFDRCxLQUZEO0FBR0F0QixrQkFBY29DLEtBQUtDLEdBQUwsQ0FBU3JDLFdBQVQsRUFBc0JrQyxXQUF0QixDQUFkO0FBQ0QsR0FORDs7QUFRQWxLLFNBQU84RyxJQUFQLENBQVkrQyxLQUFaLEVBQW1CdEUsT0FBbkIsQ0FBMkIsVUFBQytFLEdBQUQsRUFBUztBQUNsQyxRQUFNQyxvQkFBb0JWLE1BQU1TLEdBQU4sQ0FBMUI7QUFDQXRDLGtCQUFjb0MsS0FBS0MsR0FBTCxDQUFTckMsV0FBVCxFQUFzQnVDLG9CQUFvQixDQUExQyxDQUFkO0FBQ0QsR0FIRDs7QUFLQSxTQUFPO0FBQ0x6QyxnQkFBWWlDLFdBRFA7QUFFTC9CLGlCQUFhQSxjQUFjLEVBQWQsR0FBbUJvQyxLQUFLSSxHQUFMLENBQVMsRUFBVCxFQUFhSixLQUFLSyxJQUFMLENBQVVMLEtBQUtNLEtBQUwsQ0FBVzFDLFdBQVgsQ0FBVixDQUFiLENBQW5CLEdBQXNFLEVBRjlFLEVBQVA7O0FBSUQ7O0FBRUQsU0FBUzJDLHFCQUFULENBQStCeEcsT0FBL0IsRUFBd0N5RyxjQUF4QyxFQUF3RDtBQUN0RCxNQUFNQyxXQUFXcEosYUFBYW1KLGVBQWV2SyxJQUE1QixDQUFqQjtBQUNBLE1BQU13QixvQkFBb0JmO0FBQ3hCcUQsVUFBUUUsYUFBUixFQUR3QixFQUNDd0csUUFERCxFQUNXL0ksb0JBQW9CK0ksUUFBcEIsQ0FEWCxDQUExQjs7QUFHQSxNQUFJQyxZQUFZRCxTQUFTN0ksS0FBVCxDQUFlLENBQWYsQ0FBaEI7QUFDQSxNQUFJSCxrQkFBa0JaLE1BQWxCLEdBQTJCLENBQS9CLEVBQWtDO0FBQ2hDNkosZ0JBQVlqSixrQkFBa0JBLGtCQUFrQlosTUFBbEIsR0FBMkIsQ0FBN0MsRUFBZ0RlLEtBQWhELENBQXNELENBQXRELENBQVo7QUFDRDtBQUNELFNBQU8sVUFBQ21ELEtBQUQsVUFBV0EsTUFBTTRGLG9CQUFOLENBQTJCLENBQUNGLFNBQVM3SSxLQUFULENBQWUsQ0FBZixDQUFELEVBQW9COEksU0FBcEIsQ0FBM0IsRUFBMkQsSUFBM0QsQ0FBWCxFQUFQO0FBQ0Q7O0FBRUQsU0FBU0Usd0JBQVQsQ0FBa0M3RyxPQUFsQyxFQUEyQzhHLGFBQTNDLEVBQTBETCxjQUExRCxFQUEwRTtBQUN4RSxNQUFNeEssYUFBYStELFFBQVFFLGFBQVIsRUFBbkI7QUFDQSxNQUFNd0csV0FBV3BKLGFBQWFtSixlQUFldkssSUFBNUIsQ0FBakI7QUFDQSxNQUFNNkssV0FBV3pKLGFBQWF3SixjQUFjNUssSUFBM0IsQ0FBakI7QUFDQSxNQUFNOEssZ0JBQWdCO0FBQ3BCdkosNEJBQTBCeEIsVUFBMUIsRUFBc0N5SyxRQUF0QyxDQURvQjtBQUVwQnJJLDhCQUE0QnBDLFVBQTVCLEVBQXdDOEssUUFBeEMsQ0FGb0IsQ0FBdEI7O0FBSUEsTUFBSSxRQUFRRSxJQUFSLENBQWFoTCxXQUFXNkIsSUFBWCxDQUFnQjZDLFNBQWhCLENBQTBCcUcsY0FBYyxDQUFkLENBQTFCLEVBQTRDQSxjQUFjLENBQWQsQ0FBNUMsQ0FBYixDQUFKLEVBQWlGO0FBQy9FLFdBQU8sVUFBQ2hHLEtBQUQsVUFBV0EsTUFBTWtHLFdBQU4sQ0FBa0JGLGFBQWxCLENBQVgsRUFBUDtBQUNEO0FBQ0QsU0FBT3hCLFNBQVA7QUFDRDs7QUFFRCxTQUFTMkIseUJBQVQsQ0FBb0NuSCxPQUFwQyxFQUE2Qy9DLFFBQTdDLEVBQXVEbUssc0JBQXZELEVBQStFO0FBQzdFLE1BQU1DLCtCQUErQixTQUEvQkEsNEJBQStCLENBQUNQLGFBQUQsRUFBZ0JMLGNBQWhCLEVBQW1DO0FBQ3RFLFFBQU1hLHNCQUFzQnRILFFBQVFFLGFBQVIsR0FBd0JxSCxLQUF4QixDQUE4QjFILEtBQTlCO0FBQzFCNEcsbUJBQWV2SyxJQUFmLENBQW9CK0IsR0FBcEIsQ0FBd0JHLEdBQXhCLENBQTRCRCxJQURGO0FBRTFCMkksa0JBQWM1SyxJQUFkLENBQW1CK0IsR0FBbkIsQ0FBdUJDLEtBQXZCLENBQTZCQyxJQUE3QixHQUFvQyxDQUZWLENBQTVCOzs7QUFLQSxXQUFPbUosb0JBQW9CbkssTUFBcEIsQ0FBMkIsVUFBQ2dCLElBQUQsVUFBVSxDQUFDQSxLQUFLcUosSUFBTCxHQUFZMUssTUFBdkIsRUFBM0IsRUFBMERBLE1BQWpFO0FBQ0QsR0FQRDtBQVFBLE1BQUkySixpQkFBaUJ4SixTQUFTLENBQVQsQ0FBckI7O0FBRUFBLFdBQVM0QyxLQUFULENBQWUsQ0FBZixFQUFrQnVCLE9BQWxCLENBQTBCLFVBQVMwRixhQUFULEVBQXdCO0FBQ2hELFFBQU1XLG9CQUFvQkosNkJBQTZCUCxhQUE3QixFQUE0Q0wsY0FBNUMsQ0FBMUI7O0FBRUEsUUFBSVcsMkJBQTJCLFFBQTNCO0FBQ0dBLCtCQUEyQiwwQkFEbEMsRUFDOEQ7QUFDNUQsVUFBSU4sY0FBYy9LLElBQWQsS0FBdUIwSyxlQUFlMUssSUFBdEMsSUFBOEMwTCxzQkFBc0IsQ0FBeEUsRUFBMkU7QUFDekV6SCxnQkFBUWMsTUFBUixDQUFlO0FBQ2I1RSxnQkFBTXVLLGVBQWV2SyxJQURSO0FBRWIwRSxtQkFBUywrREFGSTtBQUdiRyxlQUFLeUYsc0JBQXNCeEcsT0FBdEIsRUFBK0J5RyxjQUEvQixDQUhRLEVBQWY7O0FBS0QsT0FORCxNQU1PLElBQUlLLGNBQWMvSyxJQUFkLEtBQXVCMEssZUFBZTFLLElBQXRDO0FBQ04wTCwwQkFBb0IsQ0FEZDtBQUVOTCxpQ0FBMkIsMEJBRnpCLEVBRXFEO0FBQzFEcEgsZ0JBQVFjLE1BQVIsQ0FBZTtBQUNiNUUsZ0JBQU11SyxlQUFldkssSUFEUjtBQUViMEUsbUJBQVMsbURBRkk7QUFHYkcsZUFBSzhGLHlCQUF5QjdHLE9BQXpCLEVBQWtDOEcsYUFBbEMsRUFBaURMLGNBQWpELENBSFEsRUFBZjs7QUFLRDtBQUNGLEtBakJELE1BaUJPLElBQUlnQixvQkFBb0IsQ0FBeEIsRUFBMkI7QUFDaEN6SCxjQUFRYyxNQUFSLENBQWU7QUFDYjVFLGNBQU11SyxlQUFldkssSUFEUjtBQUViMEUsaUJBQVMscURBRkk7QUFHYkcsYUFBSzhGLHlCQUF5QjdHLE9BQXpCLEVBQWtDOEcsYUFBbEMsRUFBaURMLGNBQWpELENBSFEsRUFBZjs7QUFLRDs7QUFFREEscUJBQWlCSyxhQUFqQjtBQUNELEdBN0JEO0FBOEJEOztBQUVELFNBQVNZLG9CQUFULENBQThCQyxPQUE5QixFQUF1QztBQUNyQyxNQUFNQyxjQUFjRCxRQUFRQyxXQUFSLElBQXVCLEVBQTNDO0FBQ0EsTUFBTTNILFFBQVEySCxZQUFZM0gsS0FBWixJQUFxQixRQUFuQztBQUNBLE1BQU02QyxrQkFBa0I4RSxZQUFZOUUsZUFBWixJQUErQixLQUF2RDs7QUFFQSxTQUFPLEVBQUU3QyxZQUFGLEVBQVM2QyxnQ0FBVCxFQUFQO0FBQ0Q7O0FBRUQrRSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSi9KLFVBQU0sWUFERjtBQUVKZ0ssVUFBTTtBQUNKQyxXQUFLLDBCQUFRLE9BQVIsQ0FERCxFQUZGOzs7QUFNSkMsYUFBUyxNQU5MO0FBT0pDLFlBQVE7QUFDTjtBQUNFbkssWUFBTSxRQURSO0FBRUVvSyxrQkFBWTtBQUNWMUQsZ0JBQVE7QUFDTjFHLGdCQUFNLE9BREEsRUFERTs7QUFJVnFLLHVDQUErQjtBQUM3QnJLLGdCQUFNLE9BRHVCLEVBSnJCOztBQU9WMkYsb0JBQVk7QUFDVjNGLGdCQUFNLE9BREk7QUFFVnNLLGlCQUFPO0FBQ0x0SyxrQkFBTSxRQUREO0FBRUxvSyx3QkFBWTtBQUNWckUsdUJBQVM7QUFDUC9GLHNCQUFNLFFBREMsRUFEQzs7QUFJVmdHLDhCQUFnQjtBQUNkaEcsc0JBQU0sUUFEUSxFQUpOOztBQU9WaUcscUJBQU87QUFDTGpHLHNCQUFNLFFBREQ7QUFFTCx3QkFBTWdILEtBRkQsRUFQRzs7QUFXVmQsd0JBQVU7QUFDUmxHLHNCQUFNLFFBREU7QUFFUix3QkFBTSxDQUFDLE9BQUQsRUFBVSxRQUFWLENBRkUsRUFYQSxFQUZQOzs7QUFrQkx1SyxzQkFBVSxDQUFDLFNBQUQsRUFBWSxPQUFaLENBbEJMLEVBRkcsRUFQRjs7O0FBOEJWLDRCQUFvQjtBQUNsQixrQkFBTTtBQUNKLGtCQURJO0FBRUosa0JBRkk7QUFHSixvQ0FISTtBQUlKLGlCQUpJLENBRFksRUE5QlY7OztBQXNDVlgscUJBQWE7QUFDWDVKLGdCQUFNLFFBREs7QUFFWG9LLHNCQUFZO0FBQ1Z0Riw2QkFBaUI7QUFDZjlFLG9CQUFNLFNBRFM7QUFFZix5QkFBUyxLQUZNLEVBRFA7O0FBS1ZpQyxtQkFBTztBQUNMLHNCQUFNLENBQUMsUUFBRCxFQUFXLEtBQVgsRUFBa0IsTUFBbEIsQ0FERDtBQUVMLHlCQUFTLFFBRkosRUFMRyxFQUZEOzs7QUFZWHVJLGdDQUFzQixLQVpYLEVBdENIOztBQW9EVkMsaUNBQXlCO0FBQ3ZCekssZ0JBQU0sU0FEaUI7QUFFdkIscUJBQVMsS0FGYyxFQXBEZixFQUZkOzs7QUEyREV3Syw0QkFBc0IsS0EzRHhCLEVBRE0sQ0FQSixFQURTOzs7OztBQXlFZkUsdUJBQVEsU0FBU0MsZUFBVCxDQUEwQjNJLE9BQTFCLEVBQW1DO0FBQ3pDLFVBQU0ySCxVQUFVM0gsUUFBUTJILE9BQVIsQ0FBZ0IsQ0FBaEIsS0FBc0IsRUFBdEM7QUFDQSxVQUFNUCx5QkFBeUJPLFFBQVEsa0JBQVIsS0FBK0IsUUFBOUQ7QUFDQSxVQUFNVSxnQ0FBZ0MsSUFBSU8sR0FBSixDQUFRakIsUUFBUSwrQkFBUixLQUE0QyxDQUFDLFNBQUQsRUFBWSxVQUFaLEVBQXdCLFFBQXhCLENBQXBELENBQXRDO0FBQ0EsVUFBTUMsY0FBY0YscUJBQXFCQyxPQUFyQixDQUFwQjtBQUNBLFVBQUlqRSxjQUFKOztBQUVBLFVBQUk7QUFDa0MrQixrQ0FBMEJrQyxRQUFRaEUsVUFBUixJQUFzQixFQUFoRCxDQURsQyxDQUNNQSxVQUROLHlCQUNNQSxVQUROLENBQ2tCRSxXQURsQix5QkFDa0JBLFdBRGxCO0FBRStCb0IsNkJBQXFCMEMsUUFBUWpELE1BQVIsSUFBa0JsSixhQUF2QyxDQUYvQixDQUVNa0osTUFGTix5QkFFTUEsTUFGTixDQUVjRixZQUZkLHlCQUVjQSxZQUZkO0FBR0ZkLGdCQUFRO0FBQ05nQix3QkFETTtBQUVORixvQ0FGTTtBQUdOYixnQ0FITTtBQUlORSxrQ0FKTSxFQUFSOztBQU1ELE9BVEQsQ0FTRSxPQUFPZ0YsS0FBUCxFQUFjO0FBQ2Q7QUFDQSxlQUFPO0FBQ0xDLGdDQUFTLGlCQUFTNU0sSUFBVCxFQUFlO0FBQ3RCOEQsc0JBQVFjLE1BQVIsQ0FBZTVFLElBQWYsRUFBcUIyTSxNQUFNakksT0FBM0I7QUFDRCxhQUZELGtCQURLLEVBQVA7O0FBS0Q7QUFDRCxVQUFJM0QsV0FBVyxFQUFmOztBQUVBLGFBQU87QUFDTDhMLHdDQUFtQixTQUFTQyxhQUFULENBQXVCOU0sSUFBdkIsRUFBNkI7QUFDOUM7QUFDQSxnQkFBSUEsS0FBSzhDLFVBQUwsQ0FBZ0JsQyxNQUFoQixJQUEwQjZLLFFBQVFjLHVCQUF0QyxFQUErRDtBQUM3RCxrQkFBTTVKLE9BQU8zQyxLQUFLK00sTUFBTCxDQUFZL0YsS0FBekI7QUFDQTBCO0FBQ0U1RSxxQkFERjtBQUVFO0FBQ0U5RCwwQkFERjtBQUVFZ0gsdUJBQU9yRSxJQUZUO0FBR0VnQyw2QkFBYWhDLElBSGY7QUFJRWIsc0JBQU0sUUFKUixFQUZGOztBQVFFMEYsbUJBUkY7QUFTRXpHLHNCQVRGO0FBVUVvTCwyQ0FWRjs7QUFZRDtBQUNGLFdBakJELE9BQTRCVyxhQUE1QixJQURLO0FBbUJMRSxnREFBMkIsU0FBU0YsYUFBVCxDQUF1QjlNLElBQXZCLEVBQTZCO0FBQ3RELGdCQUFJMkUsb0JBQUo7QUFDQSxnQkFBSXFDLGNBQUo7QUFDQSxnQkFBSWxGLGFBQUo7QUFDQTtBQUNBLGdCQUFJOUIsS0FBS2lOLFFBQVQsRUFBbUI7QUFDakI7QUFDRDtBQUNELGdCQUFJak4sS0FBS2dELGVBQUwsQ0FBcUJsQixJQUFyQixLQUE4QiwyQkFBbEMsRUFBK0Q7QUFDN0RrRixzQkFBUWhILEtBQUtnRCxlQUFMLENBQXFCQyxVQUFyQixDQUFnQytELEtBQXhDO0FBQ0FyQyw0QkFBY3FDLEtBQWQ7QUFDQWxGLHFCQUFPLFFBQVA7QUFDRCxhQUpELE1BSU87QUFDTGtGLHNCQUFRLEVBQVI7QUFDQXJDLDRCQUFjYixRQUFRRSxhQUFSLEdBQXdCa0osT0FBeEIsQ0FBZ0NsTixLQUFLZ0QsZUFBckMsQ0FBZDtBQUNBbEIscUJBQU8sZUFBUDtBQUNEO0FBQ0Q0RztBQUNFNUUsbUJBREY7QUFFRTtBQUNFOUQsd0JBREY7QUFFRWdILDBCQUZGO0FBR0VyQyxzQ0FIRjtBQUlFN0Msd0JBSkYsRUFGRjs7QUFRRTBGLGlCQVJGO0FBU0V6RyxvQkFURjtBQVVFb0wseUNBVkY7O0FBWUQsV0E3QkQsT0FBb0NXLGFBQXBDLElBbkJLO0FBaURMSyxxQ0FBZ0IsU0FBU0MsY0FBVCxDQUF3QnBOLElBQXhCLEVBQThCO0FBQzVDLGdCQUFJLENBQUMsZ0NBQWdCQSxJQUFoQixDQUFELElBQTBCLENBQUMySSxxQkFBcUIzSSxJQUFyQixDQUEvQixFQUEyRDtBQUN6RDtBQUNEO0FBQ0QsZ0JBQU0yQyxPQUFPM0MsS0FBSzRDLFNBQUwsQ0FBZSxDQUFmLEVBQWtCb0UsS0FBL0I7QUFDQTBCO0FBQ0U1RSxtQkFERjtBQUVFO0FBQ0U5RCx3QkFERjtBQUVFZ0gscUJBQU9yRSxJQUZUO0FBR0VnQywyQkFBYWhDLElBSGY7QUFJRWIsb0JBQU0sU0FKUixFQUZGOztBQVFFMEYsaUJBUkY7QUFTRXpHLG9CQVRGO0FBVUVvTCx5Q0FWRjs7QUFZRCxXQWpCRCxPQUF5QmlCLGNBQXpCLElBakRLO0FBbUVMLHFDQUFnQixTQUFTQyxjQUFULEdBQTBCO0FBQ3hDLGdCQUFJbkMsMkJBQTJCLFFBQS9CLEVBQXlDO0FBQ3ZDRCx3Q0FBMEJuSCxPQUExQixFQUFtQy9DLFFBQW5DLEVBQTZDbUssc0JBQTdDO0FBQ0Q7O0FBRUQsZ0JBQUlRLFlBQVkzSCxLQUFaLEtBQXNCLFFBQTFCLEVBQW9DO0FBQ2xDa0MsdUNBQXlCbEYsUUFBekIsRUFBbUMySyxXQUFuQztBQUNEOztBQUVEbEcsaUNBQXFCMUIsT0FBckIsRUFBOEIvQyxRQUE5Qjs7QUFFQUEsdUJBQVcsRUFBWDtBQUNELFdBWkQsT0FBeUJzTSxjQUF6QixJQW5FSyxFQUFQOztBQWlGRCxLQTNHRCxPQUFpQlosZUFBakIsSUF6RWUsRUFBakIiLCJmaWxlIjoib3JkZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBtaW5pbWF0Y2ggZnJvbSAnbWluaW1hdGNoJztcbmltcG9ydCBpbXBvcnRUeXBlIGZyb20gJy4uL2NvcmUvaW1wb3J0VHlwZSc7XG5pbXBvcnQgaXNTdGF0aWNSZXF1aXJlIGZyb20gJy4uL2NvcmUvc3RhdGljUmVxdWlyZSc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxuY29uc3QgZGVmYXVsdEdyb3VwcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdwYXJlbnQnLCAnc2libGluZycsICdpbmRleCddO1xuXG4vLyBSRVBPUlRJTkcgQU5EIEZJWElOR1xuXG5mdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdiwgeyByYW5rOiAtdi5yYW5rIH0pO1xuICB9KS5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGdldFRva2Vuc09yQ29tbWVudHNBZnRlcihzb3VyY2VDb2RlLCBub2RlLCBjb3VudCkge1xuICBsZXQgY3VycmVudE5vZGVPclRva2VuID0gbm9kZTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGN1cnJlbnROb2RlT3JUb2tlbiA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5PckNvbW1lbnRBZnRlcihjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICAgIGlmIChjdXJyZW50Tm9kZU9yVG9rZW4gPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZShzb3VyY2VDb2RlLCBub2RlLCBjb3VudCkge1xuICBsZXQgY3VycmVudE5vZGVPclRva2VuID0gbm9kZTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGN1cnJlbnROb2RlT3JUb2tlbiA9IHNvdXJjZUNvZGUuZ2V0VG9rZW5PckNvbW1lbnRCZWZvcmUoY3VycmVudE5vZGVPclRva2VuKTtcbiAgICBpZiAoY3VycmVudE5vZGVPclRva2VuID09IG51bGwpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQucHVzaChjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICB9XG4gIHJldHVybiByZXN1bHQucmV2ZXJzZSgpO1xufVxuXG5mdW5jdGlvbiB0YWtlVG9rZW5zQWZ0ZXJXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb25kaXRpb24pIHtcbiAgY29uc3QgdG9rZW5zID0gZ2V0VG9rZW5zT3JDb21tZW50c0FmdGVyKHNvdXJjZUNvZGUsIG5vZGUsIDEwMCk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjb25kaXRpb24odG9rZW5zW2ldKSkge1xuICAgICAgcmVzdWx0LnB1c2godG9rZW5zW2ldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHRha2VUb2tlbnNCZWZvcmVXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb25kaXRpb24pIHtcbiAgY29uc3QgdG9rZW5zID0gZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZShzb3VyY2VDb2RlLCBub2RlLCAxMDApO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IHRva2Vucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChjb25kaXRpb24odG9rZW5zW2ldKSkge1xuICAgICAgcmVzdWx0LnB1c2godG9rZW5zW2ldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQucmV2ZXJzZSgpO1xufVxuXG5mdW5jdGlvbiBmaW5kT3V0T2ZPcmRlcihpbXBvcnRlZCkge1xuICBpZiAoaW1wb3J0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGxldCBtYXhTZWVuUmFua05vZGUgPSBpbXBvcnRlZFswXTtcbiAgcmV0dXJuIGltcG9ydGVkLmZpbHRlcihmdW5jdGlvbiAoaW1wb3J0ZWRNb2R1bGUpIHtcbiAgICBjb25zdCByZXMgPSBpbXBvcnRlZE1vZHVsZS5yYW5rIDwgbWF4U2VlblJhbmtOb2RlLnJhbms7XG4gICAgaWYgKG1heFNlZW5SYW5rTm9kZS5yYW5rIDwgaW1wb3J0ZWRNb2R1bGUucmFuaykge1xuICAgICAgbWF4U2VlblJhbmtOb2RlID0gaW1wb3J0ZWRNb2R1bGU7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaW5kUm9vdE5vZGUobm9kZSkge1xuICBsZXQgcGFyZW50ID0gbm9kZTtcbiAgd2hpbGUgKHBhcmVudC5wYXJlbnQgIT0gbnVsbCAmJiBwYXJlbnQucGFyZW50LmJvZHkgPT0gbnVsbCkge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHBhcmVudDtcbn1cblxuZnVuY3Rpb24gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBub2RlKSB7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0FmdGVyV2hpbGUoc291cmNlQ29kZSwgbm9kZSwgY29tbWVudE9uU2FtZUxpbmVBcyhub2RlKSk7XG4gIGNvbnN0IGVuZE9mVG9rZW5zID0gdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMFxuICAgID8gdG9rZW5zVG9FbmRPZkxpbmVbdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoIC0gMV0ucmFuZ2VbMV1cbiAgICA6IG5vZGUucmFuZ2VbMV07XG4gIGxldCByZXN1bHQgPSBlbmRPZlRva2VucztcbiAgZm9yIChsZXQgaSA9IGVuZE9mVG9rZW5zOyBpIDwgc291cmNlQ29kZS50ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSA9PT0gJ1xcbicpIHtcbiAgICAgIHJlc3VsdCA9IGkgKyAxO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChzb3VyY2VDb2RlLnRleHRbaV0gIT09ICcgJyAmJiBzb3VyY2VDb2RlLnRleHRbaV0gIT09ICdcXHQnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xccicpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQgPSBpICsgMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpIHtcbiAgcmV0dXJuIHRva2VuID0+ICh0b2tlbi50eXBlID09PSAnQmxvY2snIHx8ICB0b2tlbi50eXBlID09PSAnTGluZScpICYmXG4gICAgICB0b2tlbi5sb2Muc3RhcnQubGluZSA9PT0gdG9rZW4ubG9jLmVuZC5saW5lICYmXG4gICAgICB0b2tlbi5sb2MuZW5kLmxpbmUgPT09IG5vZGUubG9jLmVuZC5saW5lO1xufVxuXG5mdW5jdGlvbiBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgbm9kZSkge1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNCZWZvcmVXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3Qgc3RhcnRPZlRva2VucyA9IHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDAgPyB0b2tlbnNUb0VuZE9mTGluZVswXS5yYW5nZVswXSA6IG5vZGUucmFuZ2VbMF07XG4gIGxldCByZXN1bHQgPSBzdGFydE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gc3RhcnRPZlRva2VucyAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldICE9PSAnICcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFx0Jykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNQbGFpblJlcXVpcmVNb2R1bGUobm9kZSkge1xuICBpZiAobm9kZS50eXBlICE9PSAnVmFyaWFibGVEZWNsYXJhdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG5vZGUuZGVjbGFyYXRpb25zLmxlbmd0aCAhPT0gMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBkZWNsID0gbm9kZS5kZWNsYXJhdGlvbnNbMF07XG4gIGNvbnN0IHJlc3VsdCA9IGRlY2wuaWQgJiZcbiAgICAoZGVjbC5pZC50eXBlID09PSAnSWRlbnRpZmllcicgfHwgZGVjbC5pZC50eXBlID09PSAnT2JqZWN0UGF0dGVybicpICYmXG4gICAgZGVjbC5pbml0ICE9IG51bGwgJiZcbiAgICBkZWNsLmluaXQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJlxuICAgIGRlY2wuaW5pdC5jYWxsZWUgIT0gbnVsbCAmJlxuICAgIGRlY2wuaW5pdC5jYWxsZWUubmFtZSA9PT0gJ3JlcXVpcmUnICYmXG4gICAgZGVjbC5pbml0LmFyZ3VtZW50cyAhPSBudWxsICYmXG4gICAgZGVjbC5pbml0LmFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiZcbiAgICBkZWNsLmluaXQuYXJndW1lbnRzWzBdLnR5cGUgPT09ICdMaXRlcmFsJztcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdJbXBvcnREZWNsYXJhdGlvbicgJiYgbm9kZS5zcGVjaWZpZXJzICE9IG51bGwgJiYgbm9kZS5zcGVjaWZpZXJzLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5JbXBvcnRFcXVhbHMobm9kZSkge1xuICByZXR1cm4gbm9kZS50eXBlID09PSAnVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbicgJiYgbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGUpIHtcbiAgcmV0dXJuIGlzUGxhaW5SZXF1aXJlTW9kdWxlKG5vZGUpIHx8IGlzUGxhaW5JbXBvcnRNb2R1bGUobm9kZSkgfHwgaXNQbGFpbkltcG9ydEVxdWFscyhub2RlKTtcbn1cblxuZnVuY3Rpb24gY2FuUmVvcmRlckl0ZW1zKGZpcnN0Tm9kZSwgc2Vjb25kTm9kZSkge1xuICBjb25zdCBwYXJlbnQgPSBmaXJzdE5vZGUucGFyZW50O1xuICBjb25zdCBbZmlyc3RJbmRleCwgc2Vjb25kSW5kZXhdID0gW1xuICAgIHBhcmVudC5ib2R5LmluZGV4T2YoZmlyc3ROb2RlKSxcbiAgICBwYXJlbnQuYm9keS5pbmRleE9mKHNlY29uZE5vZGUpLFxuICBdLnNvcnQoKTtcbiAgY29uc3Qgbm9kZXNCZXR3ZWVuID0gcGFyZW50LmJvZHkuc2xpY2UoZmlyc3RJbmRleCwgc2Vjb25kSW5kZXggKyAxKTtcbiAgZm9yIChjb25zdCBub2RlQmV0d2VlbiBvZiBub2Rlc0JldHdlZW4pIHtcbiAgICBpZiAoIWNhbkNyb3NzTm9kZVdoaWxlUmVvcmRlcihub2RlQmV0d2VlbikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZpeE91dE9mT3JkZXIoY29udGV4dCwgZmlyc3ROb2RlLCBzZWNvbmROb2RlLCBvcmRlcikge1xuICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCk7XG5cbiAgY29uc3QgZmlyc3RSb290ID0gZmluZFJvb3ROb2RlKGZpcnN0Tm9kZS5ub2RlKTtcbiAgY29uc3QgZmlyc3RSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgZmlyc3RSb290KTtcbiAgY29uc3QgZmlyc3RSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuXG4gIGNvbnN0IHNlY29uZFJvb3QgPSBmaW5kUm9vdE5vZGUoc2Vjb25kTm9kZS5ub2RlKTtcbiAgY29uc3Qgc2Vjb25kUm9vdFN0YXJ0ID0gZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBzZWNvbmRSb290RW5kID0gZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBzZWNvbmRSb290KTtcbiAgY29uc3QgY2FuRml4ID0gY2FuUmVvcmRlckl0ZW1zKGZpcnN0Um9vdCwgc2Vjb25kUm9vdCk7XG5cbiAgbGV0IG5ld0NvZGUgPSBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKHNlY29uZFJvb3RTdGFydCwgc2Vjb25kUm9vdEVuZCk7XG4gIGlmIChuZXdDb2RlW25ld0NvZGUubGVuZ3RoIC0gMV0gIT09ICdcXG4nKSB7XG4gICAgbmV3Q29kZSA9IG5ld0NvZGUgKyAnXFxuJztcbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2UgPSBgXFxgJHtzZWNvbmROb2RlLmRpc3BsYXlOYW1lfVxcYCBpbXBvcnQgc2hvdWxkIG9jY3VyICR7b3JkZXJ9IGltcG9ydCBvZiBcXGAke2ZpcnN0Tm9kZS5kaXNwbGF5TmFtZX1cXGBgO1xuXG4gIGlmIChvcmRlciA9PT0gJ2JlZm9yZScpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBub2RlOiBzZWNvbmROb2RlLm5vZGUsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgZml4OiBjYW5GaXggJiYgKGZpeGVyID0+XG4gICAgICAgIGZpeGVyLnJlcGxhY2VUZXh0UmFuZ2UoXG4gICAgICAgICAgW2ZpcnN0Um9vdFN0YXJ0LCBzZWNvbmRSb290RW5kXSxcbiAgICAgICAgICBuZXdDb2RlICsgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhmaXJzdFJvb3RTdGFydCwgc2Vjb25kUm9vdFN0YXJ0KVxuICAgICAgICApKSxcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChvcmRlciA9PT0gJ2FmdGVyJykge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG5vZGU6IHNlY29uZE5vZGUubm9kZSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBmaXg6IGNhbkZpeCAmJiAoZml4ZXIgPT5cbiAgICAgICAgZml4ZXIucmVwbGFjZVRleHRSYW5nZShcbiAgICAgICAgICBbc2Vjb25kUm9vdFN0YXJ0LCBmaXJzdFJvb3RFbmRdLFxuICAgICAgICAgIHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdEVuZCwgZmlyc3RSb290RW5kKSArIG5ld0NvZGVcbiAgICAgICAgKSksXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwb3J0T3V0T2ZPcmRlcihjb250ZXh0LCBpbXBvcnRlZCwgb3V0T2ZPcmRlciwgb3JkZXIpIHtcbiAgb3V0T2ZPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChpbXApIHtcbiAgICBjb25zdCBmb3VuZCA9IGltcG9ydGVkLmZpbmQoZnVuY3Rpb24gaGFzSGlnaGVyUmFuayhpbXBvcnRlZEl0ZW0pIHtcbiAgICAgIHJldHVybiBpbXBvcnRlZEl0ZW0ucmFuayA+IGltcC5yYW5rO1xuICAgIH0pO1xuICAgIGZpeE91dE9mT3JkZXIoY29udGV4dCwgZm91bmQsIGltcCwgb3JkZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZU91dE9mT3JkZXJSZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQpIHtcbiAgY29uc3Qgb3V0T2ZPcmRlciA9IGZpbmRPdXRPZk9yZGVyKGltcG9ydGVkKTtcbiAgaWYgKCFvdXRPZk9yZGVyLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBUaGVyZSBhcmUgdGhpbmdzIHRvIHJlcG9ydC4gVHJ5IHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgcmVwb3J0ZWQgZXJyb3JzLlxuICBjb25zdCByZXZlcnNlZEltcG9ydGVkID0gcmV2ZXJzZShpbXBvcnRlZCk7XG4gIGNvbnN0IHJldmVyc2VkT3JkZXIgPSBmaW5kT3V0T2ZPcmRlcihyZXZlcnNlZEltcG9ydGVkKTtcbiAgaWYgKHJldmVyc2VkT3JkZXIubGVuZ3RoIDwgb3V0T2ZPcmRlci5sZW5ndGgpIHtcbiAgICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIHJldmVyc2VkSW1wb3J0ZWQsIHJldmVyc2VkT3JkZXIsICdhZnRlcicpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCAnYmVmb3JlJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNvcnRlcihhc2NlbmRpbmcpIHtcbiAgY29uc3QgbXVsdGlwbGllciA9IGFzY2VuZGluZyA/IDEgOiAtMTtcblxuICByZXR1cm4gZnVuY3Rpb24gaW1wb3J0c1NvcnRlcihpbXBvcnRBLCBpbXBvcnRCKSB7XG4gICAgbGV0IHJlc3VsdDtcblxuICAgIGlmIChpbXBvcnRBIDwgaW1wb3J0Qikge1xuICAgICAgcmVzdWx0ID0gLTE7XG4gICAgfSBlbHNlIGlmIChpbXBvcnRBID4gaW1wb3J0Qikge1xuICAgICAgcmVzdWx0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0ICogbXVsdGlwbGllcjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbXV0YXRlUmFua3NUb0FscGhhYmV0aXplKGltcG9ydGVkLCBhbHBoYWJldGl6ZU9wdGlvbnMpIHtcbiAgY29uc3QgZ3JvdXBlZEJ5UmFua3MgPSBpbXBvcnRlZC5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBpbXBvcnRlZEl0ZW0pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWNjW2ltcG9ydGVkSXRlbS5yYW5rXSkpIHtcbiAgICAgIGFjY1tpbXBvcnRlZEl0ZW0ucmFua10gPSBbXTtcbiAgICB9XG4gICAgYWNjW2ltcG9ydGVkSXRlbS5yYW5rXS5wdXNoKGltcG9ydGVkSXRlbSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIGNvbnN0IGdyb3VwUmFua3MgPSBPYmplY3Qua2V5cyhncm91cGVkQnlSYW5rcyk7XG5cbiAgY29uc3Qgc29ydGVyRm4gPSBnZXRTb3J0ZXIoYWxwaGFiZXRpemVPcHRpb25zLm9yZGVyID09PSAnYXNjJyk7XG4gIGNvbnN0IGNvbXBhcmF0b3IgPSBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlXG4gICAgPyAoYSwgYikgPT4gc29ydGVyRm4oU3RyaW5nKGEudmFsdWUpLnRvTG93ZXJDYXNlKCksIFN0cmluZyhiLnZhbHVlKS50b0xvd2VyQ2FzZSgpKVxuICAgIDogKGEsIGIpID0+IHNvcnRlckZuKGEudmFsdWUsIGIudmFsdWUpO1xuXG4gIC8vIHNvcnQgaW1wb3J0cyBsb2NhbGx5IHdpdGhpbiB0aGVpciBncm91cFxuICBncm91cFJhbmtzLmZvckVhY2goZnVuY3Rpb24oZ3JvdXBSYW5rKSB7XG4gICAgZ3JvdXBlZEJ5UmFua3NbZ3JvdXBSYW5rXS5zb3J0KGNvbXBhcmF0b3IpO1xuICB9KTtcblxuICAvLyBhc3NpZ24gZ2xvYmFsbHkgdW5pcXVlIHJhbmsgdG8gZWFjaCBpbXBvcnRcbiAgbGV0IG5ld1JhbmsgPSAwO1xuICBjb25zdCBhbHBoYWJldGl6ZWRSYW5rcyA9IGdyb3VwUmFua3Muc29ydCgpLnJlZHVjZShmdW5jdGlvbihhY2MsIGdyb3VwUmFuaykge1xuICAgIGdyb3VwZWRCeVJhbmtzW2dyb3VwUmFua10uZm9yRWFjaChmdW5jdGlvbihpbXBvcnRlZEl0ZW0pIHtcbiAgICAgIGFjY1tgJHtpbXBvcnRlZEl0ZW0udmFsdWV9fCR7aW1wb3J0ZWRJdGVtLm5vZGUuaW1wb3J0S2luZH1gXSA9IHBhcnNlSW50KGdyb3VwUmFuaywgMTApICsgbmV3UmFuaztcbiAgICAgIG5ld1JhbmsgKz0gMTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gbXV0YXRlIHRoZSBvcmlnaW5hbCBncm91cC1yYW5rIHdpdGggYWxwaGFiZXRpemVkLXJhbmtcbiAgaW1wb3J0ZWQuZm9yRWFjaChmdW5jdGlvbihpbXBvcnRlZEl0ZW0pIHtcbiAgICBpbXBvcnRlZEl0ZW0ucmFuayA9IGFscGhhYmV0aXplZFJhbmtzW2Ake2ltcG9ydGVkSXRlbS52YWx1ZX18JHtpbXBvcnRlZEl0ZW0ubm9kZS5pbXBvcnRLaW5kfWBdO1xuICB9KTtcbn1cblxuLy8gREVURUNUSU5HXG5cbmZ1bmN0aW9uIGNvbXB1dGVQYXRoUmFuayhyYW5rcywgcGF0aEdyb3VwcywgcGF0aCwgbWF4UG9zaXRpb24pIHtcbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXRoR3JvdXBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbnN0IHsgcGF0dGVybiwgcGF0dGVybk9wdGlvbnMsIGdyb3VwLCBwb3NpdGlvbiA9IDEgfSA9IHBhdGhHcm91cHNbaV07XG4gICAgaWYgKG1pbmltYXRjaChwYXRoLCBwYXR0ZXJuLCBwYXR0ZXJuT3B0aW9ucyB8fCB7IG5vY29tbWVudDogdHJ1ZSB9KSkge1xuICAgICAgcmV0dXJuIHJhbmtzW2dyb3VwXSArIChwb3NpdGlvbiAvIG1heFBvc2l0aW9uKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVJhbmsoY29udGV4dCwgcmFua3MsIGltcG9ydEVudHJ5LCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGxldCBpbXBUeXBlO1xuICBsZXQgcmFuaztcbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgPT09ICdpbXBvcnQ6b2JqZWN0Jykge1xuICAgIGltcFR5cGUgPSAnb2JqZWN0JztcbiAgfSBlbHNlIGlmIChpbXBvcnRFbnRyeS5ub2RlLmltcG9ydEtpbmQgPT09ICd0eXBlJyAmJiByYW5rcy5vbWl0dGVkVHlwZXMuaW5kZXhPZigndHlwZScpID09PSAtMSkge1xuICAgIGltcFR5cGUgPSAndHlwZSc7XG4gIH0gZWxzZSB7XG4gICAgaW1wVHlwZSA9IGltcG9ydFR5cGUoaW1wb3J0RW50cnkudmFsdWUsIGNvbnRleHQpO1xuICB9XG4gIGlmICghZXhjbHVkZWRJbXBvcnRUeXBlcy5oYXMoaW1wVHlwZSkpIHtcbiAgICByYW5rID0gY29tcHV0ZVBhdGhSYW5rKHJhbmtzLmdyb3VwcywgcmFua3MucGF0aEdyb3VwcywgaW1wb3J0RW50cnkudmFsdWUsIHJhbmtzLm1heFBvc2l0aW9uKTtcbiAgfVxuICBpZiAodHlwZW9mIHJhbmsgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmFuayA9IHJhbmtzLmdyb3Vwc1tpbXBUeXBlXTtcbiAgfVxuICBpZiAoaW1wb3J0RW50cnkudHlwZSAhPT0gJ2ltcG9ydCcgJiYgIWltcG9ydEVudHJ5LnR5cGUuc3RhcnRzV2l0aCgnaW1wb3J0OicpKSB7XG4gICAgcmFuayArPSAxMDA7XG4gIH1cblxuICByZXR1cm4gcmFuaztcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJOb2RlKGNvbnRleHQsIGltcG9ydEVudHJ5LCByYW5rcywgaW1wb3J0ZWQsIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpIHtcbiAgY29uc3QgcmFuayA9IGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcyk7XG4gIGlmIChyYW5rICE9PSAtMSkge1xuICAgIGltcG9ydGVkLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaW1wb3J0RW50cnksIHsgcmFuayB9KSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNb2R1bGVMZXZlbFJlcXVpcmUobm9kZSkge1xuICBsZXQgbiA9IG5vZGU7XG4gIC8vIEhhbmRsZSBjYXNlcyBsaWtlIGBjb25zdCBiYXogPSByZXF1aXJlKCdmb28nKS5iYXIuYmF6YFxuICAvLyBhbmQgYGNvbnN0IGZvbyA9IHJlcXVpcmUoJ2ZvbycpKClgXG4gIHdoaWxlIChcbiAgICAobi5wYXJlbnQudHlwZSA9PT0gJ01lbWJlckV4cHJlc3Npb24nICYmIG4ucGFyZW50Lm9iamVjdCA9PT0gbikgfHxcbiAgICAobi5wYXJlbnQudHlwZSA9PT0gJ0NhbGxFeHByZXNzaW9uJyAmJiBuLnBhcmVudC5jYWxsZWUgPT09IG4pXG4gICkge1xuICAgIG4gPSBuLnBhcmVudDtcbiAgfVxuICByZXR1cm4gKFxuICAgIG4ucGFyZW50LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0b3InICYmXG4gICAgbi5wYXJlbnQucGFyZW50LnR5cGUgPT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJyAmJlxuICAgIG4ucGFyZW50LnBhcmVudC5wYXJlbnQudHlwZSA9PT0gJ1Byb2dyYW0nXG4gICk7XG59XG5cbmNvbnN0IHR5cGVzID0gWydidWlsdGluJywgJ2V4dGVybmFsJywgJ2ludGVybmFsJywgJ3Vua25vd24nLCAncGFyZW50JywgJ3NpYmxpbmcnLCAnaW5kZXgnLCAnb2JqZWN0JywgJ3R5cGUnXTtcblxuLy8gQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0eXBlLXJhbmsgcGFpcnMuXG4vLyBFeGFtcGxlOiB7IGluZGV4OiAwLCBzaWJsaW5nOiAxLCBwYXJlbnQ6IDEsIGV4dGVybmFsOiAxLCBidWlsdGluOiAyLCBpbnRlcm5hbDogMiB9XG4vLyBXaWxsIHRocm93IGFuIGVycm9yIGlmIGl0IGNvbnRhaW5zIGEgdHlwZSB0aGF0IGRvZXMgbm90IGV4aXN0LCBvciBoYXMgYSBkdXBsaWNhdGVcbmZ1bmN0aW9uIGNvbnZlcnRHcm91cHNUb1JhbmtzKGdyb3Vwcykge1xuICBjb25zdCByYW5rT2JqZWN0ID0gZ3JvdXBzLnJlZHVjZShmdW5jdGlvbihyZXMsIGdyb3VwLCBpbmRleCkge1xuICAgIGlmICh0eXBlb2YgZ3JvdXAgPT09ICdzdHJpbmcnKSB7XG4gICAgICBncm91cCA9IFtncm91cF07XG4gICAgfVxuICAgIGdyb3VwLmZvckVhY2goZnVuY3Rpb24oZ3JvdXBJdGVtKSB7XG4gICAgICBpZiAodHlwZXMuaW5kZXhPZihncm91cEl0ZW0pID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBVbmtub3duIHR5cGUgYCcgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGdyb3VwSXRlbSkgKyAnYCcpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc1tncm91cEl0ZW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgY29uZmlndXJhdGlvbiBvZiB0aGUgcnVsZTogYCcgKyBncm91cEl0ZW0gKyAnYCBpcyBkdXBsaWNhdGVkJyk7XG4gICAgICB9XG4gICAgICByZXNbZ3JvdXBJdGVtXSA9IGluZGV4O1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHt9KTtcblxuICBjb25zdCBvbWl0dGVkVHlwZXMgPSB0eXBlcy5maWx0ZXIoZnVuY3Rpb24odHlwZSkge1xuICAgIHJldHVybiByYW5rT2JqZWN0W3R5cGVdID09PSB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGNvbnN0IHJhbmtzID0gb21pdHRlZFR5cGVzLnJlZHVjZShmdW5jdGlvbihyZXMsIHR5cGUpIHtcbiAgICByZXNbdHlwZV0gPSBncm91cHMubGVuZ3RoO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHJhbmtPYmplY3QpO1xuXG4gIHJldHVybiB7IGdyb3VwczogcmFua3MsIG9taXR0ZWRUeXBlcyB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aEdyb3Vwc0ZvclJhbmtzKHBhdGhHcm91cHMpIHtcbiAgY29uc3QgYWZ0ZXIgPSB7fTtcbiAgY29uc3QgYmVmb3JlID0ge307XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSBwYXRoR3JvdXBzLm1hcCgocGF0aEdyb3VwLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgZ3JvdXAsIHBvc2l0aW9uOiBwb3NpdGlvblN0cmluZyB9ID0gcGF0aEdyb3VwO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG4gICAgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYWZ0ZXInKSB7XG4gICAgICBpZiAoIWFmdGVyW2dyb3VwXSkge1xuICAgICAgICBhZnRlcltncm91cF0gPSAxO1xuICAgICAgfVxuICAgICAgcG9zaXRpb24gPSBhZnRlcltncm91cF0rKztcbiAgICB9IGVsc2UgaWYgKHBvc2l0aW9uU3RyaW5nID09PSAnYmVmb3JlJykge1xuICAgICAgaWYgKCFiZWZvcmVbZ3JvdXBdKSB7XG4gICAgICAgIGJlZm9yZVtncm91cF0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGJlZm9yZVtncm91cF0ucHVzaChpbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHBhdGhHcm91cCwgeyBwb3NpdGlvbiB9KTtcbiAgfSk7XG5cbiAgbGV0IG1heFBvc2l0aW9uID0gMTtcblxuICBPYmplY3Qua2V5cyhiZWZvcmUpLmZvckVhY2goKGdyb3VwKSA9PiB7XG4gICAgY29uc3QgZ3JvdXBMZW5ndGggPSBiZWZvcmVbZ3JvdXBdLmxlbmd0aDtcbiAgICBiZWZvcmVbZ3JvdXBdLmZvckVhY2goKGdyb3VwSW5kZXgsIGluZGV4KSA9PiB7XG4gICAgICB0cmFuc2Zvcm1lZFtncm91cEluZGV4XS5wb3NpdGlvbiA9IC0xICogKGdyb3VwTGVuZ3RoIC0gaW5kZXgpO1xuICAgIH0pO1xuICAgIG1heFBvc2l0aW9uID0gTWF0aC5tYXgobWF4UG9zaXRpb24sIGdyb3VwTGVuZ3RoKTtcbiAgfSk7XG5cbiAgT2JqZWN0LmtleXMoYWZ0ZXIpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGNvbnN0IGdyb3VwTmV4dFBvc2l0aW9uID0gYWZ0ZXJba2V5XTtcbiAgICBtYXhQb3NpdGlvbiA9IE1hdGgubWF4KG1heFBvc2l0aW9uLCBncm91cE5leHRQb3NpdGlvbiAtIDEpO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHBhdGhHcm91cHM6IHRyYW5zZm9ybWVkLFxuICAgIG1heFBvc2l0aW9uOiBtYXhQb3NpdGlvbiA+IDEwID8gTWF0aC5wb3coMTAsIE1hdGguY2VpbChNYXRoLmxvZzEwKG1heFBvc2l0aW9uKSkpIDogMTAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpeE5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBwcmV2aW91c0ltcG9ydCkge1xuICBjb25zdCBwcmV2Um9vdCA9IGZpbmRSb290Tm9kZShwcmV2aW91c0ltcG9ydC5ub2RlKTtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQWZ0ZXJXaGlsZShcbiAgICBjb250ZXh0LmdldFNvdXJjZUNvZGUoKSwgcHJldlJvb3QsIGNvbW1lbnRPblNhbWVMaW5lQXMocHJldlJvb3QpKTtcblxuICBsZXQgZW5kT2ZMaW5lID0gcHJldlJvb3QucmFuZ2VbMV07XG4gIGlmICh0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwKSB7XG4gICAgZW5kT2ZMaW5lID0gdG9rZW5zVG9FbmRPZkxpbmVbdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoIC0gMV0ucmFuZ2VbMV07XG4gIH1cbiAgcmV0dXJuIChmaXhlcikgPT4gZml4ZXIuaW5zZXJ0VGV4dEFmdGVyUmFuZ2UoW3ByZXZSb290LnJhbmdlWzBdLCBlbmRPZkxpbmVdLCAnXFxuJyk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkge1xuICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCk7XG4gIGNvbnN0IHByZXZSb290ID0gZmluZFJvb3ROb2RlKHByZXZpb3VzSW1wb3J0Lm5vZGUpO1xuICBjb25zdCBjdXJyUm9vdCA9IGZpbmRSb290Tm9kZShjdXJyZW50SW1wb3J0Lm5vZGUpO1xuICBjb25zdCByYW5nZVRvUmVtb3ZlID0gW1xuICAgIGZpbmRFbmRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgcHJldlJvb3QpLFxuICAgIGZpbmRTdGFydE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBjdXJyUm9vdCksXG4gIF07XG4gIGlmICgvXlxccyokLy50ZXN0KHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcocmFuZ2VUb1JlbW92ZVswXSwgcmFuZ2VUb1JlbW92ZVsxXSkpKSB7XG4gICAgcmV0dXJuIChmaXhlcikgPT4gZml4ZXIucmVtb3ZlUmFuZ2UocmFuZ2VUb1JlbW92ZSk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbWFrZU5ld2xpbmVzQmV0d2VlblJlcG9ydCAoY29udGV4dCwgaW1wb3J0ZWQsIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMpIHtcbiAgY29uc3QgZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbiA9IChjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCkgPT4ge1xuICAgIGNvbnN0IGxpbmVzQmV0d2VlbkltcG9ydHMgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKS5saW5lcy5zbGljZShcbiAgICAgIHByZXZpb3VzSW1wb3J0Lm5vZGUubG9jLmVuZC5saW5lLFxuICAgICAgY3VycmVudEltcG9ydC5ub2RlLmxvYy5zdGFydC5saW5lIC0gMVxuICAgICk7XG5cbiAgICByZXR1cm4gbGluZXNCZXR3ZWVuSW1wb3J0cy5maWx0ZXIoKGxpbmUpID0+ICFsaW5lLnRyaW0oKS5sZW5ndGgpLmxlbmd0aDtcbiAgfTtcbiAgbGV0IHByZXZpb3VzSW1wb3J0ID0gaW1wb3J0ZWRbMF07XG5cbiAgaW1wb3J0ZWQuc2xpY2UoMSkuZm9yRWFjaChmdW5jdGlvbihjdXJyZW50SW1wb3J0KSB7XG4gICAgY29uc3QgZW1wdHlMaW5lc0JldHdlZW4gPSBnZXROdW1iZXJPZkVtcHR5TGluZXNCZXR3ZWVuKGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KTtcblxuICAgIGlmIChuZXdsaW5lc0JldHdlZW5JbXBvcnRzID09PSAnYWx3YXlzJ1xuICAgICAgICB8fCBuZXdsaW5lc0JldHdlZW5JbXBvcnRzID09PSAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJykge1xuICAgICAgaWYgKGN1cnJlbnRJbXBvcnQucmFuayAhPT0gcHJldmlvdXNJbXBvcnQucmFuayAmJiBlbXB0eUxpbmVzQmV0d2VlbiA9PT0gMCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogcHJldmlvdXNJbXBvcnQubm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBlbXB0eSBsaW5lIGJldHdlZW4gaW1wb3J0IGdyb3VwcycsXG4gICAgICAgICAgZml4OiBmaXhOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEltcG9ydC5yYW5rID09PSBwcmV2aW91c0ltcG9ydC5yYW5rXG4gICAgICAgICYmIGVtcHR5TGluZXNCZXR3ZWVuID4gMFxuICAgICAgICAmJiBuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnYWx3YXlzLWFuZC1pbnNpZGUtZ3JvdXBzJykge1xuICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgbm9kZTogcHJldmlvdXNJbXBvcnQubm9kZSxcbiAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgd2l0aGluIGltcG9ydCBncm91cCcsXG4gICAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXNCZXR3ZWVuID4gMCkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICBtZXNzYWdlOiAnVGhlcmUgc2hvdWxkIGJlIG5vIGVtcHR5IGxpbmUgYmV0d2VlbiBpbXBvcnQgZ3JvdXBzJyxcbiAgICAgICAgZml4OiByZW1vdmVOZXdMaW5lQWZ0ZXJJbXBvcnQoY29udGV4dCwgY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJldmlvdXNJbXBvcnQgPSBjdXJyZW50SW1wb3J0O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucykge1xuICBjb25zdCBhbHBoYWJldGl6ZSA9IG9wdGlvbnMuYWxwaGFiZXRpemUgfHwge307XG4gIGNvbnN0IG9yZGVyID0gYWxwaGFiZXRpemUub3JkZXIgfHwgJ2lnbm9yZSc7XG4gIGNvbnN0IGNhc2VJbnNlbnNpdGl2ZSA9IGFscGhhYmV0aXplLmNhc2VJbnNlbnNpdGl2ZSB8fCBmYWxzZTtcblxuICByZXR1cm4geyBvcmRlciwgY2FzZUluc2Vuc2l0aXZlIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nLFxuICAgIGRvY3M6IHtcbiAgICAgIHVybDogZG9jc1VybCgnb3JkZXInKSxcbiAgICB9LFxuXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGF0aEdyb3Vwczoge1xuICAgICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXR0ZXJuT3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBncm91cDoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICBlbnVtOiB0eXBlcyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IFsnYWZ0ZXInLCAnYmVmb3JlJ10sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsncGF0dGVybicsICdncm91cCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgICduZXdsaW5lcy1iZXR3ZWVuJzoge1xuICAgICAgICAgICAgZW51bTogW1xuICAgICAgICAgICAgICAnaWdub3JlJyxcbiAgICAgICAgICAgICAgJ2Fsd2F5cycsXG4gICAgICAgICAgICAgICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnLFxuICAgICAgICAgICAgICAnbmV2ZXInLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFscGhhYmV0aXplOiB7XG4gICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgY2FzZUluc2Vuc2l0aXZlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvcmRlcjoge1xuICAgICAgICAgICAgICAgIGVudW06IFsnaWdub3JlJywgJ2FzYycsICdkZXNjJ10sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogJ2lnbm9yZScsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2Fybk9uVW5hc3NpZ25lZEltcG9ydHM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIGltcG9ydE9yZGVyUnVsZSAoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnNbMF0gfHwge307XG4gICAgY29uc3QgbmV3bGluZXNCZXR3ZWVuSW1wb3J0cyA9IG9wdGlvbnNbJ25ld2xpbmVzLWJldHdlZW4nXSB8fCAnaWdub3JlJztcbiAgICBjb25zdCBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyA9IG5ldyBTZXQob3B0aW9uc1sncGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMnXSB8fCBbJ2J1aWx0aW4nLCAnZXh0ZXJuYWwnLCAnb2JqZWN0J10pO1xuICAgIGNvbnN0IGFscGhhYmV0aXplID0gZ2V0QWxwaGFiZXRpemVDb25maWcob3B0aW9ucyk7XG4gICAgbGV0IHJhbmtzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcGF0aEdyb3VwcywgbWF4UG9zaXRpb24gfSA9IGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3Mob3B0aW9ucy5wYXRoR3JvdXBzIHx8IFtdKTtcbiAgICAgIGNvbnN0IHsgZ3JvdXBzLCBvbWl0dGVkVHlwZXMgfSA9IGNvbnZlcnRHcm91cHNUb1JhbmtzKG9wdGlvbnMuZ3JvdXBzIHx8IGRlZmF1bHRHcm91cHMpO1xuICAgICAgcmFua3MgPSB7XG4gICAgICAgIGdyb3VwcyxcbiAgICAgICAgb21pdHRlZFR5cGVzLFxuICAgICAgICBwYXRoR3JvdXBzLFxuICAgICAgICBtYXhQb3NpdGlvbixcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE1hbGZvcm1lZCBjb25maWd1cmF0aW9uXG4gICAgICByZXR1cm4ge1xuICAgICAgICBQcm9ncmFtOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBsZXQgaW1wb3J0ZWQgPSBbXTtcblxuICAgIHJldHVybiB7XG4gICAgICBJbXBvcnREZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIC8vIElnbm9yaW5nIHVuYXNzaWduZWQgaW1wb3J0cyB1bmxlc3Mgd2Fybk9uVW5hc3NpZ25lZEltcG9ydHMgaXMgc2V0XG4gICAgICAgIGlmIChub2RlLnNwZWNpZmllcnMubGVuZ3RoIHx8IG9wdGlvbnMud2Fybk9uVW5hc3NpZ25lZEltcG9ydHMpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5zb3VyY2UudmFsdWU7XG4gICAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICB0eXBlOiAnaW1wb3J0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByYW5rcyxcbiAgICAgICAgICAgIGltcG9ydGVkLFxuICAgICAgICAgICAgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbjogZnVuY3Rpb24gaGFuZGxlSW1wb3J0cyhub2RlKSB7XG4gICAgICAgIGxldCBkaXNwbGF5TmFtZTtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBsZXQgdHlwZTtcbiAgICAgICAgLy8gc2tpcCBcImV4cG9ydCBpbXBvcnRcInNcbiAgICAgICAgaWYgKG5vZGUuaXNFeHBvcnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubW9kdWxlUmVmZXJlbmNlLnR5cGUgPT09ICdUU0V4dGVybmFsTW9kdWxlUmVmZXJlbmNlJykge1xuICAgICAgICAgIHZhbHVlID0gbm9kZS5tb2R1bGVSZWZlcmVuY2UuZXhwcmVzc2lvbi52YWx1ZTtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IHZhbHVlO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkuZ2V0VGV4dChub2RlLm1vZHVsZVJlZmVyZW5jZSk7XG4gICAgICAgICAgdHlwZSA9ICdpbXBvcnQ6b2JqZWN0JztcbiAgICAgICAgfVxuICAgICAgICByZWdpc3Rlck5vZGUoXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBpbXBvcnRlZCxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlc1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBoYW5kbGVSZXF1aXJlcyhub2RlKSB7XG4gICAgICAgIGlmICghaXNTdGF0aWNSZXF1aXJlKG5vZGUpIHx8ICFpc01vZHVsZUxldmVsUmVxdWlyZShub2RlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYW1lID0gbm9kZS5hcmd1bWVudHNbMF0udmFsdWU7XG4gICAgICAgIHJlZ2lzdGVyTm9kZShcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBuYW1lLFxuICAgICAgICAgICAgdHlwZTogJ3JlcXVpcmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgaW1wb3J0ZWQsXG4gICAgICAgICAgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXNcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24gcmVwb3J0QW5kUmVzZXQoKSB7XG4gICAgICAgIGlmIChuZXdsaW5lc0JldHdlZW5JbXBvcnRzICE9PSAnaWdub3JlJykge1xuICAgICAgICAgIG1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQsIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFscGhhYmV0aXplLm9yZGVyICE9PSAnaWdub3JlJykge1xuICAgICAgICAgIG11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZShpbXBvcnRlZCwgYWxwaGFiZXRpemUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbWFrZU91dE9mT3JkZXJSZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQpO1xuXG4gICAgICAgIGltcG9ydGVkID0gW107XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9vcmRlci5qcyJdLCJuYW1lcyI6WyJkZWZhdWx0R3JvdXBzIiwicmV2ZXJzZSIsImFycmF5IiwibWFwIiwidiIsIk9iamVjdCIsImFzc2lnbiIsInJhbmsiLCJnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIiLCJzb3VyY2VDb2RlIiwibm9kZSIsImNvdW50IiwiY3VycmVudE5vZGVPclRva2VuIiwicmVzdWx0IiwiaSIsImdldFRva2VuT3JDb21tZW50QWZ0ZXIiLCJwdXNoIiwiZ2V0VG9rZW5zT3JDb21tZW50c0JlZm9yZSIsImdldFRva2VuT3JDb21tZW50QmVmb3JlIiwidGFrZVRva2Vuc0FmdGVyV2hpbGUiLCJjb25kaXRpb24iLCJ0b2tlbnMiLCJsZW5ndGgiLCJ0YWtlVG9rZW5zQmVmb3JlV2hpbGUiLCJmaW5kT3V0T2ZPcmRlciIsImltcG9ydGVkIiwibWF4U2VlblJhbmtOb2RlIiwiZmlsdGVyIiwiaW1wb3J0ZWRNb2R1bGUiLCJyZXMiLCJmaW5kUm9vdE5vZGUiLCJwYXJlbnQiLCJib2R5IiwiZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyIsInRva2Vuc1RvRW5kT2ZMaW5lIiwiY29tbWVudE9uU2FtZUxpbmVBcyIsImVuZE9mVG9rZW5zIiwicmFuZ2UiLCJ0ZXh0IiwidG9rZW4iLCJ0eXBlIiwibG9jIiwic3RhcnQiLCJsaW5lIiwiZW5kIiwiZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzIiwic3RhcnRPZlRva2VucyIsImlzUGxhaW5SZXF1aXJlTW9kdWxlIiwiZGVjbGFyYXRpb25zIiwiZGVjbCIsImlkIiwiaW5pdCIsImNhbGxlZSIsIm5hbWUiLCJhcmd1bWVudHMiLCJpc1BsYWluSW1wb3J0TW9kdWxlIiwic3BlY2lmaWVycyIsImlzUGxhaW5JbXBvcnRFcXVhbHMiLCJtb2R1bGVSZWZlcmVuY2UiLCJleHByZXNzaW9uIiwiY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyIiwiY2FuUmVvcmRlckl0ZW1zIiwiZmlyc3ROb2RlIiwic2Vjb25kTm9kZSIsImluZGV4T2YiLCJzb3J0IiwiZmlyc3RJbmRleCIsInNlY29uZEluZGV4Iiwibm9kZXNCZXR3ZWVuIiwic2xpY2UiLCJub2RlQmV0d2VlbiIsImZpeE91dE9mT3JkZXIiLCJjb250ZXh0Iiwib3JkZXIiLCJnZXRTb3VyY2VDb2RlIiwiZmlyc3RSb290IiwiZmlyc3RSb290U3RhcnQiLCJmaXJzdFJvb3RFbmQiLCJzZWNvbmRSb290Iiwic2Vjb25kUm9vdFN0YXJ0Iiwic2Vjb25kUm9vdEVuZCIsImNhbkZpeCIsIm5ld0NvZGUiLCJzdWJzdHJpbmciLCJtZXNzYWdlIiwiZGlzcGxheU5hbWUiLCJyZXBvcnQiLCJmaXgiLCJmaXhlciIsInJlcGxhY2VUZXh0UmFuZ2UiLCJyZXBvcnRPdXRPZk9yZGVyIiwib3V0T2ZPcmRlciIsImZvckVhY2giLCJpbXAiLCJmb3VuZCIsImZpbmQiLCJoYXNIaWdoZXJSYW5rIiwiaW1wb3J0ZWRJdGVtIiwibWFrZU91dE9mT3JkZXJSZXBvcnQiLCJyZXZlcnNlZEltcG9ydGVkIiwicmV2ZXJzZWRPcmRlciIsImdldFNvcnRlciIsImFzY2VuZGluZyIsIm11bHRpcGxpZXIiLCJpbXBvcnRzU29ydGVyIiwiaW1wb3J0QSIsImltcG9ydEIiLCJtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUiLCJhbHBoYWJldGl6ZU9wdGlvbnMiLCJncm91cGVkQnlSYW5rcyIsInJlZHVjZSIsImFjYyIsIkFycmF5IiwiaXNBcnJheSIsImdyb3VwUmFua3MiLCJrZXlzIiwic29ydGVyRm4iLCJjb21wYXJhdG9yIiwiY2FzZUluc2Vuc2l0aXZlIiwiYSIsImIiLCJTdHJpbmciLCJ2YWx1ZSIsInRvTG93ZXJDYXNlIiwiZ3JvdXBSYW5rIiwibmV3UmFuayIsImFscGhhYmV0aXplZFJhbmtzIiwiaW1wb3J0S2luZCIsInBhcnNlSW50IiwiY29tcHV0ZVBhdGhSYW5rIiwicmFua3MiLCJwYXRoR3JvdXBzIiwicGF0aCIsIm1heFBvc2l0aW9uIiwibCIsInBhdHRlcm4iLCJwYXR0ZXJuT3B0aW9ucyIsImdyb3VwIiwicG9zaXRpb24iLCJub2NvbW1lbnQiLCJjb21wdXRlUmFuayIsImltcG9ydEVudHJ5IiwiZXhjbHVkZWRJbXBvcnRUeXBlcyIsImltcFR5cGUiLCJvbWl0dGVkVHlwZXMiLCJoYXMiLCJncm91cHMiLCJzdGFydHNXaXRoIiwicmVnaXN0ZXJOb2RlIiwiZ2V0UmVxdWlyZUJsb2NrIiwibiIsIm9iamVjdCIsInR5cGVzIiwiY29udmVydEdyb3Vwc1RvUmFua3MiLCJyYW5rT2JqZWN0IiwiaW5kZXgiLCJncm91cEl0ZW0iLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJ1bmRlZmluZWQiLCJjb252ZXJ0UGF0aEdyb3Vwc0ZvclJhbmtzIiwiYWZ0ZXIiLCJiZWZvcmUiLCJ0cmFuc2Zvcm1lZCIsInBhdGhHcm91cCIsInBvc2l0aW9uU3RyaW5nIiwiZ3JvdXBMZW5ndGgiLCJncm91cEluZGV4IiwiTWF0aCIsIm1heCIsImtleSIsImdyb3VwTmV4dFBvc2l0aW9uIiwicG93IiwiY2VpbCIsImxvZzEwIiwiZml4TmV3TGluZUFmdGVySW1wb3J0IiwicHJldmlvdXNJbXBvcnQiLCJwcmV2Um9vdCIsImVuZE9mTGluZSIsImluc2VydFRleHRBZnRlclJhbmdlIiwicmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0IiwiY3VycmVudEltcG9ydCIsImN1cnJSb290IiwicmFuZ2VUb1JlbW92ZSIsInRlc3QiLCJyZW1vdmVSYW5nZSIsIm1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQiLCJuZXdsaW5lc0JldHdlZW5JbXBvcnRzIiwiZ2V0TnVtYmVyT2ZFbXB0eUxpbmVzQmV0d2VlbiIsImxpbmVzQmV0d2VlbkltcG9ydHMiLCJsaW5lcyIsInRyaW0iLCJlbXB0eUxpbmVzQmV0d2VlbiIsImdldEFscGhhYmV0aXplQ29uZmlnIiwib3B0aW9ucyIsImFscGhhYmV0aXplIiwibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJkb2NzIiwidXJsIiwiZml4YWJsZSIsInNjaGVtYSIsInByb3BlcnRpZXMiLCJwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlcyIsIml0ZW1zIiwicmVxdWlyZWQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsIndhcm5PblVuYXNzaWduZWRJbXBvcnRzIiwiY3JlYXRlIiwiaW1wb3J0T3JkZXJSdWxlIiwiU2V0IiwiZXJyb3IiLCJQcm9ncmFtIiwiaW1wb3J0TWFwIiwiTWFwIiwiZ2V0QmxvY2tJbXBvcnRzIiwic2V0IiwiZ2V0IiwiSW1wb3J0RGVjbGFyYXRpb24iLCJoYW5kbGVJbXBvcnRzIiwic291cmNlIiwiVFNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbiIsImlzRXhwb3J0IiwiZ2V0VGV4dCIsIkNhbGxFeHByZXNzaW9uIiwiaGFuZGxlUmVxdWlyZXMiLCJibG9jayIsInJlcG9ydEFuZFJlc2V0IiwiY2xlYXIiXSwibWFwcGluZ3MiOiJBQUFBLGE7O0FBRUEsc0M7QUFDQSxnRDtBQUNBLHNEO0FBQ0EscUM7O0FBRUEsSUFBTUEsZ0JBQWdCLENBQUMsU0FBRCxFQUFZLFVBQVosRUFBd0IsUUFBeEIsRUFBa0MsU0FBbEMsRUFBNkMsT0FBN0MsQ0FBdEI7O0FBRUE7O0FBRUEsU0FBU0MsT0FBVCxDQUFpQkMsS0FBakIsRUFBd0I7QUFDdEIsU0FBT0EsTUFBTUMsR0FBTixDQUFVLFVBQVVDLENBQVYsRUFBYTtBQUM1QixXQUFPQyxPQUFPQyxNQUFQLENBQWMsRUFBZCxFQUFrQkYsQ0FBbEIsRUFBcUIsRUFBRUcsTUFBTSxDQUFDSCxFQUFFRyxJQUFYLEVBQXJCLENBQVA7QUFDRCxHQUZNLEVBRUpOLE9BRkksRUFBUDtBQUdEOztBQUVELFNBQVNPLHdCQUFULENBQWtDQyxVQUFsQyxFQUE4Q0MsSUFBOUMsRUFBb0RDLEtBQXBELEVBQTJEO0FBQ3pELE1BQUlDLHFCQUFxQkYsSUFBekI7QUFDQSxNQUFNRyxTQUFTLEVBQWY7QUFDQSxPQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUgsS0FBcEIsRUFBMkJHLEdBQTNCLEVBQWdDO0FBQzlCRix5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QUFZQThMLHNCQUFVZSxLQUFWO0FBQ0QsV0FkRCxPQUF5QkQsY0FBekIsSUF2RUssRUFBUDs7QUF1RkQsS0F4SEQsT0FBaUJsQixlQUFqQixJQXpFZSxFQUFqQiIsImZpbGUiOiJvcmRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IG1pbmltYXRjaCBmcm9tICdtaW5pbWF0Y2gnO1xuaW1wb3J0IGltcG9ydFR5cGUgZnJvbSAnLi4vY29yZS9pbXBvcnRUeXBlJztcbmltcG9ydCBpc1N0YXRpY1JlcXVpcmUgZnJvbSAnLi4vY29yZS9zdGF0aWNSZXF1aXJlJztcbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5jb25zdCBkZWZhdWx0R3JvdXBzID0gWydidWlsdGluJywgJ2V4dGVybmFsJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4J107XG5cbi8vIFJFUE9SVElORyBBTkQgRklYSU5HXG5cbmZ1bmN0aW9uIHJldmVyc2UoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5Lm1hcChmdW5jdGlvbiAodikge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB2LCB7IHJhbms6IC12LnJhbmsgfSk7XG4gIH0pLnJldmVyc2UoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5zT3JDb21tZW50c0FmdGVyKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEFmdGVyKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gICAgaWYgKGN1cnJlbnROb2RlT3JUb2tlbiA9PSBudWxsKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0LnB1c2goY3VycmVudE5vZGVPclRva2VuKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIGNvdW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZU9yVG9rZW4gPSBub2RlO1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgY3VycmVudE5vZGVPclRva2VuID0gc291cmNlQ29kZS5nZXRUb2tlbk9yQ29tbWVudEJlZm9yZShjdXJyZW50Tm9kZU9yVG9rZW4pO1xuICAgIGlmIChjdXJyZW50Tm9kZU9yVG9rZW4gPT0gbnVsbCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdC5wdXNoKGN1cnJlbnROb2RlT3JUb2tlbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIHRha2VUb2tlbnNBZnRlcldoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQWZ0ZXIoc291cmNlQ29kZSwgbm9kZSwgMTAwKTtcbiAgY29uc3QgcmVzdWx0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gdGFrZVRva2Vuc0JlZm9yZVdoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbmRpdGlvbikge1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnNPckNvbW1lbnRzQmVmb3JlKHNvdXJjZUNvZGUsIG5vZGUsIDEwMCk7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuICBmb3IgKGxldCBpID0gdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGNvbmRpdGlvbih0b2tlbnNbaV0pKSB7XG4gICAgICByZXN1bHQucHVzaCh0b2tlbnNbaV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGZpbmRPdXRPZk9yZGVyKGltcG9ydGVkKSB7XG4gIGlmIChpbXBvcnRlZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgbGV0IG1heFNlZW5SYW5rTm9kZSA9IGltcG9ydGVkWzBdO1xuICByZXR1cm4gaW1wb3J0ZWQuZmlsdGVyKGZ1bmN0aW9uIChpbXBvcnRlZE1vZHVsZSkge1xuICAgIGNvbnN0IHJlcyA9IGltcG9ydGVkTW9kdWxlLnJhbmsgPCBtYXhTZWVuUmFua05vZGUucmFuaztcbiAgICBpZiAobWF4U2VlblJhbmtOb2RlLnJhbmsgPCBpbXBvcnRlZE1vZHVsZS5yYW5rKSB7XG4gICAgICBtYXhTZWVuUmFua05vZGUgPSBpbXBvcnRlZE1vZHVsZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbmRSb290Tm9kZShub2RlKSB7XG4gIGxldCBwYXJlbnQgPSBub2RlO1xuICB3aGlsZSAocGFyZW50LnBhcmVudCAhPSBudWxsICYmIHBhcmVudC5wYXJlbnQuYm9keSA9PSBudWxsKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50O1xufVxuXG5mdW5jdGlvbiBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIG5vZGUpIHtcbiAgY29uc3QgdG9rZW5zVG9FbmRPZkxpbmUgPSB0YWtlVG9rZW5zQWZ0ZXJXaGlsZShzb3VyY2VDb2RlLCBub2RlLCBjb21tZW50T25TYW1lTGluZUFzKG5vZGUpKTtcbiAgY29uc3QgZW5kT2ZUb2tlbnMgPSB0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggPiAwXG4gICAgPyB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXVxuICAgIDogbm9kZS5yYW5nZVsxXTtcbiAgbGV0IHJlc3VsdCA9IGVuZE9mVG9rZW5zO1xuICBmb3IgKGxldCBpID0gZW5kT2ZUb2tlbnM7IGkgPCBzb3VyY2VDb2RlLnRleHQubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc291cmNlQ29kZS50ZXh0W2ldID09PSAnXFxuJykge1xuICAgICAgcmVzdWx0ID0gaSArIDE7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJyAnICYmIHNvdXJjZUNvZGUudGV4dFtpXSAhPT0gJ1xcdCcgJiYgc291cmNlQ29kZS50ZXh0W2ldICE9PSAnXFxyJykge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJlc3VsdCA9IGkgKyAxO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkge1xuICByZXR1cm4gdG9rZW4gPT4gKHRva2VuLnR5cGUgPT09ICdCbG9jaycgfHwgIHRva2VuLnR5cGUgPT09ICdMaW5lJykgJiZcbiAgICAgIHRva2VuLmxvYy5zdGFydC5saW5lID09PSB0b2tlbi5sb2MuZW5kLmxpbmUgJiZcbiAgICAgIHRva2VuLmxvYy5lbmQubGluZSA9PT0gbm9kZS5sb2MuZW5kLmxpbmU7XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGFydE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBub2RlKSB7XG4gIGNvbnN0IHRva2Vuc1RvRW5kT2ZMaW5lID0gdGFrZVRva2Vuc0JlZm9yZVdoaWxlKHNvdXJjZUNvZGUsIG5vZGUsIGNvbW1lbnRPblNhbWVMaW5lQXMobm9kZSkpO1xuICBjb25zdCBzdGFydE9mVG9rZW5zID0gdG9rZW5zVG9FbmRPZkxpbmUubGVuZ3RoID4gMCA/IHRva2Vuc1RvRW5kT2ZMaW5lWzBdLnJhbmdlWzBdIDogbm9kZS5yYW5nZVswXTtcbiAgbGV0IHJlc3VsdCA9IHN0YXJ0T2ZUb2tlbnM7XG4gIGZvciAobGV0IGkgPSBzdGFydE9mVG9rZW5zIC0gMTsgaSA+IDA7IGktLSkge1xuICAgIGlmIChzb3VyY2VDb2RlLnRleHRbaV0gIT09ICcgJyAmJiBzb3VyY2VDb2RlLnRleHRbaV0gIT09ICdcXHQnKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0ID0gaTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc1BsYWluUmVxdWlyZU1vZHVsZShub2RlKSB7XG4gIGlmIChub2RlLnR5cGUgIT09ICdWYXJpYWJsZURlY2xhcmF0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobm9kZS5kZWNsYXJhdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGRlY2wgPSBub2RlLmRlY2xhcmF0aW9uc1swXTtcbiAgY29uc3QgcmVzdWx0ID0gZGVjbC5pZCAmJlxuICAgIChkZWNsLmlkLnR5cGUgPT09ICdJZGVudGlmaWVyJyB8fCBkZWNsLmlkLnR5cGUgPT09ICdPYmplY3RQYXR0ZXJuJykgJiZcbiAgICBkZWNsLmluaXQgIT0gbnVsbCAmJlxuICAgIGRlY2wuaW5pdC50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nICYmXG4gICAgZGVjbC5pbml0LmNhbGxlZSAhPSBudWxsICYmXG4gICAgZGVjbC5pbml0LmNhbGxlZS5uYW1lID09PSAncmVxdWlyZScgJiZcbiAgICBkZWNsLmluaXQuYXJndW1lbnRzICE9IG51bGwgJiZcbiAgICBkZWNsLmluaXQuYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJlxuICAgIGRlY2wuaW5pdC5hcmd1bWVudHNbMF0udHlwZSA9PT0gJ0xpdGVyYWwnO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBpc1BsYWluSW1wb3J0TW9kdWxlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gJ0ltcG9ydERlY2xhcmF0aW9uJyAmJiBub2RlLnNwZWNpZmllcnMgIT0gbnVsbCAmJiBub2RlLnNwZWNpZmllcnMubGVuZ3RoID4gMDtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbkltcG9ydEVxdWFscyhub2RlKSB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdUU0ltcG9ydEVxdWFsc0RlY2xhcmF0aW9uJyAmJiBub2RlLm1vZHVsZVJlZmVyZW5jZS5leHByZXNzaW9uO1xufVxuXG5mdW5jdGlvbiBjYW5Dcm9zc05vZGVXaGlsZVJlb3JkZXIobm9kZSkge1xuICByZXR1cm4gaXNQbGFpblJlcXVpcmVNb2R1bGUobm9kZSkgfHwgaXNQbGFpbkltcG9ydE1vZHVsZShub2RlKSB8fCBpc1BsYWluSW1wb3J0RXF1YWxzKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBjYW5SZW9yZGVySXRlbXMoZmlyc3ROb2RlLCBzZWNvbmROb2RlKSB7XG4gIGNvbnN0IHBhcmVudCA9IGZpcnN0Tm9kZS5wYXJlbnQ7XG4gIGNvbnN0IFtmaXJzdEluZGV4LCBzZWNvbmRJbmRleF0gPSBbXG4gICAgcGFyZW50LmJvZHkuaW5kZXhPZihmaXJzdE5vZGUpLFxuICAgIHBhcmVudC5ib2R5LmluZGV4T2Yoc2Vjb25kTm9kZSksXG4gIF0uc29ydCgpO1xuICBjb25zdCBub2Rlc0JldHdlZW4gPSBwYXJlbnQuYm9keS5zbGljZShmaXJzdEluZGV4LCBzZWNvbmRJbmRleCArIDEpO1xuICBmb3IgKGNvbnN0IG5vZGVCZXR3ZWVuIG9mIG5vZGVzQmV0d2Vlbikge1xuICAgIGlmICghY2FuQ3Jvc3NOb2RlV2hpbGVSZW9yZGVyKG5vZGVCZXR3ZWVuKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmaXJzdE5vZGUsIHNlY29uZE5vZGUsIG9yZGVyKSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcblxuICBjb25zdCBmaXJzdFJvb3QgPSBmaW5kUm9vdE5vZGUoZmlyc3ROb2RlLm5vZGUpO1xuICBjb25zdCBmaXJzdFJvb3RTdGFydCA9IGZpbmRTdGFydE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBmaXJzdFJvb3QpO1xuICBjb25zdCBmaXJzdFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGZpcnN0Um9vdCk7XG5cbiAgY29uc3Qgc2Vjb25kUm9vdCA9IGZpbmRSb290Tm9kZShzZWNvbmROb2RlLm5vZGUpO1xuICBjb25zdCBzZWNvbmRSb290U3RhcnQgPSBmaW5kU3RhcnRPZkxpbmVXaXRoQ29tbWVudHMoc291cmNlQ29kZSwgc2Vjb25kUm9vdCk7XG4gIGNvbnN0IHNlY29uZFJvb3RFbmQgPSBmaW5kRW5kT2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIHNlY29uZFJvb3QpO1xuICBjb25zdCBjYW5GaXggPSBjYW5SZW9yZGVySXRlbXMoZmlyc3RSb290LCBzZWNvbmRSb290KTtcblxuICBsZXQgbmV3Q29kZSA9IHNvdXJjZUNvZGUudGV4dC5zdWJzdHJpbmcoc2Vjb25kUm9vdFN0YXJ0LCBzZWNvbmRSb290RW5kKTtcbiAgaWYgKG5ld0NvZGVbbmV3Q29kZS5sZW5ndGggLSAxXSAhPT0gJ1xcbicpIHtcbiAgICBuZXdDb2RlID0gbmV3Q29kZSArICdcXG4nO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGBcXGAke3NlY29uZE5vZGUuZGlzcGxheU5hbWV9XFxgIGltcG9ydCBzaG91bGQgb2NjdXIgJHtvcmRlcn0gaW1wb3J0IG9mIFxcYCR7Zmlyc3ROb2RlLmRpc3BsYXlOYW1lfVxcYGA7XG5cbiAgaWYgKG9yZGVyID09PSAnYmVmb3JlJykge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIG5vZGU6IHNlY29uZE5vZGUubm9kZSxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICBmaXg6IGNhbkZpeCAmJiAoZml4ZXIgPT5cbiAgICAgICAgZml4ZXIucmVwbGFjZVRleHRSYW5nZShcbiAgICAgICAgICBbZmlyc3RSb290U3RhcnQsIHNlY29uZFJvb3RFbmRdLFxuICAgICAgICAgIG5ld0NvZGUgKyBzb3VyY2VDb2RlLnRleHQuc3Vic3RyaW5nKGZpcnN0Um9vdFN0YXJ0LCBzZWNvbmRSb290U3RhcnQpXG4gICAgICAgICkpLFxuICAgIH0pO1xuICB9IGVsc2UgaWYgKG9yZGVyID09PSAnYWZ0ZXInKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgbm9kZTogc2Vjb25kTm9kZS5ub2RlLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIGZpeDogY2FuRml4ICYmIChmaXhlciA9PlxuICAgICAgICBmaXhlci5yZXBsYWNlVGV4dFJhbmdlKFxuICAgICAgICAgIFtzZWNvbmRSb290U3RhcnQsIGZpcnN0Um9vdEVuZF0sXG4gICAgICAgICAgc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhzZWNvbmRSb290RW5kLCBmaXJzdFJvb3RFbmQpICsgbmV3Q29kZVxuICAgICAgICApKSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBvcnRPdXRPZk9yZGVyKGNvbnRleHQsIGltcG9ydGVkLCBvdXRPZk9yZGVyLCBvcmRlcikge1xuICBvdXRPZk9yZGVyLmZvckVhY2goZnVuY3Rpb24gKGltcCkge1xuICAgIGNvbnN0IGZvdW5kID0gaW1wb3J0ZWQuZmluZChmdW5jdGlvbiBoYXNIaWdoZXJSYW5rKGltcG9ydGVkSXRlbSkge1xuICAgICAgcmV0dXJuIGltcG9ydGVkSXRlbS5yYW5rID4gaW1wLnJhbms7XG4gICAgfSk7XG4gICAgZml4T3V0T2ZPcmRlcihjb250ZXh0LCBmb3VuZCwgaW1wLCBvcmRlcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYWtlT3V0T2ZPcmRlclJlcG9ydChjb250ZXh0LCBpbXBvcnRlZCkge1xuICBjb25zdCBvdXRPZk9yZGVyID0gZmluZE91dE9mT3JkZXIoaW1wb3J0ZWQpO1xuICBpZiAoIW91dE9mT3JkZXIubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFRoZXJlIGFyZSB0aGluZ3MgdG8gcmVwb3J0LiBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiByZXBvcnRlZCBlcnJvcnMuXG4gIGNvbnN0IHJldmVyc2VkSW1wb3J0ZWQgPSByZXZlcnNlKGltcG9ydGVkKTtcbiAgY29uc3QgcmV2ZXJzZWRPcmRlciA9IGZpbmRPdXRPZk9yZGVyKHJldmVyc2VkSW1wb3J0ZWQpO1xuICBpZiAocmV2ZXJzZWRPcmRlci5sZW5ndGggPCBvdXRPZk9yZGVyLmxlbmd0aCkge1xuICAgIHJlcG9ydE91dE9mT3JkZXIoY29udGV4dCwgcmV2ZXJzZWRJbXBvcnRlZCwgcmV2ZXJzZWRPcmRlciwgJ2FmdGVyJyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJlcG9ydE91dE9mT3JkZXIoY29udGV4dCwgaW1wb3J0ZWQsIG91dE9mT3JkZXIsICdiZWZvcmUnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U29ydGVyKGFzY2VuZGluZykge1xuICBjb25zdCBtdWx0aXBsaWVyID0gYXNjZW5kaW5nID8gMSA6IC0xO1xuXG4gIHJldHVybiBmdW5jdGlvbiBpbXBvcnRzU29ydGVyKGltcG9ydEEsIGltcG9ydEIpIHtcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgaWYgKGltcG9ydEEgPCBpbXBvcnRCKSB7XG4gICAgICByZXN1bHQgPSAtMTtcbiAgICB9IGVsc2UgaWYgKGltcG9ydEEgPiBpbXBvcnRCKSB7XG4gICAgICByZXN1bHQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgKiBtdWx0aXBsaWVyO1xuICB9O1xufVxuXG5mdW5jdGlvbiBtdXRhdGVSYW5rc1RvQWxwaGFiZXRpemUoaW1wb3J0ZWQsIGFscGhhYmV0aXplT3B0aW9ucykge1xuICBjb25zdCBncm91cGVkQnlSYW5rcyA9IGltcG9ydGVkLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBpbXBvcnRlZEl0ZW0pIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYWNjW2ltcG9ydGVkSXRlbS5yYW5rXSkpIHtcbiAgICAgIGFjY1tpbXBvcnRlZEl0ZW0ucmFua10gPSBbXTtcbiAgICB9XG4gICAgYWNjW2ltcG9ydGVkSXRlbS5yYW5rXS5wdXNoKGltcG9ydGVkSXRlbSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIGNvbnN0IGdyb3VwUmFua3MgPSBPYmplY3Qua2V5cyhncm91cGVkQnlSYW5rcyk7XG5cbiAgY29uc3Qgc29ydGVyRm4gPSBnZXRTb3J0ZXIoYWxwaGFiZXRpemVPcHRpb25zLm9yZGVyID09PSAnYXNjJyk7XG4gIGNvbnN0IGNvbXBhcmF0b3IgPSBhbHBoYWJldGl6ZU9wdGlvbnMuY2FzZUluc2Vuc2l0aXZlXG4gICAgPyAoYSwgYikgPT4gc29ydGVyRm4oU3RyaW5nKGEudmFsdWUpLnRvTG93ZXJDYXNlKCksIFN0cmluZyhiLnZhbHVlKS50b0xvd2VyQ2FzZSgpKVxuICAgIDogKGEsIGIpID0+IHNvcnRlckZuKGEudmFsdWUsIGIudmFsdWUpO1xuXG4gIC8vIHNvcnQgaW1wb3J0cyBsb2NhbGx5IHdpdGhpbiB0aGVpciBncm91cFxuICBncm91cFJhbmtzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwUmFuaykge1xuICAgIGdyb3VwZWRCeVJhbmtzW2dyb3VwUmFua10uc29ydChjb21wYXJhdG9yKTtcbiAgfSk7XG5cbiAgLy8gYXNzaWduIGdsb2JhbGx5IHVuaXF1ZSByYW5rIHRvIGVhY2ggaW1wb3J0XG4gIGxldCBuZXdSYW5rID0gMDtcbiAgY29uc3QgYWxwaGFiZXRpemVkUmFua3MgPSBncm91cFJhbmtzLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgZ3JvdXBSYW5rKSB7XG4gICAgZ3JvdXBlZEJ5UmFua3NbZ3JvdXBSYW5rXS5mb3JFYWNoKGZ1bmN0aW9uIChpbXBvcnRlZEl0ZW0pIHtcbiAgICAgIGFjY1tgJHtpbXBvcnRlZEl0ZW0udmFsdWV9fCR7aW1wb3J0ZWRJdGVtLm5vZGUuaW1wb3J0S2luZH1gXSA9IHBhcnNlSW50KGdyb3VwUmFuaywgMTApICsgbmV3UmFuaztcbiAgICAgIG5ld1JhbmsgKz0gMTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG5cbiAgLy8gbXV0YXRlIHRoZSBvcmlnaW5hbCBncm91cC1yYW5rIHdpdGggYWxwaGFiZXRpemVkLXJhbmtcbiAgaW1wb3J0ZWQuZm9yRWFjaChmdW5jdGlvbiAoaW1wb3J0ZWRJdGVtKSB7XG4gICAgaW1wb3J0ZWRJdGVtLnJhbmsgPSBhbHBoYWJldGl6ZWRSYW5rc1tgJHtpbXBvcnRlZEl0ZW0udmFsdWV9fCR7aW1wb3J0ZWRJdGVtLm5vZGUuaW1wb3J0S2luZH1gXTtcbiAgfSk7XG59XG5cbi8vIERFVEVDVElOR1xuXG5mdW5jdGlvbiBjb21wdXRlUGF0aFJhbmsocmFua3MsIHBhdGhHcm91cHMsIHBhdGgsIG1heFBvc2l0aW9uKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGF0aEdyb3Vwcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCB7IHBhdHRlcm4sIHBhdHRlcm5PcHRpb25zLCBncm91cCwgcG9zaXRpb24gPSAxIH0gPSBwYXRoR3JvdXBzW2ldO1xuICAgIGlmIChtaW5pbWF0Y2gocGF0aCwgcGF0dGVybiwgcGF0dGVybk9wdGlvbnMgfHwgeyBub2NvbW1lbnQ6IHRydWUgfSkpIHtcbiAgICAgIHJldHVybiByYW5rc1tncm91cF0gKyAocG9zaXRpb24gLyBtYXhQb3NpdGlvbik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVSYW5rKGNvbnRleHQsIHJhbmtzLCBpbXBvcnRFbnRyeSwgZXhjbHVkZWRJbXBvcnRUeXBlcykge1xuICBsZXQgaW1wVHlwZTtcbiAgbGV0IHJhbms7XG4gIGlmIChpbXBvcnRFbnRyeS50eXBlID09PSAnaW1wb3J0Om9iamVjdCcpIHtcbiAgICBpbXBUeXBlID0gJ29iamVjdCc7XG4gIH0gZWxzZSBpZiAoaW1wb3J0RW50cnkubm9kZS5pbXBvcnRLaW5kID09PSAndHlwZScgJiYgcmFua3Mub21pdHRlZFR5cGVzLmluZGV4T2YoJ3R5cGUnKSA9PT0gLTEpIHtcbiAgICBpbXBUeXBlID0gJ3R5cGUnO1xuICB9IGVsc2Uge1xuICAgIGltcFR5cGUgPSBpbXBvcnRUeXBlKGltcG9ydEVudHJ5LnZhbHVlLCBjb250ZXh0KTtcbiAgfVxuICBpZiAoIWV4Y2x1ZGVkSW1wb3J0VHlwZXMuaGFzKGltcFR5cGUpKSB7XG4gICAgcmFuayA9IGNvbXB1dGVQYXRoUmFuayhyYW5rcy5ncm91cHMsIHJhbmtzLnBhdGhHcm91cHMsIGltcG9ydEVudHJ5LnZhbHVlLCByYW5rcy5tYXhQb3NpdGlvbik7XG4gIH1cbiAgaWYgKHR5cGVvZiByYW5rID09PSAndW5kZWZpbmVkJykge1xuICAgIHJhbmsgPSByYW5rcy5ncm91cHNbaW1wVHlwZV07XG4gIH1cbiAgaWYgKGltcG9ydEVudHJ5LnR5cGUgIT09ICdpbXBvcnQnICYmICFpbXBvcnRFbnRyeS50eXBlLnN0YXJ0c1dpdGgoJ2ltcG9ydDonKSkge1xuICAgIHJhbmsgKz0gMTAwO1xuICB9XG5cbiAgcmV0dXJuIHJhbms7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTm9kZShjb250ZXh0LCBpbXBvcnRFbnRyeSwgcmFua3MsIGltcG9ydGVkLCBleGNsdWRlZEltcG9ydFR5cGVzKSB7XG4gIGNvbnN0IHJhbmsgPSBjb21wdXRlUmFuayhjb250ZXh0LCByYW5rcywgaW1wb3J0RW50cnksIGV4Y2x1ZGVkSW1wb3J0VHlwZXMpO1xuICBpZiAocmFuayAhPT0gLTEpIHtcbiAgICBpbXBvcnRlZC5wdXNoKE9iamVjdC5hc3NpZ24oe30sIGltcG9ydEVudHJ5LCB7IHJhbmsgfSkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJlcXVpcmVCbG9jayhub2RlKSB7XG4gIGxldCBuID0gbm9kZTtcbiAgLy8gSGFuZGxlIGNhc2VzIGxpa2UgYGNvbnN0IGJheiA9IHJlcXVpcmUoJ2ZvbycpLmJhci5iYXpgXG4gIC8vIGFuZCBgY29uc3QgZm9vID0gcmVxdWlyZSgnZm9vJykoKWBcbiAgd2hpbGUgKFxuICAgIChuLnBhcmVudC50eXBlID09PSAnTWVtYmVyRXhwcmVzc2lvbicgJiYgbi5wYXJlbnQub2JqZWN0ID09PSBuKSB8fFxuICAgIChuLnBhcmVudC50eXBlID09PSAnQ2FsbEV4cHJlc3Npb24nICYmIG4ucGFyZW50LmNhbGxlZSA9PT0gbilcbiAgKSB7XG4gICAgbiA9IG4ucGFyZW50O1xuICB9XG4gIGlmIChcbiAgICBuLnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdG9yJyAmJlxuICAgIG4ucGFyZW50LnBhcmVudC50eXBlID09PSAnVmFyaWFibGVEZWNsYXJhdGlvbicgJiZcbiAgICBuLnBhcmVudC5wYXJlbnQucGFyZW50LnR5cGUgPT09ICdQcm9ncmFtJ1xuICApIHtcbiAgICByZXR1cm4gbi5wYXJlbnQucGFyZW50LnBhcmVudDtcbiAgfVxufVxuXG5jb25zdCB0eXBlcyA9IFsnYnVpbHRpbicsICdleHRlcm5hbCcsICdpbnRlcm5hbCcsICd1bmtub3duJywgJ3BhcmVudCcsICdzaWJsaW5nJywgJ2luZGV4JywgJ29iamVjdCcsICd0eXBlJ107XG5cbi8vIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdHlwZS1yYW5rIHBhaXJzLlxuLy8gRXhhbXBsZTogeyBpbmRleDogMCwgc2libGluZzogMSwgcGFyZW50OiAxLCBleHRlcm5hbDogMSwgYnVpbHRpbjogMiwgaW50ZXJuYWw6IDIgfVxuLy8gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiBpdCBjb250YWlucyBhIHR5cGUgdGhhdCBkb2VzIG5vdCBleGlzdCwgb3IgaGFzIGEgZHVwbGljYXRlXG5mdW5jdGlvbiBjb252ZXJ0R3JvdXBzVG9SYW5rcyhncm91cHMpIHtcbiAgY29uc3QgcmFua09iamVjdCA9IGdyb3Vwcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgZ3JvdXAsIGluZGV4KSB7XG4gICAgaWYgKHR5cGVvZiBncm91cCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGdyb3VwID0gW2dyb3VwXTtcbiAgICB9XG4gICAgZ3JvdXAuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXBJdGVtKSB7XG4gICAgICBpZiAodHlwZXMuaW5kZXhPZihncm91cEl0ZW0pID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luY29ycmVjdCBjb25maWd1cmF0aW9uIG9mIHRoZSBydWxlOiBVbmtub3duIHR5cGUgYCcgK1xuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGdyb3VwSXRlbSkgKyAnYCcpO1xuICAgICAgfVxuICAgICAgaWYgKHJlc1tncm91cEl0ZW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgY29uZmlndXJhdGlvbiBvZiB0aGUgcnVsZTogYCcgKyBncm91cEl0ZW0gKyAnYCBpcyBkdXBsaWNhdGVkJyk7XG4gICAgICB9XG4gICAgICByZXNbZ3JvdXBJdGVtXSA9IGluZGV4O1xuICAgIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHt9KTtcblxuICBjb25zdCBvbWl0dGVkVHlwZXMgPSB0eXBlcy5maWx0ZXIoZnVuY3Rpb24gKHR5cGUpIHtcbiAgICByZXR1cm4gcmFua09iamVjdFt0eXBlXSA9PT0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBjb25zdCByYW5rcyA9IG9taXR0ZWRUeXBlcy5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgdHlwZSkge1xuICAgIHJlc1t0eXBlXSA9IGdyb3Vwcy5sZW5ndGg7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwgcmFua09iamVjdCk7XG5cbiAgcmV0dXJuIHsgZ3JvdXBzOiByYW5rcywgb21pdHRlZFR5cGVzIH07XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRQYXRoR3JvdXBzRm9yUmFua3MocGF0aEdyb3Vwcykge1xuICBjb25zdCBhZnRlciA9IHt9O1xuICBjb25zdCBiZWZvcmUgPSB7fTtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHBhdGhHcm91cHMubWFwKChwYXRoR3JvdXAsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBncm91cCwgcG9zaXRpb246IHBvc2l0aW9uU3RyaW5nIH0gPSBwYXRoR3JvdXA7XG4gICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdhZnRlcicpIHtcbiAgICAgIGlmICghYWZ0ZXJbZ3JvdXBdKSB7XG4gICAgICAgIGFmdGVyW2dyb3VwXSA9IDE7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbiA9IGFmdGVyW2dyb3VwXSsrO1xuICAgIH0gZWxzZSBpZiAocG9zaXRpb25TdHJpbmcgPT09ICdiZWZvcmUnKSB7XG4gICAgICBpZiAoIWJlZm9yZVtncm91cF0pIHtcbiAgICAgICAgYmVmb3JlW2dyb3VwXSA9IFtdO1xuICAgICAgfVxuICAgICAgYmVmb3JlW2dyb3VwXS5wdXNoKGluZGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcGF0aEdyb3VwLCB7IHBvc2l0aW9uIH0pO1xuICB9KTtcblxuICBsZXQgbWF4UG9zaXRpb24gPSAxO1xuXG4gIE9iamVjdC5rZXlzKGJlZm9yZSkuZm9yRWFjaCgoZ3JvdXApID0+IHtcbiAgICBjb25zdCBncm91cExlbmd0aCA9IGJlZm9yZVtncm91cF0ubGVuZ3RoO1xuICAgIGJlZm9yZVtncm91cF0uZm9yRWFjaCgoZ3JvdXBJbmRleCwgaW5kZXgpID0+IHtcbiAgICAgIHRyYW5zZm9ybWVkW2dyb3VwSW5kZXhdLnBvc2l0aW9uID0gLTEgKiAoZ3JvdXBMZW5ndGggLSBpbmRleCk7XG4gICAgfSk7XG4gICAgbWF4UG9zaXRpb24gPSBNYXRoLm1heChtYXhQb3NpdGlvbiwgZ3JvdXBMZW5ndGgpO1xuICB9KTtcblxuICBPYmplY3Qua2V5cyhhZnRlcikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgZ3JvdXBOZXh0UG9zaXRpb24gPSBhZnRlcltrZXldO1xuICAgIG1heFBvc2l0aW9uID0gTWF0aC5tYXgobWF4UG9zaXRpb24sIGdyb3VwTmV4dFBvc2l0aW9uIC0gMSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aEdyb3VwczogdHJhbnNmb3JtZWQsXG4gICAgbWF4UG9zaXRpb246IG1heFBvc2l0aW9uID4gMTAgPyBNYXRoLnBvdygxMCwgTWF0aC5jZWlsKE1hdGgubG9nMTAobWF4UG9zaXRpb24pKSkgOiAxMCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZml4TmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHByZXZSb290ID0gZmluZFJvb3ROb2RlKHByZXZpb3VzSW1wb3J0Lm5vZGUpO1xuICBjb25zdCB0b2tlbnNUb0VuZE9mTGluZSA9IHRha2VUb2tlbnNBZnRlcldoaWxlKFxuICAgIGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLCBwcmV2Um9vdCwgY29tbWVudE9uU2FtZUxpbmVBcyhwcmV2Um9vdCkpO1xuXG4gIGxldCBlbmRPZkxpbmUgPSBwcmV2Um9vdC5yYW5nZVsxXTtcbiAgaWYgKHRva2Vuc1RvRW5kT2ZMaW5lLmxlbmd0aCA+IDApIHtcbiAgICBlbmRPZkxpbmUgPSB0b2tlbnNUb0VuZE9mTGluZVt0b2tlbnNUb0VuZE9mTGluZS5sZW5ndGggLSAxXS5yYW5nZVsxXTtcbiAgfVxuICByZXR1cm4gKGZpeGVyKSA9PiBmaXhlci5pbnNlcnRUZXh0QWZ0ZXJSYW5nZShbcHJldlJvb3QucmFuZ2VbMF0sIGVuZE9mTGluZV0sICdcXG4nKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmV3TGluZUFmdGVySW1wb3J0KGNvbnRleHQsIGN1cnJlbnRJbXBvcnQsIHByZXZpb3VzSW1wb3J0KSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LmdldFNvdXJjZUNvZGUoKTtcbiAgY29uc3QgcHJldlJvb3QgPSBmaW5kUm9vdE5vZGUocHJldmlvdXNJbXBvcnQubm9kZSk7XG4gIGNvbnN0IGN1cnJSb290ID0gZmluZFJvb3ROb2RlKGN1cnJlbnRJbXBvcnQubm9kZSk7XG4gIGNvbnN0IHJhbmdlVG9SZW1vdmUgPSBbXG4gICAgZmluZEVuZE9mTGluZVdpdGhDb21tZW50cyhzb3VyY2VDb2RlLCBwcmV2Um9vdCksXG4gICAgZmluZFN0YXJ0T2ZMaW5lV2l0aENvbW1lbnRzKHNvdXJjZUNvZGUsIGN1cnJSb290KSxcbiAgXTtcbiAgaWYgKC9eXFxzKiQvLnRlc3Qoc291cmNlQ29kZS50ZXh0LnN1YnN0cmluZyhyYW5nZVRvUmVtb3ZlWzBdLCByYW5nZVRvUmVtb3ZlWzFdKSkpIHtcbiAgICByZXR1cm4gKGZpeGVyKSA9PiBmaXhlci5yZW1vdmVSYW5nZShyYW5nZVRvUmVtb3ZlKTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBtYWtlTmV3bGluZXNCZXR3ZWVuUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkLCBuZXdsaW5lc0JldHdlZW5JbXBvcnRzKSB7XG4gIGNvbnN0IGdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4gPSAoY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpID0+IHtcbiAgICBjb25zdCBsaW5lc0JldHdlZW5JbXBvcnRzID0gY29udGV4dC5nZXRTb3VyY2VDb2RlKCkubGluZXMuc2xpY2UoXG4gICAgICBwcmV2aW91c0ltcG9ydC5ub2RlLmxvYy5lbmQubGluZSxcbiAgICAgIGN1cnJlbnRJbXBvcnQubm9kZS5sb2Muc3RhcnQubGluZSAtIDFcbiAgICApO1xuXG4gICAgcmV0dXJuIGxpbmVzQmV0d2VlbkltcG9ydHMuZmlsdGVyKChsaW5lKSA9PiAhbGluZS50cmltKCkubGVuZ3RoKS5sZW5ndGg7XG4gIH07XG4gIGxldCBwcmV2aW91c0ltcG9ydCA9IGltcG9ydGVkWzBdO1xuXG4gIGltcG9ydGVkLnNsaWNlKDEpLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRJbXBvcnQpIHtcbiAgICBjb25zdCBlbXB0eUxpbmVzQmV0d2VlbiA9IGdldE51bWJlck9mRW1wdHlMaW5lc0JldHdlZW4oY3VycmVudEltcG9ydCwgcHJldmlvdXNJbXBvcnQpO1xuXG4gICAgaWYgKG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMnXG4gICAgICAgIHx8IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICBpZiAoY3VycmVudEltcG9ydC5yYW5rICE9PSBwcmV2aW91c0ltcG9ydC5yYW5rICYmIGVtcHR5TGluZXNCZXR3ZWVuID09PSAwKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIGVtcHR5IGxpbmUgYmV0d2VlbiBpbXBvcnQgZ3JvdXBzJyxcbiAgICAgICAgICBmaXg6IGZpeE5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SW1wb3J0LnJhbmsgPT09IHByZXZpb3VzSW1wb3J0LnJhbmtcbiAgICAgICAgJiYgZW1wdHlMaW5lc0JldHdlZW4gPiAwXG4gICAgICAgICYmIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgIT09ICdhbHdheXMtYW5kLWluc2lkZS1ncm91cHMnKSB7XG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBub2RlOiBwcmV2aW91c0ltcG9ydC5ub2RlLFxuICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBzaG91bGQgYmUgbm8gZW1wdHkgbGluZSB3aXRoaW4gaW1wb3J0IGdyb3VwJyxcbiAgICAgICAgICBmaXg6IHJlbW92ZU5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZW1wdHlMaW5lc0JldHdlZW4gPiAwKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIG5vZGU6IHByZXZpb3VzSW1wb3J0Lm5vZGUsXG4gICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBzaG91bGQgYmUgbm8gZW1wdHkgbGluZSBiZXR3ZWVuIGltcG9ydCBncm91cHMnLFxuICAgICAgICBmaXg6IHJlbW92ZU5ld0xpbmVBZnRlckltcG9ydChjb250ZXh0LCBjdXJyZW50SW1wb3J0LCBwcmV2aW91c0ltcG9ydCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBwcmV2aW91c0ltcG9ydCA9IGN1cnJlbnRJbXBvcnQ7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRBbHBoYWJldGl6ZUNvbmZpZyhvcHRpb25zKSB7XG4gIGNvbnN0IGFscGhhYmV0aXplID0gb3B0aW9ucy5hbHBoYWJldGl6ZSB8fCB7fTtcbiAgY29uc3Qgb3JkZXIgPSBhbHBoYWJldGl6ZS5vcmRlciB8fCAnaWdub3JlJztcbiAgY29uc3QgY2FzZUluc2Vuc2l0aXZlID0gYWxwaGFiZXRpemUuY2FzZUluc2Vuc2l0aXZlIHx8IGZhbHNlO1xuXG4gIHJldHVybiB7IG9yZGVyLCBjYXNlSW5zZW5zaXRpdmUgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCdvcmRlcicpLFxuICAgIH0sXG5cbiAgICBmaXhhYmxlOiAnY29kZScsXG4gICAgc2NoZW1hOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZ3JvdXBzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXRoR3JvdXBzOiB7XG4gICAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBwYXR0ZXJuOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdHRlcm5PcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdyb3VwOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgIGVudW06IHR5cGVzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgZW51bTogWydhZnRlcicsICdiZWZvcmUnXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXF1aXJlZDogWydwYXR0ZXJuJywgJ2dyb3VwJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ25ld2xpbmVzLWJldHdlZW4nOiB7XG4gICAgICAgICAgICBlbnVtOiBbXG4gICAgICAgICAgICAgICdpZ25vcmUnLFxuICAgICAgICAgICAgICAnYWx3YXlzJyxcbiAgICAgICAgICAgICAgJ2Fsd2F5cy1hbmQtaW5zaWRlLWdyb3VwcycsXG4gICAgICAgICAgICAgICduZXZlcicsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxwaGFiZXRpemU6IHtcbiAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBjYXNlSW5zZW5zaXRpdmU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9yZGVyOiB7XG4gICAgICAgICAgICAgICAgZW51bTogWydpZ25vcmUnLCAnYXNjJywgJ2Rlc2MnXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnaWdub3JlJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB3YXJuT25VbmFzc2lnbmVkSW1wb3J0czoge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gaW1wb3J0T3JkZXJSdWxlKGNvbnRleHQpIHtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5vcHRpb25zWzBdIHx8IHt9O1xuICAgIGNvbnN0IG5ld2xpbmVzQmV0d2VlbkltcG9ydHMgPSBvcHRpb25zWyduZXdsaW5lcy1iZXR3ZWVuJ10gfHwgJ2lnbm9yZSc7XG4gICAgY29uc3QgcGF0aEdyb3Vwc0V4Y2x1ZGVkSW1wb3J0VHlwZXMgPSBuZXcgU2V0KG9wdGlvbnNbJ3BhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzJ10gfHwgWydidWlsdGluJywgJ2V4dGVybmFsJywgJ29iamVjdCddKTtcbiAgICBjb25zdCBhbHBoYWJldGl6ZSA9IGdldEFscGhhYmV0aXplQ29uZmlnKG9wdGlvbnMpO1xuICAgIGxldCByYW5rcztcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHBhdGhHcm91cHMsIG1heFBvc2l0aW9uIH0gPSBjb252ZXJ0UGF0aEdyb3Vwc0ZvclJhbmtzKG9wdGlvbnMucGF0aEdyb3VwcyB8fCBbXSk7XG4gICAgICBjb25zdCB7IGdyb3Vwcywgb21pdHRlZFR5cGVzIH0gPSBjb252ZXJ0R3JvdXBzVG9SYW5rcyhvcHRpb25zLmdyb3VwcyB8fCBkZWZhdWx0R3JvdXBzKTtcbiAgICAgIHJhbmtzID0ge1xuICAgICAgICBncm91cHMsXG4gICAgICAgIG9taXR0ZWRUeXBlcyxcbiAgICAgICAgcGF0aEdyb3VwcyxcbiAgICAgICAgbWF4UG9zaXRpb24sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBNYWxmb3JtZWQgY29uZmlndXJhdGlvblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUHJvZ3JhbShub2RlKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpbXBvcnRNYXAgPSBuZXcgTWFwKCk7XG5cbiAgICBmdW5jdGlvbiBnZXRCbG9ja0ltcG9ydHMobm9kZSkge1xuICAgICAgaWYgKCFpbXBvcnRNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgIGltcG9ydE1hcC5zZXQobm9kZSwgW10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGltcG9ydE1hcC5nZXQobm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEltcG9ydERlY2xhcmF0aW9uOiBmdW5jdGlvbiBoYW5kbGVJbXBvcnRzKG5vZGUpIHtcbiAgICAgICAgLy8gSWdub3JpbmcgdW5hc3NpZ25lZCBpbXBvcnRzIHVubGVzcyB3YXJuT25VbmFzc2lnbmVkSW1wb3J0cyBpcyBzZXRcbiAgICAgICAgaWYgKG5vZGUuc3BlY2lmaWVycy5sZW5ndGggfHwgb3B0aW9ucy53YXJuT25VbmFzc2lnbmVkSW1wb3J0cykge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLnNvdXJjZS52YWx1ZTtcbiAgICAgICAgICByZWdpc3Rlck5vZGUoXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgIHR5cGU6ICdpbXBvcnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJhbmtzLFxuICAgICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKG5vZGUucGFyZW50KSxcbiAgICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFRTSW1wb3J0RXF1YWxzRGVjbGFyYXRpb246IGZ1bmN0aW9uIGhhbmRsZUltcG9ydHMobm9kZSkge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgbGV0IHR5cGU7XG4gICAgICAgIC8vIHNraXAgXCJleHBvcnQgaW1wb3J0XCJzXG4gICAgICAgIGlmIChub2RlLmlzRXhwb3J0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm1vZHVsZVJlZmVyZW5jZS50eXBlID09PSAnVFNFeHRlcm5hbE1vZHVsZVJlZmVyZW5jZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IG5vZGUubW9kdWxlUmVmZXJlbmNlLmV4cHJlc3Npb24udmFsdWU7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSB2YWx1ZTtcbiAgICAgICAgICB0eXBlID0gJ2ltcG9ydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSAnJztcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGNvbnRleHQuZ2V0U291cmNlQ29kZSgpLmdldFRleHQobm9kZS5tb2R1bGVSZWZlcmVuY2UpO1xuICAgICAgICAgIHR5cGUgPSAnaW1wb3J0Om9iamVjdCc7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGlzcGxheU5hbWUsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmFua3MsXG4gICAgICAgICAgZ2V0QmxvY2tJbXBvcnRzKG5vZGUucGFyZW50KSxcbiAgICAgICAgICBwYXRoR3JvdXBzRXhjbHVkZWRJbXBvcnRUeXBlc1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIENhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiBoYW5kbGVSZXF1aXJlcyhub2RlKSB7XG4gICAgICAgIGlmICghaXNTdGF0aWNSZXF1aXJlKG5vZGUpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJsb2NrID0gZ2V0UmVxdWlyZUJsb2NrKG5vZGUpO1xuICAgICAgICBpZiAoIWJsb2NrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5hbWUgPSBub2RlLmFyZ3VtZW50c1swXS52YWx1ZTtcbiAgICAgICAgcmVnaXN0ZXJOb2RlKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG5hbWUsXG4gICAgICAgICAgICB0eXBlOiAncmVxdWlyZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByYW5rcyxcbiAgICAgICAgICBnZXRCbG9ja0ltcG9ydHMoYmxvY2spLFxuICAgICAgICAgIHBhdGhHcm91cHNFeGNsdWRlZEltcG9ydFR5cGVzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgJ1Byb2dyYW06ZXhpdCc6IGZ1bmN0aW9uIHJlcG9ydEFuZFJlc2V0KCkge1xuICAgICAgICBpbXBvcnRNYXAuZm9yRWFjaCgoaW1wb3J0ZWQpID0+IHtcbiAgICAgICAgICBpZiAobmV3bGluZXNCZXR3ZWVuSW1wb3J0cyAhPT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgIG1ha2VOZXdsaW5lc0JldHdlZW5SZXBvcnQoY29udGV4dCwgaW1wb3J0ZWQsIG5ld2xpbmVzQmV0d2VlbkltcG9ydHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhbHBoYWJldGl6ZS5vcmRlciAhPT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgIG11dGF0ZVJhbmtzVG9BbHBoYWJldGl6ZShpbXBvcnRlZCwgYWxwaGFiZXRpemUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG1ha2VPdXRPZk9yZGVyUmVwb3J0KGNvbnRleHQsIGltcG9ydGVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaW1wb3J0TWFwLmNsZWFyKCk7XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59O1xuIl19
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/prefer-default-export.js b/node_modules/eslint-plugin-import/lib/rules/prefer-default-export.js
index cf53dc3..0a6bb5a 100644
--- a/node_modules/eslint-plugin-import/lib/rules/prefer-default-export.js
+++ b/node_modules/eslint-plugin-import/lib/rules/prefer-default-export.js
@@ -92,4 +92,4 @@
}return ProgramExit;}() };
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJzcGVjaWZpZXJFeHBvcnRDb3VudCIsImhhc0RlZmF1bHRFeHBvcnQiLCJoYXNTdGFyRXhwb3J0IiwiaGFzVHlwZUV4cG9ydCIsIm5hbWVkRXhwb3J0Tm9kZSIsImNhcHR1cmVEZWNsYXJhdGlvbiIsImlkZW50aWZpZXJPclBhdHRlcm4iLCJwcm9wZXJ0aWVzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwidmFsdWUiLCJlbGVtZW50cyIsIm5vZGUiLCJleHBvcnRlZCIsIm5hbWUiLCJkZWNsYXJhdGlvbiIsImRlY2xhcmF0aW9ucyIsImlkIiwicmVwb3J0Il0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsdUJBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLHVCQUFRLGdCQUFTQyxPQUFULEVBQWtCO0FBQ3hCLFVBQUlDLHVCQUF1QixDQUEzQjtBQUNBLFVBQUlDLG1CQUFtQixLQUF2QjtBQUNBLFVBQUlDLGdCQUFnQixLQUFwQjtBQUNBLFVBQUlDLGdCQUFnQixLQUFwQjtBQUNBLFVBQUlDLGtCQUFrQixJQUF0Qjs7QUFFQSxlQUFTQyxrQkFBVCxDQUE0QkMsbUJBQTVCLEVBQWlEO0FBQy9DLFlBQUlBLHVCQUF1QkEsb0JBQW9CWixJQUFwQixLQUE2QixlQUF4RCxFQUF5RTtBQUN2RTtBQUNBWSw4QkFBb0JDLFVBQXBCO0FBQ0dDLGlCQURILENBQ1csVUFBU0MsUUFBVCxFQUFtQjtBQUMxQkosK0JBQW1CSSxTQUFTQyxLQUE1QjtBQUNELFdBSEg7QUFJRCxTQU5ELE1BTU8sSUFBSUosdUJBQXVCQSxvQkFBb0JaLElBQXBCLEtBQTZCLGNBQXhELEVBQXdFO0FBQzdFWSw4QkFBb0JLLFFBQXBCO0FBQ0dILGlCQURILENBQ1dILGtCQURYO0FBRUQsU0FITSxNQUdDO0FBQ1I7QUFDRUw7QUFDRDtBQUNGOztBQUVELGFBQU87QUFDTCwrQ0FBMEIsa0NBQVc7QUFDbkNDLCtCQUFtQixJQUFuQjtBQUNELFdBRkQsaUNBREs7O0FBS0wsd0NBQW1CLHlCQUFTVyxJQUFULEVBQWU7QUFDaEMsZ0JBQUlBLEtBQUtDLFFBQUwsQ0FBY0MsSUFBZCxLQUF1QixTQUEzQixFQUFzQztBQUNwQ2IsaUNBQW1CLElBQW5CO0FBQ0QsYUFGRCxNQUVPO0FBQ0xEO0FBQ0FJLGdDQUFrQlEsSUFBbEI7QUFDRDtBQUNGLFdBUEQsMEJBTEs7O0FBY0wsK0NBQTBCLGdDQUFTQSxJQUFULEVBQWU7QUFDdkM7QUFDQSxnQkFBSSxDQUFDQSxLQUFLRyxXQUFWLEVBQXVCLE9BRmdCOztBQUkvQnJCLGdCQUorQixHQUl0QmtCLEtBQUtHLFdBSmlCLENBSS9CckIsSUFKK0I7O0FBTXZDO0FBQ0VBLHFCQUFTLHdCQUFUO0FBQ0FBLHFCQUFTLFdBRFQ7QUFFQUEscUJBQVMsd0JBRlQ7QUFHQUEscUJBQVMsc0JBSlg7QUFLRTtBQUNBTTtBQUNBRyw4QkFBZ0IsSUFBaEI7QUFDQTtBQUNEOztBQUVELGdCQUFJUyxLQUFLRyxXQUFMLENBQWlCQyxZQUFyQixFQUFtQztBQUNqQ0osbUJBQUtHLFdBQUwsQ0FBaUJDLFlBQWpCLENBQThCUixPQUE5QixDQUFzQyxVQUFTTyxXQUFULEVBQXNCO0FBQzFEVixtQ0FBbUJVLFlBQVlFLEVBQS9CO0FBQ0QsZUFGRDtBQUdELGFBSkQsTUFJTztBQUNMO0FBQ0FqQjtBQUNEOztBQUVESSw4QkFBa0JRLElBQWxCO0FBQ0QsV0EzQkQsaUNBZEs7O0FBMkNMLGlEQUE0QixvQ0FBVztBQUNyQ1gsK0JBQW1CLElBQW5CO0FBQ0QsV0FGRCxtQ0EzQ0s7O0FBK0NMLDZDQUF3QixnQ0FBVztBQUNqQ0MsNEJBQWdCLElBQWhCO0FBQ0QsV0FGRCwrQkEvQ0s7O0FBbURMLHFDQUFnQix1QkFBVztBQUN6QixnQkFBSUYseUJBQXlCLENBQXpCLElBQThCLENBQUNDLGdCQUEvQixJQUFtRCxDQUFDQyxhQUFwRCxJQUFxRSxDQUFDQyxhQUExRSxFQUF5RjtBQUN2Rkosc0JBQVFtQixNQUFSLENBQWVkLGVBQWYsRUFBZ0Msd0JBQWhDO0FBQ0Q7QUFDRixXQUpELHNCQW5ESyxFQUFQOztBQXlERCxLQWhGRCxpQkFUZSxFQUFqQiIsImZpbGUiOiJwcmVmZXItZGVmYXVsdC1leHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ3ByZWZlci1kZWZhdWx0LWV4cG9ydCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc3BlY2lmaWVyRXhwb3J0Q291bnQgPSAwO1xuICAgIGxldCBoYXNEZWZhdWx0RXhwb3J0ID0gZmFsc2U7XG4gICAgbGV0IGhhc1N0YXJFeHBvcnQgPSBmYWxzZTtcbiAgICBsZXQgaGFzVHlwZUV4cG9ydCA9IGZhbHNlO1xuICAgIGxldCBuYW1lZEV4cG9ydE5vZGUgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gY2FwdHVyZURlY2xhcmF0aW9uKGlkZW50aWZpZXJPclBhdHRlcm4pIHtcbiAgICAgIGlmIChpZGVudGlmaWVyT3JQYXR0ZXJuICYmIGlkZW50aWZpZXJPclBhdHRlcm4udHlwZSA9PT0gJ09iamVjdFBhdHRlcm4nKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGNhcHR1cmVcbiAgICAgICAgaWRlbnRpZmllck9yUGF0dGVybi5wcm9wZXJ0aWVzXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNhcHR1cmVEZWNsYXJhdGlvbihwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlkZW50aWZpZXJPclBhdHRlcm4gJiYgaWRlbnRpZmllck9yUGF0dGVybi50eXBlID09PSAnQXJyYXlQYXR0ZXJuJykge1xuICAgICAgICBpZGVudGlmaWVyT3JQYXR0ZXJuLmVsZW1lbnRzXG4gICAgICAgICAgLmZvckVhY2goY2FwdHVyZURlY2xhcmF0aW9uKTtcbiAgICAgIH0gZWxzZSAge1xuICAgICAgLy8gYXNzdW1lIGl0J3MgYSBzaW5nbGUgc3RhbmRhcmQgaWRlbnRpZmllclxuICAgICAgICBzcGVjaWZpZXJFeHBvcnRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcic6IGZ1bmN0aW9uKCkge1xuICAgICAgICBoYXNEZWZhdWx0RXhwb3J0ID0gdHJ1ZTtcbiAgICAgIH0sXG5cbiAgICAgICdFeHBvcnRTcGVjaWZpZXInOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmV4cG9ydGVkLm5hbWUgPT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIGhhc0RlZmF1bHRFeHBvcnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNwZWNpZmllckV4cG9ydENvdW50Kys7XG4gICAgICAgICAgbmFtZWRFeHBvcnROb2RlID0gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBzcGVjaWZpZXJzLCBub2RlLmRlY2xhcmF0aW9uIHNob3VsZCBiZSBudWxsXG4gICAgICAgIGlmICghbm9kZS5kZWNsYXJhdGlvbikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZS5kZWNsYXJhdGlvbjtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZSA9PT0gJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nIHx8XG4gICAgICAgICAgdHlwZSA9PT0gJ1R5cGVBbGlhcycgfHxcbiAgICAgICAgICB0eXBlID09PSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicgfHxcbiAgICAgICAgICB0eXBlID09PSAnSW50ZXJmYWNlRGVjbGFyYXRpb24nXG4gICAgICAgICkge1xuICAgICAgICAgIHNwZWNpZmllckV4cG9ydENvdW50Kys7XG4gICAgICAgICAgaGFzVHlwZUV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihkZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgY2FwdHVyZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLmlkKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjYXB0dXJlcyAnZXhwb3J0IGZ1bmN0aW9uIGZvbygpIHt9JyBzeW50YXhcbiAgICAgICAgICBzcGVjaWZpZXJFeHBvcnRDb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZWRFeHBvcnROb2RlID0gbm9kZTtcbiAgICAgIH0sXG5cbiAgICAgICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaGFzRGVmYXVsdEV4cG9ydCA9IHRydWU7XG4gICAgICB9LFxuXG4gICAgICAnRXhwb3J0QWxsRGVjbGFyYXRpb24nOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaGFzU3RhckV4cG9ydCA9IHRydWU7XG4gICAgICB9LFxuXG4gICAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXJFeHBvcnRDb3VudCA9PT0gMSAmJiAhaGFzRGVmYXVsdEV4cG9ydCAmJiAhaGFzU3RhckV4cG9ydCAmJiAhaGFzVHlwZUV4cG9ydCkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KG5hbWVkRXhwb3J0Tm9kZSwgJ1ByZWZlciBkZWZhdWx0IGV4cG9ydC4nKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuICB9LFxufTtcbiJdfQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy9wcmVmZXItZGVmYXVsdC1leHBvcnQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsIm1ldGEiLCJ0eXBlIiwiZG9jcyIsInVybCIsInNjaGVtYSIsImNyZWF0ZSIsImNvbnRleHQiLCJzcGVjaWZpZXJFeHBvcnRDb3VudCIsImhhc0RlZmF1bHRFeHBvcnQiLCJoYXNTdGFyRXhwb3J0IiwiaGFzVHlwZUV4cG9ydCIsIm5hbWVkRXhwb3J0Tm9kZSIsImNhcHR1cmVEZWNsYXJhdGlvbiIsImlkZW50aWZpZXJPclBhdHRlcm4iLCJwcm9wZXJ0aWVzIiwiZm9yRWFjaCIsInByb3BlcnR5IiwidmFsdWUiLCJlbGVtZW50cyIsIm5vZGUiLCJleHBvcnRlZCIsIm5hbWUiLCJkZWNsYXJhdGlvbiIsImRlY2xhcmF0aW9ucyIsImlkIiwicmVwb3J0Il0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxxQzs7QUFFQUEsT0FBT0MsT0FBUCxHQUFpQjtBQUNmQyxRQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsdUJBQVIsQ0FERCxFQUZGOztBQUtKQyxZQUFRLEVBTEosRUFEUzs7O0FBU2ZDLFFBVGUsK0JBU1JDLE9BVFEsRUFTQztBQUNkLFVBQUlDLHVCQUF1QixDQUEzQjtBQUNBLFVBQUlDLG1CQUFtQixLQUF2QjtBQUNBLFVBQUlDLGdCQUFnQixLQUFwQjtBQUNBLFVBQUlDLGdCQUFnQixLQUFwQjtBQUNBLFVBQUlDLGtCQUFrQixJQUF0Qjs7QUFFQSxlQUFTQyxrQkFBVCxDQUE0QkMsbUJBQTVCLEVBQWlEO0FBQy9DLFlBQUlBLHVCQUF1QkEsb0JBQW9CWixJQUFwQixLQUE2QixlQUF4RCxFQUF5RTtBQUN2RTtBQUNBWSw4QkFBb0JDLFVBQXBCO0FBQ0dDLGlCQURILENBQ1csVUFBVUMsUUFBVixFQUFvQjtBQUMzQkosK0JBQW1CSSxTQUFTQyxLQUE1QjtBQUNELFdBSEg7QUFJRCxTQU5ELE1BTU8sSUFBSUosdUJBQXVCQSxvQkFBb0JaLElBQXBCLEtBQTZCLGNBQXhELEVBQXdFO0FBQzdFWSw4QkFBb0JLLFFBQXBCO0FBQ0dILGlCQURILENBQ1dILGtCQURYO0FBRUQsU0FITSxNQUdDO0FBQ1I7QUFDRUw7QUFDRDtBQUNGOztBQUVELGFBQU87QUFDTCwrQ0FBMEIsa0NBQVk7QUFDcENDLCtCQUFtQixJQUFuQjtBQUNELFdBRkQsaUNBREs7O0FBS0wsd0NBQW1CLHlCQUFVVyxJQUFWLEVBQWdCO0FBQ2pDLGdCQUFJQSxLQUFLQyxRQUFMLENBQWNDLElBQWQsS0FBdUIsU0FBM0IsRUFBc0M7QUFDcENiLGlDQUFtQixJQUFuQjtBQUNELGFBRkQsTUFFTztBQUNMRDtBQUNBSSxnQ0FBa0JRLElBQWxCO0FBQ0Q7QUFDRixXQVBELDBCQUxLOztBQWNMLCtDQUEwQixnQ0FBVUEsSUFBVixFQUFnQjtBQUN4QztBQUNBLGdCQUFJLENBQUNBLEtBQUtHLFdBQVYsRUFBdUIsT0FGaUI7O0FBSWhDckIsZ0JBSmdDLEdBSXZCa0IsS0FBS0csV0FKa0IsQ0FJaENyQixJQUpnQzs7QUFNeEM7QUFDRUEscUJBQVMsd0JBQVQ7QUFDQUEscUJBQVMsV0FEVDtBQUVBQSxxQkFBUyx3QkFGVDtBQUdBQSxxQkFBUyxzQkFKWDtBQUtFO0FBQ0FNO0FBQ0FHLDhCQUFnQixJQUFoQjtBQUNBO0FBQ0Q7O0FBRUQsZ0JBQUlTLEtBQUtHLFdBQUwsQ0FBaUJDLFlBQXJCLEVBQW1DO0FBQ2pDSixtQkFBS0csV0FBTCxDQUFpQkMsWUFBakIsQ0FBOEJSLE9BQTlCLENBQXNDLFVBQVVPLFdBQVYsRUFBdUI7QUFDM0RWLG1DQUFtQlUsWUFBWUUsRUFBL0I7QUFDRCxlQUZEO0FBR0QsYUFKRCxNQUlPO0FBQ0w7QUFDQWpCO0FBQ0Q7O0FBRURJLDhCQUFrQlEsSUFBbEI7QUFDRCxXQTNCRCxpQ0FkSzs7QUEyQ0wsaURBQTRCLG9DQUFZO0FBQ3RDWCwrQkFBbUIsSUFBbkI7QUFDRCxXQUZELG1DQTNDSzs7QUErQ0wsNkNBQXdCLGdDQUFZO0FBQ2xDQyw0QkFBZ0IsSUFBaEI7QUFDRCxXQUZELCtCQS9DSzs7QUFtREwscUNBQWdCLHVCQUFZO0FBQzFCLGdCQUFJRix5QkFBeUIsQ0FBekIsSUFBOEIsQ0FBQ0MsZ0JBQS9CLElBQW1ELENBQUNDLGFBQXBELElBQXFFLENBQUNDLGFBQTFFLEVBQXlGO0FBQ3ZGSixzQkFBUW1CLE1BQVIsQ0FBZWQsZUFBZixFQUFnQyx3QkFBaEM7QUFDRDtBQUNGLFdBSkQsc0JBbkRLLEVBQVA7O0FBeURELEtBekZjLG1CQUFqQiIsImZpbGUiOiJwcmVmZXItZGVmYXVsdC1leHBvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWV0YToge1xuICAgIHR5cGU6ICdzdWdnZXN0aW9uJyxcbiAgICBkb2NzOiB7XG4gICAgICB1cmw6IGRvY3NVcmwoJ3ByZWZlci1kZWZhdWx0LWV4cG9ydCcpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGxldCBzcGVjaWZpZXJFeHBvcnRDb3VudCA9IDA7XG4gICAgbGV0IGhhc0RlZmF1bHRFeHBvcnQgPSBmYWxzZTtcbiAgICBsZXQgaGFzU3RhckV4cG9ydCA9IGZhbHNlO1xuICAgIGxldCBoYXNUeXBlRXhwb3J0ID0gZmFsc2U7XG4gICAgbGV0IG5hbWVkRXhwb3J0Tm9kZSA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBjYXB0dXJlRGVjbGFyYXRpb24oaWRlbnRpZmllck9yUGF0dGVybikge1xuICAgICAgaWYgKGlkZW50aWZpZXJPclBhdHRlcm4gJiYgaWRlbnRpZmllck9yUGF0dGVybi50eXBlID09PSAnT2JqZWN0UGF0dGVybicpIHtcbiAgICAgICAgLy8gcmVjdXJzaXZlbHkgY2FwdHVyZVxuICAgICAgICBpZGVudGlmaWVyT3JQYXR0ZXJuLnByb3BlcnRpZXNcbiAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNhcHR1cmVEZWNsYXJhdGlvbihwcm9wZXJ0eS52YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKGlkZW50aWZpZXJPclBhdHRlcm4gJiYgaWRlbnRpZmllck9yUGF0dGVybi50eXBlID09PSAnQXJyYXlQYXR0ZXJuJykge1xuICAgICAgICBpZGVudGlmaWVyT3JQYXR0ZXJuLmVsZW1lbnRzXG4gICAgICAgICAgLmZvckVhY2goY2FwdHVyZURlY2xhcmF0aW9uKTtcbiAgICAgIH0gZWxzZSAge1xuICAgICAgLy8gYXNzdW1lIGl0J3MgYSBzaW5nbGUgc3RhbmRhcmQgaWRlbnRpZmllclxuICAgICAgICBzcGVjaWZpZXJFeHBvcnRDb3VudCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnRXhwb3J0RGVmYXVsdFNwZWNpZmllcic6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFzRGVmYXVsdEV4cG9ydCA9IHRydWU7XG4gICAgICB9LFxuXG4gICAgICAnRXhwb3J0U3BlY2lmaWVyJzogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuZXhwb3J0ZWQubmFtZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgaGFzRGVmYXVsdEV4cG9ydCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3BlY2lmaWVyRXhwb3J0Q291bnQrKztcbiAgICAgICAgICBuYW1lZEV4cG9ydE5vZGUgPSBub2RlO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBzcGVjaWZpZXJzLCBub2RlLmRlY2xhcmF0aW9uIHNob3VsZCBiZSBudWxsXG4gICAgICAgIGlmICghbm9kZS5kZWNsYXJhdGlvbikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gbm9kZS5kZWNsYXJhdGlvbjtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZSA9PT0gJ1RTVHlwZUFsaWFzRGVjbGFyYXRpb24nIHx8XG4gICAgICAgICAgdHlwZSA9PT0gJ1R5cGVBbGlhcycgfHxcbiAgICAgICAgICB0eXBlID09PSAnVFNJbnRlcmZhY2VEZWNsYXJhdGlvbicgfHxcbiAgICAgICAgICB0eXBlID09PSAnSW50ZXJmYWNlRGVjbGFyYXRpb24nXG4gICAgICAgICkge1xuICAgICAgICAgIHNwZWNpZmllckV4cG9ydENvdW50Kys7XG4gICAgICAgICAgaGFzVHlwZUV4cG9ydCA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoZGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgIGNhcHR1cmVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbi5pZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY2FwdHVyZXMgJ2V4cG9ydCBmdW5jdGlvbiBmb28oKSB7fScgc3ludGF4XG4gICAgICAgICAgc3BlY2lmaWVyRXhwb3J0Q291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIG5hbWVkRXhwb3J0Tm9kZSA9IG5vZGU7XG4gICAgICB9LFxuXG4gICAgICAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJzogZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNEZWZhdWx0RXhwb3J0ID0gdHJ1ZTtcbiAgICAgIH0sXG5cbiAgICAgICdFeHBvcnRBbGxEZWNsYXJhdGlvbic6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFzU3RhckV4cG9ydCA9IHRydWU7XG4gICAgICB9LFxuXG4gICAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc3BlY2lmaWVyRXhwb3J0Q291bnQgPT09IDEgJiYgIWhhc0RlZmF1bHRFeHBvcnQgJiYgIWhhc1N0YXJFeHBvcnQgJiYgIWhhc1R5cGVFeHBvcnQpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydChuYW1lZEV4cG9ydE5vZGUsICdQcmVmZXIgZGVmYXVsdCBleHBvcnQuJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/lib/rules/unambiguous.js b/node_modules/eslint-plugin-import/lib/rules/unambiguous.js
index b418731..87370d0 100644
--- a/node_modules/eslint-plugin-import/lib/rules/unambiguous.js
+++ b/node_modules/eslint-plugin-import/lib/rules/unambiguous.js
@@ -33,4 +33,4 @@
}return create;}() };
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy91bmFtYmlndW91cy5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsInBhcnNlck9wdGlvbnMiLCJzb3VyY2VUeXBlIiwiUHJvZ3JhbSIsImFzdCIsInJlcG9ydCIsIm5vZGUiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtBO0FBQ0EscUMsaUpBTkE7Ozt5TEFRQUEsT0FBT0MsT0FBUCxHQUFpQixFQUNmQyxNQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsYUFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsRUFMSixFQURTOzs7QUFTZkMsdUJBQVEsZ0JBQVVDLE9BQVYsRUFBbUI7QUFDekI7QUFDQSxVQUFJQSxRQUFRQyxhQUFSLENBQXNCQyxVQUF0QixLQUFxQyxRQUF6QyxFQUFtRDtBQUNqRCxlQUFPLEVBQVA7QUFDRDs7QUFFRCxhQUFPO0FBQ0xDLDhCQUFTLGlCQUFVQyxHQUFWLEVBQWU7QUFDdEIsZ0JBQUksQ0FBQywyQkFBU0EsR0FBVCxDQUFMLEVBQW9CO0FBQ2xCSixzQkFBUUssTUFBUixDQUFlO0FBQ2JDLHNCQUFNRixHQURPO0FBRWJHLHlCQUFTLGdEQUZJLEVBQWY7O0FBSUQ7QUFDRixXQVBELGtCQURLLEVBQVA7OztBQVdELEtBakJELGlCQVRlLEVBQWpCIiwiZmlsZSI6InVuYW1iaWd1b3VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IFJlcG9ydCBtb2R1bGVzIHRoYXQgY291bGQgcGFyc2UgaW5jb3JyZWN0bHkgYXMgc2NyaXB0cy5cbiAqIEBhdXRob3IgQmVuIE1vc2hlclxuICovXG5cbmltcG9ydCB7IGlzTW9kdWxlIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy91bmFtYmlndW91cyc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCd1bmFtYmlndW91cycpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGU6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgLy8gaWdub3JlIG5vbi1tb2R1bGVzXG4gICAgaWYgKGNvbnRleHQucGFyc2VyT3B0aW9ucy5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtOiBmdW5jdGlvbiAoYXN0KSB7XG4gICAgICAgIGlmICghaXNNb2R1bGUoYXN0KSkge1xuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIG5vZGU6IGFzdCxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGlzIG1vZHVsZSBjb3VsZCBiZSBwYXJzZWQgYXMgYSB2YWxpZCBzY3JpcHQuJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9O1xuXG4gIH0sXG59O1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydWxlcy91bmFtYmlndW91cy5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsInR5cGUiLCJkb2NzIiwidXJsIiwic2NoZW1hIiwiY3JlYXRlIiwiY29udGV4dCIsInBhcnNlck9wdGlvbnMiLCJzb3VyY2VUeXBlIiwiUHJvZ3JhbSIsImFzdCIsInJlcG9ydCIsIm5vZGUiLCJtZXNzYWdlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUtBO0FBQ0EscUMsaUpBTkE7Ozt5TEFRQUEsT0FBT0MsT0FBUCxHQUFpQixFQUNmQyxNQUFNO0FBQ0pDLFVBQU0sWUFERjtBQUVKQyxVQUFNO0FBQ0pDLFdBQUssMEJBQVEsYUFBUixDQURELEVBRkY7O0FBS0pDLFlBQVEsRUFMSixFQURTOzs7QUFTZkMsUUFUZSwrQkFTUkMsT0FUUSxFQVNDO0FBQ2Q7QUFDQSxVQUFJQSxRQUFRQyxhQUFSLENBQXNCQyxVQUF0QixLQUFxQyxRQUF6QyxFQUFtRDtBQUNqRCxlQUFPLEVBQVA7QUFDRDs7QUFFRCxhQUFPO0FBQ0xDLGVBREssZ0NBQ0dDLEdBREgsRUFDUTtBQUNYLGdCQUFJLENBQUMsMkJBQVNBLEdBQVQsQ0FBTCxFQUFvQjtBQUNsQkosc0JBQVFLLE1BQVIsQ0FBZTtBQUNiQyxzQkFBTUYsR0FETztBQUViRyx5QkFBUyxnREFGSSxFQUFmOztBQUlEO0FBQ0YsV0FSSSxvQkFBUDs7O0FBV0QsS0ExQmMsbUJBQWpCIiwiZmlsZSI6InVuYW1iaWd1b3VzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZU92ZXJ2aWV3IFJlcG9ydCBtb2R1bGVzIHRoYXQgY291bGQgcGFyc2UgaW5jb3JyZWN0bHkgYXMgc2NyaXB0cy5cbiAqIEBhdXRob3IgQmVuIE1vc2hlclxuICovXG5cbmltcG9ydCB7IGlzTW9kdWxlIH0gZnJvbSAnZXNsaW50LW1vZHVsZS11dGlscy91bmFtYmlndW91cyc7XG5pbXBvcnQgZG9jc1VybCBmcm9tICcuLi9kb2NzVXJsJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ldGE6IHtcbiAgICB0eXBlOiAnc3VnZ2VzdGlvbicsXG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCd1bmFtYmlndW91cycpLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgfSxcblxuICBjcmVhdGUoY29udGV4dCkge1xuICAgIC8vIGlnbm9yZSBub24tbW9kdWxlc1xuICAgIGlmIChjb250ZXh0LnBhcnNlck9wdGlvbnMuc291cmNlVHlwZSAhPT0gJ21vZHVsZScpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgUHJvZ3JhbShhc3QpIHtcbiAgICAgICAgaWYgKCFpc01vZHVsZShhc3QpKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgICAgbm9kZTogYXN0LFxuICAgICAgICAgICAgbWVzc2FnZTogJ1RoaXMgbW9kdWxlIGNvdWxkIGJlIHBhcnNlZCBhcyBhIHZhbGlkIHNjcmlwdC4nLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG5cbiAgfSxcbn07XG4iXX0=
\ No newline at end of file
diff --git a/node_modules/eslint-plugin-import/node_modules/path-type/index.js b/node_modules/eslint-plugin-import/node_modules/path-type/index.js
deleted file mode 100644
index 6e0a1b7..0000000
--- a/node_modules/eslint-plugin-import/node_modules/path-type/index.js
+++ /dev/null
@@ -1,42 +0,0 @@
-'use strict';
-const fs = require('fs');
-const pify = require('pify');
-
-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');
diff --git a/node_modules/eslint-plugin-import/node_modules/path-type/license b/node_modules/eslint-plugin-import/node_modules/path-type/license
deleted file mode 100644
index e7af2f7..0000000
--- a/node_modules/eslint-plugin-import/node_modules/path-type/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/eslint-plugin-import/node_modules/path-type/package.json b/node_modules/eslint-plugin-import/node_modules/path-type/package.json
deleted file mode 100644
index 09f5640..0000000
--- a/node_modules/eslint-plugin-import/node_modules/path-type/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "path-type",
- "version": "3.0.0",
- "description": "Check if a path is a file, directory, or symlink",
- "license": "MIT",
- "repository": "sindresorhus/path-type",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "path",
- "fs",
- "type",
- "is",
- "check",
- "directory",
- "dir",
- "file",
- "filepath",
- "symlink",
- "symbolic",
- "link",
- "stat",
- "stats",
- "filesystem"
- ],
- "dependencies": {
- "pify": "^3.0.0"
- },
- "devDependencies": {
- "ava": "*",
- "xo": "*"
- }
-}
diff --git a/node_modules/eslint-plugin-import/node_modules/path-type/readme.md b/node_modules/eslint-plugin-import/node_modules/path-type/readme.md
deleted file mode 100644
index ed2af8b..0000000
--- a/node_modules/eslint-plugin-import/node_modules/path-type/readme.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# path-type [](https://travis-ci.org/sindresorhus/path-type)
-
-> Check if a path is a file, directory, or symlink
-
-
-## Install
-
-```
-$ npm install path-type
-```
-
-
-## Usage
-
-```js
-const pathType = require('path-type');
-
-pathType.file('package.json').then(isFile => {
- console.log(isFile);
- //=> true
-})
-```
-
-
-## API
-
-### .file(path)
-### .dir(path)
-### .symlink(path)
-
-Returns a `Promise` for a `boolean` of whether the path is the checked type.
-
-### .fileSync(path)
-### .dirSync(path)
-### .symlinkSync(path)
-
-Returns a `boolean` of whether the path is the checked type.
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/index.js b/node_modules/eslint-plugin-import/node_modules/read-pkg-up/index.js
deleted file mode 100644
index 2607976..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/index.js
+++ /dev/null
@@ -1,26 +0,0 @@
-'use strict';
-const findUp = require('find-up');
-const readPkg = require('read-pkg');
-
-module.exports = opts => {
- return findUp('package.json', opts).then(fp => {
- if (!fp) {
- return {};
- }
-
- return readPkg(fp, opts).then(pkg => ({pkg, path: fp}));
- });
-};
-
-module.exports.sync = opts => {
- const fp = findUp.sync('package.json', opts);
-
- if (!fp) {
- return {};
- }
-
- return {
- pkg: readPkg.sync(fp, opts),
- path: fp
- };
-};
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/license b/node_modules/eslint-plugin-import/node_modules/read-pkg-up/license
deleted file mode 100644
index e7af2f7..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/package.json b/node_modules/eslint-plugin-import/node_modules/read-pkg-up/package.json
deleted file mode 100644
index 5126ad0..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "name": "read-pkg-up",
- "version": "3.0.0",
- "description": "Read the closest package.json file",
- "license": "MIT",
- "repository": "sindresorhus/read-pkg-up",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "json",
- "read",
- "parse",
- "file",
- "fs",
- "graceful",
- "load",
- "pkg",
- "package",
- "find",
- "up",
- "find-up",
- "findup",
- "look-up",
- "look",
- "search",
- "match",
- "resolve",
- "parent",
- "parents",
- "folder",
- "directory",
- "dir",
- "walk",
- "walking",
- "path"
- ],
- "dependencies": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- },
- "devDependencies": {
- "ava": "*",
- "xo": "*"
- }
-}
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/readme.md b/node_modules/eslint-plugin-import/node_modules/read-pkg-up/readme.md
deleted file mode 100644
index ecf7393..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg-up/readme.md
+++ /dev/null
@@ -1,80 +0,0 @@
-# read-pkg-up [](https://travis-ci.org/sindresorhus/read-pkg-up)
-
-> Read the closest package.json file
-
-
-## Why
-
-- [Finds the closest package.json](https://github.com/sindresorhus/find-up)
-- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs)
-- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom)
-- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json)
-- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails)
-
-
-## Install
-
-```
-$ npm install read-pkg-up
-```
-
-
-## Usage
-
-```js
-const readPkgUp = require('read-pkg-up');
-
-readPkgUp().then(result => {
- console.log(result);
- /*
- {
- pkg: {
- name: 'awesome-package',
- version: '1.0.0',
- …
- },
- path: '/Users/sindresorhus/dev/awesome-package/package.json'
- }
- */
-});
-```
-
-
-## API
-
-### readPkgUp([options])
-
-Returns a `Promise` for the result object.
-
-### readPkgUp.sync([options])
-
-Returns the result object.
-
-#### options
-
-##### cwd
-
-Type: `string`<br>
-Default: `process.cwd()`
-
-Directory to start looking for a package.json file.
-
-##### normalize
-
-Type: `boolean`<br>
-Default: `true`
-
-[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data.
-
-
-## Related
-
-- [read-pkg](https://github.com/sindresorhus/read-pkg) - Read a package.json file
-- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file
-- [find-up](https://github.com/sindresorhus/find-up) - Find a file by walking up parent directories
-- [pkg-conf](https://github.com/sindresorhus/pkg-conf) - Get namespaced config from the closest package.json
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg/index.js b/node_modules/eslint-plugin-import/node_modules/read-pkg/index.js
deleted file mode 100644
index dff948b..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg/index.js
+++ /dev/null
@@ -1,47 +0,0 @@
-'use strict';
-const path = require('path');
-const loadJsonFile = require('load-json-file');
-const pathType = require('path-type');
-
-module.exports = (fp, opts) => {
- if (typeof fp !== 'string') {
- opts = fp;
- fp = '.';
- }
-
- opts = opts || {};
-
- return pathType.dir(fp)
- .then(isDir => {
- if (isDir) {
- fp = path.join(fp, 'package.json');
- }
-
- return loadJsonFile(fp);
- })
- .then(x => {
- if (opts.normalize !== false) {
- require('normalize-package-data')(x);
- }
-
- return x;
- });
-};
-
-module.exports.sync = (fp, opts) => {
- if (typeof fp !== 'string') {
- opts = fp;
- fp = '.';
- }
-
- opts = opts || {};
- fp = pathType.dirSync(fp) ? path.join(fp, 'package.json') : fp;
-
- const x = loadJsonFile.sync(fp);
-
- if (opts.normalize !== false) {
- require('normalize-package-data')(x);
- }
-
- return x;
-};
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg/license b/node_modules/eslint-plugin-import/node_modules/read-pkg/license
deleted file mode 100644
index e7af2f7..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg/package.json b/node_modules/eslint-plugin-import/node_modules/read-pkg/package.json
deleted file mode 100644
index 1a40fe0..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg/package.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "name": "read-pkg",
- "version": "3.0.0",
- "description": "Read a package.json file",
- "license": "MIT",
- "repository": "sindresorhus/read-pkg",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "json",
- "read",
- "parse",
- "file",
- "fs",
- "graceful",
- "load",
- "pkg",
- "package",
- "normalize"
- ],
- "dependencies": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- },
- "devDependencies": {
- "ava": "*",
- "xo": "*"
- }
-}
diff --git a/node_modules/eslint-plugin-import/node_modules/read-pkg/readme.md b/node_modules/eslint-plugin-import/node_modules/read-pkg/readme.md
deleted file mode 100644
index 6875067..0000000
--- a/node_modules/eslint-plugin-import/node_modules/read-pkg/readme.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# read-pkg [](https://travis-ci.org/sindresorhus/read-pkg)
-
-> Read a package.json file
-
-
-## Why
-
-- [Gracefully handles filesystem issues](https://github.com/isaacs/node-graceful-fs)
-- [Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom)
-- [Throws more helpful JSON errors](https://github.com/sindresorhus/parse-json)
-- [Normalizes the data](https://github.com/npm/normalize-package-data#what-normalization-currently-entails)
-
-
-## Install
-
-```
-$ npm install read-pkg
-```
-
-
-## Usage
-
-```js
-const readPkg = require('read-pkg');
-
-readPkg().then(pkg => {
- console.log(pkg);
- //=> {name: 'read-pkg', ...}
-});
-
-readPkg(__dirname).then(pkg => {
- console.log(pkg);
- //=> {name: 'read-pkg', ...}
-});
-
-readPkg(path.join('unicorn', 'package.json')).then(pkg => {
- console.log(pkg);
- //=> {name: 'read-pkg', ...}
-});
-```
-
-
-## API
-
-### readPkg([path], [options])
-
-Returns a `Promise` for the parsed JSON.
-
-### readPkg.sync([path], [options])
-
-Returns the parsed JSON.
-
-#### path
-
-Type: `string`<br>
-Default: `process.cwd()`
-
-Path to a `package.json` file or its directory.
-
-#### options
-
-##### normalize
-
-Type: `boolean`<br>
-Default: `true`
-
-[Normalize](https://github.com/npm/normalize-package-data#what-normalization-currently-entails) the package data.
-
-
-## Related
-
-- [read-pkg-up](https://github.com/sindresorhus/read-pkg-up) - Read the closest package.json file
-- [write-pkg](https://github.com/sindresorhus/write-pkg) - Write a `package.json` file
-- [load-json-file](https://github.com/sindresorhus/load-json-file) - Read and parse a JSON file
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/eslint-plugin-import/package.json b/node_modules/eslint-plugin-import/package.json
index dd7cbcb..aebbc30 100644
--- a/node_modules/eslint-plugin-import/package.json
+++ b/node_modules/eslint-plugin-import/package.json
@@ -1,6 +1,6 @@
{
"name": "eslint-plugin-import",
- "version": "2.24.2",
+ "version": "2.25.2",
"description": "Import with sanity.",
"engines": {
"node": ">=4"
@@ -25,14 +25,13 @@
"watch": "npm run tests-only -- -- --watch",
"pretest": "linklocal",
"posttest": "eslint .",
- "mocha": "cross-env BABEL_ENV=test nyc -s mocha",
+ "mocha": "cross-env BABEL_ENV=test nyc mocha",
"tests-only": "npm run mocha tests/src",
"test": "npm run tests-only",
"test-compiled": "npm run prepublish && BABEL_ENV=testCompiled mocha --compilers js:babel-register tests/src",
"test-all": "node --require babel-register ./scripts/testAll",
"prepublishOnly": "safe-publish-latest && npm run build",
- "prepublish": "not-in-publish || npm run prepublishOnly",
- "coveralls": "nyc report --reporter lcovonly && coveralls < ./coverage/lcov.info"
+ "prepublish": "not-in-publish || npm run prepublishOnly"
},
"repository": {
"type": "git",
@@ -57,21 +56,20 @@
"@eslint/import-test-order-redirect-scoped": "file:./tests/files/order-redirect-scoped",
"@test-scope/some-module": "file:./tests/files/symlinked-module",
"@typescript-eslint/parser": "^2.23.0 || ^3.3.0 || ^4.29.3",
- "array.prototype.flatmap": "^1.2.4",
+ "array.prototype.flatmap": "^1.2.5",
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-eslint": "=8.0.3 || ^8.2.6",
"babel-plugin-istanbul": "^4.1.6",
"babel-plugin-module-resolver": "^2.7.1",
"babel-preset-airbnb": "^2.6.0",
- "babel-preset-es2015-argon": "latest",
"babel-preset-flow": "^6.23.0",
"babel-register": "^6.26.0",
"babylon": "^6.18.0",
"chai": "^4.3.4",
- "coveralls": "^3.1.1",
"cross-env": "^4.0.0",
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0",
+ "escope": "^3.6.0",
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8",
"eslint-import-resolver-node": "file:./resolvers/node",
"eslint-import-resolver-typescript": "^1.0.2 || ^1.1.1",
"eslint-import-resolver-webpack": "file:./resolvers/webpack",
@@ -81,7 +79,7 @@
"eslint-plugin-import": "2.x",
"eslint-plugin-json": "^2.1.2",
"fs-copy-file-sync": "^1.1.1",
- "glob": "^7.1.7",
+ "glob": "^7.2.0",
"in-publish": "^2.0.1",
"linklocal": "^2.8.2",
"lodash.isarray": "^4.0.0",
@@ -97,22 +95,20 @@
"typescript-eslint-parser": "^15 || ^22.0.0"
},
"peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0"
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
},
"dependencies": {
- "array-includes": "^3.1.3",
- "array.prototype.flat": "^1.2.4",
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
"debug": "^2.6.9",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.6.2",
- "find-up": "^2.0.0",
+ "eslint-module-utils": "^2.7.0",
"has": "^1.0.3",
- "is-core-module": "^2.6.0",
+ "is-core-module": "^2.7.0",
+ "is-glob": "^4.0.3",
"minimatch": "^3.0.4",
- "object.values": "^1.1.4",
- "pkg-up": "^2.0.0",
- "read-pkg-up": "^3.0.0",
+ "object.values": "^1.1.5",
"resolve": "^1.20.0",
"tsconfig-paths": "^3.11.0"
}
diff --git a/node_modules/get-symbol-description/.eslintignore b/node_modules/get-symbol-description/.eslintignore
new file mode 100644
index 0000000..404abb2
--- /dev/null
+++ b/node_modules/get-symbol-description/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/node_modules/get-symbol-description/.eslintrc b/node_modules/get-symbol-description/.eslintrc
new file mode 100644
index 0000000..e824dab
--- /dev/null
+++ b/node_modules/get-symbol-description/.eslintrc
@@ -0,0 +1,14 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "id-length": 0,
+ "new-cap": [2, {
+ "capIsNewExceptions": [
+ "GetIntrinsic",
+ ],
+ }],
+ },
+}
diff --git a/node_modules/get-symbol-description/.github/FUNDING.yml b/node_modules/get-symbol-description/.github/FUNDING.yml
new file mode 100644
index 0000000..499729c
--- /dev/null
+++ b/node_modules/get-symbol-description/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/symbol-description
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/get-symbol-description/.nycrc b/node_modules/get-symbol-description/.nycrc
new file mode 100644
index 0000000..bdd626c
--- /dev/null
+++ b/node_modules/get-symbol-description/.nycrc
@@ -0,0 +1,9 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/get-symbol-description/CHANGELOG.md b/node_modules/get-symbol-description/CHANGELOG.md
new file mode 100644
index 0000000..1e1c079
--- /dev/null
+++ b/node_modules/get-symbol-description/CHANGELOG.md
@@ -0,0 +1,16 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## v1.0.0 - 2021-08-17
+
+### Commits
+
+- Initial commit: pulled from es-abstract [`6e34a05`](https://github.com/inspect-js/get-symbol-description/commit/6e34a05ef10ce8620078cf4cecbe276c1fc1ae77)
+- Initial commit [`3862092`](https://github.com/inspect-js/get-symbol-description/commit/3862092248d8ffa071ec90ec39d73e8be14ba6f1)
+- [meta] do not publish github action workflow files [`9d1e2b9`](https://github.com/inspect-js/get-symbol-description/commit/9d1e2b94dd97664da5d0666985a3695c23f45865)
+- npm init [`5051b32`](https://github.com/inspect-js/get-symbol-description/commit/5051b3221829f364c44b4d5e9a0c35aab3247f6a)
+- Only apps should have lockfiles [`b866d1c`](https://github.com/inspect-js/get-symbol-description/commit/b866d1c4b4029277618d968cfb3cbe00f012d1a7)
diff --git a/node_modules/load-json-file/license b/node_modules/get-symbol-description/LICENSE
similarity index 83%
copy from node_modules/load-json-file/license
copy to node_modules/get-symbol-description/LICENSE
index 654d0bf..7948bc0 100644
--- a/node_modules/load-json-file/license
+++ b/node_modules/get-symbol-description/LICENSE
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
+Copyright (c) 2021 Inspect JS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -9,13 +9,13 @@
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 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.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/get-symbol-description/README.md b/node_modules/get-symbol-description/README.md
new file mode 100644
index 0000000..c44e72a
--- /dev/null
+++ b/node_modules/get-symbol-description/README.md
@@ -0,0 +1,43 @@
+# get-symbol-description <sup>[![Version Badge][2]][1]</sup>
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+Gets the description of a Symbol. Handles `Symbol()` vs `Symbol('')` properly when possible.
+
+## Example
+
+```js
+var getSymbolDescription = require('get-symbol-description');
+var assert = require('assert');
+
+assert(getSymbolDescription(Symbol()) === undefined);
+assert(getSymbolDescription(Symbol('')) === ''); // or `undefined`, if in an engine that lacks name inference from concise method
+assert(getSymbolDescription(Symbol('foo')) === 'foo');
+assert(getSymbolDescription(Symbol.iterator) === 'Symbol.iterator');
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/get-symbol-description
+[2]: https://versionbadg.es/inspect-js/get-symbol-description.svg
+[5]: https://david-dm.org/inspect-js/get-symbol-description.svg
+[6]: https://david-dm.org/inspect-js/get-symbol-description
+[7]: https://david-dm.org/inspect-js/get-symbol-description/dev-status.svg
+[8]: https://david-dm.org/inspect-js/get-symbol-description#info=devDependencies
+[11]: https://nodei.co/npm/get-symbol-description.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/get-symbol-description.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/get-symbol-description.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=get-symbol-description
+[codecov-image]: https://codecov.io/gh/inspect-js/get-symbol-description/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/inspect-js/get-symbol-description/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/get-symbol-description
+[actions-url]: https://github.com/inspect-js/get-symbol-description/actions
diff --git a/node_modules/get-symbol-description/getInferredName.js b/node_modules/get-symbol-description/getInferredName.js
new file mode 100644
index 0000000..2dab6e7
--- /dev/null
+++ b/node_modules/get-symbol-description/getInferredName.js
@@ -0,0 +1,10 @@
+'use strict';
+
+var getInferredName;
+try {
+ // eslint-disable-next-line no-new-func
+ getInferredName = Function('s', 'return { [s]() {} }[s].name;');
+} catch (e) {}
+
+var inferred = function () {};
+module.exports = getInferredName && inferred.name === 'inferred' ? getInferredName : null;
diff --git a/node_modules/get-symbol-description/index.js b/node_modules/get-symbol-description/index.js
new file mode 100644
index 0000000..05d067f
--- /dev/null
+++ b/node_modules/get-symbol-description/index.js
@@ -0,0 +1,43 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+
+var callBound = require('call-bind/callBound');
+
+var $SyntaxError = GetIntrinsic('%SyntaxError%');
+var getGlobalSymbolDescription = GetIntrinsic('%Symbol.keyFor%', true);
+var thisSymbolValue = callBound('%Symbol.prototype.valueOf%', true);
+var symToStr = callBound('Symbol.prototype.toString', true);
+
+var getInferredName = require('./getInferredName');
+
+/* eslint-disable consistent-return */
+module.exports = callBound('%Symbol.prototype.description%', true) || function getSymbolDescription(symbol) {
+ if (!thisSymbolValue) {
+ throw new $SyntaxError('Symbols are not supported in this environment');
+ }
+
+ // will throw if not a symbol primitive or wrapper object
+ var sym = thisSymbolValue(symbol);
+
+ if (getInferredName) {
+ var name = getInferredName(sym);
+ if (name === '') {
+ return;
+ }
+ return name.slice(1, -1); // name.slice('['.length, -']'.length);
+ }
+
+ var desc;
+ if (getGlobalSymbolDescription) {
+ desc = getGlobalSymbolDescription(sym);
+ if (typeof desc === 'string') {
+ return desc;
+ }
+ }
+
+ desc = symToStr(sym).slice(7, -1); // str.slice('Symbol('.length, -')'.length);
+ if (desc) {
+ return desc;
+ }
+};
diff --git a/node_modules/get-symbol-description/package.json b/node_modules/get-symbol-description/package.json
new file mode 100644
index 0000000..2767c42
--- /dev/null
+++ b/node_modules/get-symbol-description/package.json
@@ -0,0 +1,71 @@
+{
+ "name": "get-symbol-description",
+ "version": "1.0.0",
+ "description": "Gets the description of a Symbol. Handles `Symbol()` vs `Symbol('')` properly when possible.",
+ "main": "index.js",
+ "exports": {
+ ".": "./index.js",
+ "./getInferredName": "./getInferredName.js",
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "prepublishOnly": "safe-publish-latest",
+ "lint": "eslint --ext=.js,.mjs .",
+ "postlint": "evalmd README.md",
+ "pretest": "npm run lint",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/inspect-js/get-symbol-description.git"
+ },
+ "keywords": [
+ "symbol",
+ "ecmascript",
+ "javascript",
+ "description"
+ ],
+ "author": "Jordan Harband <[email protected]>",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/inspect-js/get-symbol-description/issues"
+ },
+ "homepage": "https://github.com/inspect-js/get-symbol-description#readme",
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.6.0",
+ "aud": "^1.1.5",
+ "auto-changelog": "^2.3.0",
+ "es-value-fixtures": "^1.2.1",
+ "eslint": "^7.32.0",
+ "evalmd": "^0.0.19",
+ "foreach": "^2.0.5",
+ "has": "^1.0.3",
+ "nyc": "^10.3.2",
+ "object-inspect": "^1.11.0",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.3.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/node_modules/es-abstract/test/helpers/getSymbolDescription.js b/node_modules/get-symbol-description/test/index.js
similarity index 91%
rename from node_modules/es-abstract/test/helpers/getSymbolDescription.js
rename to node_modules/get-symbol-description/test/index.js
index 05be3bb..d5363c2 100644
--- a/node_modules/es-abstract/test/helpers/getSymbolDescription.js
+++ b/node_modules/get-symbol-description/test/index.js
@@ -4,10 +4,10 @@
var debug = require('object-inspect');
var forEach = require('foreach');
var has = require('has');
-
var v = require('es-value-fixtures');
-var getSymbolDescription = require('../../helpers/getSymbolDescription');
-var getInferredName = require('../../helpers/getInferredName');
+
+var getSymbolDescription = require('../');
+var getInferredName = require('../getInferredName');
test('getSymbolDescription', function (t) {
t.test('no symbols', { skip: v.hasSymbols }, function (st) {
diff --git a/node_modules/has-tostringtag/.eslintrc b/node_modules/has-tostringtag/.eslintrc
new file mode 100644
index 0000000..2d9a66a
--- /dev/null
+++ b/node_modules/has-tostringtag/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "max-statements-per-line": [2, { "max": 2 }],
+ "no-magic-numbers": 0,
+ "multiline-comment-style": 0,
+ }
+}
diff --git a/node_modules/has-tostringtag/.github/FUNDING.yml b/node_modules/has-tostringtag/.github/FUNDING.yml
new file mode 100644
index 0000000..7a450e7
--- /dev/null
+++ b/node_modules/has-tostringtag/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/has-tostringtag
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/has-tostringtag/CHANGELOG.md b/node_modules/has-tostringtag/CHANGELOG.md
new file mode 100644
index 0000000..39fb77c
--- /dev/null
+++ b/node_modules/has-tostringtag/CHANGELOG.md
@@ -0,0 +1,20 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## v1.0.0 - 2021-08-05
+
+### Commits
+
+- Tests [`6b6f573`](https://github.com/inspect-js/has-tostringtag/commit/6b6f5734dc2058badb300ff0783efdad95fe1a65)
+- Initial commit [`2f8190e`](https://github.com/inspect-js/has-tostringtag/commit/2f8190e799fac32ba9b95a076c0255e01d7ce475)
+- [meta] do not publish github action workflow files [`6e08cc4`](https://github.com/inspect-js/has-tostringtag/commit/6e08cc4e0fea7ec71ef66e70734b2af2c4a8b71b)
+- readme [`94bed6c`](https://github.com/inspect-js/has-tostringtag/commit/94bed6c9560cbbfda034f8d6c260bb7b0db33c1a)
+- npm init [`be67840`](https://github.com/inspect-js/has-tostringtag/commit/be67840ab92ee7adb98bcc65261975543f815fa5)
+- Implementation [`c4914ec`](https://github.com/inspect-js/has-tostringtag/commit/c4914ecc51ddee692c85b471ae0a5d8123030fbf)
+- [meta] use `auto-changelog` [`4aaf768`](https://github.com/inspect-js/has-tostringtag/commit/4aaf76895ae01d7b739f2b19f967ef2372506cd7)
+- Only apps should have lockfiles [`bc4d99e`](https://github.com/inspect-js/has-tostringtag/commit/bc4d99e4bf494afbaa235c5f098df6e642edf724)
+- [meta] add `safe-publish-latest` [`6523c05`](https://github.com/inspect-js/has-tostringtag/commit/6523c05c9b87140f3ae74c9daf91633dd9ff4e1f)
diff --git a/node_modules/load-json-file/license b/node_modules/has-tostringtag/LICENSE
similarity index 83%
copy from node_modules/load-json-file/license
copy to node_modules/has-tostringtag/LICENSE
index 654d0bf..7948bc0 100644
--- a/node_modules/load-json-file/license
+++ b/node_modules/has-tostringtag/LICENSE
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
+Copyright (c) 2021 Inspect JS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -9,13 +9,13 @@
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 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.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/has-tostringtag/README.md b/node_modules/has-tostringtag/README.md
new file mode 100644
index 0000000..67a5e92
--- /dev/null
+++ b/node_modules/has-tostringtag/README.md
@@ -0,0 +1,46 @@
+# has-tostringtag <sup>[![Version Badge][2]][1]</sup>
+
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.
+
+## Example
+
+```js
+var hasSymbolToStringTag = require('has-tostringtag');
+
+hasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable.
+
+var hasSymbolToStringTagKinda = require('has-tostringtag/shams');
+hasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec.
+```
+
+## Supported Symbol shams
+ - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols)
+ - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js)
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/has-tostringtag
+[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg
+[5]: https://david-dm.org/inspect-js/has-tostringtag.svg
+[6]: https://david-dm.org/inspect-js/has-tostringtag
+[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg
+[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies
+[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag
+[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag
+[actions-url]: https://github.com/inspect-js/has-tostringtag/actions
diff --git a/node_modules/has-tostringtag/index.js b/node_modules/has-tostringtag/index.js
new file mode 100644
index 0000000..d626b7a
--- /dev/null
+++ b/node_modules/has-tostringtag/index.js
@@ -0,0 +1,7 @@
+'use strict';
+
+var hasSymbols = require('has-symbols');
+
+module.exports = function hasToStringTag() {
+ return hasSymbols() && typeof Symbol.toStringTag === 'symbol';
+};
diff --git a/node_modules/has-tostringtag/package.json b/node_modules/has-tostringtag/package.json
new file mode 100644
index 0000000..6fa9232
--- /dev/null
+++ b/node_modules/has-tostringtag/package.json
@@ -0,0 +1,84 @@
+{
+ "name": "has-tostringtag",
+ "version": "1.0.0",
+ "author": {
+ "name": "Jordan Harband",
+ "email": "[email protected]",
+ "url": "http://ljharb.codes"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "contributors": [
+ {
+ "name": "Jordan Harband",
+ "email": "[email protected]",
+ "url": "http://ljharb.codes"
+ }
+ ],
+ "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.",
+ "license": "MIT",
+ "main": "index.js",
+ "exports": {
+ ".": "./index.js",
+ "./shams": "./shams.js",
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "prepublishOnly": "safe-publish-latest",
+ "prepublish": "not-in-publish || npm run prepublishOnly",
+ "pretest": "npm run --silent lint",
+ "test": "npm run tests-only",
+ "posttest": "aud --production",
+ "tests-only": "npm run test:stock && npm run test:staging && npm run test:shams",
+ "test:stock": "nyc node test",
+ "test:staging": "nyc node --harmony --es-staging test",
+ "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs",
+ "test:shams:corejs": "nyc node test/shams/core-js.js",
+ "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js",
+ "lint": "eslint --ext=js,mjs .",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/inspect-js/has-tostringtag.git"
+ },
+ "bugs": {
+ "url": "https://github.com/inspect-js/has-tostringtag/issues"
+ },
+ "homepage": "https://github.com/inspect-js/has-tostringtag#readme",
+ "keywords": [
+ "javascript",
+ "ecmascript",
+ "symbol",
+ "symbols",
+ "tostringtag",
+ "Symbol.toStringTag"
+ ],
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.6.0",
+ "aud": "^1.1.5",
+ "auto-changelog": "^2.3.0",
+ "core-js": "^2.6.12",
+ "eslint": "^7.32.0",
+ "get-own-property-symbols": "^0.9.5",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/node_modules/has-tostringtag/shams.js b/node_modules/has-tostringtag/shams.js
new file mode 100644
index 0000000..8b7e401
--- /dev/null
+++ b/node_modules/has-tostringtag/shams.js
@@ -0,0 +1,7 @@
+'use strict';
+
+var hasSymbols = require('has-symbols/shams');
+
+module.exports = function hasToStringTagShams() {
+ return hasSymbols() && !!Symbol.toStringTag;
+};
diff --git a/node_modules/has-tostringtag/test/index.js b/node_modules/has-tostringtag/test/index.js
new file mode 100644
index 0000000..0679afd
--- /dev/null
+++ b/node_modules/has-tostringtag/test/index.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var test = require('tape');
+var hasSymbolToStringTag = require('../');
+var runSymbolTests = require('./tests');
+
+test('interface', function (t) {
+ t.equal(typeof hasSymbolToStringTag, 'function', 'is a function');
+ t.equal(typeof hasSymbolToStringTag(), 'boolean', 'returns a boolean');
+ t.end();
+});
+
+test('Symbol.toStringTag exists', { skip: !hasSymbolToStringTag() }, function (t) {
+ runSymbolTests(t);
+ t.end();
+});
+
+test('Symbol.toStringTag does not exist', { skip: hasSymbolToStringTag() }, function (t) {
+ t.equal(typeof Symbol === 'undefined' ? 'undefined' : typeof Symbol.toStringTag, 'undefined', 'global Symbol.toStringTag is undefined');
+ t.end();
+});
diff --git a/node_modules/has-tostringtag/test/shams/core-js.js b/node_modules/has-tostringtag/test/shams/core-js.js
new file mode 100644
index 0000000..692b86e
--- /dev/null
+++ b/node_modules/has-tostringtag/test/shams/core-js.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var test = require('tape');
+
+if (typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol') {
+ test('has native Symbol.toStringTag support', function (t) {
+ t.equal(typeof Symbol, 'function');
+ t.equal(typeof Symbol.toStringTag, 'symbol');
+ t.end();
+ });
+ return;
+}
+
+var hasSymbolToStringTag = require('../../shams');
+
+test('polyfilled Symbols', function (t) {
+ /* eslint-disable global-require */
+ t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling');
+ require('core-js/fn/symbol');
+ require('core-js/fn/symbol/to-string-tag');
+
+ require('../tests')(t);
+
+ var hasToStringTagAfter = hasSymbolToStringTag();
+ t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling');
+ /* eslint-enable global-require */
+ t.end();
+});
diff --git a/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js
new file mode 100644
index 0000000..489fe83
--- /dev/null
+++ b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js
@@ -0,0 +1,28 @@
+'use strict';
+
+var test = require('tape');
+
+if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') {
+ test('has native Symbol support', function (t) {
+ t.equal(typeof Symbol, 'function');
+ t.equal(typeof Symbol(), 'symbol');
+ t.end();
+ });
+ return;
+}
+
+var hasSymbolToStringTag = require('../../shams');
+
+test('polyfilled Symbols', function (t) {
+ /* eslint-disable global-require */
+ t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling');
+
+ require('get-own-property-symbols');
+
+ require('../tests')(t);
+
+ var hasToStringTagAfter = hasSymbolToStringTag();
+ t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling');
+ /* eslint-enable global-require */
+ t.end();
+});
diff --git a/node_modules/has-tostringtag/test/tests.js b/node_modules/has-tostringtag/test/tests.js
new file mode 100644
index 0000000..0dae885
--- /dev/null
+++ b/node_modules/has-tostringtag/test/tests.js
@@ -0,0 +1,14 @@
+'use strict';
+
+// eslint-disable-next-line consistent-return
+module.exports = function runSymbolTests(t) {
+ t.equal(typeof Symbol, 'function', 'global Symbol is a function');
+ t.ok(Symbol.toStringTag, 'Symbol.toStringTag exists');
+
+ if (typeof Symbol !== 'function' || !Symbol.toStringTag) { return false; }
+
+ var obj = {};
+ obj[Symbol.toStringTag] = 'test';
+
+ t.equal(Object.prototype.toString.call(obj), '[object test]');
+};
diff --git a/node_modules/internal-slot/.editorconfig b/node_modules/internal-slot/.editorconfig
new file mode 100644
index 0000000..bc228f8
--- /dev/null
+++ b/node_modules/internal-slot/.editorconfig
@@ -0,0 +1,20 @@
+root = true
+
+[*]
+indent_style = tab
+indent_size = 4
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+max_line_length = 150
+
+[CHANGELOG.md]
+indent_style = space
+indent_size = 2
+
+[*.json]
+max_line_length = off
+
+[Makefile]
+max_line_length = off
diff --git a/node_modules/internal-slot/.eslintignore b/node_modules/internal-slot/.eslintignore
new file mode 100644
index 0000000..404abb2
--- /dev/null
+++ b/node_modules/internal-slot/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/node_modules/internal-slot/.eslintrc b/node_modules/internal-slot/.eslintrc
new file mode 100644
index 0000000..cab5bd0
--- /dev/null
+++ b/node_modules/internal-slot/.eslintrc
@@ -0,0 +1,12 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "max-params": [2, 3],
+ "new-cap": [2, { "capIsNewExceptions": ["GetIntrinsic"] }],
+ "no-magic-numbers": 0,
+ "operator-linebreak": [2, "before"],
+ },
+}
diff --git a/node_modules/internal-slot/.github/FUNDING.yml b/node_modules/internal-slot/.github/FUNDING.yml
new file mode 100644
index 0000000..8dc96e2
--- /dev/null
+++ b/node_modules/internal-slot/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/internal-slot
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with a single custom sponsorship URL
diff --git a/node_modules/internal-slot/.nycrc b/node_modules/internal-slot/.nycrc
new file mode 100644
index 0000000..1826526
--- /dev/null
+++ b/node_modules/internal-slot/.nycrc
@@ -0,0 +1,13 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "lines": 86,
+ "statements": 85.93,
+ "functions": 82.43,
+ "branches": 76.06,
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/internal-slot/CHANGELOG.md b/node_modules/internal-slot/CHANGELOG.md
new file mode 100644
index 0000000..3a7a40c
--- /dev/null
+++ b/node_modules/internal-slot/CHANGELOG.md
@@ -0,0 +1,58 @@
+### Changelog
+
+All notable changes to this project will be documented in this file. Dates are displayed in UTC.
+
+Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+
+#### [v1.0.3](https://github.com/ljharb/internal-slot/compare/v1.0.2...v1.0.3)
+
+> 26 January 2021
+
+- [Tests] use shared travis-ci configs [`0ef2263`](https://github.com/ljharb/internal-slot/commit/0ef22634fa2269d9df0d784aca3c5748e8eabd3b)
+- [Tests] migrate tests to Github Actions [`6253915`](https://github.com/ljharb/internal-slot/commit/6253915d28721df2eda5630849bc6b57647e3ee2)
+- [meta] do not publish github action workflow files [`ef94e55`](https://github.com/ljharb/internal-slot/commit/ef94e555727ed6a649ef64010904fe89a468d459)
+- [Tests] run `nyc` on all tests; use `tape` runner [`917d6ca`](https://github.com/ljharb/internal-slot/commit/917d6ca630cdcd6b4da9a2c300c6a3abb6e724fe)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`8dcb6fe`](https://github.com/ljharb/internal-slot/commit/8dcb6fe01d6a45e1af17a9dace95ca47c99b4328)
+- [actions] add "Allow Edits" workflow [`7aa3e86`](https://github.com/ljharb/internal-slot/commit/7aa3e86edb0149fd882717481885760aeb28474e)
+- [Refactor] use `get-intrinsic` instead of `es-abstract`; update `side-channel` [`11ad17d`](https://github.com/ljharb/internal-slot/commit/11ad17d4255adcbc55fd4eca0bf6733bac59f1bf)
+- [readme] remove travis badge [`5b75452`](https://github.com/ljharb/internal-slot/commit/5b754523aa07e8f67d0135df75059a18047292bb)
+- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`d531688`](https://github.com/ljharb/internal-slot/commit/d5316880956b4dd83e6b6c9ab48fdd8171a4a268)
+- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`c76fa91`](https://github.com/ljharb/internal-slot/commit/c76fa91a7e623a738e22332bee4e985aea41122e)
+- [Dev Deps] update `eslint`, `tape` [`e733ccd`](https://github.com/ljharb/internal-slot/commit/e733ccd68e81c72ef2e02726e001895053de7887)
+- [Dev Deps] update `auto-changelog`; add `aud` [`df20bf5`](https://github.com/ljharb/internal-slot/commit/df20bf5d3943a533c20799d8cc1449997e85d53b)
+- [meta] fix autochangelog [`e89e6f1`](https://github.com/ljharb/internal-slot/commit/e89e6f1ff9f10f386e6400b586db78ad9c0f1309)
+- [Tests] only audit prod deps [`71317b9`](https://github.com/ljharb/internal-slot/commit/71317b95ec6bbd9877807da0c0316ee9f5f30fab)
+- [Deps] update `es-abstract` [`c17ccf4`](https://github.com/ljharb/internal-slot/commit/c17ccf45f4cb0d3b7a1536e9cd3a7ff9a7dafd21)
+- [Dev Deps] update `tape` [`d81ae03`](https://github.com/ljharb/internal-slot/commit/d81ae030a0e8f58cee00f752601ce60405a93d78)
+- [Deps] update `es-abstract` [`b56303b`](https://github.com/ljharb/internal-slot/commit/b56303b4c3af7a510f9f51860895a46fd2e14752)
+- [Deps] update `es-abstract` [`9996d1c`](https://github.com/ljharb/internal-slot/commit/9996d1cf3507750c7a6845a2fb0d0f849ea898a1)
+
+#### [v1.0.2](https://github.com/ljharb/internal-slot/compare/v1.0.1...v1.0.2)
+
+> 20 December 2019
+
+- [Deps] update `es-abstract`, `side-channel` [`5c9df03`](https://github.com/ljharb/internal-slot/commit/5c9df03a25518f5c482cff4e1447a26fa071df9a)
+- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`7820f98`](https://github.com/ljharb/internal-slot/commit/7820f984e523a64ddf3068c4e5631abf61eb1ea4)
+
+#### [v1.0.1](https://github.com/ljharb/internal-slot/compare/v1.0.0...v1.0.1)
+
+> 1 December 2019
+
+- [Refactor] use `side-channel` package [`d38639f`](https://github.com/ljharb/internal-slot/commit/d38639f0a3cdb5090711179d0e78df857ecbd5d3)
+- [actions] add automatic rebasing / merge commit blocking [`74267e6`](https://github.com/ljharb/internal-slot/commit/74267e6e591e18ba39186cb99139d3fd7a757c9f)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `auto-changelog`, `object-inspect`, `safe-publish-latest` [`b042eef`](https://github.com/ljharb/internal-slot/commit/b042eefc067b830bbd370833f7f21754e802b0b2)
+- [Deps] update `es-abstract` [`98cf4e8`](https://github.com/ljharb/internal-slot/commit/98cf4e86c1bfe99eda7b11a8ea70394368f33e4f)
+
+#### v1.0.0
+
+> 20 October 2019
+
+- Tests [`b50fa41`](https://github.com/ljharb/internal-slot/commit/b50fa41b6f47aba39ac4cb733658580974a0b00a)
+- implementation [`c5a59f3`](https://github.com/ljharb/internal-slot/commit/c5a59f3753677f81aa12a0226d3b1187846d06dd)
+- Initial commit [`15ebe4d`](https://github.com/ljharb/internal-slot/commit/15ebe4dc6d46885f67969d64c9c3e705780963f8)
+- readme [`382a3f5`](https://github.com/ljharb/internal-slot/commit/382a3f53d8975e6488373a0fc2abcdc7c4c44247)
+- npm init [`d5e7c97`](https://github.com/ljharb/internal-slot/commit/d5e7c977ef694e89c245fd11165f63c06a7a5040)
+- [meta] add FUNDING.yml [`685b608`](https://github.com/ljharb/internal-slot/commit/685b6087613f6735f4411a558500d92f8a3ec3f2)
+- [meta] add `auto-changelog`, `safe-publish-latest` [`f8fdf1c`](https://github.com/ljharb/internal-slot/commit/f8fdf1c3f0c592f71746da6d7f8bea18f8946dda)
+- [Tests] add `npm run lint` [`baaaa09`](https://github.com/ljharb/internal-slot/commit/baaaa09ab6e5bc5fcc0e7c76e10c55aa18f4ca7e)
+- Only apps should have lockfiles [`dfa7efa`](https://github.com/ljharb/internal-slot/commit/dfa7efa3d5cd23261cb75c2adab6ee3c06790fee)
diff --git a/node_modules/load-json-file/license b/node_modules/internal-slot/LICENSE
similarity index 83%
copy from node_modules/load-json-file/license
copy to node_modules/internal-slot/LICENSE
index 654d0bf..3900dd7 100644
--- a/node_modules/load-json-file/license
+++ b/node_modules/internal-slot/LICENSE
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
+Copyright (c) 2019 Jordan Harband
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -9,13 +9,13 @@
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 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.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/internal-slot/README.md b/node_modules/internal-slot/README.md
new file mode 100644
index 0000000..4716567
--- /dev/null
+++ b/node_modules/internal-slot/README.md
@@ -0,0 +1,52 @@
+# internal-slot <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
+
+[![dependency status][deps-svg]][deps-url]
+[![dev dependency status][dev-deps-svg]][dev-deps-url]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][npm-badge-png]][package-url]
+
+Truly private storage, akin to the JS spec’s concept of internal slots.
+
+Uses a WeakMap when available; a Map when not; and a regular object in even older engines. Performance and garbage collection behavior will reflect the environment’s capabilities accordingly.
+
+## Example
+
+```js
+var SLOT = require('internal-slot');
+var assert = require('assert');
+
+var o = {};
+
+assert.throws(function () { SLOT.assert(o, 'foo'); });
+
+assert.equal(SLOT.has(o, 'foo'), false);
+assert.equal(SLOT.get(o, 'foo'), undefined);
+
+SLOT.set(o, 'foo', 42);
+
+assert.equal(SLOT.has(o, 'foo'), true);
+assert.equal(SLOT.get(o, 'foo'), 42);
+
+assert.doesNotThrow(function () { SLOT.assert(o, 'foo'); });
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+## Security
+
+Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report.
+
+[package-url]: https://npmjs.org/package/internal-slot
+[npm-version-svg]: https://versionbadg.es/ljharb/internal-slot.svg
+[deps-svg]: https://david-dm.org/ljharb/internal-slot.svg
+[deps-url]: https://david-dm.org/ljharb/internal-slot
+[dev-deps-svg]: https://david-dm.org/ljharb/internal-slot/dev-status.svg
+[dev-deps-url]: https://david-dm.org/ljharb/internal-slot#info=devDependencies
+[npm-badge-png]: https://nodei.co/npm/internal-slot.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/internal-slot.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/internal-slot.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=internal-slot
diff --git a/node_modules/internal-slot/index.js b/node_modules/internal-slot/index.js
new file mode 100644
index 0000000..0ed115b
--- /dev/null
+++ b/node_modules/internal-slot/index.js
@@ -0,0 +1,59 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var has = require('has');
+var channel = require('side-channel')();
+
+var $TypeError = GetIntrinsic('%TypeError%');
+
+var SLOT = {
+ assert: function (O, slot) {
+ if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
+ throw new $TypeError('`O` is not an object');
+ }
+ if (typeof slot !== 'string') {
+ throw new $TypeError('`slot` must be a string');
+ }
+ channel.assert(O);
+ },
+ get: function (O, slot) {
+ if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
+ throw new $TypeError('`O` is not an object');
+ }
+ if (typeof slot !== 'string') {
+ throw new $TypeError('`slot` must be a string');
+ }
+ var slots = channel.get(O);
+ return slots && slots['$' + slot];
+ },
+ has: function (O, slot) {
+ if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
+ throw new $TypeError('`O` is not an object');
+ }
+ if (typeof slot !== 'string') {
+ throw new $TypeError('`slot` must be a string');
+ }
+ var slots = channel.get(O);
+ return !!slots && has(slots, '$' + slot);
+ },
+ set: function (O, slot, V) {
+ if (!O || (typeof O !== 'object' && typeof O !== 'function')) {
+ throw new $TypeError('`O` is not an object');
+ }
+ if (typeof slot !== 'string') {
+ throw new $TypeError('`slot` must be a string');
+ }
+ var slots = channel.get(O);
+ if (!slots) {
+ slots = {};
+ channel.set(O, slots);
+ }
+ slots['$' + slot] = V;
+ }
+};
+
+if (Object.freeze) {
+ Object.freeze(SLOT);
+}
+
+module.exports = SLOT;
diff --git a/node_modules/internal-slot/package.json b/node_modules/internal-slot/package.json
new file mode 100644
index 0000000..f8f66e1
--- /dev/null
+++ b/node_modules/internal-slot/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "internal-slot",
+ "version": "1.0.3",
+ "description": "ES spec-like internal slots",
+ "main": "index.js",
+ "scripts": {
+ "prepublish": "safe-publish-latest",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"",
+ "pretest": "npm run lint",
+ "lint": "eslint .",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "test": "npm run tests-only",
+ "posttest": "aud --production"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ljharb/internal-slot.git"
+ },
+ "keywords": [
+ "internal",
+ "slot",
+ "internal slot",
+ "ecmascript",
+ "es",
+ "spec",
+ "private",
+ "data",
+ "private data",
+ "weakmap"
+ ],
+ "author": "Jordan Harband <[email protected]>",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/ljharb/internal-slot/issues"
+ },
+ "homepage": "https://github.com/ljharb/internal-slot#readme",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.5.0",
+ "aud": "^1.1.3",
+ "auto-changelog": "^2.2.1",
+ "eslint": "^7.18.0",
+ "foreach": "^2.0.5",
+ "nyc": "^10.3.2",
+ "object-inspect": "^1.9.0",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.1.1"
+ },
+ "dependencies": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false
+ }
+}
diff --git a/node_modules/internal-slot/test/index.js b/node_modules/internal-slot/test/index.js
new file mode 100644
index 0000000..de65d45
--- /dev/null
+++ b/node_modules/internal-slot/test/index.js
@@ -0,0 +1,120 @@
+'use strict';
+
+var test = require('tape');
+var inspect = require('object-inspect');
+var forEach = require('foreach');
+
+var SLOT = require('../');
+
+test('assert', function (t) {
+ forEach([null, undefined, true, false, 'foo', '', 42, 0], function (primitive) {
+ t['throws'](
+ function () { SLOT.assert(primitive, ''); },
+ TypeError,
+ inspect(primitive) + ' is not an Object'
+ );
+ });
+
+ forEach([null, undefined, true, false, 42, 0, {}, [], function () {}, /a/g], function (nonString) {
+ t['throws'](
+ function () { SLOT.assert({}, nonString); },
+ TypeError,
+ inspect(nonString) + ' is not a String'
+ );
+ });
+
+ t['throws'](
+ function () { SLOT.assert({}, 'whatever'); },
+ TypeError,
+ 'nonexistent slot throws'
+ );
+
+ var o = {};
+ SLOT.set(o, 'x');
+ t.doesNotThrow(function () { SLOT.assert(o, 'x'); }, 'existent slot noops');
+
+ t.end();
+});
+
+test('has', function (t) {
+ forEach([null, undefined, true, false, 'foo', '', 42, 0], function (primitive) {
+ t['throws'](
+ function () { SLOT.has(primitive, ''); },
+ TypeError,
+ inspect(primitive) + ' is not an Object'
+ );
+ });
+
+ forEach([null, undefined, true, false, 42, 0, {}, [], function () {}, /a/g], function (nonString) {
+ t['throws'](
+ function () { SLOT.has({}, nonString); },
+ TypeError,
+ inspect(nonString) + ' is not a String'
+ );
+ });
+
+ var o = {};
+
+ t.equal(SLOT.has(o, 'nonexistent'), false, 'nonexistent slot yields false');
+
+ SLOT.set(o, 'foo');
+ t.equal(SLOT.has(o, 'foo'), true, 'existent slot yields true');
+
+ t.end();
+});
+
+test('get', function (t) {
+ forEach([null, undefined, true, false, 'foo', '', 42, 0], function (primitive) {
+ t['throws'](
+ function () { SLOT.get(primitive, ''); },
+ TypeError,
+ inspect(primitive) + ' is not an Object'
+ );
+ });
+
+ forEach([null, undefined, true, false, 42, 0, {}, [], function () {}, /a/g], function (nonString) {
+ t['throws'](
+ function () { SLOT.get({}, nonString); },
+ TypeError,
+ inspect(nonString) + ' is not a String'
+ );
+ });
+
+ var o = {};
+ t.equal(SLOT.get(o, 'nonexistent'), undefined, 'nonexistent slot is undefined');
+
+ var v = {};
+ SLOT.set(o, 'f', v);
+ t.equal(SLOT.get(o, 'f'), v, '"get" retrieves value set by "set"');
+
+ t.end();
+});
+
+test('set', function (t) {
+ forEach([null, undefined, true, false, 'foo', '', 42, 0], function (primitive) {
+ t['throws'](
+ function () { SLOT.set(primitive, ''); },
+ TypeError,
+ inspect(primitive) + ' is not an Object'
+ );
+ });
+
+ forEach([null, undefined, true, false, 42, 0, {}, [], function () {}, /a/g], function (nonString) {
+ t['throws'](
+ function () { SLOT.set({}, nonString); },
+ TypeError,
+ inspect(nonString) + ' is not a String'
+ );
+ });
+
+ var o = function () {};
+ t.equal(SLOT.get(o, 'f'), undefined, 'slot not set');
+
+ SLOT.set(o, 'f', 42);
+ t.equal(SLOT.get(o, 'f'), 42, 'slot was set');
+
+ SLOT.set(o, 'f', Infinity);
+ t.equal(SLOT.get(o, 'f'), Infinity, 'slot was set again');
+
+ t.end();
+});
diff --git a/node_modules/is-bigint/.eslintrc b/node_modules/is-bigint/.eslintrc
index c887238..1283fcf 100644
--- a/node_modules/is-bigint/.eslintrc
+++ b/node_modules/is-bigint/.eslintrc
@@ -3,10 +3,6 @@
"extends": "@ljharb",
- "globals": {
- "BigInt": true,
- },
-
"rules": {
"new-cap": [2, { "capIsNewExceptions": ["BigInt"] }],
"operator-linebreak": [2, "before"],
diff --git a/node_modules/is-bigint/CHANGELOG.md b/node_modules/is-bigint/CHANGELOG.md
index b62ddcf..c1b0271 100644
--- a/node_modules/is-bigint/CHANGELOG.md
+++ b/node_modules/is-bigint/CHANGELOG.md
@@ -5,6 +5,23 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v1.0.4](https://github.com/inspect-js/is-bigint/compare/v1.0.3...v1.0.4) - 2021-08-11
+
+### Commits
+
+- [eslint] remove unnecessary eslintrc file [`7220aa5`](https://github.com/inspect-js/is-bigint/commit/7220aa515c51649b48ba57bb77f92d85e27557d8)
+- [readme] add github actions/codecov badges [`053a071`](https://github.com/inspect-js/is-bigint/commit/053a07123511eef5a91fd7889ae2d8323fbcf7d7)
+- [Deps] add `has-bigints` as a runtime dependency [`0fc3c9d`](https://github.com/inspect-js/is-bigint/commit/0fc3c9d5165f62500ea9c27943cb302df65432f7)
+- [Dev Deps] update `tape` [`145f11d`](https://github.com/inspect-js/is-bigint/commit/145f11d1d285d92b3144f48178fe0fb3b2f828d9)
+
+## [v1.0.3](https://github.com/inspect-js/is-bigint/compare/v1.0.2...v1.0.3) - 2021-08-06
+
+### Commits
+
+- [Tests] use `has-tostringtag` for easier checking of Symbol.toStringTag [`3b44080`](https://github.com/inspect-js/is-bigint/commit/3b440801b69689d907b33184134f00d7e8a35f9f)
+- [Dev Deps] update `auto-changelog`, `eslint`, `object-inspect`, `tape` [`e4d4a6c`](https://github.com/inspect-js/is-bigint/commit/e4d4a6c2ab743b52eda906abd1ed4b0608952533)
+- [Fix] use `has-bigints` for more robust BigInt detection [`7bb9d7a`](https://github.com/inspect-js/is-bigint/commit/7bb9d7ab42214c12ce25e9f0cfe2af769388c3bb)
+
## [v1.0.2](https://github.com/inspect-js/is-bigint/compare/v1.0.1...v1.0.2) - 2021-05-04
### Commits
diff --git a/node_modules/is-bigint/README.md b/node_modules/is-bigint/README.md
index 1bf8c5f..d64549f 100644
--- a/node_modules/is-bigint/README.md
+++ b/node_modules/is-bigint/README.md
@@ -1,5 +1,7 @@
# is-bigint <sup>[![Version Badge][2]][1]</sup>
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
[![dependency status][5]][6]
[![dev dependency status][7]][8]
[![License][license-image]][license-url]
@@ -36,3 +38,7 @@
[license-url]: LICENSE
[downloads-image]: https://img.shields.io/npm/dm/is-bigint.svg
[downloads-url]: https://npm-stat.com/charts.html?package=is-bigint
+[codecov-image]: https://codecov.io/gh/inspect-js/is-bigint/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/inspect-js/is-bigint/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-bigint
+[actions-url]: https://github.com/inspect-js/is-bigint/actions
diff --git a/node_modules/is-bigint/index.js b/node_modules/is-bigint/index.js
index 6ce59c8..8da47d7 100644
--- a/node_modules/is-bigint/index.js
+++ b/node_modules/is-bigint/index.js
@@ -1,6 +1,8 @@
'use strict';
-if (typeof BigInt === 'function') {
+var hasBigInts = require('has-bigints')();
+
+if (hasBigInts) {
var bigIntValueOf = BigInt.prototype.valueOf;
var tryBigInt = function tryBigIntObject(value) {
try {
diff --git a/node_modules/is-bigint/package.json b/node_modules/is-bigint/package.json
index ac61df2..47197d5 100644
--- a/node_modules/is-bigint/package.json
+++ b/node_modules/is-bigint/package.json
@@ -1,6 +1,6 @@
{
"name": "is-bigint",
- "version": "1.0.2",
+ "version": "1.0.4",
"description": "Is this value an ES BigInt?",
"main": "index.js",
"scripts": {
@@ -33,16 +33,19 @@
"url": "https://github.com/inspect-js/is-bigint/issues"
},
"homepage": "https://github.com/inspect-js/is-bigint#readme",
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
"devDependencies": {
"@ljharb/eslint-config": "^17.6.0",
"aud": "^1.1.5",
- "auto-changelog": "^2.2.1",
- "eslint": "^7.25.0",
+ "auto-changelog": "^2.3.0",
+ "eslint": "^7.32.0",
"has-symbols": "^1.0.2",
"nyc": "^10.3.2",
- "object-inspect": "^1.10.2",
+ "object-inspect": "^1.11.0",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.1"
},
"auto-changelog": {
"output": "CHANGELOG.md",
diff --git a/node_modules/is-bigint/test/.eslintrc b/node_modules/is-bigint/test/.eslintrc
deleted file mode 100644
index 1ac0d47..0000000
--- a/node_modules/is-bigint/test/.eslintrc
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "rules": {
- "max-statements-per-line": [2, { "max": 2 }],
- "no-restricted-properties": 0,
- "symbol-description": 0,
- }
-}
diff --git a/node_modules/is-bigint/test/index.js b/node_modules/is-bigint/test/index.js
index 069f73d..21537d6 100644
--- a/node_modules/is-bigint/test/index.js
+++ b/node_modules/is-bigint/test/index.js
@@ -2,7 +2,11 @@
var test = require('tape');
var inspect = require('object-inspect');
-var isBigInt = require('..');
+var hasBigInts = require('has-bigints')();
+var hasSymbols = require('has-symbols')();
+var hasToStringTag = require('has-tostringtag/shams')();
+
+var isBigInt = require('../');
var debug = function (v, m) { return inspect(v) + ' ' + m; };
@@ -13,9 +17,6 @@
}
};
-var hasSymbols = require('has-symbols')();
-var hasBigInts = typeof BigInt === 'function';
-
test('non-BigInt values', function (t) {
var nonBigInts = [
true,
@@ -50,7 +51,7 @@
st.end();
});
- t.test('faked @@toStringTag', { skip: !hasBigInts || !hasSymbols || !Symbol.toStringTag }, function (st) {
+ t.test('faked @@toStringTag', { skip: !hasBigInts || !hasToStringTag }, function (st) {
var fakeBigInt = { valueOf: function () { return BigInt(42); } };
fakeBigInt[Symbol.toStringTag] = 'BigInt';
st.equal(false, isBigInt(fakeBigInt), 'object with fake BigInt @@toStringTag and valueOf returning a BigInt is not a BigInt');
diff --git a/node_modules/is-boolean-object/CHANGELOG.md b/node_modules/is-boolean-object/CHANGELOG.md
index 25a891a..f789bdb 100644
--- a/node_modules/is-boolean-object/CHANGELOG.md
+++ b/node_modules/is-boolean-object/CHANGELOG.md
@@ -5,6 +5,13 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v1.1.2](https://github.com/inspect-js/is-boolean-object/compare/v1.1.1...v1.1.2) - 2021-08-05
+
+### Commits
+
+- [Refactor] use `has-tostringtag` to behave correctly in the presence of symbol shams [`6d319ea`](https://github.com/inspect-js/is-boolean-object/commit/6d319eac0ba237f7ba440a1fc4b32d007b1b0cf3)
+- [Dev Deps] update `auto-changelog`, `core-js`, `eslint`, `tape` [`4f85bef`](https://github.com/inspect-js/is-boolean-object/commit/4f85bef244f8fdd9ab99db0afe0b8fa00c853709)
+
## [v1.1.1](https://github.com/inspect-js/is-boolean-object/compare/v1.1.0...v1.1.1) - 2021-05-07
### Commits
diff --git a/node_modules/is-boolean-object/index.js b/node_modules/is-boolean-object/index.js
index 0cd8e77..e1011f6 100644
--- a/node_modules/is-boolean-object/index.js
+++ b/node_modules/is-boolean-object/index.js
@@ -13,7 +13,7 @@
}
};
var boolClass = '[object Boolean]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
+var hasToStringTag = require('has-tostringtag/shams')();
module.exports = function isBoolean(value) {
if (typeof value === 'boolean') {
diff --git a/node_modules/is-boolean-object/package.json b/node_modules/is-boolean-object/package.json
index d1d8396..ca0d645 100644
--- a/node_modules/is-boolean-object/package.json
+++ b/node_modules/is-boolean-object/package.json
@@ -1,6 +1,6 @@
{
"name": "is-boolean-object",
- "version": "1.1.1",
+ "version": "1.1.2",
"author": "Jordan Harband <[email protected]>",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -38,21 +38,22 @@
"is-boolean"
],
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
},
"devDependencies": {
"@ljharb/eslint-config": "^17.6.0",
"aud": "^1.1.5",
- "auto-changelog": "^2.2.1",
- "core-js": "^3.12.0",
+ "auto-changelog": "^2.3.0",
+ "core-js": "^3.16.0",
"eclint": "^2.8.1",
- "eslint": "^7.25.0",
+ "eslint": "^7.32.0",
"foreach": "^2.0.5",
"indexof": "^0.0.1",
"is": "^3.3.0",
"nyc": "^10.3.2",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.0"
},
"testling": {
"files": "test.js",
diff --git a/node_modules/is-boolean-object/test/index.js b/node_modules/is-boolean-object/test/index.js
index 9ca4b34..cd4c44f 100644
--- a/node_modules/is-boolean-object/test/index.js
+++ b/node_modules/is-boolean-object/test/index.js
@@ -2,7 +2,7 @@
var test = require('tape');
var isBoolean = require('../');
-var hasSymbols = require('has-symbols/shams')();
+var hasToStringTag = require('has-tostringtag/shams')();
test('not Booleans', function (t) {
t.test('primitives', function (st) {
@@ -29,7 +29,7 @@
t.end();
});
-test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) {
+test('@@toStringTag', { skip: !hasToStringTag }, function (t) {
var fakeBoolean = {
toString: function () { return 'true'; },
valueOf: function () { return true; }
diff --git a/node_modules/is-callable/.editorconfig b/node_modules/is-callable/.editorconfig
index 4623631..87f2333 100644
--- a/node_modules/is-callable/.editorconfig
+++ b/node_modules/is-callable/.editorconfig
@@ -19,3 +19,8 @@
[Makefile]
max_line_length = off
+
+[coverage*/**/*]
+indent_style = off
+indent_size = off
+max_line_length = off
diff --git a/node_modules/is-callable/.github/main.workflow b/node_modules/is-callable/.github/main.workflow
deleted file mode 100644
index 0494481..0000000
--- a/node_modules/is-callable/.github/main.workflow
+++ /dev/null
@@ -1,14 +0,0 @@
-workflow "Autorebase branch on merge commits" {
- on = "push"
- resolves = ["rebase"]
-}
-
-workflow "Autorebase PR on merge commits" {
- on = "pull_request"
- resolves = ["rebase"]
-}
-
- action "rebase" {
- uses = "ljharb/rebase@latest"
- secrets = ["GITHUB_TOKEN"]
-}
diff --git a/node_modules/is-callable/.nycrc b/node_modules/is-callable/.nycrc
index 1826526..bdd626c 100644
--- a/node_modules/is-callable/.nycrc
+++ b/node_modules/is-callable/.nycrc
@@ -2,10 +2,6 @@
"all": true,
"check-coverage": false,
"reporter": ["text-summary", "text", "html", "json"],
- "lines": 86,
- "statements": 85.93,
- "functions": 82.43,
- "branches": 76.06,
"exclude": [
"coverage",
"test"
diff --git a/node_modules/is-callable/CHANGELOG.md b/node_modules/is-callable/CHANGELOG.md
index 6b88f5b..0427308 100644
--- a/node_modules/is-callable/CHANGELOG.md
+++ b/node_modules/is-callable/CHANGELOG.md
@@ -1,3 +1,17 @@
+1.2.4 / 2021-08-05
+=================
+ * [Fix] use `has-tostringtag` approach to behave correctly in the presence of symbol shams
+ * [readme] fix repo URLs
+ * [readme] add actions and codecov badges
+ * [readme] remove defunct badges
+ * [meta] ignore eclint checking coverage output
+ * [meta] use `prepublishOnly` script for npm 7+
+ * [actions] use `node/install` instead of `node/run`; use `codecov` action
+ * [actions] remove unused workflow file
+ * [Tests] run `nyc` on all tests; use `tape` runner
+ * [Tests] use `available-typed-arrays`, `for-each`, `has-symbols`, `object-inspect`
+ * [Dev Deps] update `available-typed-arrays`, `eslint`, `@ljharb/eslint-config`, `aud`, `object-inspect`, `tape`
+
1.2.3 / 2021-01-31
=================
* [Fix] `document.all` is callable (do not use `document.all`!)
diff --git a/node_modules/is-callable/README.md b/node_modules/is-callable/README.md
index b5c965c..8f3dced 100644
--- a/node_modules/is-callable/README.md
+++ b/node_modules/is-callable/README.md
@@ -1,6 +1,7 @@
# is-callable <sup>[![Version Badge][2]][1]</sup>
-[![Build Status][3]][4]
+[![github actions][actions-image]][actions-url]
+[![coverage][codecov-image]][codecov-url]
[![dependency status][5]][6]
[![dev dependency status][7]][8]
[![License][license-image]][license-url]
@@ -8,8 +9,6 @@
[![npm badge][11]][1]
-[![browser support][9]][10]
-
Is this JS value callable? Works with Functions and GeneratorFunctions, despite ES6 @@toStringTag.
## Example
@@ -52,17 +51,17 @@
Simply clone the repo, `npm install`, and run `npm test`
[1]: https://npmjs.org/package/is-callable
-[2]: http://versionbadg.es/ljharb/is-callable.svg
-[3]: https://travis-ci.org/ljharb/is-callable.svg
-[4]: https://travis-ci.org/ljharb/is-callable
-[5]: https://david-dm.org/ljharb/is-callable.svg
-[6]: https://david-dm.org/ljharb/is-callable
-[7]: https://david-dm.org/ljharb/is-callable/dev-status.svg
-[8]: https://david-dm.org/ljharb/is-callable#info=devDependencies
-[9]: https://ci.testling.com/ljharb/is-callable.png
-[10]: https://ci.testling.com/ljharb/is-callable
+[2]: https://versionbadg.es/inspect-js/is-callable.svg
+[5]: https://david-dm.org/inspect-js/is-callable.svg
+[6]: https://david-dm.org/inspect-js/is-callable
+[7]: https://david-dm.org/inspect-js/is-callable/dev-status.svg
+[8]: https://david-dm.org/inspect-js/is-callable#info=devDependencies
[11]: https://nodei.co/npm/is-callable.png?downloads=true&stars=true
-[license-image]: http://img.shields.io/npm/l/is-callable.svg
+[license-image]: https://img.shields.io/npm/l/is-callable.svg
[license-url]: LICENSE
-[downloads-image]: http://img.shields.io/npm/dm/is-callable.svg
-[downloads-url]: http://npm-stat.com/charts.html?package=is-callable
+[downloads-image]: https://img.shields.io/npm/dm/is-callable.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=is-callable
+[codecov-image]: https://codecov.io/gh/inspect-js/is-callable/branch/main/graphs/badge.svg
+[codecov-url]: https://app.codecov.io/gh/inspect-js/is-callable/
+[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-callable
+[actions-url]: https://github.com/inspect-js/is-callable/actions
diff --git a/node_modules/is-callable/index.js b/node_modules/is-callable/index.js
index f36d71d..86c9771 100644
--- a/node_modules/is-callable/index.js
+++ b/node_modules/is-callable/index.js
@@ -45,7 +45,7 @@
var toStr = Object.prototype.toString;
var fnClass = '[object Function]';
var genClass = '[object GeneratorFunction]';
-var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`
/* globals document: false */
var documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};
diff --git a/node_modules/is-callable/package.json b/node_modules/is-callable/package.json
index 3c8dbeb..c952c4f 100644
--- a/node_modules/is-callable/package.json
+++ b/node_modules/is-callable/package.json
@@ -1,6 +1,6 @@
{
"name": "is-callable",
- "version": "1.2.3",
+ "version": "1.2.4",
"author": {
"name": "Jordan Harband",
"email": "[email protected]",
@@ -20,27 +20,18 @@
"license": "MIT",
"main": "index.js",
"scripts": {
- "prepublish": "safe-publish-latest",
+ "prepublishOnly": "safe-publish-latest",
+ "prepublish": "not-in-publish || npm run prepublishOnly",
"pretest": "npm run --silent lint",
- "test": "npm run --silent tests-only",
- "posttest": "npx aud --production",
- "tests-only": "npm run --silent test:stock && npm run --silent test:staging",
- "test:stock": "node test",
- "test:staging": "node --es-staging test",
- "coverage": "npm run --silent istanbul",
- "covert": "covert test",
- "covert:quiet": "covert test --quiet",
- "istanbul": "npm run --silent istanbul:clean && npm run --silent istanbul:std && npm run --silent istanbul:harmony && npm run --silent istanbul:merge && istanbul check",
- "istanbul:clean": "rimraf coverage coverage-std coverage-harmony",
- "istanbul:merge": "istanbul-merge --out coverage/coverage.raw.json coverage-harmony/coverage.raw.json coverage-std/coverage.raw.json && istanbul report html",
- "istanbul:harmony": "node --harmony ./node_modules/istanbul/lib/cli.js cover test --dir coverage-harmony",
- "istanbul:std": "istanbul cover test --report html --dir coverage-std",
+ "test": "npm run tests-only --",
+ "posttest": "aud --production",
+ "tests-only": "nyc tape 'test/**/*.js'",
"prelint": "eclint check *",
"lint": "eslint ."
},
"repository": {
"type": "git",
- "url": "git://github.com/ljharb/is-callable.git"
+ "url": "git://github.com/inspect-js/is-callable.git"
},
"keywords": [
"Function",
@@ -54,22 +45,23 @@
"toStringTag",
"@@toStringTag"
],
- "dependencies": {},
"devDependencies": {
- "@ljharb/eslint-config": "^17.5.0",
- "aud": "^1.1.3",
- "covert": "^1.1.1",
+ "@ljharb/eslint-config": "^17.6.0",
+ "aud": "^1.1.5",
+ "available-typed-arrays": "^1.0.4",
"eclint": "^2.8.1",
- "eslint": "^7.19.0",
- "foreach": "^2.0.5",
- "istanbul": "1.1.0-alpha.1",
- "istanbul-merge": "^1.1.1",
+ "es-value-fixtures": "^1.2.1",
+ "eslint": "^7.32.0",
+ "for-each": "^0.3.3",
+ "has-tostringtag": "^1.0.0",
"make-arrow-function": "^1.2.0",
"make-async-function": "^1.0.0",
"make-generator-function": "^2.0.0",
+ "nyc": "^10.3.2",
+ "object-inspect": "^1.11.0",
"rimraf": "^2.7.1",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.1.1"
+ "tape": "^5.3.0"
},
"testling": {
"files": "test/index.js",
diff --git a/node_modules/is-callable/test/index.js b/node_modules/is-callable/test/index.js
index 2eacb0e..a3c348c 100644
--- a/node_modules/is-callable/test/index.js
+++ b/node_modules/is-callable/test/index.js
@@ -5,7 +5,11 @@
var test = require('tape');
var isCallable = require('../');
-var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
+var hasToStringTag = require('has-tostringtag/shams')();
+var v = require('es-value-fixtures');
+var forEach = require('for-each');
+var inspect = require('object-inspect');
+var typedArrayNames = require('available-typed-arrays')();
var generators = require('make-generator-function')();
var arrows = require('make-arrow-function').list();
var asyncs = require('make-async-function').list();
@@ -15,7 +19,6 @@
weirdlyCommentedArrowFn = Function('return cl/*/**/=>/**/ass - 1;')();
/* eslint-enable no-new-func */
} catch (e) { /**/ }
-var forEach = require('foreach');
var noop = function () {};
var classFake = function classFake() { }; // eslint-disable-line func-name-matching
@@ -63,46 +66,32 @@
var classAnonymousCommentedOneLine = invokeFunction('"use strict"; return class/*/*/{}');
test('not callables', function (t) {
- t.test('non-number/string primitives', function (st) {
- st.notOk(isCallable(), 'undefined is not callable');
- st.notOk(isCallable(null), 'null is not callable');
- st.notOk(isCallable(false), 'false is not callable');
- st.notOk(isCallable(true), 'true is not callable');
- st.end();
- });
+ t.notOk(isCallable(), 'implicit undefined is not callable');
- t.notOk(isCallable([]), 'array is not callable');
- t.notOk(isCallable({}), 'object is not callable');
- t.notOk(isCallable(/a/g), 'regex literal is not callable');
- t.notOk(isCallable(new RegExp('a', 'g')), 'regex object is not callable');
- t.notOk(isCallable(new Date()), 'new Date() is not callable');
-
- t.test('numbers', function (st) {
- st.notOk(isCallable(42), 'number is not callable');
- st.notOk(isCallable(Object(42)), 'number object is not callable');
- st.notOk(isCallable(NaN), 'NaN is not callable');
- st.notOk(isCallable(Infinity), 'Infinity is not callable');
- st.end();
- });
-
- t.test('strings', function (st) {
- st.notOk(isCallable('foo'), 'string primitive is not callable');
- st.notOk(isCallable(Object('foo')), 'string object is not callable');
- st.end();
+ forEach(v.nonFunctions.concat([
+ Object(42),
+ Object('foo'),
+ NaN,
+ [],
+ /a/g,
+ new RegExp('a', 'g'),
+ new Date()
+ ]), function (nonFunction) {
+ t.equal(isCallable(nonFunction), false, inspect(nonFunction) + ' is not callable');
});
t.test('non-function with function in its [[Prototype]] chain', function (st) {
var Foo = function Bar() {};
Foo.prototype = noop;
- st.equal(true, isCallable(Foo), 'sanity check: Foo is callable');
- st.equal(false, isCallable(new Foo()), 'instance of Foo is not callable');
+ st.equal(isCallable(Foo), true, 'sanity check: Foo is callable');
+ st.equal(isCallable(new Foo()), false, 'instance of Foo is not callable');
st.end();
});
t.end();
});
-test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) {
+test('@@toStringTag', { skip: !hasToStringTag }, function (t) {
var fakeFunction = {
toString: function () { return String(return3); },
valueOf: return3
@@ -114,18 +103,6 @@
t.end();
});
-var typedArrayNames = [
- 'Int8Array',
- 'Uint8Array',
- 'Uint8ClampedArray',
- 'Int16Array',
- 'Uint16Array',
- 'Int32Array',
- 'Uint32Array',
- 'Float32Array',
- 'Float64Array'
-];
-
test('Functions', function (t) {
t.ok(isCallable(noop), 'function is callable');
t.ok(isCallable(classFake), 'function with name containing "class" is callable');
@@ -134,14 +111,9 @@
t.end();
});
-test('Typed Arrays', function (st) {
+test('Typed Arrays', { skip: typedArrayNames.length === 0 }, function (st) {
forEach(typedArrayNames, function (typedArray) {
- /* istanbul ignore if : covered in node 0.6 */
- if (typeof global[typedArray] === 'undefined') {
- st.comment('# SKIP typed array "' + typedArray + '" not supported');
- } else {
- st.ok(isCallable(global[typedArray]), typedArray + ' is callable');
- }
+ st.ok(isCallable(global[typedArray]), typedArray + ' is callable');
});
st.end();
});
diff --git a/node_modules/is-core-module/CHANGELOG.md b/node_modules/is-core-module/CHANGELOG.md
index 717f164..c88cf3d 100644
--- a/node_modules/is-core-module/CHANGELOG.md
+++ b/node_modules/is-core-module/CHANGELOG.md
@@ -5,6 +5,24 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v2.8.0](https://github.com/inspect-js/is-core-module/compare/v2.7.0...v2.8.0) - 2021-10-14
+
+### Commits
+
+- [actions] update codecov uploader [`0cfe94e`](https://github.com/inspect-js/is-core-module/commit/0cfe94e106a7d005ea03e008c0a21dec13a77904)
+- [New] add `readline/promises` to node v17+ [`4f78c30`](https://github.com/inspect-js/is-core-module/commit/4f78c3008b1b58b4db6dc91d99610b1bc859da7e)
+- [Tests] node ^14.18 supports `node:` prefixes for CJS [`43e2f17`](https://github.com/inspect-js/is-core-module/commit/43e2f177452cea2f0eaf34f61b5407217bbdb6f4)
+
+## [v2.7.0](https://github.com/inspect-js/is-core-module/compare/v2.6.0...v2.7.0) - 2021-09-27
+
+### Commits
+
+- [New] node `v14.18` added `node:`-prefixed core modules to `require` [`6d943ab`](https://github.com/inspect-js/is-core-module/commit/6d943abe81382b9bbe344384d80fbfebe1cc0526)
+- [Tests] add coverage for Object.prototype pollution [`c6baf5f`](https://github.com/inspect-js/is-core-module/commit/c6baf5f942311a1945c1af41167bb80b84df2af7)
+- [Dev Deps] update `@ljharb/eslint-config` [`6717f00`](https://github.com/inspect-js/is-core-module/commit/6717f000d063ea57beb772bded36c2f056ac404c)
+- [eslint] fix linter warning [`594c10b`](https://github.com/inspect-js/is-core-module/commit/594c10bb7d39d7eb00925c90924199ff596184b2)
+- [meta] add `sideEffects` flag [`c32cfa5`](https://github.com/inspect-js/is-core-module/commit/c32cfa5195632944c4dd4284a142b8476e75be13)
+
## [v2.6.0](https://github.com/inspect-js/is-core-module/compare/v2.5.0...v2.6.0) - 2021-08-17
### Commits
diff --git a/node_modules/is-core-module/core.json b/node_modules/is-core-module/core.json
index ec741dd..8f4ad12 100644
--- a/node_modules/is-core-module/core.json
+++ b/node_modules/is-core-module/core.json
@@ -1,105 +1,107 @@
{
"assert": true,
- "node:assert": ">= 16",
+ "node:assert": [">= 14.18 && < 15", ">= 16"],
"assert/strict": ">= 15",
"node:assert/strict": ">= 16",
"async_hooks": ">= 8",
- "node:async_hooks": ">= 16",
+ "node:async_hooks": [">= 14.18 && < 15", ">= 16"],
"buffer_ieee754": "< 0.9.7",
"buffer": true,
- "node:buffer": ">= 16",
+ "node:buffer": [">= 14.18 && < 15", ">= 16"],
"child_process": true,
- "node:child_process": ">= 16",
+ "node:child_process": [">= 14.18 && < 15", ">= 16"],
"cluster": true,
- "node:cluster": ">= 16",
+ "node:cluster": [">= 14.18 && < 15", ">= 16"],
"console": true,
- "node:console": ">= 16",
+ "node:console": [">= 14.18 && < 15", ">= 16"],
"constants": true,
- "node:constants": ">= 16",
+ "node:constants": [">= 14.18 && < 15", ">= 16"],
"crypto": true,
- "node:crypto": ">= 16",
+ "node:crypto": [">= 14.18 && < 15", ">= 16"],
"_debug_agent": ">= 1 && < 8",
"_debugger": "< 8",
"dgram": true,
- "node:dgram": ">= 16",
+ "node:dgram": [">= 14.18 && < 15", ">= 16"],
"diagnostics_channel": [">= 14.17 && < 15", ">= 15.1"],
- "node:diagnostics_channel": ">= 16",
+ "node:diagnostics_channel": [">= 14.18 && < 15", ">= 16"],
"dns": true,
- "node:dns": ">= 16",
+ "node:dns": [">= 14.18 && < 15", ">= 16"],
"dns/promises": ">= 15",
"node:dns/promises": ">= 16",
"domain": ">= 0.7.12",
- "node:domain": ">= 16",
+ "node:domain": [">= 14.18 && < 15", ">= 16"],
"events": true,
- "node:events": ">= 16",
+ "node:events": [">= 14.18 && < 15", ">= 16"],
"freelist": "< 6",
"fs": true,
- "node:fs": ">= 16",
+ "node:fs": [">= 14.18 && < 15", ">= 16"],
"fs/promises": [">= 10 && < 10.1", ">= 14"],
- "node:fs/promises": ">= 16",
+ "node:fs/promises": [">= 14.18 && < 15", ">= 16"],
"_http_agent": ">= 0.11.1",
- "node:_http_agent": ">= 16",
+ "node:_http_agent": [">= 14.18 && < 15", ">= 16"],
"_http_client": ">= 0.11.1",
- "node:_http_client": ">= 16",
+ "node:_http_client": [">= 14.18 && < 15", ">= 16"],
"_http_common": ">= 0.11.1",
- "node:_http_common": ">= 16",
+ "node:_http_common": [">= 14.18 && < 15", ">= 16"],
"_http_incoming": ">= 0.11.1",
- "node:_http_incoming": ">= 16",
+ "node:_http_incoming": [">= 14.18 && < 15", ">= 16"],
"_http_outgoing": ">= 0.11.1",
- "node:_http_outgoing": ">= 16",
+ "node:_http_outgoing": [">= 14.18 && < 15", ">= 16"],
"_http_server": ">= 0.11.1",
- "node:_http_server": ">= 16",
+ "node:_http_server": [">= 14.18 && < 15", ">= 16"],
"http": true,
- "node:http": ">= 16",
+ "node:http": [">= 14.18 && < 15", ">= 16"],
"http2": ">= 8.8",
- "node:http2": ">= 16",
+ "node:http2": [">= 14.18 && < 15", ">= 16"],
"https": true,
- "node:https": ">= 16",
+ "node:https": [">= 14.18 && < 15", ">= 16"],
"inspector": ">= 8",
- "node:inspector": ">= 16",
+ "node:inspector": [">= 14.18 && < 15", ">= 16"],
"_linklist": "< 8",
"module": true,
- "node:module": ">= 16",
+ "node:module": [">= 14.18 && < 15", ">= 16"],
"net": true,
- "node:net": ">= 16",
+ "node:net": [">= 14.18 && < 15", ">= 16"],
"node-inspect/lib/_inspect": ">= 7.6 && < 12",
"node-inspect/lib/internal/inspect_client": ">= 7.6 && < 12",
"node-inspect/lib/internal/inspect_repl": ">= 7.6 && < 12",
"os": true,
- "node:os": ">= 16",
+ "node:os": [">= 14.18 && < 15", ">= 16"],
"path": true,
- "node:path": ">= 16",
+ "node:path": [">= 14.18 && < 15", ">= 16"],
"path/posix": ">= 15.3",
"node:path/posix": ">= 16",
"path/win32": ">= 15.3",
"node:path/win32": ">= 16",
"perf_hooks": ">= 8.5",
- "node:perf_hooks": ">= 16",
+ "node:perf_hooks": [">= 14.18 && < 15", ">= 16"],
"process": ">= 1",
- "node:process": ">= 16",
+ "node:process": [">= 14.18 && < 15", ">= 16"],
"punycode": true,
- "node:punycode": ">= 16",
+ "node:punycode": [">= 14.18 && < 15", ">= 16"],
"querystring": true,
- "node:querystring": ">= 16",
+ "node:querystring": [">= 14.18 && < 15", ">= 16"],
"readline": true,
- "node:readline": ">= 16",
+ "node:readline": [">= 14.18 && < 15", ">= 16"],
+ "readline/promises": ">= 17",
+ "node:readline/promises": ">= 17",
"repl": true,
- "node:repl": ">= 16",
+ "node:repl": [">= 14.18 && < 15", ">= 16"],
"smalloc": ">= 0.11.5 && < 3",
"_stream_duplex": ">= 0.9.4",
- "node:_stream_duplex": ">= 16",
+ "node:_stream_duplex": [">= 14.18 && < 15", ">= 16"],
"_stream_transform": ">= 0.9.4",
- "node:_stream_transform": ">= 16",
+ "node:_stream_transform": [">= 14.18 && < 15", ">= 16"],
"_stream_wrap": ">= 1.4.1",
- "node:_stream_wrap": ">= 16",
+ "node:_stream_wrap": [">= 14.18 && < 15", ">= 16"],
"_stream_passthrough": ">= 0.9.4",
- "node:_stream_passthrough": ">= 16",
+ "node:_stream_passthrough": [">= 14.18 && < 15", ">= 16"],
"_stream_readable": ">= 0.9.4",
- "node:_stream_readable": ">= 16",
+ "node:_stream_readable": [">= 14.18 && < 15", ">= 16"],
"_stream_writable": ">= 0.9.4",
- "node:_stream_writable": ">= 16",
+ "node:_stream_writable": [">= 14.18 && < 15", ">= 16"],
"stream": true,
- "node:stream": ">= 16",
+ "node:stream": [">= 14.18 && < 15", ">= 16"],
"stream/consumers": ">= 16.7",
"node:stream/consumers": ">= 16.7",
"stream/promises": ">= 15",
@@ -107,28 +109,28 @@
"stream/web": ">= 16.5",
"node:stream/web": ">= 16.5",
"string_decoder": true,
- "node:string_decoder": ">= 16",
+ "node:string_decoder": [">= 14.18 && < 15", ">= 16"],
"sys": [">= 0.6 && < 0.7", ">= 0.8"],
- "node:sys": ">= 16",
+ "node:sys": [">= 14.18 && < 15", ">= 16"],
"timers": true,
- "node:timers": ">= 16",
+ "node:timers": [">= 14.18 && < 15", ">= 16"],
"timers/promises": ">= 15",
"node:timers/promises": ">= 16",
"_tls_common": ">= 0.11.13",
- "node:_tls_common": ">= 16",
+ "node:_tls_common": [">= 14.18 && < 15", ">= 16"],
"_tls_legacy": ">= 0.11.3 && < 10",
"_tls_wrap": ">= 0.11.3",
- "node:_tls_wrap": ">= 16",
+ "node:_tls_wrap": [">= 14.18 && < 15", ">= 16"],
"tls": true,
- "node:tls": ">= 16",
+ "node:tls": [">= 14.18 && < 15", ">= 16"],
"trace_events": ">= 10",
- "node:trace_events": ">= 16",
+ "node:trace_events": [">= 14.18 && < 15", ">= 16"],
"tty": true,
- "node:tty": ">= 16",
+ "node:tty": [">= 14.18 && < 15", ">= 16"],
"url": true,
- "node:url": ">= 16",
+ "node:url": [">= 14.18 && < 15", ">= 16"],
"util": true,
- "node:util": ">= 16",
+ "node:util": [">= 14.18 && < 15", ">= 16"],
"util/types": ">= 15.3",
"node:util/types": ">= 16",
"v8/tools/arguments": ">= 10 && < 12",
@@ -139,12 +141,12 @@
"v8/tools/profile_view": [">= 4.4 && < 5", ">= 5.2 && < 12"],
"v8/tools/splaytree": [">= 4.4 && < 5", ">= 5.2 && < 12"],
"v8": ">= 1",
- "node:v8": ">= 16",
+ "node:v8": [">= 14.18 && < 15", ">= 16"],
"vm": true,
- "node:vm": ">= 16",
+ "node:vm": [">= 14.18 && < 15", ">= 16"],
"wasi": ">= 13.4 && < 13.5",
"worker_threads": ">= 11.7",
- "node:worker_threads": ">= 16",
+ "node:worker_threads": [">= 14.18 && < 15", ">= 16"],
"zlib": true,
- "node:zlib": ">= 16"
+ "node:zlib": [">= 14.18 && < 15", ">= 16"]
}
diff --git a/node_modules/is-core-module/package.json b/node_modules/is-core-module/package.json
index 14c9dfa..fa90569 100644
--- a/node_modules/is-core-module/package.json
+++ b/node_modules/is-core-module/package.json
@@ -1,8 +1,9 @@
{
"name": "is-core-module",
- "version": "2.6.0",
+ "version": "2.8.0",
"description": "Is this specifier a node.js core module?",
"main": "index.js",
+ "sideEffects": false,
"exports": {
".": [
{
@@ -48,7 +49,7 @@
"has": "^1.0.3"
},
"devDependencies": {
- "@ljharb/eslint-config": "^17.6.0",
+ "@ljharb/eslint-config": "^18.0.0",
"aud": "^1.1.5",
"auto-changelog": "^2.3.0",
"eslint": "^7.32.0",
diff --git a/node_modules/is-core-module/test/index.js b/node_modules/is-core-module/test/index.js
index 59a0055..b688cd2 100644
--- a/node_modules/is-core-module/test/index.js
+++ b/node_modules/is-core-module/test/index.js
@@ -6,7 +6,7 @@
var isCore = require('../');
var data = require('../core.json');
-var supportsNodePrefix = semver.satisfies(process.versions.node, '>= 16', { includePrerelease: true });
+var supportsNodePrefix = semver.satisfies(process.versions.node, '^14.18 || >= 16', { includePrerelease: true });
test('core modules', function (t) {
t.test('isCore()', function (st) {
@@ -104,5 +104,27 @@
st.end();
});
+ t.test('Object.prototype pollution', function (st) {
+ /* eslint no-extend-native: 1 */
+ var nonKey = 'not a core module';
+ st.teardown(function () {
+ delete Object.prototype.fs;
+ delete Object.prototype.path;
+ delete Object.prototype.http;
+ delete Object.prototype[nonKey];
+ });
+ Object.prototype.fs = false;
+ Object.prototype.path = '>= 999999999';
+ Object.prototype.http = data.http;
+ Object.prototype[nonKey] = true;
+
+ st.equal(isCore('fs'), true, 'fs is a core module even if Object.prototype lies');
+ st.equal(isCore('path'), true, 'path is a core module even if Object.prototype lies');
+ st.equal(isCore('http'), true, 'path is a core module even if Object.prototype matches data');
+ st.equal(isCore(nonKey), false, '"' + nonKey + '" is not a core module even if Object.prototype lies');
+
+ st.end();
+ });
+
t.end();
});
diff --git a/node_modules/is-date-object/.jscs.json b/node_modules/is-date-object/.jscs.json
deleted file mode 100644
index b4d9b8b..0000000
--- a/node_modules/is-date-object/.jscs.json
+++ /dev/null
@@ -1,176 +0,0 @@
-{
- "es3": true,
-
- "additionalRules": [],
-
- "requireSemicolons": true,
-
- "disallowMultipleSpaces": true,
-
- "disallowIdentifierNames": [],
-
- "requireCurlyBraces": {
- "allExcept": [],
- "keywords": ["if", "else", "for", "while", "do", "try", "catch"]
- },
-
- "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"],
-
- "disallowSpaceAfterKeywords": [],
-
- "disallowSpaceBeforeComma": true,
- "disallowSpaceAfterComma": false,
- "disallowSpaceBeforeSemicolon": true,
-
- "disallowNodeTypes": [
- "DebuggerStatement",
- "ForInStatement",
- "LabeledStatement",
- "SwitchCase",
- "SwitchStatement",
- "WithStatement"
- ],
-
- "requireObjectKeysOnNewLine": { "allExcept": ["sameLine"] },
-
- "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true },
- "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true },
- "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
- "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true },
- "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
-
- "requireSpaceBetweenArguments": true,
-
- "disallowSpacesInsideParentheses": true,
-
- "disallowSpacesInsideArrayBrackets": true,
-
- "disallowQuotedKeysInObjects": { "allExcept": ["reserved"] },
-
- "disallowSpaceAfterObjectKeys": true,
-
- "requireCommaBeforeLineBreak": true,
-
- "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
- "requireSpaceAfterPrefixUnaryOperators": [],
-
- "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
- "requireSpaceBeforePostfixUnaryOperators": [],
-
- "disallowSpaceBeforeBinaryOperators": [],
- "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
-
- "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
- "disallowSpaceAfterBinaryOperators": [],
-
- "disallowImplicitTypeConversion": ["binary", "string"],
-
- "disallowKeywords": ["with", "eval"],
-
- "requireKeywordsOnNewLine": [],
- "disallowKeywordsOnNewLine": ["else"],
-
- "requireLineFeedAtFileEnd": true,
-
- "disallowTrailingWhitespace": true,
-
- "disallowTrailingComma": true,
-
- "excludeFiles": ["node_modules/**", "vendor/**"],
-
- "disallowMultipleLineStrings": true,
-
- "requireDotNotation": { "allExcept": ["keywords"] },
-
- "requireParenthesesAroundIIFE": true,
-
- "validateLineBreaks": "LF",
-
- "validateQuoteMarks": {
- "escape": true,
- "mark": "'"
- },
-
- "disallowOperatorBeforeLineBreak": [],
-
- "requireSpaceBeforeKeywords": [
- "do",
- "for",
- "if",
- "else",
- "switch",
- "case",
- "try",
- "catch",
- "finally",
- "while",
- "with",
- "return"
- ],
-
- "validateAlignedFunctionParameters": {
- "lineBreakAfterOpeningBraces": true,
- "lineBreakBeforeClosingBraces": true
- },
-
- "requirePaddingNewLinesBeforeExport": true,
-
- "validateNewlineAfterArrayElements": {
- "maximum": 1
- },
-
- "requirePaddingNewLinesAfterUseStrict": true,
-
- "disallowArrowFunctions": true,
-
- "disallowMultiLineTernary": true,
-
- "validateOrderInObjectKeys": "asc-insensitive",
-
- "disallowIdenticalDestructuringNames": true,
-
- "disallowNestedTernaries": { "maxLevel": 1 },
-
- "requireSpaceAfterComma": { "allExcept": ["trailing"] },
- "requireAlignedMultilineParams": false,
-
- "requireSpacesInGenerator": {
- "afterStar": true
- },
-
- "disallowSpacesInGenerator": {
- "beforeStar": true
- },
-
- "disallowVar": false,
-
- "requireArrayDestructuring": false,
-
- "requireEnhancedObjectLiterals": false,
-
- "requireObjectDestructuring": false,
-
- "requireEarlyReturn": false,
-
- "requireCapitalizedConstructorsNew": {
- "allExcept": ["Function", "String", "Object", "Symbol", "Number", "Date", "RegExp", "Error", "Boolean", "Array"]
- },
-
- "requireImportAlphabetized": false,
-
- "requireSpaceBeforeObjectValues": true,
- "requireSpaceBeforeDestructuredValues": true,
-
- "disallowSpacesInsideTemplateStringPlaceholders": true,
-
- "disallowArrayDestructuringReturn": false,
-
- "requireNewlineBeforeSingleStatementsInIf": false,
-
- "disallowUnusedVariables": true,
-
- "requireSpacesInsideImportedObjectBraces": true,
-
- "requireUseStrict": true
-}
-
diff --git a/node_modules/is-date-object/CHANGELOG.md b/node_modules/is-date-object/CHANGELOG.md
index 0f4fbbd..49f624a 100644
--- a/node_modules/is-date-object/CHANGELOG.md
+++ b/node_modules/is-date-object/CHANGELOG.md
@@ -5,6 +5,14 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v1.0.5](https://github.com/inspect-js/is-date-object/compare/v1.0.4...v1.0.5) - 2021-08-05
+
+### Commits
+
+- [meta] remove `.jscs.json` [`31c731c`](https://github.com/inspect-js/is-date-object/commit/31c731c5efc5b1b86e6426d904373dc6225b929f)
+- [Fix] use `has-tostringtag` to behave correctly in the presence of symbol shams [`17a6df4`](https://github.com/inspect-js/is-date-object/commit/17a6df4a3ab9bcb1395a638ced14f571f9549427)
+- [Dev Deps] update `eslint`, `auto-changelog`, `tape` [`79db3af`](https://github.com/inspect-js/is-date-object/commit/79db3af1a745042a0a11e03c7dd7db910b5e0d01)
+
## [v1.0.4](https://github.com/inspect-js/is-date-object/compare/v1.0.3...v1.0.4) - 2021-05-07
### Commits
diff --git a/node_modules/is-date-object/index.js b/node_modules/is-date-object/index.js
index 996c5bb..11628f3 100644
--- a/node_modules/is-date-object/index.js
+++ b/node_modules/is-date-object/index.js
@@ -12,7 +12,7 @@
var toStr = Object.prototype.toString;
var dateClass = '[object Date]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
+var hasToStringTag = require('has-tostringtag/shams')();
module.exports = function isDateObject(value) {
if (typeof value !== 'object' || value === null) {
diff --git a/node_modules/is-date-object/package.json b/node_modules/is-date-object/package.json
index 0807cda..5c2b607 100644
--- a/node_modules/is-date-object/package.json
+++ b/node_modules/is-date-object/package.json
@@ -1,6 +1,6 @@
{
"name": "is-date-object",
- "version": "1.0.4",
+ "version": "1.0.5",
"author": "Jordan Harband",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -31,18 +31,21 @@
"@@toStringTag",
"Date object"
],
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"devDependencies": {
"@ljharb/eslint-config": "^17.6.0",
"aud": "^1.1.5",
- "auto-changelog": "^2.2.1",
+ "auto-changelog": "^2.3.0",
"core-js": "^3.12.0",
- "eslint": "^7.26.0",
+ "eslint": "^7.32.0",
"foreach": "^2.0.5",
"indexof": "^0.0.1",
"is": "^3.3.0",
"nyc": "^10.3.2",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.0"
},
"testling": {
"files": "test/index.js",
diff --git a/node_modules/is-date-object/test/index.js b/node_modules/is-date-object/test/index.js
index 3b2d93f..5279dad 100644
--- a/node_modules/is-date-object/test/index.js
+++ b/node_modules/is-date-object/test/index.js
@@ -2,7 +2,7 @@
var test = require('tape');
var isDate = require('../');
-var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator !== 'undefined';
+var hasToStringTag = require('has-tostringtag/shams')();
test('not Dates', function (t) {
t.notOk(isDate(), 'undefined is not Date');
@@ -19,7 +19,7 @@
t.end();
});
-test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) {
+test('@@toStringTag', { skip: !hasToStringTag }, function (t) {
var realDate = new Date();
var fakeDate = {
toString: function () { return String(realDate); },
diff --git a/node_modules/is-glob/README.md b/node_modules/is-glob/README.md
index 59444eb..740724b 100644
--- a/node_modules/is-glob/README.md
+++ b/node_modules/is-glob/README.md
@@ -1,4 +1,4 @@
-# is-glob [](https://www.npmjs.com/package/is-glob) [](https://npmjs.org/package/is-glob) [](https://npmjs.org/package/is-glob) [](https://travis-ci.org/micromatch/is-glob) [](https://ci.appveyor.com/project/micromatch/is-glob)
+# is-glob [](https://www.npmjs.com/package/is-glob) [](https://npmjs.org/package/is-glob) [](https://npmjs.org/package/is-glob) [](https://github.com/micromatch/is-glob/actions)
> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.
diff --git a/node_modules/is-glob/index.js b/node_modules/is-glob/index.js
index 5582651..620f563 100644
--- a/node_modules/is-glob/index.js
+++ b/node_modules/is-glob/index.js
@@ -7,8 +7,128 @@
var isExtglob = require('is-extglob');
var chars = { '{': '}', '(': ')', '[': ']'};
-var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
-var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
+var strictCheck = function(str) {
+ if (str[0] === '!') {
+ return true;
+ }
+ var index = 0;
+ var pipeIndex = -2;
+ var closeSquareIndex = -2;
+ var closeCurlyIndex = -2;
+ var closeParenIndex = -2;
+ var backSlashIndex = -2;
+ while (index < str.length) {
+ if (str[index] === '*') {
+ return true;
+ }
+
+ if (str[index + 1] === '?' && /[\].+)]/.test(str[index])) {
+ return true;
+ }
+
+ if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {
+ if (closeSquareIndex < index) {
+ closeSquareIndex = str.indexOf(']', index);
+ }
+ if (closeSquareIndex > index) {
+ if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {
+ return true;
+ }
+ backSlashIndex = str.indexOf('\\', index);
+ if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {
+ return true;
+ }
+ }
+ }
+
+ if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {
+ closeCurlyIndex = str.indexOf('}', index);
+ if (closeCurlyIndex > index) {
+ backSlashIndex = str.indexOf('\\', index);
+ if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {
+ return true;
+ }
+ }
+ }
+
+ if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {
+ closeParenIndex = str.indexOf(')', index);
+ if (closeParenIndex > index) {
+ backSlashIndex = str.indexOf('\\', index);
+ if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {
+ return true;
+ }
+ }
+ }
+
+ if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {
+ if (pipeIndex < index) {
+ pipeIndex = str.indexOf('|', index);
+ }
+ if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {
+ closeParenIndex = str.indexOf(')', pipeIndex);
+ if (closeParenIndex > pipeIndex) {
+ backSlashIndex = str.indexOf('\\', pipeIndex);
+ if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {
+ return true;
+ }
+ }
+ }
+ }
+
+ if (str[index] === '\\') {
+ var open = str[index + 1];
+ index += 2;
+ var close = chars[open];
+
+ if (close) {
+ var n = str.indexOf(close, index);
+ if (n !== -1) {
+ index = n + 1;
+ }
+ }
+
+ if (str[index] === '!') {
+ return true;
+ }
+ } else {
+ index++;
+ }
+ }
+ return false;
+};
+
+var relaxedCheck = function(str) {
+ if (str[0] === '!') {
+ return true;
+ }
+ var index = 0;
+ while (index < str.length) {
+ if (/[*?{}()[\]]/.test(str[index])) {
+ return true;
+ }
+
+ if (str[index] === '\\') {
+ var open = str[index + 1];
+ index += 2;
+ var close = chars[open];
+
+ if (close) {
+ var n = str.indexOf(close, index);
+ if (n !== -1) {
+ index = n + 1;
+ }
+ }
+
+ if (str[index] === '!') {
+ return true;
+ }
+ } else {
+ index++;
+ }
+ }
+ return false;
+};
module.exports = function isGlob(str, options) {
if (typeof str !== 'string' || str === '') {
@@ -19,30 +139,12 @@
return true;
}
- var regex = strictRegex;
- var match;
+ var check = strictCheck;
- // optionally relax regex
+ // optionally relax check
if (options && options.strict === false) {
- regex = relaxedRegex;
+ check = relaxedCheck;
}
- 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;
+ return check(str);
};
diff --git a/node_modules/is-glob/package.json b/node_modules/is-glob/package.json
index 806000d..858af03 100644
--- a/node_modules/is-glob/package.json
+++ b/node_modules/is-glob/package.json
@@ -1,7 +1,7 @@
{
"name": "is-glob",
"description": "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.",
- "version": "4.0.1",
+ "version": "4.0.3",
"homepage": "https://github.com/micromatch/is-glob",
"author": "Jon Schlinkert (https://github.com/jonschlinkert)",
"contributors": [
@@ -22,7 +22,7 @@
"node": ">=0.10.0"
},
"scripts": {
- "test": "mocha"
+ "test": "mocha && node benchmark.js"
},
"dependencies": {
"is-extglob": "^2.1.1"
diff --git a/node_modules/is-number-object/.eslintrc b/node_modules/is-number-object/.eslintrc
index a6dec94..c7933f4 100644
--- a/node_modules/is-number-object/.eslintrc
+++ b/node_modules/is-number-object/.eslintrc
@@ -6,4 +6,11 @@
"rules": {
"func-name-matching": 0,
},
+
+ "overrides": [
+ {
+ "files": "test-core-js.js",
+ "extends": "@ljharb/eslint-config/tests",
+ },
+ ],
}
diff --git a/node_modules/is-number-object/.nycrc b/node_modules/is-number-object/.nycrc
index bdd626c..a69aa2d 100644
--- a/node_modules/is-number-object/.nycrc
+++ b/node_modules/is-number-object/.nycrc
@@ -4,6 +4,7 @@
"reporter": ["text-summary", "text", "html", "json"],
"exclude": [
"coverage",
- "test"
+ "test",
+ "test-corejs.js"
]
}
diff --git a/node_modules/is-number-object/CHANGELOG.md b/node_modules/is-number-object/CHANGELOG.md
index d6954eb..fc9ac45 100644
--- a/node_modules/is-number-object/CHANGELOG.md
+++ b/node_modules/is-number-object/CHANGELOG.md
@@ -5,6 +5,14 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v1.0.6](https://github.com/inspect-js/is-number-object/compare/v1.0.5...v1.0.6) - 2021-08-05
+
+### Commits
+
+- [Tests] run tests with core-js as well [`5177312`](https://github.com/inspect-js/is-number-object/commit/51773120b18e27bfe8a3bd228ef2e21f5802f338)
+- [Refactor] use `has-tostringtag` to behave correctly in the presence of symbol shams [`ca2b31d`](https://github.com/inspect-js/is-number-object/commit/ca2b31d81c5d7d9b11e812dee58cd627a6d634e2)
+- [Dev Deps] update `auto-changelog`, `core-js`, `eslint`, `tape` [`50950f9`](https://github.com/inspect-js/is-number-object/commit/50950f962a4b1188c478f6034194d7eb4314c884)
+
## [v1.0.5](https://github.com/inspect-js/is-number-object/compare/v1.0.4...v1.0.5) - 2021-05-07
### Commits
diff --git a/node_modules/is-number-object/index.js b/node_modules/is-number-object/index.js
index 637a4b9..9107c31 100644
--- a/node_modules/is-number-object/index.js
+++ b/node_modules/is-number-object/index.js
@@ -11,7 +11,7 @@
};
var toStr = Object.prototype.toString;
var numClass = '[object Number]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
+var hasToStringTag = require('has-tostringtag/shams')();
module.exports = function isNumberObject(value) {
if (typeof value === 'number') {
diff --git a/node_modules/is-number-object/package.json b/node_modules/is-number-object/package.json
index fe1a494..09ba9a4 100644
--- a/node_modules/is-number-object/package.json
+++ b/node_modules/is-number-object/package.json
@@ -1,6 +1,6 @@
{
"name": "is-number-object",
- "version": "1.0.5",
+ "version": "1.0.6",
"author": "Jordan Harband <[email protected]>",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -13,7 +13,8 @@
"prepublish": "not-in-publish || npm run prepublishOnly",
"pretest": "npm run lint",
"tests-only": "nyc tape 'test/**/*.js'",
- "test": "npm run tests-only",
+ "test:corejs": "nyc tape test-corejs.js",
+ "test": "npm run tests-only && npm run test:corejs",
"posttest": "npx aud --production",
"lint": "eslint .",
"eccheck": "eclint check *.js **/*.js > /dev/null",
@@ -34,17 +35,16 @@
"devDependencies": {
"@ljharb/eslint-config": "^17.6.0",
"aud": "^1.1.5",
- "auto-changelog": "^2.2.1",
- "core-js": "^3.12.0",
+ "auto-changelog": "^2.3.0",
+ "core-js": "^3.16.0",
"eclint": "^2.8.1",
- "eslint": "^7.25.0",
+ "eslint": "^7.32.0",
"foreach": "^2.0.5",
- "has-symbols": "^1.0.2",
"indexof": "^0.0.1",
"is": "^3.3.0",
"nyc": "^10.3.2",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.0"
},
"testling": {
"files": "test/index.js",
@@ -74,5 +74,8 @@
"commitLimit": false,
"backfillLimit": false,
"hideCredit": true
+ },
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
}
}
diff --git a/node_modules/is-number-object/test/corejs.js b/node_modules/is-number-object/test/corejs.js
deleted file mode 100644
index 73f0c89..0000000
--- a/node_modules/is-number-object/test/corejs.js
+++ /dev/null
@@ -1,5 +0,0 @@
-'use strict';
-
-require('core-js');
-
-require('./');
diff --git a/node_modules/is-number-object/test/index.js b/node_modules/is-number-object/test/index.js
index 04ada7d..bca48b2 100644
--- a/node_modules/is-number-object/test/index.js
+++ b/node_modules/is-number-object/test/index.js
@@ -2,7 +2,7 @@
var test = require('tape');
var isNumber = require('../');
-var hasSymbols = require('has-symbols/shams')();
+var hasToStringTag = require('has-tostringtag/shams')();
test('not Numbers', function (t) {
t.notOk(isNumber(), 'undefined is not Number');
@@ -19,7 +19,7 @@
t.end();
});
-test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) {
+test('@@toStringTag', { skip: !hasToStringTag }, function (t) {
var fakeNumber = {
toString: function () { return '7'; },
valueOf: function () { return 42; }
diff --git a/node_modules/is-regex/CHANGELOG.md b/node_modules/is-regex/CHANGELOG.md
index 3b2a48c..b7496b2 100644
--- a/node_modules/is-regex/CHANGELOG.md
+++ b/node_modules/is-regex/CHANGELOG.md
@@ -5,6 +5,13 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v1.1.4](https://github.com/inspect-js/is-regex/compare/v1.1.3...v1.1.4) - 2021-08-05
+
+### Commits
+
+- [Dev Deps] update `auto-changelog`, `core-js`, `eslint`, `tape` [`4b17cad`](https://github.com/inspect-js/is-regex/commit/4b17cad8496b1ae621b18335fa3afe94d0c65e83)
+- [Refactor] use `has-tostringtag` to behave correctly in the presence of symbol shams [`2dad4af`](https://github.com/inspect-js/is-regex/commit/2dad4afffa15f07cbbf7675b77d1f650c92652c4)
+
## [v1.1.3](https://github.com/inspect-js/is-regex/compare/v1.1.2...v1.1.3) - 2021-05-07
### Commits
diff --git a/node_modules/is-regex/index.js b/node_modules/is-regex/index.js
index 80a2d33..19780f4 100644
--- a/node_modules/is-regex/index.js
+++ b/node_modules/is-regex/index.js
@@ -1,8 +1,7 @@
'use strict';
var callBound = require('call-bind/callBound');
-var hasSymbols = require('has-symbols/shams')();
-var hasToStringTag = hasSymbols && !!Symbol.toStringTag;
+var hasToStringTag = require('has-tostringtag/shams')();
var has;
var $exec;
var isRegexMarker;
diff --git a/node_modules/is-regex/package.json b/node_modules/is-regex/package.json
index 39644c9..8b8e873 100644
--- a/node_modules/is-regex/package.json
+++ b/node_modules/is-regex/package.json
@@ -1,6 +1,6 @@
{
"name": "is-regex",
- "version": "1.1.3",
+ "version": "1.1.4",
"description": "Is this value a JS regex? Works cross-realm/iframe, and despite ES6 @@toStringTag",
"author": "Jordan Harband <[email protected]>",
"funding": {
@@ -40,19 +40,19 @@
],
"dependencies": {
"call-bind": "^1.0.2",
- "has-symbols": "^1.0.2"
+ "has-tostringtag": "^1.0.0"
},
"devDependencies": {
"@ljharb/eslint-config": "^17.6.0",
"aud": "^1.1.5",
- "auto-changelog": "^2.2.1",
- "core-js": "^3.12.0",
+ "auto-changelog": "^2.3.0",
+ "core-js": "^3.16.0",
"eclint": "^2.8.1",
- "eslint": "^7.26.0",
+ "eslint": "^7.32.0",
"foreach": "^2.0.5",
"nyc": "^10.3.2",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.0"
},
"testling": {
"files": "test/index.js",
diff --git a/node_modules/is-regex/test/index.js b/node_modules/is-regex/test/index.js
index 93ea4e4..f6c0802 100644
--- a/node_modules/is-regex/test/index.js
+++ b/node_modules/is-regex/test/index.js
@@ -1,7 +1,6 @@
'use strict';
-var hasSymbols = require('has-symbols/shams')();
-var hasToStringTag = hasSymbols && !!Symbol.toStringTag;
+var hasToStringTag = require('has-tostringtag/shams')();
var forEach = require('foreach');
var test = require('tape');
var isRegex = require('..');
diff --git a/node_modules/is-shared-array-buffer/.eslintignore b/node_modules/is-shared-array-buffer/.eslintignore
new file mode 100644
index 0000000..404abb2
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/node_modules/is-shared-array-buffer/.eslintrc b/node_modules/is-shared-array-buffer/.eslintrc
new file mode 100644
index 0000000..be05ad8
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/.eslintrc
@@ -0,0 +1,18 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "operator-linebreak": [2, "before"],
+ },
+
+ "overrides": [
+ {
+ "files": "test/**",
+ "globals": {
+ "SharedArrayBuffer": false,
+ },
+ },
+ ],
+}
diff --git a/node_modules/is-shared-array-buffer/.github/FUNDING.yml b/node_modules/is-shared-array-buffer/.github/FUNDING.yml
new file mode 100644
index 0000000..61db3c4
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/is-shared-array-buffer
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/is-shared-array-buffer/.nycrc b/node_modules/is-shared-array-buffer/.nycrc
new file mode 100644
index 0000000..1826526
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/.nycrc
@@ -0,0 +1,13 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "lines": 86,
+ "statements": 85.93,
+ "functions": 82.43,
+ "branches": 76.06,
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/is-shared-array-buffer/CHANGELOG.md b/node_modules/is-shared-array-buffer/CHANGELOG.md
new file mode 100644
index 0000000..572eea2
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/CHANGELOG.md
@@ -0,0 +1,28 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.0.1](https://github.com/inspect-js/is-shared-array-buffer/compare/v1.0.0...v1.0.1) - 2021-03-04
+
+### Commits
+
+- [readme] fix repo URLs [`37c38f3`](https://github.com/inspect-js/is-shared-array-buffer/commit/37c38f347392da177197dd2fd518b61240a56203)
+
+## v1.0.0 - 2021-03-04
+
+### Commits
+
+- [Tests] add tests [`9c7b806`](https://github.com/inspect-js/is-shared-array-buffer/commit/9c7b806ab1528814308a7420f8198644f55c916f)
+- Initial commit [`4e65c5e`](https://github.com/inspect-js/is-shared-array-buffer/commit/4e65c5ecdaa255162bc6507de4ff98cea2472e3b)
+- [meta] do not publish github action workflow files [`ac3693d`](https://github.com/inspect-js/is-shared-array-buffer/commit/ac3693db8ec26db5444ef4b46aa38a81e8841d30)
+- readme [`7a984d0`](https://github.com/inspect-js/is-shared-array-buffer/commit/7a984d0db73b77943f6731098134e3351a36793b)
+- npm init [`a586c99`](https://github.com/inspect-js/is-shared-array-buffer/commit/a586c99316f3c8ae4fd5125621ea933e97a1bf1b)
+- [actions] add automatic rebasing / merge commit blocking [`184fe62`](https://github.com/inspect-js/is-shared-array-buffer/commit/184fe622680d523e89ac322fa1a52dbba46a8fc0)
+- Implementation [`207e26d`](https://github.com/inspect-js/is-shared-array-buffer/commit/207e26d1128930f28384cb213b38d69fd52bbd7c)
+- [meta] create `FUNDING.yml`; add "funding" field [`3cad3fc`](https://github.com/inspect-js/is-shared-array-buffer/commit/3cad3fc9509f91fbc71e84565529f53a94d538d4)
+- [meta] add auto-changelog [`31f1f2c`](https://github.com/inspect-js/is-shared-array-buffer/commit/31f1f2cbcd616d6c09089d62198d5cc775053324)
+- [Tests] add `npm run lint` [`2e5146e`](https://github.com/inspect-js/is-shared-array-buffer/commit/2e5146e18f44533382a781fa09a50d4f47caa0e5)
+- Only apps should have lockfiles [`7b2adfa`](https://github.com/inspect-js/is-shared-array-buffer/commit/7b2adfad6dcd95271ab6ba34658a9a1a21dbeacf)
diff --git a/node_modules/load-json-file/license b/node_modules/is-shared-array-buffer/LICENSE
similarity index 83%
copy from node_modules/load-json-file/license
copy to node_modules/is-shared-array-buffer/LICENSE
index 654d0bf..7948bc0 100644
--- a/node_modules/load-json-file/license
+++ b/node_modules/is-shared-array-buffer/LICENSE
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
+Copyright (c) 2021 Inspect JS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -9,13 +9,13 @@
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 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.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/is-shared-array-buffer/README.md b/node_modules/is-shared-array-buffer/README.md
new file mode 100644
index 0000000..b5d4d4d
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/README.md
@@ -0,0 +1,52 @@
+# is-shared-array-buffer <sup>[![Version Badge][2]][1]</sup>
+
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+Is this value a JS SharedArrayBuffer? This module works cross-realm/iframe, does not depend on `instanceof` or mutable properties, and despite ES6 Symbol.toStringTag.
+
+## Example
+
+```js
+var assert = require('assert');
+var isSharedArrayBuffer = require('is-shared-array-buffer');
+
+assert(!isSharedArrayBuffer(function () {}));
+assert(!isSharedArrayBuffer(null));
+assert(!isSharedArrayBuffer(function* () { yield 42; return Infinity; });
+assert(!isSharedArrayBuffer(Symbol('foo')));
+assert(!isSharedArrayBuffer(1n));
+assert(!isSharedArrayBuffer(Object(1n)));
+
+assert(!isSharedArrayBuffer(new Set()));
+assert(!isSharedArrayBuffer(new WeakSet()));
+assert(!isSharedArrayBuffer(new Map()));
+assert(!isSharedArrayBuffer(new WeakMap()));
+assert(!isSharedArrayBuffer(new WeakRef({})));
+assert(!isSharedArrayBuffer(new FinalizationRegistry(() => {})));
+assert(!isSharedArrayBuffer(new ArrayBuffer()));
+
+assert(isSharedArrayBuffer(new SharedArrayBuffer()));
+
+class MySharedArrayBuffer extends SharedArrayBuffer {}
+assert(isSharedArrayBuffer(new MySharedArrayBuffer()));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/is-shared-array-buffer
+[2]: https://versionbadg.es/inspect-js/is-shared-array-buffer.svg
+[5]: https://david-dm.org/inspect-js/is-shared-array-buffer.svg
+[6]: https://david-dm.org/inspect-js/is-shared-array-buffer
+[7]: https://david-dm.org/inspect-js/is-shared-array-buffer/dev-status.svg
+[8]: https://david-dm.org/inspect-js/is-shared-array-buffer#info=devDependencies
+[11]: https://nodei.co/npm/is-shared-array-buffer.png?downloads=true&stars=true
+[license-image]: https://img.shields.io/npm/l/is-shared-array-buffer.svg
+[license-url]: LICENSE
+[downloads-image]: https://img.shields.io/npm/dm/is-shared-array-buffer.svg
+[downloads-url]: https://npm-stat.com/charts.html?package=is-shared-array-buffer
diff --git a/node_modules/is-shared-array-buffer/index.js b/node_modules/is-shared-array-buffer/index.js
new file mode 100644
index 0000000..8704304
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/index.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var callBound = require('call-bind/callBound');
+
+var $byteLength = callBound('SharedArrayBuffer.prototype.byteLength', true);
+
+module.exports = $byteLength
+ ? function isSharedArrayBuffer(obj) {
+ if (!obj || typeof obj !== 'object') {
+ return false;
+ }
+ try {
+ $byteLength(obj);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+ : function isSharedArrayBuffer(obj) { // eslint-disable-line no-unused-vars
+ return false;
+ };
diff --git a/node_modules/is-shared-array-buffer/package.json b/node_modules/is-shared-array-buffer/package.json
new file mode 100644
index 0000000..1bee69d
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/package.json
@@ -0,0 +1,64 @@
+{
+ "name": "is-shared-array-buffer",
+ "version": "1.0.1",
+ "author": {
+ "name": "Jordan Harband",
+ "email": "[email protected]",
+ "url": "http://ljharb.codes"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "description": "Is this value a JS SharedArrayBuffer?",
+ "license": "MIT",
+ "main": "index.js",
+ "exports": {
+ ".": "./index.js",
+ "./package.json": "./package.json"
+ },
+ "scripts": {
+ "lint": "eslint --ext=.js,.mjs .",
+ "pretest": "npm run lint",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "test": "npm run tests-only --",
+ "posttest": "aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/inspect-js/is-shared-array-buffer.git"
+ },
+ "keywords": [
+ "javascript",
+ "ecmascript",
+ "is",
+ "sharedarraybuffer",
+ "shared",
+ "array",
+ "buffer"
+ ],
+ "bugs": {
+ "url": "https://github.com/inspect-js/is-shared-array-buffer/issues"
+ },
+ "homepage": "https://github.com/inspect-js/is-shared-array-buffer#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.5.1",
+ "aud": "^1.1.4",
+ "auto-changelog": "^2.2.1",
+ "es-value-fixtures": "^1.2.1",
+ "eslint": "^7.21.0",
+ "for-each": "^0.3.3",
+ "nyc": "^10.3.2",
+ "object-inspect": "^1.9.0",
+ "tape": "^5.2.2"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/node_modules/is-shared-array-buffer/test/index.js b/node_modules/is-shared-array-buffer/test/index.js
new file mode 100644
index 0000000..9bc2c56
--- /dev/null
+++ b/node_modules/is-shared-array-buffer/test/index.js
@@ -0,0 +1,27 @@
+'use strict';
+
+var test = require('tape');
+var inspect = require('object-inspect');
+var forEach = require('for-each');
+var v = require('es-value-fixtures');
+
+var isSharedArrayBuffer = require('..');
+
+test('isSharedArrayBuffer', function (t) {
+ t.equal(typeof isSharedArrayBuffer, 'function', 'is a function');
+
+ var nonSABs = v.primitives.concat(v.objects);
+ forEach(nonSABs, function (nonSAB) {
+ t.equal(isSharedArrayBuffer(nonSAB), false, inspect(nonSAB) + ' is not a SharedArrayBuffer');
+ });
+
+ t.test('actual SharedArrayBuffer instances', { skip: typeof SharedArrayBuffer === 'undefined' }, function (st) {
+ var sab = new SharedArrayBuffer();
+
+ st.equal(isSharedArrayBuffer(sab), true, inspect(sab) + ' is a SharedArrayBuffer');
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/is-string/CHANGELOG.md b/node_modules/is-string/CHANGELOG.md
index 9334c53..6f62043 100644
--- a/node_modules/is-string/CHANGELOG.md
+++ b/node_modules/is-string/CHANGELOG.md
@@ -7,6 +7,13 @@
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+## [v1.0.7](https://github.com/inspect-js/is-string/compare/v1.0.6...v1.0.7) - 2021-08-05
+
+### Commits
+
+- [Refactor] use `has-tostringtag` to behave correctly in the presence of symbol shams [`d973ffd`](https://github.com/inspect-js/is-string/commit/d973ffd2268e10c0e2cd4f0c57ecf8ce0a8d8578)
+- [Dev Deps] update `auto-changelog`, `core-js`, `eslint`, `tape` [`4bfaabf`](https://github.com/inspect-js/is-string/commit/4bfaabf877e874ca21d2c44be26f13add8ee2761)
+
## [v1.0.6](https://github.com/inspect-js/is-string/compare/v1.0.5...v1.0.6) - 2021-05-07
### Commits
diff --git a/node_modules/is-string/index.js b/node_modules/is-string/index.js
index 5f77f03..f44f7bb 100644
--- a/node_modules/is-string/index.js
+++ b/node_modules/is-string/index.js
@@ -11,7 +11,7 @@
};
var toStr = Object.prototype.toString;
var strClass = '[object String]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
+var hasToStringTag = require('has-tostringtag/shams')();
module.exports = function isString(value) {
if (typeof value === 'string') {
diff --git a/node_modules/is-string/package.json b/node_modules/is-string/package.json
index 49758a3..d434396 100644
--- a/node_modules/is-string/package.json
+++ b/node_modules/is-string/package.json
@@ -1,6 +1,6 @@
{
"name": "is-string",
- "version": "1.0.6",
+ "version": "1.0.7",
"author": "Jordan Harband <[email protected]>",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -33,19 +33,22 @@
"@@toStringTag",
"String object"
],
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"devDependencies": {
"@ljharb/eslint-config": "^17.6.0",
"aud": "^1.1.5",
- "auto-changelog": "^2.2.1",
- "core-js": "^3.12.0",
+ "auto-changelog": "^2.3.0",
+ "core-js": "^3.16.0",
"eclint": "^2.8.1",
- "eslint": "^7.26.0",
+ "eslint": "^7.32.0",
"foreach": "^2.0.5",
"indexof": "^0.0.1",
"is": "^3.3.0",
"nyc": "^10.3.2",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.0"
},
"testling": {
"files": "test/index.js",
diff --git a/node_modules/is-string/test/index.js b/node_modules/is-string/test/index.js
index 8fbba42..5239dfa 100644
--- a/node_modules/is-string/test/index.js
+++ b/node_modules/is-string/test/index.js
@@ -2,7 +2,7 @@
var test = require('tape');
var isString = require('../');
-var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator !== 'undefined';
+var hasToStringTag = require('has-tostringtag/shams')();
test('not Strings', function (t) {
t.notOk(isString(), 'undefined is not String');
@@ -22,7 +22,7 @@
t.end();
});
-test('@@toStringTag', { skip: !hasSymbols || !Symbol.toStringTag }, function (t) {
+test('@@toStringTag', { skip: !hasToStringTag }, function (t) {
var fakeString = {
toString: function () { return '7'; },
valueOf: function () { return '42'; }
diff --git a/node_modules/is-weakref/.eslintignore b/node_modules/is-weakref/.eslintignore
new file mode 100644
index 0000000..404abb2
--- /dev/null
+++ b/node_modules/is-weakref/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/node_modules/is-weakref/.eslintrc b/node_modules/is-weakref/.eslintrc
new file mode 100644
index 0000000..fe9b28b
--- /dev/null
+++ b/node_modules/is-weakref/.eslintrc
@@ -0,0 +1,13 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "globals": {
+ "WeakRef": false,
+ },
+
+ "rules": {
+ "operator-linebreak": [2, "before"],
+ },
+}
diff --git a/node_modules/is-weakref/.github/FUNDING.yml b/node_modules/is-weakref/.github/FUNDING.yml
new file mode 100644
index 0000000..a9ccddf
--- /dev/null
+++ b/node_modules/is-weakref/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/is-weakref
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/is-weakref/.github/workflows/node-4+.yml b/node_modules/is-weakref/.github/workflows/node-4+.yml
new file mode 100644
index 0000000..ba174e1
--- /dev/null
+++ b/node_modules/is-weakref/.github/workflows/node-4+.yml
@@ -0,0 +1,54 @@
+name: 'Tests: node.js'
+
+on: [pull_request, push]
+
+jobs:
+ matrix:
+ runs-on: ubuntu-latest
+ outputs:
+ latest: ${{ steps.set-matrix.outputs.requireds }}
+ minors: ${{ steps.set-matrix.outputs.optionals }}
+ steps:
+ - uses: ljharb/actions/node/matrix@main
+ id: set-matrix
+ with:
+ preset: '>=4'
+
+ latest:
+ needs: [matrix]
+ name: 'latest minors'
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix: ${{ fromJson(needs.matrix.outputs.latest) }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ name: 'npm install && npm run tests-only'
+ with:
+ node-version: ${{ matrix.node-version }}
+ command: 'tests-only'
+ minors:
+ needs: [matrix, latest]
+ name: 'non-latest minors'
+ continue-on-error: true
+ if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }}
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix: ${{ fromJson(needs.matrix.outputs.minors) }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ with:
+ node-version: ${{ matrix.node-version }}
+ command: 'tests-only'
+
+ node:
+ name: 'node 4+'
+ needs: [latest, minors]
+ runs-on: ubuntu-latest
+ steps:
+ - run: 'echo tests completed'
diff --git a/node_modules/is-weakref/.github/workflows/node-iojs.yml b/node_modules/is-weakref/.github/workflows/node-iojs.yml
new file mode 100644
index 0000000..f707c3c
--- /dev/null
+++ b/node_modules/is-weakref/.github/workflows/node-iojs.yml
@@ -0,0 +1,58 @@
+name: 'Tests: node.js (io.js)'
+
+on: [pull_request, push]
+
+jobs:
+ matrix:
+ runs-on: ubuntu-latest
+ outputs:
+ latest: ${{ steps.set-matrix.outputs.requireds }}
+ minors: ${{ steps.set-matrix.outputs.optionals }}
+ steps:
+ - uses: ljharb/actions/node/matrix@main
+ id: set-matrix
+ with:
+ preset: 'iojs'
+
+ latest:
+ needs: [matrix]
+ name: 'latest minors'
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix: ${{ fromJson(needs.matrix.outputs.latest) }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ name: 'npm install && npm run tests-only'
+ with:
+ node-version: ${{ matrix.node-version }}
+ command: 'tests-only'
+ skip-ls-check: true
+
+ minors:
+ needs: [matrix, latest]
+ name: 'non-latest minors'
+ continue-on-error: true
+ if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }}
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix: ${{ fromJson(needs.matrix.outputs.minors) }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ name: 'npm install && npm run tests-only'
+ with:
+ node-version: ${{ matrix.node-version }}
+ command: 'tests-only'
+ skip-ls-check: true
+
+ node:
+ name: 'io.js'
+ needs: [latest, minors]
+ runs-on: ubuntu-latest
+ steps:
+ - run: 'echo tests completed'
diff --git a/node_modules/is-weakref/.github/workflows/node-pretest.yml b/node_modules/is-weakref/.github/workflows/node-pretest.yml
new file mode 100644
index 0000000..3921e0a
--- /dev/null
+++ b/node_modules/is-weakref/.github/workflows/node-pretest.yml
@@ -0,0 +1,26 @@
+name: 'Tests: pretest/posttest'
+
+on: [pull_request, push]
+
+jobs:
+ pretest:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ name: 'npm install && npm run pretest'
+ with:
+ node-version: 'lts/*'
+ command: 'pretest'
+
+ posttest:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ name: 'npm install && npm run posttest'
+ with:
+ node-version: 'lts/*'
+ command: 'posttest'
diff --git a/node_modules/is-weakref/.github/workflows/node-zero.yml b/node_modules/is-weakref/.github/workflows/node-zero.yml
new file mode 100644
index 0000000..2435bf2
--- /dev/null
+++ b/node_modules/is-weakref/.github/workflows/node-zero.yml
@@ -0,0 +1,60 @@
+name: 'Tests: node.js (0.x)'
+
+on: [pull_request, push]
+
+jobs:
+ matrix:
+ runs-on: ubuntu-latest
+ outputs:
+ stable: ${{ steps.set-matrix.outputs.requireds }}
+ unstable: ${{ steps.set-matrix.outputs.optionals }}
+ steps:
+ - uses: ljharb/actions/node/matrix@main
+ id: set-matrix
+ with:
+ preset: '0.x'
+
+ stable:
+ needs: [matrix]
+ name: 'stable minors'
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix: ${{ fromJson(needs.matrix.outputs.stable) }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ name: 'npm install && npm run tests-only'
+ with:
+ node-version: ${{ matrix.node-version }}
+ command: 'tests-only'
+ cache-node-modules-key: node_modules-${{ github.workflow }}-${{ github.action }}-${{ github.run_id }}
+ skip-ls-check: true
+
+ unstable:
+ needs: [matrix, stable]
+ name: 'unstable minors'
+ continue-on-error: true
+ if: ${{ !github.head_ref || !startsWith(github.head_ref, 'renovate') }}
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix: ${{ fromJson(needs.matrix.outputs.unstable) }}
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/actions/node/run@main
+ name: 'npm install && npm run tests-only'
+ with:
+ node-version: ${{ matrix.node-version }}
+ command: 'tests-only'
+ cache-node-modules-key: node_modules-${{ github.workflow }}-${{ github.action }}-${{ github.run_id }}
+ skip-ls-check: true
+
+ node:
+ name: 'node 0.x'
+ needs: [stable, unstable]
+ runs-on: ubuntu-latest
+ steps:
+ - run: 'echo tests completed'
diff --git a/node_modules/is-weakref/.github/workflows/rebase.yml b/node_modules/is-weakref/.github/workflows/rebase.yml
new file mode 100644
index 0000000..027aed0
--- /dev/null
+++ b/node_modules/is-weakref/.github/workflows/rebase.yml
@@ -0,0 +1,15 @@
+name: Automatic Rebase
+
+on: [pull_request_target]
+
+jobs:
+ _:
+ name: "Automatic Rebase"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: ljharb/rebase@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/node_modules/is-weakref/.github/workflows/require-allow-edits.yml b/node_modules/is-weakref/.github/workflows/require-allow-edits.yml
new file mode 100644
index 0000000..549d7b4
--- /dev/null
+++ b/node_modules/is-weakref/.github/workflows/require-allow-edits.yml
@@ -0,0 +1,12 @@
+name: Require “Allow Edits”
+
+on: [pull_request_target]
+
+jobs:
+ _:
+ name: "Require “Allow Edits”"
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: ljharb/require-allow-edits@main
diff --git a/node_modules/is-weakref/.nycrc b/node_modules/is-weakref/.nycrc
new file mode 100644
index 0000000..1826526
--- /dev/null
+++ b/node_modules/is-weakref/.nycrc
@@ -0,0 +1,13 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "lines": 86,
+ "statements": 85.93,
+ "functions": 82.43,
+ "branches": 76.06,
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/is-weakref/CHANGELOG.md b/node_modules/is-weakref/CHANGELOG.md
new file mode 100644
index 0000000..14eb2ee
--- /dev/null
+++ b/node_modules/is-weakref/CHANGELOG.md
@@ -0,0 +1,34 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.0.1](https://github.com/inspect-js/is-weakref/compare/v1.0.0...v1.0.1) - 2020-12-04
+
+### Commits
+
+- [Tests] migrate tests to Github Actions [`05b4faa`](https://github.com/inspect-js/is-weakref/commit/05b4faa167c67f42c792e35c07adcb6b87e7dea0)
+- [Tests] run `nyc` on all tests [`8df2e4b`](https://github.com/inspect-js/is-weakref/commit/8df2e4bd66bb6b7d55f389f28e6bb167fe1deb5a)
+- [actions] add "Allow Edits" workflow [`4a716b8`](https://github.com/inspect-js/is-weakref/commit/4a716b8fcc025fe889a0f09ccaee7a9f748b1c66)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect` [`be23cf3`](https://github.com/inspect-js/is-weakref/commit/be23cf305f46db8b1c8a26d1c74b096fdba00056)
+- [Refactor] use `call-bind` instead of `es-abstract` [`a933a96`](https://github.com/inspect-js/is-weakref/commit/a933a9643ddf7cddfd9f9f3cf44d675cc4c86ce5)
+- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`4473ed2`](https://github.com/inspect-js/is-weakref/commit/4473ed2e73fed47cd2fa42b8d9cac17e941d2c08)
+- [readme] remove travis badge [`bd3bfcd`](https://github.com/inspect-js/is-weakref/commit/bd3bfcd2c187099d2215232a7621fb960e1e2807)
+
+## v1.0.0 - 2020-08-01
+
+### Commits
+
+- Initial commit [`dd86394`](https://github.com/inspect-js/is-weakref/commit/dd86394d7da000724c6e17c79077879c381e9ea3)
+- readme [`f4defca`](https://github.com/inspect-js/is-weakref/commit/f4defcac48d1d99b019b596ab26bd868de1adfe9)
+- Tests [`13d8139`](https://github.com/inspect-js/is-weakref/commit/13d8139dedf424239daf357261c39d3f8c33d662)
+- npm init [`55a2bb7`](https://github.com/inspect-js/is-weakref/commit/55a2bb7c53b893396a51da969e352702cafe9a0e)
+- Implementation [`1ec84e3`](https://github.com/inspect-js/is-weakref/commit/1ec84e36de4315d44c8da540faa27836832bb0f3)
+- [meta] add auto-changelog [`ab9ce44`](https://github.com/inspect-js/is-weakref/commit/ab9ce44be717312c5221bf3d2f3f6d2dd8c6ac88)
+- [actions] add automatic rebasing / merge commit blocking [`3d3f4d5`](https://github.com/inspect-js/is-weakref/commit/3d3f4d54bed6e455b2a0d0f20c87d454bf78af26)
+- [meta] add "funding"; create `FUNDING.yml` [`f35ef3d`](https://github.com/inspect-js/is-weakref/commit/f35ef3de16eb06447acf3c39bdc164ba0e7bdf45)
+- [Tests] add `npm run lint` [`af2123d`](https://github.com/inspect-js/is-weakref/commit/af2123d4754c14f7befa66ba01e1d72858723651)
+- [Tests] use shared travis-ci configs [`042b4de`](https://github.com/inspect-js/is-weakref/commit/042b4dec08d882ae9137f4ad05ae24a1457da0f8)
+- Only apps should have lockfiles [`fcae604`](https://github.com/inspect-js/is-weakref/commit/fcae604cb1422faae9311dd4219032895c0a9a2e)
diff --git a/node_modules/load-json-file/license b/node_modules/is-weakref/LICENSE
similarity index 83%
rename from node_modules/load-json-file/license
rename to node_modules/is-weakref/LICENSE
index 654d0bf..707437b 100644
--- a/node_modules/load-json-file/license
+++ b/node_modules/is-weakref/LICENSE
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
+Copyright (c) 2020 Inspect JS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -9,13 +9,13 @@
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 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.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/is-weakref/README.md b/node_modules/is-weakref/README.md
new file mode 100644
index 0000000..b103b5c
--- /dev/null
+++ b/node_modules/is-weakref/README.md
@@ -0,0 +1,47 @@
+# is-weakref <sup>[![Version Badge][2]][1]</sup>
+
+[![dependency status][5]][6]
+[![dev dependency status][7]][8]
+[![License][license-image]][license-url]
+[![Downloads][downloads-image]][downloads-url]
+
+[![npm badge][11]][1]
+
+Is this value a JS WeakRef? This module works cross-realm/iframe, and despite ES6 @@toStringTag.
+
+## Example
+
+```js
+var isWeakRef = require('is-weakref');
+assert(!isWeakRef(function () {}));
+assert(!isWeakRef(null));
+assert(!isWeakRef(function* () { yield 42; return Infinity; });
+assert(!isWeakRef(Symbol('foo')));
+assert(!isWeakRef(1n));
+assert(!isWeakRef(Object(1n)));
+
+assert(!isWeakRef(new Set()));
+assert(!isWeakRef(new WeakSet()));
+assert(!isWeakRef(new Map()));
+assert(!isWeakRef(new WeakMap()));
+
+assert(isWeakRef(new WeakRef({})));
+
+class MyWeakRef extends WeakRef {}
+assert(isWeakRef(new MyWeakRef({})));
+```
+
+## Tests
+Simply clone the repo, `npm install`, and run `npm test`
+
+[1]: https://npmjs.org/package/is-weakref
+[2]: http://versionbadg.es/inspect-js/is-weakref.svg
+[5]: https://david-dm.org/inspect-js/is-weakref.svg
+[6]: https://david-dm.org/inspect-js/is-weakref
+[7]: https://david-dm.org/inspect-js/is-weakref/dev-status.svg
+[8]: https://david-dm.org/inspect-js/is-weakref#info=devDependencies
+[11]: https://nodei.co/npm/is-weakref.png?downloads=true&stars=true
+[license-image]: http://img.shields.io/npm/l/is-weakref.svg
+[license-url]: LICENSE
+[downloads-image]: http://img.shields.io/npm/dm/is-weakref.svg
+[downloads-url]: http://npm-stat.com/charts.html?package=is-weakref
diff --git a/node_modules/is-weakref/index.js b/node_modules/is-weakref/index.js
new file mode 100644
index 0000000..90769f8
--- /dev/null
+++ b/node_modules/is-weakref/index.js
@@ -0,0 +1,21 @@
+'use strict';
+
+var callBound = require('call-bind/callBound');
+
+var $deref = callBound('WeakRef.prototype.deref', true);
+
+module.exports = typeof WeakRef === 'undefined'
+ ? function isWeakRef(value) { // eslint-disable-line no-unused-vars
+ return false;
+ }
+ : function isWeakRef(value) {
+ if (!value || typeof value !== 'object') {
+ return false;
+ }
+ try {
+ $deref(value);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ };
diff --git a/node_modules/is-weakref/package.json b/node_modules/is-weakref/package.json
new file mode 100644
index 0000000..5795f60
--- /dev/null
+++ b/node_modules/is-weakref/package.json
@@ -0,0 +1,64 @@
+{
+ "name": "is-weakref",
+ "version": "1.0.1",
+ "description": "Is this value a JS WeakRef? This module works cross-realm/iframe, and despite ES6 @@toStringTag.",
+ "main": "index.js",
+ "exports": {
+ ".": [
+ {
+ "default": "./index.js"
+ },
+ "./index.js"
+ ]
+ },
+ "scripts": {
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"",
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "test": "npm run tests-only",
+ "posttest": "aud --production"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/inspect-js/is-weakref.git"
+ },
+ "keywords": [
+ "weakref",
+ "weak",
+ "ref",
+ "finalization",
+ "finalization registry"
+ ],
+ "author": "Jordan Harband <[email protected]>",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/inspect-js/is-weakref/issues"
+ },
+ "homepage": "https://github.com/inspect-js/is-weakref#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.3.0",
+ "aud": "^1.1.3",
+ "auto-changelog": "^2.2.1",
+ "eslint": "^7.14.0",
+ "for-each": "^0.3.3",
+ "nyc": "^10.3.2",
+ "object-inspect": "^1.9.0",
+ "tape": "^5.0.1"
+ },
+ "dependencies": {
+ "call-bind": "^1.0.0"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/node_modules/is-weakref/test/index.js b/node_modules/is-weakref/test/index.js
new file mode 100644
index 0000000..c1c5b6f
--- /dev/null
+++ b/node_modules/is-weakref/test/index.js
@@ -0,0 +1,26 @@
+'use strict';
+
+var test = require('tape');
+var inspect = require('object-inspect');
+var forEach = require('for-each');
+
+var isWeakRef = require('..');
+
+test('isWeakRef', function (t) {
+ t.equal(typeof isWeakRef, 'function', 'is a function');
+
+ var nonWeakRefs = [undefined, null, true, false, 42, 0, Infinity, NaN, /a/g, function () {}, {}, []];
+ forEach(nonWeakRefs, function (nonWeakRef) {
+ t.equal(isWeakRef(nonWeakRef), false, inspect(nonWeakRef) + ' is not a WeakRef');
+ });
+
+ t.test('actual WeakRefs', { skip: typeof WeakRef === 'undefined' }, function (st) {
+ var ref = new WeakRef({});
+
+ st.equal(isWeakRef(ref), true, inspect(ref) + ' is a WeakRef');
+
+ st.end();
+ });
+
+ t.end();
+});
diff --git a/node_modules/load-json-file/index.js b/node_modules/load-json-file/index.js
deleted file mode 100644
index b2767e3..0000000
--- a/node_modules/load-json-file/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict';
-const path = require('path');
-const fs = require('graceful-fs');
-const stripBom = require('strip-bom');
-const parseJson = require('parse-json');
-const pify = require('pify');
-
-const parse = (data, fp) => parseJson(stripBom(data), path.relative('.', fp));
-
-module.exports = fp => pify(fs.readFile)(fp, 'utf8').then(data => parse(data, fp));
-module.exports.sync = fp => parse(fs.readFileSync(fp, 'utf8'), fp);
diff --git a/node_modules/load-json-file/package.json b/node_modules/load-json-file/package.json
deleted file mode 100644
index 8bfb1c6..0000000
--- a/node_modules/load-json-file/package.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "name": "load-json-file",
- "version": "4.0.0",
- "description": "Read and parse a JSON file",
- "license": "MIT",
- "repository": "sindresorhus/load-json-file",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "read",
- "json",
- "parse",
- "file",
- "fs",
- "graceful",
- "load"
- ],
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "devDependencies": {
- "ava": "*",
- "xo": "*"
- },
- "xo": {
- "esnext": true
- }
-}
diff --git a/node_modules/load-json-file/readme.md b/node_modules/load-json-file/readme.md
deleted file mode 100644
index 3319c26..0000000
--- a/node_modules/load-json-file/readme.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# load-json-file [](https://travis-ci.org/sindresorhus/load-json-file)
-
-> Read and parse a JSON file
-
-[Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom), uses [`graceful-fs`](https://github.com/isaacs/node-graceful-fs), and throws more [helpful JSON errors](https://github.com/sindresorhus/parse-json).
-
-
-## Install
-
-```
-$ npm install --save load-json-file
-```
-
-
-## Usage
-
-```js
-const loadJsonFile = require('load-json-file');
-
-loadJsonFile('foo.json').then(json => {
- console.log(json);
- //=> {foo: true}
-});
-```
-
-
-## API
-
-### loadJsonFile(filepath)
-
-Returns a promise for the parsed JSON.
-
-### loadJsonFile.sync(filepath)
-
-Returns the parsed JSON.
-
-
-## Related
-
-- [write-json-file](https://github.com/sindresorhus/write-json-file) - Stringify and write JSON to a file atomically
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/object.values/CHANGELOG.md b/node_modules/object.values/CHANGELOG.md
index b6c6841..a58077e 100644
--- a/node_modules/object.values/CHANGELOG.md
+++ b/node_modules/object.values/CHANGELOG.md
@@ -5,6 +5,15 @@
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v1.1.5](https://github.com/ljharb/Object.values/compare/v1.1.4...v1.1.5) - 2021-10-03
+
+### Commits
+
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@es-shims/api`, `tape` [`c397925`](https://github.com/ljharb/Object.values/commit/c3979252140c24514aeebf3d452b422528e36349)
+- [Deps] update `es-abstract` [`f98d0da`](https://github.com/ljharb/Object.values/commit/f98d0da2035bf8396b2544f2e2ac02aec766d36f)
+- [Robustness] use a call-bound `Array.prototype.push` [`72a3213`](https://github.com/ljharb/Object.values/commit/72a32138e91a9a7b3a828fa1f8f02fe361097c51)
+- [meta] npmignore coverage output [`3b0433f`](https://github.com/ljharb/Object.values/commit/3b0433fe3025cb079b0de2373a0a9cfd2e0777b5)
+
## [v1.1.4](https://github.com/ljharb/Object.values/compare/v1.1.3...v1.1.4) - 2021-05-26
### Commits
diff --git a/node_modules/object.values/implementation.js b/node_modules/object.values/implementation.js
index edac901..a4958f7 100644
--- a/node_modules/object.values/implementation.js
+++ b/node_modules/object.values/implementation.js
@@ -1,16 +1,17 @@
'use strict';
-var RequireObjectCoercible = require('es-abstract/2020/RequireObjectCoercible');
+var RequireObjectCoercible = require('es-abstract/2021/RequireObjectCoercible');
var callBound = require('call-bind/callBound');
var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+var $push = callBound('Array.prototype.push');
module.exports = function values(O) {
var obj = RequireObjectCoercible(O);
var vals = [];
for (var key in obj) {
if ($isEnumerable(obj, key)) { // checks own-ness as well
- vals.push(obj[key]);
+ $push(vals, obj[key]);
}
}
return vals;
diff --git a/node_modules/object.values/package.json b/node_modules/object.values/package.json
index 7fac4b8..25ac3d4 100644
--- a/node_modules/object.values/package.json
+++ b/node_modules/object.values/package.json
@@ -1,6 +1,6 @@
{
"name": "object.values",
- "version": "1.1.4",
+ "version": "1.1.5",
"author": "Jordan Harband <[email protected]>",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -42,21 +42,21 @@
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.2"
+ "es-abstract": "^1.19.1"
},
"devDependencies": {
- "@es-shims/api": "^2.1.2",
- "@ljharb/eslint-config": "^17.6.0",
+ "@es-shims/api": "^2.2.2",
+ "@ljharb/eslint-config": "^18.0.0",
"array.prototype.map": "^1.0.3",
"aud": "^1.1.5",
"auto-changelog": "^2.3.0",
- "eslint": "^7.27.0",
+ "eslint": "^7.32.0",
"functions-have-names": "^1.2.2",
"has-strict-mode": "^1.0.1",
"nyc": "^10.3.2",
"object-keys": "^1.1.1",
"safe-publish-latest": "^1.1.4",
- "tape": "^5.2.2"
+ "tape": "^5.3.1"
},
"testling": {
"files": "test/index.js",
diff --git a/node_modules/parse-json/index.js b/node_modules/parse-json/index.js
index 16f42b4..c2b9347 100644
--- a/node_modules/parse-json/index.js
+++ b/node_modules/parse-json/index.js
@@ -1,12 +1,15 @@
'use strict';
const errorEx = require('error-ex');
-const fallback = require('json-parse-better-errors');
+const fallback = require('json-parse-even-better-errors');
+const {default: LinesAndColumns} = require('lines-and-columns');
+const {codeFrameColumns} = require('@babel/code-frame');
const JSONError = errorEx('JSONError', {
- fileName: errorEx.append('in %s')
+ fileName: errorEx.append('in %s'),
+ codeFrame: errorEx.append('\n\n%s\n')
});
-module.exports = (input, reviver, filename) => {
+const parseJson = (string, reviver, filename) => {
if (typeof reviver === 'string') {
filename = reviver;
reviver = null;
@@ -14,20 +17,38 @@
try {
try {
- return JSON.parse(input, reviver);
- } catch (err) {
- fallback(input, reviver);
-
- throw err;
+ return JSON.parse(string, reviver);
+ } catch (error) {
+ fallback(string, reviver);
+ throw error;
}
- } catch (err) {
- err.message = err.message.replace(/\n/g, '');
+ } catch (error) {
+ error.message = error.message.replace(/\n/g, '');
+ const indexMatch = error.message.match(/in JSON at position (\d+) while parsing/);
- const jsonErr = new JSONError(err);
+ const jsonError = new JSONError(error);
if (filename) {
- jsonErr.fileName = filename;
+ jsonError.fileName = filename;
}
- throw jsonErr;
+ if (indexMatch && indexMatch.length > 0) {
+ const lines = new LinesAndColumns(string);
+ const index = Number(indexMatch[1]);
+ const location = lines.locationForIndex(index);
+
+ const codeFrame = codeFrameColumns(
+ string,
+ {start: {line: location.line + 1, column: location.column + 1}},
+ {highlightCode: true}
+ );
+
+ jsonError.codeFrame = codeFrame;
+ }
+
+ throw jsonError;
}
};
+
+parseJson.JSONError = JSONError;
+
+module.exports = parseJson;
diff --git a/node_modules/parse-json/license b/node_modules/parse-json/license
index e7af2f7..fa7ceba 100644
--- a/node_modules/parse-json/license
+++ b/node_modules/parse-json/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
+Copyright (c) Sindre Sorhus <[email protected]> (https://sindresorhus.com)
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:
diff --git a/node_modules/parse-json/package.json b/node_modules/parse-json/package.json
index 7aca6ed..ee5df1f 100644
--- a/node_modules/parse-json/package.json
+++ b/node_modules/parse-json/package.json
@@ -1,16 +1,17 @@
{
"name": "parse-json",
- "version": "4.0.0",
+ "version": "5.2.0",
"description": "Parse JSON with more helpful errors",
"license": "MIT",
"repository": "sindresorhus/parse-json",
+ "funding": "https://github.com/sponsors/sindresorhus",
"author": {
"name": "Sindre Sorhus",
"email": "[email protected]",
- "url": "sindresorhus.com"
+ "url": "https://sindresorhus.com"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
},
"scripts": {
"test": "xo && nyc ava"
@@ -28,16 +29,17 @@
"humanize",
"friendly",
"helpful",
- "string",
- "str"
+ "string"
],
"dependencies": {
+ "@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
},
"devDependencies": {
- "ava": "*",
- "nyc": "^11.2.1",
- "xo": "*"
+ "ava": "^1.4.1",
+ "nyc": "^14.1.1",
+ "xo": "^0.24.0"
}
}
diff --git a/node_modules/parse-json/readme.md b/node_modules/parse-json/readme.md
index 2976e34..5363097 100644
--- a/node_modules/parse-json/readme.md
+++ b/node_modules/parse-json/readme.md
@@ -1,19 +1,18 @@
-# parse-json [](https://travis-ci.org/sindresorhus/parse-json)
+# parse-json
> Parse JSON with more helpful errors
-
## Install
```
$ npm install parse-json
```
-
## Usage
```js
const parseJson = require('parse-json');
+
const json = '{\n\t"foo": true,\n}';
@@ -28,39 +27,53 @@
parseJson(json);
/*
-JSONError: Trailing comma in object at 3:1
-}
-^
+JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}'
+
+ 1 | {
+ 2 | "foo": true,
+> 3 | }
+ | ^
*/
parseJson(json, 'foo.json');
/*
-JSONError: Trailing comma in object in foo.json:3:1
-}
-^
+JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
+
+ 1 | {
+ 2 | "foo": true,
+> 3 | }
+ | ^
*/
// You can also add the filename at a later point
try {
parseJson(json);
-} catch (err) {
- err.fileName = 'foo.json';
- throw err;
+} catch (error) {
+ if (error instanceof parseJson.JSONError) {
+ error.fileName = 'foo.json';
+ }
+
+ throw error;
}
/*
-JSONError: Trailing comma in object in foo.json:3:1
-}
-^
+JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
+
+ 1 | {
+ 2 | "foo": true,
+> 3 | }
+ | ^
*/
```
## API
-### parseJson(input, [reviver], [filename])
+### parseJson(string, reviver?, filename?)
-#### input
+Throws a `JSONError` when there is a parsing error.
+
+#### string
Type: `string`
@@ -77,7 +90,30 @@
Filename displayed in the error message.
+### parseJson.JSONError
-## License
+Exposed for `instanceof` checking.
-MIT © [Sindre Sorhus](https://sindresorhus.com)
+#### fileName
+
+Type: `string`
+
+The filename displayed in the error message.
+
+#### codeFrame
+
+Type: `string`
+
+The printable section of the JSON which produces the error.
+
+---
+
+<div align="center">
+ <b>
+ <a href="https://tidelift.com/subscription/pkg/npm-parse-json?utm_source=npm-parse-json&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
+ </b>
+ <br>
+ <sub>
+ Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
+ </sub>
+</div>
diff --git a/node_modules/pify/index.js b/node_modules/pify/index.js
deleted file mode 100644
index 1dee43a..0000000
--- a/node_modules/pify/index.js
+++ /dev/null
@@ -1,84 +0,0 @@
-'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;
-};
diff --git a/node_modules/pify/license b/node_modules/pify/license
deleted file mode 100644
index e7af2f7..0000000
--- a/node_modules/pify/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/pify/package.json b/node_modules/pify/package.json
deleted file mode 100644
index 468d857..0000000
--- a/node_modules/pify/package.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "name": "pify",
- "version": "3.0.0",
- "description": "Promisify a callback-style function",
- "license": "MIT",
- "repository": "sindresorhus/pify",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava && npm run optimization-test",
- "optimization-test": "node --allow-natives-syntax optimization-test.js"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "promise",
- "promises",
- "promisify",
- "all",
- "denodify",
- "denodeify",
- "callback",
- "cb",
- "node",
- "then",
- "thenify",
- "convert",
- "transform",
- "wrap",
- "wrapper",
- "bind",
- "to",
- "async",
- "await",
- "es2015",
- "bluebird"
- ],
- "devDependencies": {
- "ava": "*",
- "pinkie-promise": "^2.0.0",
- "v8-natives": "^1.0.0",
- "xo": "*"
- }
-}
diff --git a/node_modules/pify/readme.md b/node_modules/pify/readme.md
deleted file mode 100644
index 376ca4e..0000000
--- a/node_modules/pify/readme.md
+++ /dev/null
@@ -1,131 +0,0 @@
-# pify [](https://travis-ci.org/sindresorhus/pify)
-
-> Promisify a callback-style function
-
-
-## Install
-
-```
-$ npm install --save pify
-```
-
-
-## Usage
-
-```js
-const fs = require('fs');
-const pify = require('pify');
-
-// Promisify a single function
-pify(fs.readFile)('package.json', 'utf8').then(data => {
- console.log(JSON.parse(data).name);
- //=> 'pify'
-});
-
-// Promisify all methods in a module
-pify(fs).readFile('package.json', 'utf8').then(data => {
- console.log(JSON.parse(data).name);
- //=> 'pify'
-});
-```
-
-
-## API
-
-### pify(input, [options])
-
-Returns a `Promise` wrapped version of the supplied function or module.
-
-#### input
-
-Type: `Function` `Object`
-
-Callback-style function or module whose methods you want to promisify.
-
-#### options
-
-##### multiArgs
-
-Type: `boolean`<br>
-Default: `false`
-
-By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument. This also applies to rejections, where it returns an array of all the callback arguments, including the error.
-
-```js
-const request = require('request');
-const pify = require('pify');
-
-pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => {
- const [httpResponse, body] = result;
-});
-```
-
-##### include
-
-Type: `string[]` `RegExp[]`
-
-Methods in a module to promisify. Remaining methods will be left untouched.
-
-##### exclude
-
-Type: `string[]` `RegExp[]`<br>
-Default: `[/.+(Sync|Stream)$/]`
-
-Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default.
-
-##### excludeMain
-
-Type: `boolean`<br>
-Default: `false`
-
-If given module is a function itself, it will be promisified. Turn this option on if you want to promisify only methods of the module.
-
-```js
-const pify = require('pify');
-
-function fn() {
- return true;
-}
-
-fn.method = (data, callback) => {
- setImmediate(() => {
- callback(null, data);
- });
-};
-
-// Promisify methods but not `fn()`
-const promiseFn = pify(fn, {excludeMain: true});
-
-if (promiseFn()) {
- promiseFn.method('hi').then(data => {
- console.log(data);
- });
-}
-```
-
-##### errorFirst
-
-Type: `boolean`<br>
-Default: `true`
-
-Whether the callback has an error as the first argument. You'll want to set this to `false` if you're dealing with an API that doesn't have an error as the first argument, like `fs.exists()`, some browser APIs, Chrome Extension APIs, etc.
-
-##### promiseModule
-
-Type: `Function`
-
-Custom promise module to use instead of the native one.
-
-Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill.
-
-
-## Related
-
-- [p-event](https://github.com/sindresorhus/p-event) - Promisify an event by waiting for it to be emitted
-- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently
-- [More…](https://github.com/sindresorhus/promise-fun)
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/pkg-up/index.js b/node_modules/pkg-up/index.js
deleted file mode 100644
index 19aeaea..0000000
--- a/node_modules/pkg-up/index.js
+++ /dev/null
@@ -1,5 +0,0 @@
-'use strict';
-const findUp = require('find-up');
-
-module.exports = cwd => findUp('package.json', {cwd});
-module.exports.sync = cwd => findUp.sync('package.json', {cwd});
diff --git a/node_modules/pkg-up/license b/node_modules/pkg-up/license
deleted file mode 100644
index 654d0bf..0000000
--- a/node_modules/pkg-up/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/pkg-up/node_modules/find-up/index.js b/node_modules/pkg-up/node_modules/find-up/index.js
deleted file mode 100644
index 939c955..0000000
--- a/node_modules/pkg-up/node_modules/find-up/index.js
+++ /dev/null
@@ -1,48 +0,0 @@
-'use strict';
-const path = require('path');
-const locatePath = require('locate-path');
-
-module.exports = (filename, opts) => {
- opts = opts || {};
-
- const startDir = path.resolve(opts.cwd || '');
- const root = path.parse(startDir).root;
-
- const filenames = [].concat(filename);
-
- return new Promise(resolve => {
- (function find(dir) {
- locatePath(filenames, {cwd: dir}).then(file => {
- if (file) {
- resolve(path.join(dir, file));
- } else if (dir === root) {
- resolve(null);
- } else {
- find(path.dirname(dir));
- }
- });
- })(startDir);
- });
-};
-
-module.exports.sync = (filename, opts) => {
- opts = opts || {};
-
- let dir = path.resolve(opts.cwd || '');
- const root = path.parse(dir).root;
-
- const filenames = [].concat(filename);
-
- // eslint-disable-next-line no-constant-condition
- while (true) {
- const file = locatePath.sync(filenames, {cwd: dir});
-
- if (file) {
- return path.join(dir, file);
- } else if (dir === root) {
- return null;
- }
-
- dir = path.dirname(dir);
- }
-};
diff --git a/node_modules/pkg-up/node_modules/find-up/license b/node_modules/pkg-up/node_modules/find-up/license
deleted file mode 100644
index 654d0bf..0000000
--- a/node_modules/pkg-up/node_modules/find-up/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/pkg-up/node_modules/find-up/package.json b/node_modules/pkg-up/node_modules/find-up/package.json
deleted file mode 100644
index 7ec85bb..0000000
--- a/node_modules/pkg-up/node_modules/find-up/package.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
- "name": "find-up",
- "version": "2.1.0",
- "description": "Find a file by walking up parent directories",
- "license": "MIT",
- "repository": "sindresorhus/find-up",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "find",
- "up",
- "find-up",
- "findup",
- "look-up",
- "look",
- "file",
- "search",
- "match",
- "package",
- "resolve",
- "parent",
- "parents",
- "folder",
- "directory",
- "dir",
- "walk",
- "walking",
- "path"
- ],
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "devDependencies": {
- "ava": "*",
- "tempfile": "^1.1.1",
- "xo": "*"
- },
- "xo": {
- "esnext": true
- }
-}
diff --git a/node_modules/pkg-up/node_modules/find-up/readme.md b/node_modules/pkg-up/node_modules/find-up/readme.md
deleted file mode 100644
index b5ad694..0000000
--- a/node_modules/pkg-up/node_modules/find-up/readme.md
+++ /dev/null
@@ -1,85 +0,0 @@
-# find-up [](https://travis-ci.org/sindresorhus/find-up) [](https://ci.appveyor.com/project/sindresorhus/find-up/branch/master)
-
-> Find a file by walking up parent directories
-
-
-## Install
-
-```
-$ npm install --save find-up
-```
-
-
-## Usage
-
-```
-/
-└── Users
- └── sindresorhus
- ├── unicorn.png
- └── foo
- └── bar
- ├── baz
- └── example.js
-```
-
-```js
-// example.js
-const findUp = require('find-up');
-
-findUp('unicorn.png').then(filepath => {
- console.log(filepath);
- //=> '/Users/sindresorhus/unicorn.png'
-});
-
-findUp(['rainbow.png', 'unicorn.png']).then(filepath => {
- console.log(filepath);
- //=> '/Users/sindresorhus/unicorn.png'
-});
-```
-
-
-## API
-
-### findUp(filename, [options])
-
-Returns a `Promise` for the filepath or `null`.
-
-### findUp([filenameA, filenameB], [options])
-
-Returns a `Promise` for the first filepath found (by respecting the order) or `null`.
-
-### findUp.sync(filename, [options])
-
-Returns a filepath or `null`.
-
-### findUp.sync([filenameA, filenameB], [options])
-
-Returns the first filepath found (by respecting the order) or `null`.
-
-#### filename
-
-Type: `string`
-
-Filename of the file to find.
-
-#### options
-
-##### cwd
-
-Type: `string`<br>
-Default: `process.cwd()`
-
-Directory to start from.
-
-
-## Related
-
-- [find-up-cli](https://github.com/sindresorhus/find-up-cli) - CLI for this module
-- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file
-- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/pkg-up/node_modules/locate-path/index.js b/node_modules/pkg-up/node_modules/locate-path/index.js
deleted file mode 100644
index 32b108d..0000000
--- a/node_modules/pkg-up/node_modules/locate-path/index.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-const path = require('path');
-const pathExists = require('path-exists');
-const pLocate = require('p-locate');
-
-module.exports = (iterable, opts) => {
- opts = Object.assign({
- cwd: process.cwd()
- }, opts);
-
- return pLocate(iterable, el => pathExists(path.resolve(opts.cwd, el)), opts);
-};
-
-module.exports.sync = (iterable, opts) => {
- opts = Object.assign({
- cwd: process.cwd()
- }, opts);
-
- for (const el of iterable) {
- if (pathExists.sync(path.resolve(opts.cwd, el))) {
- return el;
- }
- }
-};
diff --git a/node_modules/pkg-up/node_modules/locate-path/license b/node_modules/pkg-up/node_modules/locate-path/license
deleted file mode 100644
index 654d0bf..0000000
--- a/node_modules/pkg-up/node_modules/locate-path/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/pkg-up/node_modules/locate-path/package.json b/node_modules/pkg-up/node_modules/locate-path/package.json
deleted file mode 100644
index 17bcd7f..0000000
--- a/node_modules/pkg-up/node_modules/locate-path/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "locate-path",
- "version": "2.0.0",
- "description": "Get the first path that exists on disk of multiple paths",
- "license": "MIT",
- "repository": "sindresorhus/locate-path",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "locate",
- "path",
- "paths",
- "file",
- "files",
- "exists",
- "find",
- "finder",
- "search",
- "searcher",
- "array",
- "iterable",
- "iterator"
- ],
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "devDependencies": {
- "ava": "*",
- "xo": "*"
- },
- "xo": {
- "esnext": true
- }
-}
diff --git a/node_modules/pkg-up/node_modules/locate-path/readme.md b/node_modules/pkg-up/node_modules/locate-path/readme.md
deleted file mode 100644
index f7b337b..0000000
--- a/node_modules/pkg-up/node_modules/locate-path/readme.md
+++ /dev/null
@@ -1,99 +0,0 @@
-# locate-path [](https://travis-ci.org/sindresorhus/locate-path)
-
-> Get the first path that exists on disk of multiple paths
-
-
-## Install
-
-```
-$ npm install --save locate-path
-```
-
-
-## Usage
-
-Here we find the first file that exists on disk, in array order.
-
-```js
-const locatePath = require('locate-path');
-
-const files = [
- 'unicorn.png',
- 'rainbow.png', // only this one actually exists on disk
- 'pony.png'
-];
-
-locatePath(files).then(foundPath => {
- console.log(foundPath);
- //=> 'rainbow'
-});
-```
-
-
-## API
-
-### locatePath(input, [options])
-
-Returns a `Promise` for the first path that exists or `undefined` if none exists.
-
-#### input
-
-Type: `Iterable<string>`
-
-Paths to check.
-
-#### options
-
-Type: `Object`
-
-##### concurrency
-
-Type: `number`<br>
-Default: `Infinity`<br>
-Minimum: `1`
-
-Number of concurrently pending promises.
-
-##### preserveOrder
-
-Type: `boolean`<br>
-Default: `true`
-
-Preserve `input` order when searching.
-
-Disable this to improve performance if you don't care about the order.
-
-##### cwd
-
-Type: `string`<br>
-Default: `process.cwd()`
-
-Current working directory.
-
-### locatePath.sync(input, [options])
-
-Returns the first path that exists or `undefined` if none exists.
-
-#### input
-
-Type: `Iterable<string>`
-
-Paths to check.
-
-#### options
-
-Type: `Object`
-
-##### cwd
-
-Same as above.
-
-
-## Related
-
-- [path-exists](https://github.com/sindresorhus/path-exists) - Check if a path exists
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/pkg-up/node_modules/p-limit/index.js b/node_modules/pkg-up/node_modules/p-limit/index.js
deleted file mode 100644
index 873f0e7..0000000
--- a/node_modules/pkg-up/node_modules/p-limit/index.js
+++ /dev/null
@@ -1,42 +0,0 @@
-'use strict';
-const pTry = require('p-try');
-
-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()();
- }
- };
-
- return fn => new Promise((resolve, reject) => {
- const run = () => {
- activeCount++;
-
- pTry(fn).then(
- val => {
- resolve(val);
- next();
- },
- err => {
- reject(err);
- next();
- }
- );
- };
-
- if (activeCount < concurrency) {
- run();
- } else {
- queue.push(run);
- }
- });
-};
diff --git a/node_modules/pkg-up/node_modules/p-limit/license b/node_modules/pkg-up/node_modules/p-limit/license
deleted file mode 100644
index e7af2f7..0000000
--- a/node_modules/pkg-up/node_modules/p-limit/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/pkg-up/node_modules/p-limit/package.json b/node_modules/pkg-up/node_modules/p-limit/package.json
deleted file mode 100644
index 90db579..0000000
--- a/node_modules/pkg-up/node_modules/p-limit/package.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
- "name": "p-limit",
- "version": "1.3.0",
- "description": "Run multiple promise-returning & async functions with limited concurrency",
- "license": "MIT",
- "repository": "sindresorhus/p-limit",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "promise",
- "limit",
- "limited",
- "concurrency",
- "throttle",
- "throat",
- "rate",
- "batch",
- "ratelimit",
- "task",
- "queue",
- "async",
- "await",
- "promises",
- "bluebird"
- ],
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "devDependencies": {
- "ava": "*",
- "delay": "^2.0.0",
- "in-range": "^1.0.0",
- "random-int": "^1.0.0",
- "time-span": "^2.0.0",
- "xo": "*"
- }
-}
diff --git a/node_modules/pkg-up/node_modules/p-limit/readme.md b/node_modules/pkg-up/node_modules/p-limit/readme.md
deleted file mode 100644
index 9012992..0000000
--- a/node_modules/pkg-up/node_modules/p-limit/readme.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# p-limit [](https://travis-ci.org/sindresorhus/p-limit)
-
-> Run multiple promise-returning & async functions with limited concurrency
-
-
-## Install
-
-```
-$ npm install p-limit
-```
-
-
-## Usage
-
-```js
-const pLimit = require('p-limit');
-
-const limit = pLimit(1);
-
-const input = [
- limit(() => fetchSomething('foo')),
- limit(() => fetchSomething('bar')),
- limit(() => doSomething())
-];
-
-(async () => {
- // Only one promise is run at once
- const result = await Promise.all(input);
- console.log(result);
-})();
-```
-
-
-## API
-
-### pLimit(concurrency)
-
-Returns a `limit` function.
-
-#### concurrency
-
-Type: `number`<br>
-Minimum: `1`
-
-Concurrency limit.
-
-### limit(fn)
-
-Returns the promise returned by calling `fn`.
-
-#### fn
-
-Type: `Function`
-
-Promise-returning/async function.
-
-
-## Related
-
-- [p-queue](https://github.com/sindresorhus/p-queue) - Promise queue with concurrency control
-- [p-throttle](https://github.com/sindresorhus/p-throttle) - Throttle promise-returning & async functions
-- [p-debounce](https://github.com/sindresorhus/p-debounce) - Debounce promise-returning & async functions
-- [p-all](https://github.com/sindresorhus/p-all) - Run promise-returning & async functions concurrently with optional limited concurrency
-- [More…](https://github.com/sindresorhus/promise-fun)
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/pkg-up/node_modules/p-locate/index.js b/node_modules/pkg-up/node_modules/p-locate/index.js
deleted file mode 100644
index 7461d66..0000000
--- a/node_modules/pkg-up/node_modules/p-locate/index.js
+++ /dev/null
@@ -1,31 +0,0 @@
-'use strict';
-const pLimit = require('p-limit');
-
-class EndError extends Error {
- constructor(value) {
- super();
- this.value = value;
- }
-}
-
-// the input can also be a promise, so we `Promise.all()` them both
-const finder = el => Promise.all(el).then(val => val[1] === true && Promise.reject(new EndError(val[0])));
-
-module.exports = (iterable, tester, opts) => {
- opts = Object.assign({
- concurrency: Infinity,
- preserveOrder: true
- }, opts);
-
- const limit = pLimit(opts.concurrency);
-
- // start all the promises concurrently with optional limit
- const items = Array.from(iterable).map(el => [el, limit(() => Promise.resolve(el).then(tester))]);
-
- // check the promises either serially or concurrently
- const checkLimit = pLimit(opts.preserveOrder ? 1 : Infinity);
-
- return Promise.all(items.map(el => checkLimit(() => finder(el))))
- .then(() => {})
- .catch(err => err instanceof EndError ? err.value : Promise.reject(err));
-};
diff --git a/node_modules/pkg-up/node_modules/p-locate/license b/node_modules/pkg-up/node_modules/p-locate/license
deleted file mode 100644
index 654d0bf..0000000
--- a/node_modules/pkg-up/node_modules/p-locate/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/pkg-up/node_modules/p-locate/package.json b/node_modules/pkg-up/node_modules/p-locate/package.json
deleted file mode 100644
index 767002b..0000000
--- a/node_modules/pkg-up/node_modules/p-locate/package.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
- "name": "p-locate",
- "version": "2.0.0",
- "description": "Get the first fulfilled promise that satisfies the provided testing function",
- "license": "MIT",
- "repository": "sindresorhus/p-locate",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "promise",
- "locate",
- "find",
- "finder",
- "search",
- "searcher",
- "test",
- "array",
- "collection",
- "iterable",
- "iterator",
- "race",
- "fulfilled",
- "fastest",
- "async",
- "await",
- "promises",
- "bluebird"
- ],
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "devDependencies": {
- "ava": "*",
- "delay": "^1.3.1",
- "in-range": "^1.0.0",
- "time-span": "^1.0.0",
- "xo": "*"
- },
- "xo": {
- "esnext": true
- }
-}
diff --git a/node_modules/pkg-up/node_modules/p-locate/readme.md b/node_modules/pkg-up/node_modules/p-locate/readme.md
deleted file mode 100644
index 68b96a4..0000000
--- a/node_modules/pkg-up/node_modules/p-locate/readme.md
+++ /dev/null
@@ -1,86 +0,0 @@
-# p-locate [](https://travis-ci.org/sindresorhus/p-locate)
-
-> Get the first fulfilled promise that satisfies the provided testing function
-
-Think of it like an async version of [`Array#find`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/find).
-
-
-## Install
-
-```
-$ npm install --save p-locate
-```
-
-
-## Usage
-
-Here we find the first file that exists on disk, in array order.
-
-```js
-const pathExists = require('path-exists');
-const pLocate = require('p-locate');
-
-const files = [
- 'unicorn.png',
- 'rainbow.png', // only this one actually exists on disk
- 'pony.png'
-];
-
-pLocate(files, file => pathExists(file)).then(foundPath => {
- console.log(foundPath);
- //=> 'rainbow'
-});
-```
-
-*The above is just an example. Use [`locate-path`](https://github.com/sindresorhus/locate-path) if you need this.*
-
-
-## API
-
-### pLocate(input, tester, [options])
-
-Returns a `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`.
-
-#### input
-
-Type: `Iterable<Promise|any>`
-
-#### tester(element)
-
-Type: `Function`
-
-Expected to return a `Promise<boolean>` or boolean.
-
-#### options
-
-Type: `Object`
-
-##### concurrency
-
-Type: `number`<br>
-Default: `Infinity`<br>
-Minimum: `1`
-
-Number of concurrently pending promises returned by `tester`.
-
-##### preserveOrder
-
-Type: `boolean`<br>
-Default: `true`
-
-Preserve `input` order when searching.
-
-Disable this to improve performance if you don't care about the order.
-
-
-## Related
-
-- [p-map](https://github.com/sindresorhus/p-map) - Map over promises concurrently
-- [p-filter](https://github.com/sindresorhus/p-filter) - Filter promises concurrently
-- [p-any](https://github.com/sindresorhus/p-any) - Wait for any promise to be fulfilled
-- [More…](https://github.com/sindresorhus/promise-fun)
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/pkg-up/node_modules/p-try/index.js b/node_modules/pkg-up/node_modules/p-try/index.js
deleted file mode 100644
index efa2f74..0000000
--- a/node_modules/pkg-up/node_modules/p-try/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-module.exports = cb => new Promise(resolve => {
- resolve(cb());
-});
diff --git a/node_modules/pkg-up/node_modules/p-try/license b/node_modules/pkg-up/node_modules/p-try/license
deleted file mode 100644
index 654d0bf..0000000
--- a/node_modules/pkg-up/node_modules/p-try/license
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
-
-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.
diff --git a/node_modules/pkg-up/node_modules/p-try/package.json b/node_modules/pkg-up/node_modules/p-try/package.json
deleted file mode 100644
index ba2513a..0000000
--- a/node_modules/pkg-up/node_modules/p-try/package.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "name": "p-try",
- "version": "1.0.0",
- "description": "`Promise#try()` ponyfill - Starts a promise chain",
- "license": "MIT",
- "repository": "sindresorhus/p-try",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "promise",
- "try",
- "resolve",
- "function",
- "catch",
- "async",
- "await",
- "promises",
- "settled",
- "ponyfill",
- "polyfill",
- "shim",
- "bluebird"
- ],
- "devDependencies": {
- "ava": "*",
- "xo": "*"
- },
- "xo": {
- "esnext": true
- }
-}
diff --git a/node_modules/pkg-up/node_modules/p-try/readme.md b/node_modules/pkg-up/node_modules/p-try/readme.md
deleted file mode 100644
index 8e5fddd..0000000
--- a/node_modules/pkg-up/node_modules/p-try/readme.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# p-try [](https://travis-ci.org/sindresorhus/p-try)
-
-> [`Promise#try()`](https://github.com/ljharb/proposal-promise-try) [ponyfill](https://ponyfill.com) - Starts a promise chain
-
-[How is it useful?](http://cryto.net/~joepie91/blog/2016/05/11/what-is-promise-try-and-why-does-it-matter/)
-
-
-## Install
-
-```
-$ npm install --save p-try
-```
-
-
-## Usage
-
-```js
-const pTry = require('p-try');
-
-pTry(() => {
- return synchronousFunctionThatMightThrow();
-}).then(value => {
- console.log(value);
-}).catch(error => {
- console.error(error);
-});
-```
-
-
-## Related
-
-- [p-finally](https://github.com/sindresorhus/p-finally) - `Promise#finally()` ponyfill - Invoked when the promise is settled regardless of outcome
-- [More…](https://github.com/sindresorhus/promise-fun)
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/pkg-up/package.json b/node_modules/pkg-up/package.json
deleted file mode 100644
index 973c31c..0000000
--- a/node_modules/pkg-up/package.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "name": "pkg-up",
- "version": "2.0.0",
- "description": "Find the closest package.json file",
- "license": "MIT",
- "repository": "sindresorhus/pkg-up",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=4"
- },
- "scripts": {
- "test": "xo && ava"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "pkg",
- "package",
- "file",
- "find",
- "up",
- "find-up",
- "findup",
- "look-up",
- "look",
- "search",
- "match",
- "resolve",
- "parent",
- "parents",
- "folder",
- "directory",
- "dir",
- "walk",
- "walking",
- "path"
- ],
- "dependencies": {
- "find-up": "^2.1.0"
- },
- "devDependencies": {
- "ava": "*",
- "xo": "*"
- }
-}
diff --git a/node_modules/pkg-up/readme.md b/node_modules/pkg-up/readme.md
deleted file mode 100644
index e61d70b..0000000
--- a/node_modules/pkg-up/readme.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# pkg-up [](https://travis-ci.org/sindresorhus/pkg-up)
-
-> Find the closest package.json file
-
-
-## Install
-
-```
-$ npm install --save pkg-up
-```
-
-
-## Usage
-
-```
-/
-└── Users
- └── sindresorhus
- └── foo
- ├── package.json
- └── bar
- ├── baz
- └── example.js
-```
-
-```js
-// example.js
-const pkgUp = require('pkg-up');
-
-pkgUp().then(filepath => {
- console.log(filepath);
- //=> '/Users/sindresorhus/foo/package.json'
-});
-```
-
-
-## API
-
-### pkgUp([cwd])
-
-Returns a `Promise` for either the filepath or `null` if it could be found.
-
-### pkgUp.sync([cwd])
-
-Returns the filepath or `null`.
-
-#### cwd
-
-Type: `string`
-Default: `process.cwd()`
-
-Directory to start from.
-
-
-## Related
-
-- [read-pkg-up](https://github.com/sindresorhus/read-pkg-up) - Read the closest package.json file
-- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package
-- [find-up](https://github.com/sindresorhus/find-up) - Find a file by walking up parent directories
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/read-pkg/node_modules/parse-json/index.js b/node_modules/read-pkg/node_modules/parse-json/index.js
deleted file mode 100644
index c2b9347..0000000
--- a/node_modules/read-pkg/node_modules/parse-json/index.js
+++ /dev/null
@@ -1,54 +0,0 @@
-'use strict';
-const errorEx = require('error-ex');
-const fallback = require('json-parse-even-better-errors');
-const {default: LinesAndColumns} = require('lines-and-columns');
-const {codeFrameColumns} = require('@babel/code-frame');
-
-const JSONError = errorEx('JSONError', {
- fileName: errorEx.append('in %s'),
- codeFrame: errorEx.append('\n\n%s\n')
-});
-
-const parseJson = (string, reviver, filename) => {
- if (typeof reviver === 'string') {
- filename = reviver;
- reviver = null;
- }
-
- try {
- try {
- return JSON.parse(string, reviver);
- } catch (error) {
- fallback(string, reviver);
- throw error;
- }
- } catch (error) {
- error.message = error.message.replace(/\n/g, '');
- const indexMatch = error.message.match(/in JSON at position (\d+) while parsing/);
-
- const jsonError = new JSONError(error);
- if (filename) {
- jsonError.fileName = filename;
- }
-
- if (indexMatch && indexMatch.length > 0) {
- const lines = new LinesAndColumns(string);
- const index = Number(indexMatch[1]);
- const location = lines.locationForIndex(index);
-
- const codeFrame = codeFrameColumns(
- string,
- {start: {line: location.line + 1, column: location.column + 1}},
- {highlightCode: true}
- );
-
- jsonError.codeFrame = codeFrame;
- }
-
- throw jsonError;
- }
-};
-
-parseJson.JSONError = JSONError;
-
-module.exports = parseJson;
diff --git a/node_modules/read-pkg/node_modules/parse-json/license b/node_modules/read-pkg/node_modules/parse-json/license
deleted file mode 100644
index fa7ceba..0000000
--- a/node_modules/read-pkg/node_modules/parse-json/license
+++ /dev/null
@@ -1,9 +0,0 @@
-MIT License
-
-Copyright (c) Sindre Sorhus <[email protected]> (https://sindresorhus.com)
-
-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.
diff --git a/node_modules/read-pkg/node_modules/parse-json/package.json b/node_modules/read-pkg/node_modules/parse-json/package.json
deleted file mode 100644
index ee5df1f..0000000
--- a/node_modules/read-pkg/node_modules/parse-json/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "parse-json",
- "version": "5.2.0",
- "description": "Parse JSON with more helpful errors",
- "license": "MIT",
- "repository": "sindresorhus/parse-json",
- "funding": "https://github.com/sponsors/sindresorhus",
- "author": {
- "name": "Sindre Sorhus",
- "email": "[email protected]",
- "url": "https://sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && nyc ava"
- },
- "files": [
- "index.js",
- "vendor"
- ],
- "keywords": [
- "parse",
- "json",
- "graceful",
- "error",
- "message",
- "humanize",
- "friendly",
- "helpful",
- "string"
- ],
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "devDependencies": {
- "ava": "^1.4.1",
- "nyc": "^14.1.1",
- "xo": "^0.24.0"
- }
-}
diff --git a/node_modules/read-pkg/node_modules/parse-json/readme.md b/node_modules/read-pkg/node_modules/parse-json/readme.md
deleted file mode 100644
index 5363097..0000000
--- a/node_modules/read-pkg/node_modules/parse-json/readme.md
+++ /dev/null
@@ -1,119 +0,0 @@
-# parse-json
-
-> Parse JSON with more helpful errors
-
-## Install
-
-```
-$ npm install parse-json
-```
-
-## Usage
-
-```js
-const parseJson = require('parse-json');
-
-const json = '{\n\t"foo": true,\n}';
-
-
-JSON.parse(json);
-/*
-undefined:3
-}
-^
-SyntaxError: Unexpected token }
-*/
-
-
-parseJson(json);
-/*
-JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}'
-
- 1 | {
- 2 | "foo": true,
-> 3 | }
- | ^
-*/
-
-
-parseJson(json, 'foo.json');
-/*
-JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
-
- 1 | {
- 2 | "foo": true,
-> 3 | }
- | ^
-*/
-
-
-// You can also add the filename at a later point
-try {
- parseJson(json);
-} catch (error) {
- if (error instanceof parseJson.JSONError) {
- error.fileName = 'foo.json';
- }
-
- throw error;
-}
-/*
-JSONError: Unexpected token } in JSON at position 16 while parsing near '{ "foo": true,}' in foo.json
-
- 1 | {
- 2 | "foo": true,
-> 3 | }
- | ^
-*/
-```
-
-## API
-
-### parseJson(string, reviver?, filename?)
-
-Throws a `JSONError` when there is a parsing error.
-
-#### string
-
-Type: `string`
-
-#### reviver
-
-Type: `Function`
-
-Prescribes how the value originally produced by parsing is transformed, before being returned. See [`JSON.parse` docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter
-) for more.
-
-#### filename
-
-Type: `string`
-
-Filename displayed in the error message.
-
-### parseJson.JSONError
-
-Exposed for `instanceof` checking.
-
-#### fileName
-
-Type: `string`
-
-The filename displayed in the error message.
-
-#### codeFrame
-
-Type: `string`
-
-The printable section of the JSON which produces the error.
-
----
-
-<div align="center">
- <b>
- <a href="https://tidelift.com/subscription/pkg/npm-parse-json?utm_source=npm-parse-json&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
- </b>
- <br>
- <sub>
- Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
- </sub>
-</div>
diff --git a/node_modules/side-channel/.eslintignore b/node_modules/side-channel/.eslintignore
new file mode 100644
index 0000000..404abb2
--- /dev/null
+++ b/node_modules/side-channel/.eslintignore
@@ -0,0 +1 @@
+coverage/
diff --git a/node_modules/side-channel/.eslintrc b/node_modules/side-channel/.eslintrc
new file mode 100644
index 0000000..850ac1f
--- /dev/null
+++ b/node_modules/side-channel/.eslintrc
@@ -0,0 +1,11 @@
+{
+ "root": true,
+
+ "extends": "@ljharb",
+
+ "rules": {
+ "max-lines-per-function": 0,
+ "max-params": 0,
+ "new-cap": [2, { "capIsNewExceptions": ["GetIntrinsic"] }],
+ },
+}
diff --git a/node_modules/side-channel/.github/FUNDING.yml b/node_modules/side-channel/.github/FUNDING.yml
new file mode 100644
index 0000000..2a94840
--- /dev/null
+++ b/node_modules/side-channel/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: [ljharb]
+patreon: # Replace with a single Patreon username
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: npm/side-channel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/node_modules/side-channel/.nycrc b/node_modules/side-channel/.nycrc
new file mode 100644
index 0000000..1826526
--- /dev/null
+++ b/node_modules/side-channel/.nycrc
@@ -0,0 +1,13 @@
+{
+ "all": true,
+ "check-coverage": false,
+ "reporter": ["text-summary", "text", "html", "json"],
+ "lines": 86,
+ "statements": 85.93,
+ "functions": 82.43,
+ "branches": 76.06,
+ "exclude": [
+ "coverage",
+ "test"
+ ]
+}
diff --git a/node_modules/side-channel/CHANGELOG.md b/node_modules/side-channel/CHANGELOG.md
new file mode 100644
index 0000000..a3d161f
--- /dev/null
+++ b/node_modules/side-channel/CHANGELOG.md
@@ -0,0 +1,65 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+
+## [v1.0.4](https://github.com/ljharb/side-channel/compare/v1.0.3...v1.0.4) - 2020-12-29
+
+### Commits
+
+- [Tests] migrate tests to Github Actions [`10909cb`](https://github.com/ljharb/side-channel/commit/10909cbf8ce9c0bf96f604cf13d7ffd5a22c2d40)
+- [Refactor] Use a linked list rather than an array, and move accessed nodes to the beginning [`195613f`](https://github.com/ljharb/side-channel/commit/195613f28b5c1e6072ef0b61b5beebaf2b6a304e)
+- [meta] do not publish github action workflow files [`290ec29`](https://github.com/ljharb/side-channel/commit/290ec29cd21a60585145b4a7237ec55228c52c27)
+- [Tests] run `nyc` on all tests; use `tape` runner [`ea6d030`](https://github.com/ljharb/side-channel/commit/ea6d030ff3fe6be2eca39e859d644c51ecd88869)
+- [actions] add "Allow Edits" workflow [`d464d8f`](https://github.com/ljharb/side-channel/commit/d464d8fe52b5eddf1504a0ed97f0941a90f32c15)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog` [`02daca8`](https://github.com/ljharb/side-channel/commit/02daca87c6809821c97be468d1afa2f5ef447383)
+- [Refactor] use `call-bind` and `get-intrinsic` instead of `es-abstract` [`e09d481`](https://github.com/ljharb/side-channel/commit/e09d481528452ebafa5cdeae1af665c35aa2deee)
+- [Deps] update `object.assign` [`ee83aa8`](https://github.com/ljharb/side-channel/commit/ee83aa81df313b5e46319a63adb05cf0c179079a)
+- [actions] update rebase action to use checkout v2 [`7726b0b`](https://github.com/ljharb/side-channel/commit/7726b0b058b632fccea709f58960871defaaa9d7)
+
+## [v1.0.3](https://github.com/ljharb/side-channel/compare/v1.0.2...v1.0.3) - 2020-08-23
+
+### Commits
+
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`1f10561`](https://github.com/ljharb/side-channel/commit/1f105611ef3acf32dec8032ae5c0baa5e56bb868)
+- [Deps] update `es-abstract`, `object-inspect` [`bc20159`](https://github.com/ljharb/side-channel/commit/bc201597949a505e37cef9eaf24c7010831e6f03)
+- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`b9b2b22`](https://github.com/ljharb/side-channel/commit/b9b2b225f9e0ea72a6ec2b89348f0bd690bc9ed1)
+- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`7055ab4`](https://github.com/ljharb/side-channel/commit/7055ab4de0860606efd2003674a74f1fe6ebc07e)
+- [Dev Deps] update `auto-changelog`; add `aud` [`d278c37`](https://github.com/ljharb/side-channel/commit/d278c37d08227be4f84aa769fcd919e73feeba40)
+- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`3bcf982`](https://github.com/ljharb/side-channel/commit/3bcf982faa122745b39c33ce83d32fdf003741c6)
+- [Tests] only audit prod deps [`18d01c4`](https://github.com/ljharb/side-channel/commit/18d01c4015b82a3d75044c4d5ba7917b2eac01ec)
+- [Deps] update `es-abstract` [`6ab096d`](https://github.com/ljharb/side-channel/commit/6ab096d9de2b482cf5e0717e34e212f5b2b9bc9a)
+- [Dev Deps] update `tape` [`9dc174c`](https://github.com/ljharb/side-channel/commit/9dc174cc651dfd300b4b72da936a0a7eda5f9452)
+- [Deps] update `es-abstract` [`431d0f0`](https://github.com/ljharb/side-channel/commit/431d0f0ff11fbd2ae6f3115582a356d3a1cfce82)
+- [Deps] update `es-abstract` [`49869fd`](https://github.com/ljharb/side-channel/commit/49869fd323bf4453f0ba515c0fb265cf5ab7b932)
+- [meta] Add package.json to package's exports [`77d9cdc`](https://github.com/ljharb/side-channel/commit/77d9cdceb2a9e47700074f2ae0c0a202e7dac0d4)
+
+## [v1.0.2](https://github.com/ljharb/side-channel/compare/v1.0.1...v1.0.2) - 2019-12-20
+
+### Commits
+
+- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`4a526df`](https://github.com/ljharb/side-channel/commit/4a526df44e4701566ed001ec78546193f818b082)
+- [Deps] update `es-abstract` [`d4f6e62`](https://github.com/ljharb/side-channel/commit/d4f6e629b6fb93a07415db7f30d3c90fd7f264fe)
+
+## [v1.0.1](https://github.com/ljharb/side-channel/compare/v1.0.0...v1.0.1) - 2019-12-01
+
+### Commits
+
+- [Fix] add missing "exports" [`d212907`](https://github.com/ljharb/side-channel/commit/d2129073abf0701a5343bf28aa2145617604dc2e)
+
+## v1.0.0 - 2019-12-01
+
+### Commits
+
+- Initial implementation [`dbebd3a`](https://github.com/ljharb/side-channel/commit/dbebd3a4b5ed64242f9a6810efe7c4214cd8cde4)
+- Initial tests [`73bdefe`](https://github.com/ljharb/side-channel/commit/73bdefe568c9076cf8c0b8719bc2141aec0e19b8)
+- Initial commit [`43c03e1`](https://github.com/ljharb/side-channel/commit/43c03e1c2849ec50a87b7a5cd76238a62b0b8770)
+- npm init [`5c090a7`](https://github.com/ljharb/side-channel/commit/5c090a765d66a5527d9889b89aeff78dee91348c)
+- [meta] add `auto-changelog` [`a5c4e56`](https://github.com/ljharb/side-channel/commit/a5c4e5675ec02d5eb4d84b4243aeea2a1d38fbec)
+- [actions] add automatic rebasing / merge commit blocking [`bab1683`](https://github.com/ljharb/side-channel/commit/bab1683d8f9754b086e94397699fdc645e0d7077)
+- [meta] add `funding` field; create FUNDING.yml [`63d7aea`](https://github.com/ljharb/side-channel/commit/63d7aeaf34f5650650ae97ca4b9fae685bd0937c)
+- [Tests] add `npm run lint` [`46a5a81`](https://github.com/ljharb/side-channel/commit/46a5a81705cd2664f83df232c01dbbf2ee952885)
+- Only apps should have lockfiles [`8b16b03`](https://github.com/ljharb/side-channel/commit/8b16b0305f00895d90c4e2e5773c854cfea0e448)
+- [meta] add `safe-publish-latest` [`2f098ef`](https://github.com/ljharb/side-channel/commit/2f098ef092a39399cfe548b19a1fc03c2fd2f490)
diff --git a/node_modules/load-json-file/license b/node_modules/side-channel/LICENSE
similarity index 83%
copy from node_modules/load-json-file/license
copy to node_modules/side-channel/LICENSE
index 654d0bf..3900dd7 100644
--- a/node_modules/load-json-file/license
+++ b/node_modules/side-channel/LICENSE
@@ -1,6 +1,6 @@
-The MIT License (MIT)
+MIT License
-Copyright (c) Sindre Sorhus <[email protected]> (sindresorhus.com)
+Copyright (c) 2019 Jordan Harband
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -9,13 +9,13 @@
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 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.
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/node_modules/side-channel/README.md b/node_modules/side-channel/README.md
new file mode 100644
index 0000000..7fa4f06
--- /dev/null
+++ b/node_modules/side-channel/README.md
@@ -0,0 +1,2 @@
+# side-channel
+Store information about any JS value in a side channel. Uses WeakMap if available.
diff --git a/node_modules/side-channel/index.js b/node_modules/side-channel/index.js
new file mode 100644
index 0000000..f1c4826
--- /dev/null
+++ b/node_modules/side-channel/index.js
@@ -0,0 +1,124 @@
+'use strict';
+
+var GetIntrinsic = require('get-intrinsic');
+var callBound = require('call-bind/callBound');
+var inspect = require('object-inspect');
+
+var $TypeError = GetIntrinsic('%TypeError%');
+var $WeakMap = GetIntrinsic('%WeakMap%', true);
+var $Map = GetIntrinsic('%Map%', true);
+
+var $weakMapGet = callBound('WeakMap.prototype.get', true);
+var $weakMapSet = callBound('WeakMap.prototype.set', true);
+var $weakMapHas = callBound('WeakMap.prototype.has', true);
+var $mapGet = callBound('Map.prototype.get', true);
+var $mapSet = callBound('Map.prototype.set', true);
+var $mapHas = callBound('Map.prototype.has', true);
+
+/*
+ * This function traverses the list returning the node corresponding to the
+ * given key.
+ *
+ * That node is also moved to the head of the list, so that if it's accessed
+ * again we don't need to traverse the whole list. By doing so, all the recently
+ * used nodes can be accessed relatively quickly.
+ */
+var listGetNode = function (list, key) { // eslint-disable-line consistent-return
+ for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {
+ if (curr.key === key) {
+ prev.next = curr.next;
+ curr.next = list.next;
+ list.next = curr; // eslint-disable-line no-param-reassign
+ return curr;
+ }
+ }
+};
+
+var listGet = function (objects, key) {
+ var node = listGetNode(objects, key);
+ return node && node.value;
+};
+var listSet = function (objects, key, value) {
+ var node = listGetNode(objects, key);
+ if (node) {
+ node.value = value;
+ } else {
+ // Prepend the new node to the beginning of the list
+ objects.next = { // eslint-disable-line no-param-reassign
+ key: key,
+ next: objects.next,
+ value: value
+ };
+ }
+};
+var listHas = function (objects, key) {
+ return !!listGetNode(objects, key);
+};
+
+module.exports = function getSideChannel() {
+ var $wm;
+ var $m;
+ var $o;
+ var channel = {
+ assert: function (key) {
+ if (!channel.has(key)) {
+ throw new $TypeError('Side channel does not contain ' + inspect(key));
+ }
+ },
+ get: function (key) { // eslint-disable-line consistent-return
+ if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
+ if ($wm) {
+ return $weakMapGet($wm, key);
+ }
+ } else if ($Map) {
+ if ($m) {
+ return $mapGet($m, key);
+ }
+ } else {
+ if ($o) { // eslint-disable-line no-lonely-if
+ return listGet($o, key);
+ }
+ }
+ },
+ has: function (key) {
+ if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
+ if ($wm) {
+ return $weakMapHas($wm, key);
+ }
+ } else if ($Map) {
+ if ($m) {
+ return $mapHas($m, key);
+ }
+ } else {
+ if ($o) { // eslint-disable-line no-lonely-if
+ return listHas($o, key);
+ }
+ }
+ return false;
+ },
+ set: function (key, value) {
+ if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
+ if (!$wm) {
+ $wm = new $WeakMap();
+ }
+ $weakMapSet($wm, key, value);
+ } else if ($Map) {
+ if (!$m) {
+ $m = new $Map();
+ }
+ $mapSet($m, key, value);
+ } else {
+ if (!$o) {
+ /*
+ * Initialize the linked list as an empty node, so that we don't have
+ * to special-case handling of the first node: we can always refer to
+ * it as (previous node).next, instead of something like (list).head
+ */
+ $o = { key: {}, next: null };
+ }
+ listSet($o, key, value);
+ }
+ }
+ };
+ return channel;
+};
diff --git a/node_modules/side-channel/package.json b/node_modules/side-channel/package.json
new file mode 100644
index 0000000..83e53f3
--- /dev/null
+++ b/node_modules/side-channel/package.json
@@ -0,0 +1,67 @@
+{
+ "name": "side-channel",
+ "version": "1.0.4",
+ "description": "Store information about any JS value in a side channel. Uses WeakMap if available.",
+ "main": "index.js",
+ "exports": {
+ "./package.json": "./package.json",
+ ".": [
+ {
+ "default": "./index.js"
+ },
+ "./index.js"
+ ]
+ },
+ "scripts": {
+ "prepublish": "safe-publish-latest",
+ "lint": "eslint .",
+ "pretest": "npm run lint",
+ "tests-only": "nyc tape 'test/**/*.js'",
+ "test": "npm run tests-only",
+ "posttest": "npx aud --production",
+ "version": "auto-changelog && git add CHANGELOG.md",
+ "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/ljharb/side-channel.git"
+ },
+ "keywords": [
+ "weakmap",
+ "map",
+ "side",
+ "channel",
+ "metadata"
+ ],
+ "author": "Jordan Harband <[email protected]>",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ },
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/ljharb/side-channel/issues"
+ },
+ "homepage": "https://github.com/ljharb/side-channel#readme",
+ "devDependencies": {
+ "@ljharb/eslint-config": "^17.3.0",
+ "aud": "^1.1.3",
+ "auto-changelog": "^2.2.1",
+ "eslint": "^7.16.0",
+ "nyc": "^10.3.2",
+ "safe-publish-latest": "^1.1.4",
+ "tape": "^5.0.1"
+ },
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "auto-changelog": {
+ "output": "CHANGELOG.md",
+ "template": "keepachangelog",
+ "unreleased": false,
+ "commitLimit": false,
+ "backfillLimit": false,
+ "hideCredit": true
+ }
+}
diff --git a/node_modules/side-channel/test/index.js b/node_modules/side-channel/test/index.js
new file mode 100644
index 0000000..3b92ef7
--- /dev/null
+++ b/node_modules/side-channel/test/index.js
@@ -0,0 +1,78 @@
+'use strict';
+
+var test = require('tape');
+
+var getSideChannel = require('../');
+
+test('export', function (t) {
+ t.equal(typeof getSideChannel, 'function', 'is a function');
+ t.equal(getSideChannel.length, 0, 'takes no arguments');
+
+ var channel = getSideChannel();
+ t.ok(channel, 'is truthy');
+ t.equal(typeof channel, 'object', 'is an object');
+
+ t.end();
+});
+
+test('assert', function (t) {
+ var channel = getSideChannel();
+ t['throws'](
+ function () { channel.assert({}); },
+ TypeError,
+ 'nonexistent value throws'
+ );
+
+ var o = {};
+ channel.set(o, 'data');
+ t.doesNotThrow(function () { channel.assert(o); }, 'existent value noops');
+
+ t.end();
+});
+
+test('has', function (t) {
+ var channel = getSideChannel();
+ var o = [];
+
+ t.equal(channel.has(o), false, 'nonexistent value yields false');
+
+ channel.set(o, 'foo');
+ t.equal(channel.has(o), true, 'existent value yields true');
+
+ t.end();
+});
+
+test('get', function (t) {
+ var channel = getSideChannel();
+ var o = {};
+ t.equal(channel.get(o), undefined, 'nonexistent value yields undefined');
+
+ var data = {};
+ channel.set(o, data);
+ t.equal(channel.get(o), data, '"get" yields data set by "set"');
+
+ t.end();
+});
+
+test('set', function (t) {
+ var channel = getSideChannel();
+ var o = function () {};
+ t.equal(channel.get(o), undefined, 'value not set');
+
+ channel.set(o, 42);
+ t.equal(channel.get(o), 42, 'value was set');
+
+ channel.set(o, Infinity);
+ t.equal(channel.get(o), Infinity, 'value was set again');
+
+ var o2 = {};
+ channel.set(o2, 17);
+ t.equal(channel.get(o), Infinity, 'o is not modified');
+ t.equal(channel.get(o2), 17, 'o2 is set');
+
+ channel.set(o, 14);
+ t.equal(channel.get(o), 14, 'o is modified');
+ t.equal(channel.get(o2), 17, 'o2 is not modified');
+
+ t.end();
+});
diff --git a/package-lock.json b/package-lock.json
index 3ef5644..101ab70 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -33,8 +33,8 @@
"convert-source-map": "1.7.0",
"escodegen": "2.0.0",
"eslint": "7.32.0",
- "eslint-plugin-import": "2.24.2",
- "eslint-plugin-lit-a11y": "^2.1.0",
+ "eslint-plugin-import": "^2.25.2",
+ "eslint-plugin-lit-a11y": "2.1.0",
"eslint-plugin-mocha": "9.0.0",
"eslint-plugin-rulesdir": "0.2.0",
"istanbul-lib-instrument": "5.0.2",
@@ -1300,16 +1300,16 @@
}
},
"node_modules/array-includes": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
- "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2",
+ "es-abstract": "^1.19.1",
"get-intrinsic": "^1.1.1",
- "is-string": "^1.0.5"
+ "is-string": "^1.0.7"
},
"engines": {
"node": ">= 0.4"
@@ -1328,14 +1328,14 @@
}
},
"node_modules/array.prototype.flat": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
- "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
+ "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
+ "es-abstract": "^1.19.0"
},
"engines": {
"node": ">= 0.4"
@@ -1898,24 +1898,6 @@
"node": ">=10"
}
},
- "node_modules/cosmiconfig/node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -2384,22 +2366,26 @@
}
},
"node_modules/es-abstract": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
- "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
+ "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
"is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.3",
- "is-string": "^1.0.6",
- "object-inspect": "^1.10.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
"string.prototype.trimend": "^1.0.4",
@@ -2560,12 +2546,13 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
- "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz",
+ "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==",
"dev": true,
"dependencies": {
"debug": "^3.2.7",
+ "find-up": "^2.1.0",
"pkg-dir": "^2.0.0"
},
"engines": {
@@ -2581,25 +2568,81 @@
"ms": "^2.1.1"
}
},
- "node_modules/eslint-plugin-import": {
- "version": "2.24.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz",
- "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==",
+ "node_modules/eslint-module-utils/node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"dependencies": {
- "array-includes": "^3.1.3",
- "array.prototype.flat": "^1.2.4",
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.25.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz",
+ "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
"debug": "^2.6.9",
"doctrine": "^2.1.0",
"eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.6.2",
- "find-up": "^2.0.0",
+ "eslint-module-utils": "^2.7.0",
"has": "^1.0.3",
- "is-core-module": "^2.6.0",
+ "is-core-module": "^2.7.0",
+ "is-glob": "^4.0.3",
"minimatch": "^3.0.4",
- "object.values": "^1.1.4",
- "pkg-up": "^2.0.0",
- "read-pkg-up": "^3.0.0",
+ "object.values": "^1.1.5",
"resolve": "^1.20.0",
"tsconfig-paths": "^3.11.0"
},
@@ -2607,7 +2650,7 @@
"node": ">=4"
},
"peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0"
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
}
},
"node_modules/eslint-plugin-import/node_modules/debug": {
@@ -2631,109 +2674,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/eslint-plugin-import/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/eslint-plugin-import/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
- "node_modules/eslint-plugin-import/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "dependencies": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "dependencies": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/eslint-plugin-lit-a11y": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-lit-a11y/-/eslint-plugin-lit-a11y-2.1.0.tgz",
@@ -3520,6 +3466,22 @@
"node": ">=8"
}
},
+ "node_modules/get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -3688,6 +3650,21 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -3889,6 +3866,20 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
+ "node_modules/internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -3896,10 +3887,13 @@
"dev": true
},
"node_modules/is-bigint": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
- "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
"dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -3917,12 +3911,13 @@
}
},
"node_modules/is-boolean-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
- "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -3932,9 +3927,9 @@
}
},
"node_modules/is-callable": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -3944,9 +3939,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
- "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -3956,10 +3951,13 @@
}
},
"node_modules/is-date-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
- "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
"dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -3986,9 +3984,9 @@
}
},
"node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
@@ -4019,10 +4017,13 @@
}
},
"node_modules/is-number-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
- "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
+ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
"dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -4049,13 +4050,13 @@
}
},
"node_modules/is-regex": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
- "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "has-symbols": "^1.0.2"
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -4073,11 +4074,23 @@
"node": ">=6"
}
},
- "node_modules/is-string": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
- "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
"dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -4118,6 +4131,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/is-weakref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
+ "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
@@ -4577,21 +4602,6 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
- "node_modules/load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -5420,14 +5430,14 @@
}
},
"node_modules/object.values": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
- "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.2"
+ "es-abstract": "^1.19.1"
},
"engines": {
"node": ">= 0.4"
@@ -5560,16 +5570,21 @@
}
},
"node_modules/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"dependencies": {
+ "@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parse-literals": {
@@ -5695,15 +5710,6 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -5774,76 +5780,6 @@
"node": ">=4"
}
},
- "node_modules/pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
- "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
- "dev": true,
- "dependencies": {
- "find-up": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-up/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/postcss": {
"version": "8.3.11",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz",
@@ -6144,21 +6080,6 @@
"node": ">=8"
}
},
- "node_modules/read-pkg/node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/read-pkg/node_modules/type-fest": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
@@ -6447,6 +6368,20 @@
"node": ">=8"
}
},
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -8830,16 +8765,16 @@
"dev": true
},
"array-includes": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
- "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz",
+ "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.2",
+ "es-abstract": "^1.19.1",
"get-intrinsic": "^1.1.1",
- "is-string": "^1.0.5"
+ "is-string": "^1.0.7"
}
},
"array-union": {
@@ -8849,14 +8784,14 @@
"dev": true
},
"array.prototype.flat": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
- "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz",
+ "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==",
"dev": true,
"requires": {
- "call-bind": "^1.0.0",
+ "call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.0-next.1"
+ "es-abstract": "^1.19.0"
}
},
"arrify": {
@@ -9314,20 +9249,6 @@
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
"yaml": "^1.10.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- }
}
},
"cross-spawn": {
@@ -9690,22 +9611,26 @@
}
},
"es-abstract": {
- "version": "1.18.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
- "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==",
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz",
+ "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"get-intrinsic": "^1.1.1",
+ "get-symbol-description": "^1.0.0",
"has": "^1.0.3",
"has-symbols": "^1.0.2",
- "is-callable": "^1.2.3",
+ "internal-slot": "^1.0.3",
+ "is-callable": "^1.2.4",
"is-negative-zero": "^2.0.1",
- "is-regex": "^1.1.3",
- "is-string": "^1.0.6",
- "object-inspect": "^1.10.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.1",
+ "is-string": "^1.0.7",
+ "is-weakref": "^1.0.1",
+ "object-inspect": "^1.11.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.2",
"string.prototype.trimend": "^1.0.4",
@@ -9980,12 +9905,13 @@
}
},
"eslint-module-utils": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
- "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz",
+ "integrity": "sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==",
"dev": true,
"requires": {
"debug": "^3.2.7",
+ "find-up": "^2.1.0",
"pkg-dir": "^2.0.0"
},
"dependencies": {
@@ -9997,49 +9923,6 @@
"requires": {
"ms": "^2.1.1"
}
- }
- }
- },
- "eslint-plugin-import": {
- "version": "2.24.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz",
- "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==",
- "dev": true,
- "requires": {
- "array-includes": "^3.1.3",
- "array.prototype.flat": "^1.2.4",
- "debug": "^2.6.9",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-module-utils": "^2.6.2",
- "find-up": "^2.0.0",
- "has": "^1.0.3",
- "is-core-module": "^2.6.0",
- "minimatch": "^3.0.4",
- "object.values": "^1.1.4",
- "pkg-up": "^2.0.0",
- "read-pkg-up": "^3.0.0",
- "resolve": "^1.20.0",
- "tsconfig-paths": "^3.11.0"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
},
"find-up": {
"version": "2.1.0",
@@ -10060,12 +9943,6 @@
"path-exists": "^3.0.0"
}
},
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
@@ -10089,36 +9966,53 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.25.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.2.tgz",
+ "integrity": "sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flat": "^1.2.5",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.7.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.7.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.5",
+ "resolve": "^1.20.0",
+ "tsconfig-paths": "^3.11.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "pify": "^3.0.0"
+ "ms": "2.0.0"
}
},
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"dev": true,
"requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
+ "esutils": "^2.0.2"
}
},
- "read-pkg-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
- "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
- "dev": true,
- "requires": {
- "find-up": "^2.0.0",
- "read-pkg": "^3.0.0"
- }
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
}
}
},
@@ -10578,6 +10472,16 @@
"pump": "^3.0.0"
}
},
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
"glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -10700,6 +10604,15 @@
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true
},
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -10863,6 +10776,17 @@
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
"dev": true
},
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
@@ -10870,10 +10794,13 @@
"dev": true
},
"is-bigint": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz",
- "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==",
- "dev": true
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
},
"is-binary-path": {
"version": "2.1.0",
@@ -10885,34 +10812,38 @@
}
},
"is-boolean-object": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz",
- "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
"dev": true,
"requires": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
}
},
"is-callable": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
"dev": true
},
"is-core-module": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz",
- "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-date-object": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz",
- "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==",
- "dev": true
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
},
"is-extglob": {
"version": "2.1.1",
@@ -10927,9 +10858,9 @@
"dev": true
},
"is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"requires": {
"is-extglob": "^2.1.1"
@@ -10948,10 +10879,13 @@
"dev": true
},
"is-number-object": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz",
- "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==",
- "dev": true
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz",
+ "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
},
"is-plain-obj": {
"version": "2.1.0",
@@ -10966,13 +10900,13 @@
"dev": true
},
"is-regex": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz",
- "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
- "has-symbols": "^1.0.2"
+ "has-tostringtag": "^1.0.0"
}
},
"is-regexp": {
@@ -10981,12 +10915,21 @@
"integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
"dev": true
},
- "is-string": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
- "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==",
+ "is-shared-array-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz",
+ "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==",
"dev": true
},
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"is-symbol": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
@@ -11008,6 +10951,15 @@
"integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
"dev": true
},
+ "is-weakref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
+ "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0"
+ }
+ },
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
@@ -11392,18 +11344,6 @@
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
"dev": true
},
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -12051,14 +11991,14 @@
}
},
"object.values": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
- "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
"dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
- "es-abstract": "^1.18.2"
+ "es-abstract": "^1.19.1"
}
},
"on-finished": {
@@ -12158,13 +12098,15 @@
}
},
"parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
"requires": {
+ "@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
}
},
"parse-literals": {
@@ -12268,12 +12210,6 @@
"integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==",
"dev": true
},
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- },
"pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
@@ -12328,60 +12264,6 @@
}
}
},
- "pkg-up": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
- "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
- "dev": true,
- "requires": {
- "find-up": "^2.1.0"
- },
- "dependencies": {
- "find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
- "dev": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
- }
- }
- },
"postcss": {
"version": "8.3.11",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz",
@@ -12599,18 +12481,6 @@
"type-fest": "^0.6.0"
},
"dependencies": {
- "parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- }
- },
"type-fest": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
@@ -12856,6 +12726,17 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
diff --git a/scripts/deps/manage_node_deps.py b/scripts/deps/manage_node_deps.py
index 9f7f5b1..c36c9f4 100755
--- a/scripts/deps/manage_node_deps.py
+++ b/scripts/deps/manage_node_deps.py
@@ -64,7 +64,7 @@
"convert-source-map": "1.7.0",
"escodegen": "2.0.0",
"eslint": "7.32.0",
- "eslint-plugin-import": "2.24.2",
+ "eslint-plugin-import": "2.25.2",
"eslint-plugin-lit-a11y": "2.1.0",
"eslint-plugin-mocha": "9.0.0",
"eslint-plugin-rulesdir": "0.2.0",